cyril lopez 68cdf67d31 Remove custom OverlayBlocker in stm
As discussed with @Aurelsicoko this feature is not needed when adding or editing a connection
2018-01-25 10:59:33 +01:00

158 lines
5.6 KiB
JavaScript
Executable File

/*
*
* HomePage reducer
*
*/
import { fromJS, Map, OrderedMap } from 'immutable';
import { remove, sortBy } from 'lodash';
import {
CONFIG_FETCH_SUCCEEDED,
CHANGE_DEFAULT_LANGUAGE,
CHANGE_INPUT,
CANCEL_CHANGES,
CLOSE_MODAL,
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,
SET_ERRORS,
SET_LOADER,
UNSET_LOADER,
} from './constants';
/* eslint-disable new-cap */
const initialState = fromJS({
loading: true,
cancelAction: false,
configsDisplay: OrderedMap({}),
initialData: Map({}),
modifiedData: Map({}),
listLanguages: Map({}),
addDatabaseSection: Map({}),
didCreatedNewLanguage: false,
didCreatedNewDb: false,
specificDatabase: OrderedMap({}),
dbNameTarget: '',
selectOptions: Map({}),
formValidations: [],
formErrors: [],
error: false,
showLoader: false,
});
/* eslint-disable no-case-declarations */
function homePageReducer(state = initialState, action) {
switch (action.type) {
case CONFIG_FETCH_SUCCEEDED:
return state
.set('loading', false)
.set('configsDisplay', OrderedMap(action.configs))
.set('initialData', Map(action.data))
.set('modifiedData', Map(action.data))
.set('formErrors', [])
.set('formValidations', action.formValidations);
case CHANGE_INPUT:
return state
.updateIn(['modifiedData', action.key], () => action.value);
case CLOSE_MODAL:
return state.set('error', !state.get('error'));
case CANCEL_CHANGES:
return state
.set('modifiedData', state.get('initialData'))
.set('formErrors', [])
.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)
.set('formValidations', action.formValidations)
.set('formErrors', [])
.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(action.selectedLanguage))
.set('modifiedData', Map(action.selectedLanguage))
.set('selectOptions', Map(action.selectOptions))
.set('formErrors', [])
.set('listLanguages', Map(action.listLanguages));
case EDIT_SETTINGS_SUCCEEDED:
return state
.set('initialData', state.get('modifiedData'))
.set('error', !state.get('error'))
.set('formErrors', []);
case CHANGE_DEFAULT_LANGUAGE:
return state
.set('configsDisplay', OrderedMap(action.configsDisplay))
.updateIn(['modifiedData', 'language.defaultLocale'], () => action.newLanguage);
case LANGUAGE_ACTION_SUCCEEDED:
return state.set('error', !state.get('error')).set('modifiedData', state.get('initialData'));
case LANGUAGE_ACTION_ERROR:
return state.set('didCreatedNewLanguage', true).set('error', !state.get('error'));
case DATABASE_ACTION_SUCCEEDED:
const newDefaultDbConnection = state.getIn(['modifiedData', 'database.defaultConnection']);
return state
.set('modifiedData', Map())
.setIn(['modifiedData', 'database.defaultConnection'], newDefaultDbConnection)
.set('formErrors', [])
.set('error', !state.get('error'))
.set('didCreatedNewDb', true);
case DATABASE_ACTION_ERROR:
return state
.set('error', !state.get('error'))
.set('formErrors', action.formErrors);
case SPECIFIC_DATABASE_FETCH_SUCCEEDED:
return state
.set('specificDatabase', OrderedMap(action.database))
.set('dbNameTarget', action.dbNameTarget)
.set('initialData', Map(action.data))
.set('formValidations', action.formValidations)
.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
.set('formErrors', [])
.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);
case SET_ERRORS:
return state
.set('formErrors', action.errors);
case SET_LOADER:
return state.set('showLoader', true);
case UNSET_LOADER:
return state.set('showLoader', false);
default:
return state;
}
}
export default homePageReducer;