From 9a1163490047c81bd2d8000990d4e7397a475ea3 Mon Sep 17 00:00:00 2001 From: jgresham Date: Thu, 10 Nov 2022 23:32:17 -0600 Subject: [PATCH 1/6] wip checkin. refreshed settings rendered minus multiselect --- src/renderer/Footer/DynamicNodeConfig.tsx | 5 + .../DynamicControls/Select.tsx | 77 ++++++ .../DynamicControls/TextArea.tsx | 54 ++++ .../DynamicSettings/DynamicSettings.tsx | 88 +++++++ .../redesign/DynamicSettings/Setting.tsx | 138 ++++++++++ .../convertConfigToLabelSettings.tsx | 72 ++++++ .../Generics/redesign/Input/Input.tsx | 15 +- .../redesign/Input/folderInput.css.ts | 1 + .../redesign/LabelSetting/LabelSettings.tsx | 2 +- .../LabelSetting/LabelValuesSection.tsx | 13 +- .../LabelSetting/labelSettingsSection.css.ts | 4 +- .../Generic/DynamicSettings.stories.tsx | 239 ++++++++++++++++++ 12 files changed, 699 insertions(+), 9 deletions(-) create mode 100644 src/renderer/Generics/redesign/DynamicSettings/DynamicControls/Select.tsx create mode 100644 src/renderer/Generics/redesign/DynamicSettings/DynamicControls/TextArea.tsx create mode 100644 src/renderer/Generics/redesign/DynamicSettings/DynamicSettings.tsx create mode 100644 src/renderer/Generics/redesign/DynamicSettings/Setting.tsx create mode 100644 src/renderer/Generics/redesign/DynamicSettings/convertConfigToLabelSettings.tsx create mode 100644 src/stories/Generic/DynamicSettings.stories.tsx diff --git a/src/renderer/Footer/DynamicNodeConfig.tsx b/src/renderer/Footer/DynamicNodeConfig.tsx index 0b8ef262e..3e618c500 100644 --- a/src/renderer/Footer/DynamicNodeConfig.tsx +++ b/src/renderer/Footer/DynamicNodeConfig.tsx @@ -36,6 +36,11 @@ const DynamicNodeConfig = () => { } console.log('NodeConfig isDisabled? ', isDisabled); setIsConfigDisabled(isDisabled); + console.log( + 'DynamicSettings configValuesMap', + selectedNode?.config.configValuesMap + ); + console.log('DynamicSettings configTranslationMap', configTranslationMap); setConfigTranslationMap(configTranslationMap); }, [selectedNode]); diff --git a/src/renderer/Generics/redesign/DynamicSettings/DynamicControls/Select.tsx b/src/renderer/Generics/redesign/DynamicSettings/DynamicControls/Select.tsx new file mode 100644 index 000000000..481c5f181 --- /dev/null +++ b/src/renderer/Generics/redesign/DynamicSettings/DynamicControls/Select.tsx @@ -0,0 +1,77 @@ +import { useEffect, useState } from 'react'; +import ReactSelect, { + MenuPlacement, + MultiValue, + SingleValue, +} from 'react-select'; + +type SelectOption = { value: string; label: string }; + +type Props = { + isDisabled: boolean; + options: SelectOption[]; + value: undefined | string | string[]; + onChange: (newValue?: string | string[]) => void; + isMulti: boolean; + menuPlacement?: string; +}; +const Select = ({ + isDisabled, + options, + value, + onChange, + isMulti, + menuPlacement, +}: Props) => { + const [sSelectedOptions, setSelectedOptions] = useState([]); + + useEffect(() => { + // if no value is set in the prop, show the default value + // (ex. if no value is set in the node's config, show the node spec default value) + if (Array.isArray(value)) { + setSelectedOptions( + options.filter((option) => { + return value.includes(option.value); + }) + ); + } else { + setSelectedOptions( + options.filter((option) => { + return value === option.value; + }) + ); + } + }, [value, options]); + + return ( +
+ | MultiValue + ) => { + console.log('onChange newValue: ', newValue); + if (Array.isArray(newValue)) { + // return array of values + onChange( + newValue.map((selectOption) => { + return selectOption.value; + }) + ); + } else { + const singleValue = newValue as SingleValue; + onChange(singleValue?.value ? singleValue.value : undefined); + } + }} + isDisabled={isDisabled} + isMulti={isMulti} + menuPlacement={menuPlacement as MenuPlacement} + /> +
+ ); +}; +Select.defaultProps = { + menuPlacement: 'bottom', +}; +export default Select; diff --git a/src/renderer/Generics/redesign/DynamicSettings/DynamicControls/TextArea.tsx b/src/renderer/Generics/redesign/DynamicSettings/DynamicControls/TextArea.tsx new file mode 100644 index 000000000..e8925b89e --- /dev/null +++ b/src/renderer/Generics/redesign/DynamicSettings/DynamicControls/TextArea.tsx @@ -0,0 +1,54 @@ +import { useEffect, useState } from 'react'; + +type Props = { + isDisabled: boolean; + value: string | undefined; + onChange: (newValue: string) => void; +}; +const TextArea = ({ isDisabled, value, onChange }: Props) => { + const [sText, setText] = useState(); + + useEffect(() => { + setText(value); + }, [value]); + + return ( + <> +
{ + e.preventDefault(); + onChange(sText ?? ''); + }} + > + {/*