~cytrogen/masto-fe

ref: 20a89f1c8eefa0f766a4650be4d2e5f1fa92ee71 masto-fe/app/javascript/flavours/glitch/reducers/polls.js -rw-r--r-- 1.5 KiB
20a89f1c — Cytrogen [feature] Bookmark folders UI 10 days ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import { Map as ImmutableMap, fromJS } from "immutable";

import { POLLS_IMPORT } from "flavours/glitch/actions/importer";

import { normalizePollOptionTranslation } from "../actions/importer/normalizer";
import { STATUS_TRANSLATE_SUCCESS, STATUS_TRANSLATE_UNDO } from "../actions/statuses";

const importPolls = (state, polls) => state.withMutations(map => polls.forEach(poll => map.set(poll.id, fromJS(poll))));

const statusTranslateSuccess = (state, pollTranslation) => {
  return state.withMutations(map => {
    if (pollTranslation) {
      const poll = state.get(pollTranslation.id);

      pollTranslation.options.forEach((item, index) => {
        map.setIn([pollTranslation.id, "options", index, "translation"], fromJS(normalizePollOptionTranslation(item, poll)));
      });
    }
  });
};

const statusTranslateUndo = (state, id) => {
  return state.withMutations(map => {
    const options = map.getIn([id, "options"]);

    if (options) {
      options.forEach((item, index) => map.deleteIn([id, "options", index, "translation"]));
    }
  });
};

const initialState = ImmutableMap();

export default function polls(state = initialState, action) {
  switch(action.type) {
    case POLLS_IMPORT:
      return importPolls(state, action.polls);
    case STATUS_TRANSLATE_SUCCESS:
      return statusTranslateSuccess(state, action.translation.poll);
    case STATUS_TRANSLATE_UNDO:
      return statusTranslateUndo(state, action.pollId);
    default:
      return state;
  }
}