From aee491d4abb70c77485164674086a2b3f473bfd1 Mon Sep 17 00:00:00 2001 From: Jaco Date: Mon, 27 Jun 2022 09:32:08 +0200 Subject: [PATCH] Allow for pre-set Enum changes (#7803) --- packages/react-params/src/Param/Enum.tsx | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/packages/react-params/src/Param/Enum.tsx b/packages/react-params/src/Param/Enum.tsx index 0191c418ad..ca25a39c8c 100644 --- a/packages/react-params/src/Param/Enum.tsx +++ b/packages/react-params/src/Param/Enum.tsx @@ -25,7 +25,7 @@ interface Options { interface Initial { initialEnum: string | null; - initialValues: RawParam[] | undefined; + initialParams: RawParam[] | undefined | null; } function getSubTypes (registry: Registry, type: TypeDef): TypeDef[] { @@ -53,7 +53,7 @@ function getInitial (defaultValue: RawParam): Initial { ? defaultValue.value.type : Object.keys(defaultValue.value as Record)[0] : null, - initialValues: defaultValue && defaultValue.value + initialParams: defaultValue && defaultValue.value ? defaultValue.value instanceof Enum ? [{ isValid: true, value: defaultValue.value.inner }] : undefined @@ -73,7 +73,7 @@ function EnumParam (props: Props): React.ReactElement { const { className = '', defaultValue, isDisabled, isError, label, onChange, overrides, registry, type, withLabel } = props; const [{ options, subTypes }] = useState(() => getOptions(registry, type)); const [current, setCurrent] = useState(() => getCurrent(registry, type, defaultValue, subTypes)); - const [{ initialEnum, initialValues }] = useState(() => getInitial(defaultValue)); + const [{ initialEnum, initialParams }, setInitial] = useState(() => getInitial(defaultValue)); const _onChange = useCallback( (value: string): void => { @@ -84,6 +84,16 @@ function EnumParam (props: Props): React.ReactElement { ? [{ name: newType.name, type: newType }] : null ); + + if (newType) { + // if the enum changes, we want to discard the original initParams, + // these are not applicable anymore, rather use empty defaults + setInitial((prev) => + newType.name === prev.initialEnum + ? prev + : { initialEnum: prev.initialEnum, initialParams: null } + ); + } }, [subTypes] ); @@ -121,7 +131,7 @@ function EnumParam (props: Props): React.ReactElement { overrides={overrides} params={current} registry={registry} - values={initialValues} + values={initialParams} /> )}