Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import { PropTypes } from 'react'
- import Logic, { createMapping } from 'kea/logic'
- import { initFromProps } from '~/scenes/index'
- class InboxThreadLogic extends Logic {
- // PATH
- path = () => ['scenes', 'inboxThread', 'index']
- // ACTIONS
- actions = ({ constants }) => ({
- editNewMessage: (id, message) => ({ id, message }),
- makeBookingRequest: (message) => ({ message }),
- makeBookingFailure: (error) => ({ error }),
- sendMessageRequest: (message, supportWithThread) => ({ message, supportWithThread }),
- sendMessageSuccess: (id, message) => ({ id, message }),
- sendMessageFailure: (errors) => ({ errors })
- })
- // STRUCTURE
- structure = ({ actions, constants }) => ({
- newMessages: createMapping({
- [actions.editNewMessage]: (state, payload) => Object.assign({}, state, { [payload.id]: payload.message }),
- [actions.sendMessageSuccess]: (state, payload) => Object.assign({}, state, { [payload.id]: '' })
- }, {}, PropTypes.object, { persist: true }), // store in local storage
- errors: createMapping({
- [actions.editNewMessage]: () => null,
- [actions.makeBookingRequest]: () => null,
- [actions.sendMessageRequest]: () => null,
- [actions.sendMessageSuccess]: () => null,
- [actions.sendMessageFailure]: (_, payload) => payload.errors
- }, null, PropTypes.object),
- threadId: createMapping({
- [initFromProps]: (_, payload) => payload.threadId
- }, null, PropTypes.number),
- messages: createMapping({
- [initFromProps]: (_, payload) => payload.messages,
- [actions.sendMessageSuccess]: (state, payload) => [payload.message].concat(state)
- }, [], PropTypes.array),
- bookingSubmitting: createMapping({
- [actions.makeBookingRequest]: () => true,
- [actions.makeBookingFailure]: () => false
- }, false, PropTypes.bool),
- messageSubmitting: createMapping({
- [actions.sendMessageRequest]: () => true,
- [actions.sendMessageSuccess]: () => false,
- [actions.sendMessageFailure]: () => false
- }, false, PropTypes.bool)
- })
- }
- export default new InboxThreadLogic().init()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement