Skip to content

Instantly share code, notes, and snippets.

View jamestthompson3's full-sized avatar

jamestthompson3

View GitHub Profile
const textHandler = mapPropsStream(props$ => {
const { stream: onInput$, handler: handleChange } = createEventHandler()
const text$ = onInput$.pipe(map(e => e.target.value), startWith(''))
return props$.pipe(
switchMap(props => text$.pipe(map(text => ({ ...props, text, handleChange }))))
)
})
const textHandler = mapPropsStream(props$ => {
const { stream: onInput$, handler: handleChange } = createEventHandler()
const text$ = onInput$.pipe(map(e => e.target.value), startWith(''))
return props$.pipe(
switchMap(props => text$.pipe(map(text => ({ ...props, text, handleChange }))))
)
})
const modalHandler = mapPropsStream(props$ => {
const { stream: isOpen$, handler: toggleModal } = createEventHandler()
return props$.pipe(
switchMap(props =>
isOpen$.pipe(
startWith(false),
scan(bool => !bool),
map(isOpen => ({ ...props, isOpen, toggleModal }))
)
)
const LikesList = ({
user: { likes, user },
updateFunctions: { addLike, deleteLike }
}) => (
<Fragment>
<ListHeader>
<h3 style={{ margin: 0 }}>Likes</h3>
<i className="material-icons" style={{ cursor: 'pointer' }} >
add
</i>
const StreamIndex = compose(
withState('userList', 'updateUserList', []),
withHandlers({
setUserList: ({ updateUserList }) => users => updateUserList(state => users),
addLike: ({ updateUserList }) => (user, like) => addUserLike(user, like),
addDislike: ({ updateUserList }) => (user, dislike) => addUserDislike(user, dislike),
deleteLike: ({ updateUserList }) => (user, like) =>
deleteUserLike(user, like.id).then(() =>
updateUserList(state => [
...state.map(i => {
withContext(
{ updateFunctions: PropTypes.object, user: PropTypes.object },
({ selectedUser, addLike, addDislike, deleteLike, deleteDislike }) => ({
user: selectedUser,
updateFunctions: { addLike, addDislike, deleteLike, deleteDislike }
})
)
withHandlers({
setUserList: ({ updateUserList }) => users => updateUserList(state => users),
addLike: ({ updateUserList }) => (user, like) => addUserLike(user, like),
addDislike: ({ updateUserList }) => (user, dislike) => addUserDislike(user, dislike),
deleteLike: ({ updateUserList }) => (user, like) =>
deleteUserLike(user, like.id).then(() =>
updateUserList(state => [
...state.map(i => {
if (i.user === user) {
i.likes = i.likes.filter(i => i.id !== like.id)
import { compose, withState, withHandlers } from 'recompose'
import { withRouter } from 'react-router-dom'
const StreamIndex = compose(
withState('userList', 'updateUserList', []),
withHandlers({ setUserList: ({ updateUserList }) => users => updateUserList(state => users) }),
withRouter,
load,
selectUser
)(IndexPage)
import { PageWrapper, ListContainer, ListItem, Loader, UserContainer } from './styledComponents'
const IndexPage = ({ status, userList, selectedUser, userSelect, message, match, history }) => {
const userParam = get(match, 'params.user')
if (selectedUser) {
userParam !== selectedUser.user && history.push(`/${selectedUser.user}`)
}
return (
<PageWrapper>
<UserContainer>
import React, { Fragment } from 'react'
import PropTypes from 'prop-types'
import { render } from 'react-dom'
import { from, to, of } from 'rxjs'
import { switchMap, map, startWith, tap, catchError } from 'rxjs/operators'
import {
compose,
mapPropsStream,
createEventHandler,
withState,