Advertisement
Guest User

Untitled

a guest
Dec 5th, 2016
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.05 KB | None | 0 0
  1. import { PropTypes } from 'react'
  2. import Logic, { createMapping } from 'kea/logic'
  3.  
  4. import { initFromProps } from '~/scenes/index'
  5.  
  6. class InboxThreadLogic extends Logic {
  7. // PATH
  8. path = () => ['scenes', 'inboxThread', 'index']
  9.  
  10. // ACTIONS
  11. actions = ({ constants }) => ({
  12. editNewMessage: (id, message) => ({ id, message }),
  13.  
  14. makeBookingRequest: (message) => ({ message }),
  15. makeBookingFailure: (error) => ({ error }),
  16.  
  17. sendMessageRequest: (message, supportWithThread) => ({ message, supportWithThread }),
  18. sendMessageSuccess: (id, message) => ({ id, message }),
  19. sendMessageFailure: (errors) => ({ errors })
  20. })
  21.  
  22. // STRUCTURE
  23. structure = ({ actions, constants }) => ({
  24. newMessages: createMapping({
  25. [actions.editNewMessage]: (state, payload) => Object.assign({}, state, { [payload.id]: payload.message }),
  26. [actions.sendMessageSuccess]: (state, payload) => Object.assign({}, state, { [payload.id]: '' })
  27. }, {}, PropTypes.object, { persist: true }), // store in local storage
  28.  
  29. errors: createMapping({
  30. [actions.editNewMessage]: () => null,
  31. [actions.makeBookingRequest]: () => null,
  32. [actions.sendMessageRequest]: () => null,
  33. [actions.sendMessageSuccess]: () => null,
  34. [actions.sendMessageFailure]: (_, payload) => payload.errors
  35. }, null, PropTypes.object),
  36.  
  37. threadId: createMapping({
  38. [initFromProps]: (_, payload) => payload.threadId
  39. }, null, PropTypes.number),
  40.  
  41. messages: createMapping({
  42. [initFromProps]: (_, payload) => payload.messages,
  43. [actions.sendMessageSuccess]: (state, payload) => [payload.message].concat(state)
  44. }, [], PropTypes.array),
  45.  
  46. bookingSubmitting: createMapping({
  47. [actions.makeBookingRequest]: () => true,
  48. [actions.makeBookingFailure]: () => false
  49. }, false, PropTypes.bool),
  50.  
  51. messageSubmitting: createMapping({
  52. [actions.sendMessageRequest]: () => true,
  53. [actions.sendMessageSuccess]: () => false,
  54. [actions.sendMessageFailure]: () => false
  55. }, false, PropTypes.bool)
  56. })
  57. }
  58.  
  59. export default new InboxThreadLogic().init()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement