fix: initialize control state for inline control config object (#8221)

This commit is contained in:
Krist Wongsuphasawat 2019-09-13 10:36:53 -07:00 committed by GitHub
parent 762edf430b
commit 1522d3fbaa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 13 additions and 13 deletions

View File

@ -91,7 +91,7 @@ export function applyMapStateToPropsToControl(control, state) {
return control;
}
function handleMissingChoice(controlKey, control) {
function handleMissingChoice(control) {
// If the value is not valid anymore based on choices, clear it
const value = control.value;
if (
@ -113,11 +113,8 @@ function handleMissingChoice(controlKey, control) {
return control;
}
export function getControlState(controlKey, vizType, state, value) {
let controlValue = value;
const controlConfig = getControlConfig(controlKey, vizType);
let controlState = { ...controlConfig };
controlState = applyMapStateToPropsToControl(controlState, state);
export function getControlStateFromControlConfig(controlConfig, state, value) {
const controlState = applyMapStateToPropsToControl({ ...controlConfig }, state);
// If default is a function, evaluate it
if (typeof controlState.default === 'function') {
@ -125,12 +122,14 @@ export function getControlState(controlKey, vizType, state, value) {
}
// If a choice control went from multi=false to true, wrap value in array
if (controlConfig.multi && value && !Array.isArray(value)) {
controlValue = [value];
}
controlState.value = controlValue === undefined ? controlState.default : controlValue;
controlState = handleMissingChoice(controlKey, controlState);
return validateControl(controlState);
const controlValue = controlConfig.multi && value && !Array.isArray(value) ? [value] : value;
controlState.value = typeof controlValue === 'undefined' ? controlState.default : controlValue;
return validateControl(handleMissingChoice(controlState));
}
export function getControlState(controlKey, vizType, state, value) {
return getControlStateFromControlConfig(getControlConfig(controlKey, vizType), state, value);
}
export function sectionsToRender(vizType, datasourceType) {
@ -169,7 +168,8 @@ export function getAllControlsState(vizType, datasourceType, state, formData) {
controlsState[field] = getControlState(field, vizType, state, formData[field]);
} else if (field != null && typeof field === 'object') {
if (field.config && field.name) {
controlsState[field.name] = { ...field.config };
const { config, name } = field;
controlsState[name] = getControlStateFromControlConfig(config, state, formData[name]);
}
}
}),