158 lines
5.6 KiB
JavaScript
Raw Normal View History

2017-07-06 10:02:00 +02:00
/*
*
* HomePage reducer
*
*/
2017-08-09 10:15:29 +02:00
import { fromJS, Map, OrderedMap } from 'immutable';
import { remove, sortBy } from 'lodash';
import {
CONFIG_FETCH_SUCCEEDED,
CHANGE_DEFAULT_LANGUAGE,
CHANGE_INPUT,
CANCEL_CHANGES,
2017-10-16 17:19:41 +02:00
CLOSE_MODAL,
2017-08-09 10:15:29 +02:00
LANGUAGES_FETCH_SUCCEEDED,
EDIT_SETTINGS_SUCCEEDED,
LANGUAGE_ACTION_SUCCEEDED,
DATABASES_FETCH_SUCCEEDED,
DATABASE_ACTION_SUCCEEDED,
LANGUAGE_DELETE,
SPECIFIC_DATABASE_FETCH_SUCCEEDED,
LANGUAGE_ACTION_ERROR,
DATABASE_DELETE,
DATABASE_ACTION_ERROR,
NEW_LANGUAGE_POST,
EMPTY_DB_MODIFIED_DATA,
2017-08-10 17:11:28 +02:00
SET_ERRORS,
SET_LOADER,
UNSET_LOADER,
2017-08-09 10:15:29 +02:00
} from './constants';
2017-07-06 10:02:00 +02:00
2017-08-09 10:15:29 +02:00
/* eslint-disable new-cap */
2017-07-06 10:02:00 +02:00
const initialState = fromJS({
2017-08-09 10:15:29 +02:00
loading: true,
cancelAction: false,
2017-10-10 16:48:13 +02:00
configsDisplay: OrderedMap({}),
initialData: Map({}),
modifiedData: Map({}),
listLanguages: Map({}),
addDatabaseSection: Map({}),
2017-08-09 10:15:29 +02:00
didCreatedNewLanguage: false,
didCreatedNewDb: false,
2017-10-10 16:48:13 +02:00
specificDatabase: OrderedMap({}),
2017-08-09 10:15:29 +02:00
dbNameTarget: '',
2017-10-10 16:48:13 +02:00
selectOptions: Map({}),
2017-08-10 17:11:28 +02:00
formValidations: [],
formErrors: [],
2017-08-10 20:41:40 +02:00
error: false,
showLoader: false,
2017-07-06 10:02:00 +02:00
});
2017-08-09 10:15:29 +02:00
/* eslint-disable no-case-declarations */
2017-07-06 10:02:00 +02:00
function homePageReducer(state = initialState, action) {
switch (action.type) {
2017-08-09 10:15:29 +02:00
case CONFIG_FETCH_SUCCEEDED:
return state
.set('loading', false)
.set('configsDisplay', OrderedMap(action.configs))
.set('initialData', Map(action.data))
2017-08-10 17:11:28 +02:00
.set('modifiedData', Map(action.data))
.set('formErrors', [])
.set('formValidations', action.formValidations);
2017-08-09 10:15:29 +02:00
case CHANGE_INPUT:
2017-08-21 15:05:02 +02:00
return state
.updateIn(['modifiedData', action.key], () => action.value);
2017-10-16 17:19:41 +02:00
case CLOSE_MODAL:
return state.set('error', !state.get('error'));
2017-08-09 10:15:29 +02:00
case CANCEL_CHANGES:
return state
2017-08-18 17:02:33 +02:00
.set('modifiedData', state.get('initialData'))
.set('formErrors', [])
.set('cancelAction', !state.get('cancelAction'));
2017-08-09 10:15:29 +02:00
case DATABASES_FETCH_SUCCEEDED:
return state
.set('configsDisplay', OrderedMap(action.configsDisplay))
.set('didCreatedNewDb', false)
.set('addDatabaseSection', OrderedMap(action.appDatabases))
.set('specificDatabase', OrderedMap())
.set('loading', false)
.set('initialData', Map())
.set('dbNameTarget', action.dbNameTarget)
2017-08-10 17:11:28 +02:00
.set('formValidations', action.formValidations)
.set('formErrors', [])
2017-08-09 10:15:29 +02:00
.set('modifiedData', Map(action.modifiedData));
case LANGUAGE_DELETE:
return state
.updateIn(['configsDisplay', 'sections'], list => remove(list, (language) => language.name !== action.languageToDelete));
case DATABASE_DELETE:
return state
.updateIn(['configsDisplay', 'sections'], list => remove(list, (database) => database.name !== action.databaseToDelete));
case LANGUAGES_FETCH_SUCCEEDED:
return state
.set('loading', false)
.set('didCreatedNewLanguage', false)
.set('configsDisplay', OrderedMap(action.configs))
2017-10-10 16:48:13 +02:00
.set('initialData', Map(action.selectedLanguage))
2017-08-09 10:15:29 +02:00
.set('modifiedData', Map(action.selectedLanguage))
.set('selectOptions', Map(action.selectOptions))
2017-08-10 17:11:28 +02:00
.set('formErrors', [])
2017-08-09 10:15:29 +02:00
.set('listLanguages', Map(action.listLanguages));
case EDIT_SETTINGS_SUCCEEDED:
return state
2017-08-11 10:48:50 +02:00
.set('initialData', state.get('modifiedData'))
2017-08-10 20:41:40 +02:00
.set('error', !state.get('error'))
2017-08-10 17:11:28 +02:00
.set('formErrors', []);
2017-08-09 10:15:29 +02:00
case CHANGE_DEFAULT_LANGUAGE:
return state
.set('configsDisplay', OrderedMap(action.configsDisplay))
.updateIn(['modifiedData', 'language.defaultLocale'], () => action.newLanguage);
case LANGUAGE_ACTION_SUCCEEDED:
2017-10-10 16:48:13 +02:00
return state.set('error', !state.get('error')).set('modifiedData', state.get('initialData'));
2017-08-09 10:15:29 +02:00
case LANGUAGE_ACTION_ERROR:
2017-10-10 16:48:13 +02:00
return state.set('didCreatedNewLanguage', true).set('error', !state.get('error'));
2017-08-09 10:15:29 +02:00
case DATABASE_ACTION_SUCCEEDED:
const newDefaultDbConnection = state.getIn(['modifiedData', 'database.defaultConnection']);
return state
.set('modifiedData', Map())
.setIn(['modifiedData', 'database.defaultConnection'], newDefaultDbConnection)
2017-08-10 20:41:40 +02:00
.set('formErrors', [])
.set('error', !state.get('error'))
2017-08-09 10:15:29 +02:00
.set('didCreatedNewDb', true);
case DATABASE_ACTION_ERROR:
2017-08-23 15:12:59 +02:00
return state
.set('error', !state.get('error'))
2017-10-13 16:46:18 +02:00
.set('formErrors', action.formErrors);
2017-08-09 10:15:29 +02:00
case SPECIFIC_DATABASE_FETCH_SUCCEEDED:
return state
.set('specificDatabase', OrderedMap(action.database))
.set('dbNameTarget', action.dbNameTarget)
.set('initialData', Map(action.data))
2017-08-10 20:41:40 +02:00
.set('formValidations', action.formValidations)
2017-08-09 10:15:29 +02:00
.set('modifiedData', Map(action.data));
case EMPTY_DB_MODIFIED_DATA:
const defaultDbConnection = state.getIn(['modifiedData', 'database.defaultConnection']);
return state
2017-08-18 17:02:33 +02:00
.set('modifiedData', Map())
.set('dbNameTarget', 'database.connections.${name}.name') // eslint-disable-line no-template-curly-in-string
.set('formErrors', [])
.setIn(['modifiedData', 'database.defaultConnection'], defaultDbConnection);
2017-08-09 10:15:29 +02:00
case NEW_LANGUAGE_POST:
const sections = state.getIn(['configsDisplay', 'sections']);
sections.push({ active: false, name: state.getIn(['modifiedData', 'language.defaultLocale']) });
const newSections = sortBy(sections, (o) => o.name);
return state.setIn(['configsDisplay', 'sections'], newSections);
2017-08-10 17:11:28 +02:00
case SET_ERRORS:
2017-08-10 20:41:40 +02:00
return state
2017-10-13 16:46:18 +02:00
.set('formErrors', action.errors);
case SET_LOADER:
return state.set('showLoader', true);
case UNSET_LOADER:
return state.set('showLoader', false);
2017-07-06 10:02:00 +02:00
default:
return state;
}
}
export default homePageReducer;