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.
35 lines
1014 B
35 lines
1014 B
7 years ago
|
import _ from 'lodash';
|
||
|
import getSectionState from 'Utilities/State/getSectionState';
|
||
|
import updateSectionState from 'Utilities/State/updateSectionState';
|
||
|
|
||
|
function applySchemaDefaults(selectedSchema, schemaDefaults) {
|
||
|
if (!schemaDefaults) {
|
||
|
return selectedSchema;
|
||
|
} else if (_.isFunction(schemaDefaults)) {
|
||
|
return schemaDefaults(selectedSchema);
|
||
|
}
|
||
|
|
||
|
return Object.assign(selectedSchema, schemaDefaults);
|
||
|
}
|
||
|
|
||
|
function selectProviderSchema(state, section, payload, schemaDefaults) {
|
||
|
const newState = getSectionState(state, section);
|
||
|
|
||
|
const {
|
||
|
implementation,
|
||
|
presetName
|
||
|
} = payload;
|
||
|
|
||
|
const selectedImplementation = _.find(newState.schema, { implementation });
|
||
|
|
||
|
const selectedSchema = presetName ?
|
||
|
_.find(selectedImplementation.presets, { name: presetName }) :
|
||
|
selectedImplementation;
|
||
|
|
||
|
newState.selectedSchema = applySchemaDefaults(_.cloneDeep(selectedSchema), schemaDefaults);
|
||
|
|
||
|
return updateSectionState(state, section, newState);
|
||
|
}
|
||
|
|
||
|
export default selectProviderSchema;
|