12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- import moment from "moment"
- import { REMOVE_POLL, REPLACE_POLL } from "./poll"
- export const BUSY_THREAD = "BUSY_THREAD"
- export const RELEASE_THREAD = "RELEASE_THREAD"
- export const REPLACE_THREAD = "REPLACE_THREAD"
- export const UPDATE_THREAD = "UPDATE_THREAD"
- export const UPDATE_THREAD_ACL = "UPDATE_THREAD_ACL"
- export function hydrate(json) {
- return Object.assign({}, json, {
- started_on: moment(json.started_on),
- last_post_on: moment(json.last_post_on),
- best_answer_marked_on: json.best_answer_marked_on
- ? moment(json.best_answer_marked_on)
- : null,
- isBusy: false
- })
- }
- export function busy() {
- return {
- type: BUSY_THREAD
- }
- }
- export function release() {
- return {
- type: RELEASE_THREAD
- }
- }
- export function replace(newState, hydrated = false) {
- return {
- type: REPLACE_THREAD,
- state: hydrated ? newState : hydrate(newState)
- }
- }
- export function update(data) {
- return {
- type: UPDATE_THREAD,
- data
- }
- }
- export function updateAcl(data) {
- return {
- type: UPDATE_THREAD_ACL,
- data
- }
- }
- export default function thread(state = {}, action = null) {
- switch (action.type) {
- case BUSY_THREAD:
- return Object.assign({}, state, { isBusy: true })
- case RELEASE_THREAD:
- return Object.assign({}, state, { isBusy: false })
- case REMOVE_POLL:
- return Object.assign({}, state, { poll: null })
- case REPLACE_POLL:
- return Object.assign({}, state, { poll: action.state })
- case REPLACE_THREAD:
- return action.state
- case UPDATE_THREAD:
- return Object.assign({}, state, action.data)
- case UPDATE_THREAD_ACL:
- const acl = Object.assign({}, state.acl, action.data)
- return Object.assign({}, state, { acl })
- default:
- return state
- }
- }
|