46 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 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;
 | |
|   }
 | |
| }
 |