You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.4 KiB
45 lines
1.4 KiB
import { Map as ImmutableMap, fromJS } from 'immutable'; |
|
|
|
import { POLLS_IMPORT } from 'mastodon/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; |
|
} |
|
}
|
|
|