thread.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import moment from "moment"
  2. import { REMOVE_POLL, REPLACE_POLL } from "./poll"
  3. export const BUSY_THREAD = "BUSY_THREAD"
  4. export const RELEASE_THREAD = "RELEASE_THREAD"
  5. export const REPLACE_THREAD = "REPLACE_THREAD"
  6. export const UPDATE_THREAD = "UPDATE_THREAD"
  7. export const UPDATE_THREAD_ACL = "UPDATE_THREAD_ACL"
  8. export function hydrate(json) {
  9. return Object.assign({}, json, {
  10. started_on: moment(json.started_on),
  11. last_post_on: moment(json.last_post_on),
  12. best_answer_marked_on: json.best_answer_marked_on
  13. ? moment(json.best_answer_marked_on)
  14. : null,
  15. isBusy: false
  16. })
  17. }
  18. export function busy() {
  19. return {
  20. type: BUSY_THREAD
  21. }
  22. }
  23. export function release() {
  24. return {
  25. type: RELEASE_THREAD
  26. }
  27. }
  28. export function replace(newState, hydrated = false) {
  29. return {
  30. type: REPLACE_THREAD,
  31. state: hydrated ? newState : hydrate(newState)
  32. }
  33. }
  34. export function update(data) {
  35. return {
  36. type: UPDATE_THREAD,
  37. data
  38. }
  39. }
  40. export function updateAcl(data) {
  41. return {
  42. type: UPDATE_THREAD_ACL,
  43. data
  44. }
  45. }
  46. export default function thread(state = {}, action = null) {
  47. switch (action.type) {
  48. case BUSY_THREAD:
  49. return Object.assign({}, state, { isBusy: true })
  50. case RELEASE_THREAD:
  51. return Object.assign({}, state, { isBusy: false })
  52. case REMOVE_POLL:
  53. return Object.assign({}, state, { poll: null })
  54. case REPLACE_POLL:
  55. return Object.assign({}, state, { poll: action.state })
  56. case REPLACE_THREAD:
  57. return action.state
  58. case UPDATE_THREAD:
  59. return Object.assign({}, state, action.data)
  60. case UPDATE_THREAD_ACL:
  61. const acl = Object.assign({}, state.acl, action.data)
  62. return Object.assign({}, state, { acl })
  63. default:
  64. return state
  65. }
  66. }