139 lines
4.9 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,
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,
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,
configsDisplay: OrderedMap(),
initialData: Map(),
modifiedData: Map(),
listLanguages: Map(),
addDatabaseSection: Map(),
didCreatedNewLanguage: false,
didCreatedNewDb: false,
specificDatabase: OrderedMap(),
dbNameTarget: '',
selectOptions: Map(),
2017-08-10 17:11:28 +02:00
formValidations: [],
formErrors: [],
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-10 17:11:28 +02:00
// TODO remove error
2017-08-09 10:15:29 +02:00
return state.updateIn(['modifiedData', action.key], () => action.value);
case CANCEL_CHANGES:
return state
.set('modifiedData', state.get('initialData'))
2017-08-10 17:11:28 +02:00
.set('formErrors', [])
2017-08-09 10:15:29 +02:00
.set('cancelAction', !state.get('cancelAction'));
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))
.set('initialData', Map())
.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-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:
case LANGUAGE_ACTION_ERROR:
return state.set('didCreatedNewLanguage', true);
case DATABASE_ACTION_SUCCEEDED:
const newDefaultDbConnection = state.getIn(['modifiedData', 'database.defaultConnection']);
return state
.set('modifiedData', Map())
.setIn(['modifiedData', 'database.defaultConnection'], newDefaultDbConnection)
.set('didCreatedNewDb', true);
case DATABASE_ACTION_ERROR:
return state.set('didCreatedNewDb', true);
case SPECIFIC_DATABASE_FETCH_SUCCEEDED:
return state
.set('specificDatabase', OrderedMap(action.database))
.set('dbNameTarget', action.dbNameTarget)
.set('initialData', Map(action.data))
2017-08-10 17:11:28 +02:00
.set('formErrors', [])
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
.set('modifiedData', Map())
.set('dbNameTarget', 'database.connections.${name}.name') // eslint-disable-line no-template-curly-in-string
2017-08-10 17:11:28 +02:00
.set('formErrors', [])
2017-08-09 10:15:29 +02:00
.setIn(['modifiedData', 'database.defaultConnection'], defaultDbConnection);
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:
return state.set('formErrors', action.errors);
2017-07-06 10:02:00 +02:00
default:
return state;
}
}
export default homePageReducer;