@vuu-ui/vuu-shell 0.8.91 → 0.8.93
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -62,17 +62,13 @@ function FormControl({
|
|
|
62
62
|
}
|
|
63
63
|
} else {
|
|
64
64
|
const valid = isValidInput(currentValue, property.type);
|
|
65
|
-
const
|
|
66
|
-
const TooltipProps = {
|
|
67
|
-
tooltipContent: content
|
|
68
|
-
};
|
|
65
|
+
const errorMessage = getTooltipContent(property.type, valid);
|
|
69
66
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
70
67
|
vuuUiControls.VuuInput,
|
|
71
68
|
{
|
|
69
|
+
errorMessage,
|
|
72
70
|
onCommit: inputHandler,
|
|
73
71
|
onChange: (e) => setValue(e.target.value),
|
|
74
|
-
validationStatus: valid,
|
|
75
|
-
TooltipProps,
|
|
76
72
|
value
|
|
77
73
|
},
|
|
78
74
|
property.name
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsForm.js","sources":["../../src/user-settings/SettingsForm.tsx"],"sourcesContent":["import { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { queryClosest, Settings } from \"@vuu-ui/vuu-utils\";\nimport {\n Dropdown,\n DropdownProps,\n FormField,\n FormFieldLabel,\n Option,\n Switch,\n ToggleButton,\n ToggleButtonGroup,\n ToggleButtonGroupProps,\n} from \"@salt-ds/core\";\nimport { VuuInput } from \"@vuu-ui/vuu-ui-controls\";\nimport {\n FormEventHandler,\n HTMLAttributes,\n SyntheticEvent,\n useCallback,\n useState,\n} from \"react\";\nexport interface SettingsSchema {\n properties: SettingsProperty[];\n}\n\nexport interface SettingsProps {\n settingsSchema: SettingsSchema;\n settings: Settings;\n onSettingChanged: (\n propertyName: string,\n value: string | number | boolean,\n ) => void;\n}\n\nexport type Option<T> = { label: string; value: T };\n\nexport const isOption = (\n value: Option<number | string> | number | string,\n): value is Option<number | string> =>\n typeof value === \"object\" && \"label\" in value && \"label\" in value;\n\nexport interface BaseProperty {\n name: string;\n label: string;\n}\n\nexport interface StringProperty extends BaseProperty {\n values?: string[] | Option<string>[];\n defaultValue?: string;\n type: \"string\";\n}\nexport interface NumericProperty extends BaseProperty {\n values?: number[] | Option<number>[];\n defaultValue?: number;\n type: \"number\";\n}\nexport interface BooleanProperty extends BaseProperty {\n defaultValue?: boolean;\n type: \"boolean\";\n}\n\nexport type SettingsProperty =\n | StringProperty\n | NumericProperty\n | BooleanProperty;\n\nexport const isBooleanProperty = (\n property: SettingsProperty,\n): property is BooleanProperty => property.type === \"boolean\";\n\nexport const isStringOrNumber = (value: unknown): value is string | number =>\n typeof value === \"string\" || typeof value === \"number\";\n\nconst getValueAndLabel = (value: string | number | Option<string | number>) =>\n isOption(value) ? [value.value, value.label] : [value, value];\n\nconst defaultPropertyValue: Record<\n SettingsProperty[\"type\"],\n VuuRowDataItemType\n> = {\n boolean: false,\n number: 0,\n string: \"\",\n};\n\n// Determine the form control type to be displayed\nexport function FormControl({\n property,\n changeHandler,\n selectHandler,\n inputHandler,\n currentValue = property.defaultValue ?? defaultPropertyValue[property.type],\n}: {\n property: SettingsProperty;\n changeHandler: FormEventHandler;\n selectHandler: DropdownProps[\"onSelectionChange\"];\n inputHandler: FormEventHandler;\n currentValue: VuuRowDataItemType;\n}) {\n const [value, setValue] = useState(currentValue);\n if (isBooleanProperty(property)) {\n const checked =\n typeof currentValue === \"boolean\"\n ? currentValue\n : (property.defaultValue ?? false);\n\n return <Switch checked={checked} onChange={changeHandler}></Switch>;\n }\n // Toggle Box for 1 or 2 values\n if (Array.isArray(property.values)) {\n if (property.values.length <= 2) {\n return (\n <ToggleButtonGroup\n value={currentValue as ToggleButtonGroupProps[\"value\"]}\n onChange={changeHandler}\n >\n {property.values.map((valueOrOption) => {\n const [value, label] = getValueAndLabel(valueOrOption);\n return (\n <ToggleButton key={value} value={value}>\n {label}\n </ToggleButton>\n );\n })}\n </ToggleButtonGroup>\n );\n } else if (property.values.length > 2) {\n return (\n <Dropdown\n value={currentValue as DropdownProps[\"value\"]}\n onSelectionChange={selectHandler}\n >\n {property.values.map((valueOrOption) => {\n const [value, label] = getValueAndLabel(valueOrOption);\n return (\n <Option\n value={label}\n key={value}\n data-field={property.name}\n ></Option>\n );\n })}\n </Dropdown>\n );\n }\n } else {\n const valid = isValidInput(currentValue, property.type);\n const content = getTooltipContent(property.type, valid);\n const TooltipProps = {\n tooltipContent: content,\n };\n return (\n <VuuInput\n key={property.name}\n onCommit={inputHandler}\n onChange={(e) => setValue((e.target as HTMLInputElement).value)}\n validationStatus={valid}\n TooltipProps={TooltipProps}\n value={value as string}\n />\n );\n }\n return null;\n}\n\n//Validation logic for input boxes\nconst isValidInput = (value: unknown, type: unknown) => {\n if (value === \"\") {\n return undefined;\n }\n if (type === \"string\") {\n return \"success\";\n } else if (type === \"number\") {\n if (Number.isNaN(Number(value))) {\n return \"error\";\n }\n return \"success\";\n }\n};\n\n//Function to Generate Tooltip Content\nfunction getTooltipContent(type: string, valid: string | undefined) {\n if (valid === \"error\") {\n if (type === \"number\") {\n return <p>Field is expecting a number</p>;\n } else if (type === \"string\") {\n return <p>Field is expecting a string</p>;\n } else {\n return <p>Please contact Admin for more information on expected type</p>;\n }\n } else {\n return undefined;\n }\n}\n\nexport type SettingsFormProps = SettingsProps & HTMLAttributes<HTMLDivElement>;\n\n// Generates application settings form component\nexport const SettingsForm = ({\n settingsSchema,\n settings,\n onSettingChanged,\n ...htmlAttributes\n}: SettingsFormProps) => {\n const getFieldNameFromEventTarget = (evt: SyntheticEvent) => {\n const fieldElement = queryClosest(evt.target, \"[data-field]\");\n if (fieldElement && fieldElement.dataset.field) {\n return fieldElement.dataset.field;\n } else {\n throw Error(\"data-field attribute not defined\");\n }\n };\n\n // Change Handler for toggle and switch buttons\n const changeHandler = useCallback<FormEventHandler>(\n (event) => {\n const fieldName = getFieldNameFromEventTarget(event);\n const { checked, value } = event.target as HTMLInputElement;\n onSettingChanged(fieldName, checked ?? value);\n },\n [onSettingChanged],\n );\n\n // Change handler for selection form controls\n const selectHandler = useCallback(\n (event: SyntheticEvent, [selected]: string[]) => {\n const fieldName = getFieldNameFromEventTarget(event);\n onSettingChanged(fieldName, selected);\n },\n [onSettingChanged],\n );\n\n // Change Handler for input boxes\n const inputHandler = useCallback<FormEventHandler>(\n (event) => {\n const fieldName = getFieldNameFromEventTarget(event);\n const { value } = event.target as HTMLInputElement;\n if (!Number.isNaN(Number(value)) && value != \"\") {\n const numValue = Number(value);\n onSettingChanged(fieldName, numValue);\n } else {\n onSettingChanged(fieldName, value);\n }\n },\n [onSettingChanged],\n );\n return (\n <div {...htmlAttributes}>\n {settingsSchema.properties.map((property) => (\n <FormField data-field={property.name} key={property.name}>\n <FormFieldLabel>{property.label}</FormFieldLabel>\n {FormControl({\n property,\n changeHandler,\n selectHandler,\n inputHandler,\n currentValue: settings[property.name],\n })}\n </FormField>\n ))}\n </div>\n );\n};\n"],"names":["useState","jsx","Switch","ToggleButtonGroup","value","ToggleButton","Dropdown","Option","VuuInput","queryClosest","useCallback","jsxs","FormField","FormFieldLabel"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SettingsForm.js","sources":["../../src/user-settings/SettingsForm.tsx"],"sourcesContent":["import { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { queryClosest, Settings } from \"@vuu-ui/vuu-utils\";\nimport {\n Dropdown,\n DropdownProps,\n FormField,\n FormFieldLabel,\n Option,\n Switch,\n ToggleButton,\n ToggleButtonGroup,\n ToggleButtonGroupProps,\n} from \"@salt-ds/core\";\nimport { VuuInput } from \"@vuu-ui/vuu-ui-controls\";\nimport {\n FormEventHandler,\n HTMLAttributes,\n SyntheticEvent,\n useCallback,\n useState,\n} from \"react\";\nexport interface SettingsSchema {\n properties: SettingsProperty[];\n}\n\nexport interface SettingsProps {\n settingsSchema: SettingsSchema;\n settings: Settings;\n onSettingChanged: (\n propertyName: string,\n value: string | number | boolean,\n ) => void;\n}\n\nexport type Option<T> = { label: string; value: T };\n\nexport const isOption = (\n value: Option<number | string> | number | string,\n): value is Option<number | string> =>\n typeof value === \"object\" && \"label\" in value && \"label\" in value;\n\nexport interface BaseProperty {\n name: string;\n label: string;\n}\n\nexport interface StringProperty extends BaseProperty {\n values?: string[] | Option<string>[];\n defaultValue?: string;\n type: \"string\";\n}\nexport interface NumericProperty extends BaseProperty {\n values?: number[] | Option<number>[];\n defaultValue?: number;\n type: \"number\";\n}\nexport interface BooleanProperty extends BaseProperty {\n defaultValue?: boolean;\n type: \"boolean\";\n}\n\nexport type SettingsProperty =\n | StringProperty\n | NumericProperty\n | BooleanProperty;\n\nexport const isBooleanProperty = (\n property: SettingsProperty,\n): property is BooleanProperty => property.type === \"boolean\";\n\nexport const isStringOrNumber = (value: unknown): value is string | number =>\n typeof value === \"string\" || typeof value === \"number\";\n\nconst getValueAndLabel = (value: string | number | Option<string | number>) =>\n isOption(value) ? [value.value, value.label] : [value, value];\n\nconst defaultPropertyValue: Record<\n SettingsProperty[\"type\"],\n VuuRowDataItemType\n> = {\n boolean: false,\n number: 0,\n string: \"\",\n};\n\n// Determine the form control type to be displayed\nexport function FormControl({\n property,\n changeHandler,\n selectHandler,\n inputHandler,\n currentValue = property.defaultValue ?? defaultPropertyValue[property.type],\n}: {\n property: SettingsProperty;\n changeHandler: FormEventHandler;\n selectHandler: DropdownProps[\"onSelectionChange\"];\n inputHandler: FormEventHandler;\n currentValue: VuuRowDataItemType;\n}) {\n const [value, setValue] = useState(currentValue);\n if (isBooleanProperty(property)) {\n const checked =\n typeof currentValue === \"boolean\"\n ? currentValue\n : (property.defaultValue ?? false);\n\n return <Switch checked={checked} onChange={changeHandler}></Switch>;\n }\n // Toggle Box for 1 or 2 values\n if (Array.isArray(property.values)) {\n if (property.values.length <= 2) {\n return (\n <ToggleButtonGroup\n value={currentValue as ToggleButtonGroupProps[\"value\"]}\n onChange={changeHandler}\n >\n {property.values.map((valueOrOption) => {\n const [value, label] = getValueAndLabel(valueOrOption);\n return (\n <ToggleButton key={value} value={value}>\n {label}\n </ToggleButton>\n );\n })}\n </ToggleButtonGroup>\n );\n } else if (property.values.length > 2) {\n return (\n <Dropdown\n value={currentValue as DropdownProps[\"value\"]}\n onSelectionChange={selectHandler}\n >\n {property.values.map((valueOrOption) => {\n const [value, label] = getValueAndLabel(valueOrOption);\n return (\n <Option\n value={label}\n key={value}\n data-field={property.name}\n ></Option>\n );\n })}\n </Dropdown>\n );\n }\n } else {\n const valid = isValidInput(currentValue, property.type);\n const errorMessage = getTooltipContent(property.type, valid);\n return (\n <VuuInput\n errorMessage={errorMessage}\n key={property.name}\n onCommit={inputHandler}\n onChange={(e) => setValue((e.target as HTMLInputElement).value)}\n value={value as string}\n />\n );\n }\n return null;\n}\n\n//Validation logic for input boxes\nconst isValidInput = (value: unknown, type: unknown) => {\n if (value === \"\") {\n return undefined;\n }\n if (type === \"string\") {\n return \"success\";\n } else if (type === \"number\") {\n if (Number.isNaN(Number(value))) {\n return \"error\";\n }\n return \"success\";\n }\n};\n\n//Function to Generate Tooltip Content\nfunction getTooltipContent(type: string, valid: string | undefined) {\n if (valid === \"error\") {\n if (type === \"number\") {\n return <p>Field is expecting a number</p>;\n } else if (type === \"string\") {\n return <p>Field is expecting a string</p>;\n } else {\n return <p>Please contact Admin for more information on expected type</p>;\n }\n } else {\n return undefined;\n }\n}\n\nexport type SettingsFormProps = SettingsProps & HTMLAttributes<HTMLDivElement>;\n\n// Generates application settings form component\nexport const SettingsForm = ({\n settingsSchema,\n settings,\n onSettingChanged,\n ...htmlAttributes\n}: SettingsFormProps) => {\n const getFieldNameFromEventTarget = (evt: SyntheticEvent) => {\n const fieldElement = queryClosest(evt.target, \"[data-field]\");\n if (fieldElement && fieldElement.dataset.field) {\n return fieldElement.dataset.field;\n } else {\n throw Error(\"data-field attribute not defined\");\n }\n };\n\n // Change Handler for toggle and switch buttons\n const changeHandler = useCallback<FormEventHandler>(\n (event) => {\n const fieldName = getFieldNameFromEventTarget(event);\n const { checked, value } = event.target as HTMLInputElement;\n onSettingChanged(fieldName, checked ?? value);\n },\n [onSettingChanged],\n );\n\n // Change handler for selection form controls\n const selectHandler = useCallback(\n (event: SyntheticEvent, [selected]: string[]) => {\n const fieldName = getFieldNameFromEventTarget(event);\n onSettingChanged(fieldName, selected);\n },\n [onSettingChanged],\n );\n\n // Change Handler for input boxes\n const inputHandler = useCallback<FormEventHandler>(\n (event) => {\n const fieldName = getFieldNameFromEventTarget(event);\n const { value } = event.target as HTMLInputElement;\n if (!Number.isNaN(Number(value)) && value != \"\") {\n const numValue = Number(value);\n onSettingChanged(fieldName, numValue);\n } else {\n onSettingChanged(fieldName, value);\n }\n },\n [onSettingChanged],\n );\n return (\n <div {...htmlAttributes}>\n {settingsSchema.properties.map((property) => (\n <FormField data-field={property.name} key={property.name}>\n <FormFieldLabel>{property.label}</FormFieldLabel>\n {FormControl({\n property,\n changeHandler,\n selectHandler,\n inputHandler,\n currentValue: settings[property.name],\n })}\n </FormField>\n ))}\n </div>\n );\n};\n"],"names":["useState","jsx","Switch","ToggleButtonGroup","value","ToggleButton","Dropdown","Option","VuuInput","queryClosest","useCallback","jsxs","FormField","FormFieldLabel"],"mappings":"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"}
|
|
@@ -60,17 +60,13 @@ function FormControl({
|
|
|
60
60
|
}
|
|
61
61
|
} else {
|
|
62
62
|
const valid = isValidInput(currentValue, property.type);
|
|
63
|
-
const
|
|
64
|
-
const TooltipProps = {
|
|
65
|
-
tooltipContent: content
|
|
66
|
-
};
|
|
63
|
+
const errorMessage = getTooltipContent(property.type, valid);
|
|
67
64
|
return /* @__PURE__ */ jsx(
|
|
68
65
|
VuuInput,
|
|
69
66
|
{
|
|
67
|
+
errorMessage,
|
|
70
68
|
onCommit: inputHandler,
|
|
71
69
|
onChange: (e) => setValue(e.target.value),
|
|
72
|
-
validationStatus: valid,
|
|
73
|
-
TooltipProps,
|
|
74
70
|
value
|
|
75
71
|
},
|
|
76
72
|
property.name
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsForm.js","sources":["../../src/user-settings/SettingsForm.tsx"],"sourcesContent":["import { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { queryClosest, Settings } from \"@vuu-ui/vuu-utils\";\nimport {\n Dropdown,\n DropdownProps,\n FormField,\n FormFieldLabel,\n Option,\n Switch,\n ToggleButton,\n ToggleButtonGroup,\n ToggleButtonGroupProps,\n} from \"@salt-ds/core\";\nimport { VuuInput } from \"@vuu-ui/vuu-ui-controls\";\nimport {\n FormEventHandler,\n HTMLAttributes,\n SyntheticEvent,\n useCallback,\n useState,\n} from \"react\";\nexport interface SettingsSchema {\n properties: SettingsProperty[];\n}\n\nexport interface SettingsProps {\n settingsSchema: SettingsSchema;\n settings: Settings;\n onSettingChanged: (\n propertyName: string,\n value: string | number | boolean,\n ) => void;\n}\n\nexport type Option<T> = { label: string; value: T };\n\nexport const isOption = (\n value: Option<number | string> | number | string,\n): value is Option<number | string> =>\n typeof value === \"object\" && \"label\" in value && \"label\" in value;\n\nexport interface BaseProperty {\n name: string;\n label: string;\n}\n\nexport interface StringProperty extends BaseProperty {\n values?: string[] | Option<string>[];\n defaultValue?: string;\n type: \"string\";\n}\nexport interface NumericProperty extends BaseProperty {\n values?: number[] | Option<number>[];\n defaultValue?: number;\n type: \"number\";\n}\nexport interface BooleanProperty extends BaseProperty {\n defaultValue?: boolean;\n type: \"boolean\";\n}\n\nexport type SettingsProperty =\n | StringProperty\n | NumericProperty\n | BooleanProperty;\n\nexport const isBooleanProperty = (\n property: SettingsProperty,\n): property is BooleanProperty => property.type === \"boolean\";\n\nexport const isStringOrNumber = (value: unknown): value is string | number =>\n typeof value === \"string\" || typeof value === \"number\";\n\nconst getValueAndLabel = (value: string | number | Option<string | number>) =>\n isOption(value) ? [value.value, value.label] : [value, value];\n\nconst defaultPropertyValue: Record<\n SettingsProperty[\"type\"],\n VuuRowDataItemType\n> = {\n boolean: false,\n number: 0,\n string: \"\",\n};\n\n// Determine the form control type to be displayed\nexport function FormControl({\n property,\n changeHandler,\n selectHandler,\n inputHandler,\n currentValue = property.defaultValue ?? defaultPropertyValue[property.type],\n}: {\n property: SettingsProperty;\n changeHandler: FormEventHandler;\n selectHandler: DropdownProps[\"onSelectionChange\"];\n inputHandler: FormEventHandler;\n currentValue: VuuRowDataItemType;\n}) {\n const [value, setValue] = useState(currentValue);\n if (isBooleanProperty(property)) {\n const checked =\n typeof currentValue === \"boolean\"\n ? currentValue\n : (property.defaultValue ?? false);\n\n return <Switch checked={checked} onChange={changeHandler}></Switch>;\n }\n // Toggle Box for 1 or 2 values\n if (Array.isArray(property.values)) {\n if (property.values.length <= 2) {\n return (\n <ToggleButtonGroup\n value={currentValue as ToggleButtonGroupProps[\"value\"]}\n onChange={changeHandler}\n >\n {property.values.map((valueOrOption) => {\n const [value, label] = getValueAndLabel(valueOrOption);\n return (\n <ToggleButton key={value} value={value}>\n {label}\n </ToggleButton>\n );\n })}\n </ToggleButtonGroup>\n );\n } else if (property.values.length > 2) {\n return (\n <Dropdown\n value={currentValue as DropdownProps[\"value\"]}\n onSelectionChange={selectHandler}\n >\n {property.values.map((valueOrOption) => {\n const [value, label] = getValueAndLabel(valueOrOption);\n return (\n <Option\n value={label}\n key={value}\n data-field={property.name}\n ></Option>\n );\n })}\n </Dropdown>\n );\n }\n } else {\n const valid = isValidInput(currentValue, property.type);\n const content = getTooltipContent(property.type, valid);\n const TooltipProps = {\n tooltipContent: content,\n };\n return (\n <VuuInput\n key={property.name}\n onCommit={inputHandler}\n onChange={(e) => setValue((e.target as HTMLInputElement).value)}\n validationStatus={valid}\n TooltipProps={TooltipProps}\n value={value as string}\n />\n );\n }\n return null;\n}\n\n//Validation logic for input boxes\nconst isValidInput = (value: unknown, type: unknown) => {\n if (value === \"\") {\n return undefined;\n }\n if (type === \"string\") {\n return \"success\";\n } else if (type === \"number\") {\n if (Number.isNaN(Number(value))) {\n return \"error\";\n }\n return \"success\";\n }\n};\n\n//Function to Generate Tooltip Content\nfunction getTooltipContent(type: string, valid: string | undefined) {\n if (valid === \"error\") {\n if (type === \"number\") {\n return <p>Field is expecting a number</p>;\n } else if (type === \"string\") {\n return <p>Field is expecting a string</p>;\n } else {\n return <p>Please contact Admin for more information on expected type</p>;\n }\n } else {\n return undefined;\n }\n}\n\nexport type SettingsFormProps = SettingsProps & HTMLAttributes<HTMLDivElement>;\n\n// Generates application settings form component\nexport const SettingsForm = ({\n settingsSchema,\n settings,\n onSettingChanged,\n ...htmlAttributes\n}: SettingsFormProps) => {\n const getFieldNameFromEventTarget = (evt: SyntheticEvent) => {\n const fieldElement = queryClosest(evt.target, \"[data-field]\");\n if (fieldElement && fieldElement.dataset.field) {\n return fieldElement.dataset.field;\n } else {\n throw Error(\"data-field attribute not defined\");\n }\n };\n\n // Change Handler for toggle and switch buttons\n const changeHandler = useCallback<FormEventHandler>(\n (event) => {\n const fieldName = getFieldNameFromEventTarget(event);\n const { checked, value } = event.target as HTMLInputElement;\n onSettingChanged(fieldName, checked ?? value);\n },\n [onSettingChanged],\n );\n\n // Change handler for selection form controls\n const selectHandler = useCallback(\n (event: SyntheticEvent, [selected]: string[]) => {\n const fieldName = getFieldNameFromEventTarget(event);\n onSettingChanged(fieldName, selected);\n },\n [onSettingChanged],\n );\n\n // Change Handler for input boxes\n const inputHandler = useCallback<FormEventHandler>(\n (event) => {\n const fieldName = getFieldNameFromEventTarget(event);\n const { value } = event.target as HTMLInputElement;\n if (!Number.isNaN(Number(value)) && value != \"\") {\n const numValue = Number(value);\n onSettingChanged(fieldName, numValue);\n } else {\n onSettingChanged(fieldName, value);\n }\n },\n [onSettingChanged],\n );\n return (\n <div {...htmlAttributes}>\n {settingsSchema.properties.map((property) => (\n <FormField data-field={property.name} key={property.name}>\n <FormFieldLabel>{property.label}</FormFieldLabel>\n {FormControl({\n property,\n changeHandler,\n selectHandler,\n inputHandler,\n currentValue: settings[property.name],\n })}\n </FormField>\n ))}\n </div>\n );\n};\n"],"names":["value"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SettingsForm.js","sources":["../../src/user-settings/SettingsForm.tsx"],"sourcesContent":["import { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { queryClosest, Settings } from \"@vuu-ui/vuu-utils\";\nimport {\n Dropdown,\n DropdownProps,\n FormField,\n FormFieldLabel,\n Option,\n Switch,\n ToggleButton,\n ToggleButtonGroup,\n ToggleButtonGroupProps,\n} from \"@salt-ds/core\";\nimport { VuuInput } from \"@vuu-ui/vuu-ui-controls\";\nimport {\n FormEventHandler,\n HTMLAttributes,\n SyntheticEvent,\n useCallback,\n useState,\n} from \"react\";\nexport interface SettingsSchema {\n properties: SettingsProperty[];\n}\n\nexport interface SettingsProps {\n settingsSchema: SettingsSchema;\n settings: Settings;\n onSettingChanged: (\n propertyName: string,\n value: string | number | boolean,\n ) => void;\n}\n\nexport type Option<T> = { label: string; value: T };\n\nexport const isOption = (\n value: Option<number | string> | number | string,\n): value is Option<number | string> =>\n typeof value === \"object\" && \"label\" in value && \"label\" in value;\n\nexport interface BaseProperty {\n name: string;\n label: string;\n}\n\nexport interface StringProperty extends BaseProperty {\n values?: string[] | Option<string>[];\n defaultValue?: string;\n type: \"string\";\n}\nexport interface NumericProperty extends BaseProperty {\n values?: number[] | Option<number>[];\n defaultValue?: number;\n type: \"number\";\n}\nexport interface BooleanProperty extends BaseProperty {\n defaultValue?: boolean;\n type: \"boolean\";\n}\n\nexport type SettingsProperty =\n | StringProperty\n | NumericProperty\n | BooleanProperty;\n\nexport const isBooleanProperty = (\n property: SettingsProperty,\n): property is BooleanProperty => property.type === \"boolean\";\n\nexport const isStringOrNumber = (value: unknown): value is string | number =>\n typeof value === \"string\" || typeof value === \"number\";\n\nconst getValueAndLabel = (value: string | number | Option<string | number>) =>\n isOption(value) ? [value.value, value.label] : [value, value];\n\nconst defaultPropertyValue: Record<\n SettingsProperty[\"type\"],\n VuuRowDataItemType\n> = {\n boolean: false,\n number: 0,\n string: \"\",\n};\n\n// Determine the form control type to be displayed\nexport function FormControl({\n property,\n changeHandler,\n selectHandler,\n inputHandler,\n currentValue = property.defaultValue ?? defaultPropertyValue[property.type],\n}: {\n property: SettingsProperty;\n changeHandler: FormEventHandler;\n selectHandler: DropdownProps[\"onSelectionChange\"];\n inputHandler: FormEventHandler;\n currentValue: VuuRowDataItemType;\n}) {\n const [value, setValue] = useState(currentValue);\n if (isBooleanProperty(property)) {\n const checked =\n typeof currentValue === \"boolean\"\n ? currentValue\n : (property.defaultValue ?? false);\n\n return <Switch checked={checked} onChange={changeHandler}></Switch>;\n }\n // Toggle Box for 1 or 2 values\n if (Array.isArray(property.values)) {\n if (property.values.length <= 2) {\n return (\n <ToggleButtonGroup\n value={currentValue as ToggleButtonGroupProps[\"value\"]}\n onChange={changeHandler}\n >\n {property.values.map((valueOrOption) => {\n const [value, label] = getValueAndLabel(valueOrOption);\n return (\n <ToggleButton key={value} value={value}>\n {label}\n </ToggleButton>\n );\n })}\n </ToggleButtonGroup>\n );\n } else if (property.values.length > 2) {\n return (\n <Dropdown\n value={currentValue as DropdownProps[\"value\"]}\n onSelectionChange={selectHandler}\n >\n {property.values.map((valueOrOption) => {\n const [value, label] = getValueAndLabel(valueOrOption);\n return (\n <Option\n value={label}\n key={value}\n data-field={property.name}\n ></Option>\n );\n })}\n </Dropdown>\n );\n }\n } else {\n const valid = isValidInput(currentValue, property.type);\n const errorMessage = getTooltipContent(property.type, valid);\n return (\n <VuuInput\n errorMessage={errorMessage}\n key={property.name}\n onCommit={inputHandler}\n onChange={(e) => setValue((e.target as HTMLInputElement).value)}\n value={value as string}\n />\n );\n }\n return null;\n}\n\n//Validation logic for input boxes\nconst isValidInput = (value: unknown, type: unknown) => {\n if (value === \"\") {\n return undefined;\n }\n if (type === \"string\") {\n return \"success\";\n } else if (type === \"number\") {\n if (Number.isNaN(Number(value))) {\n return \"error\";\n }\n return \"success\";\n }\n};\n\n//Function to Generate Tooltip Content\nfunction getTooltipContent(type: string, valid: string | undefined) {\n if (valid === \"error\") {\n if (type === \"number\") {\n return <p>Field is expecting a number</p>;\n } else if (type === \"string\") {\n return <p>Field is expecting a string</p>;\n } else {\n return <p>Please contact Admin for more information on expected type</p>;\n }\n } else {\n return undefined;\n }\n}\n\nexport type SettingsFormProps = SettingsProps & HTMLAttributes<HTMLDivElement>;\n\n// Generates application settings form component\nexport const SettingsForm = ({\n settingsSchema,\n settings,\n onSettingChanged,\n ...htmlAttributes\n}: SettingsFormProps) => {\n const getFieldNameFromEventTarget = (evt: SyntheticEvent) => {\n const fieldElement = queryClosest(evt.target, \"[data-field]\");\n if (fieldElement && fieldElement.dataset.field) {\n return fieldElement.dataset.field;\n } else {\n throw Error(\"data-field attribute not defined\");\n }\n };\n\n // Change Handler for toggle and switch buttons\n const changeHandler = useCallback<FormEventHandler>(\n (event) => {\n const fieldName = getFieldNameFromEventTarget(event);\n const { checked, value } = event.target as HTMLInputElement;\n onSettingChanged(fieldName, checked ?? value);\n },\n [onSettingChanged],\n );\n\n // Change handler for selection form controls\n const selectHandler = useCallback(\n (event: SyntheticEvent, [selected]: string[]) => {\n const fieldName = getFieldNameFromEventTarget(event);\n onSettingChanged(fieldName, selected);\n },\n [onSettingChanged],\n );\n\n // Change Handler for input boxes\n const inputHandler = useCallback<FormEventHandler>(\n (event) => {\n const fieldName = getFieldNameFromEventTarget(event);\n const { value } = event.target as HTMLInputElement;\n if (!Number.isNaN(Number(value)) && value != \"\") {\n const numValue = Number(value);\n onSettingChanged(fieldName, numValue);\n } else {\n onSettingChanged(fieldName, value);\n }\n },\n [onSettingChanged],\n );\n return (\n <div {...htmlAttributes}>\n {settingsSchema.properties.map((property) => (\n <FormField data-field={property.name} key={property.name}>\n <FormFieldLabel>{property.label}</FormFieldLabel>\n {FormControl({\n property,\n changeHandler,\n selectHandler,\n inputHandler,\n currentValue: settings[property.name],\n })}\n </FormField>\n ))}\n </div>\n );\n};\n"],"names":["value"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.8.
|
|
2
|
+
"version": "0.8.93",
|
|
3
3
|
"description": "VUU UI Shell",
|
|
4
4
|
"author": "heswell",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"devDependencies": {
|
|
7
|
-
"@vuu-ui/vuu-data-types": "0.8.
|
|
8
|
-
"@vuu-ui/vuu-protocol-types": "0.8.
|
|
9
|
-
"@vuu-ui/vuu-table-types": "0.8.
|
|
7
|
+
"@vuu-ui/vuu-data-types": "0.8.93",
|
|
8
|
+
"@vuu-ui/vuu-protocol-types": "0.8.93",
|
|
9
|
+
"@vuu-ui/vuu-table-types": "0.8.93"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@salt-ds/core": "1.34.0",
|
|
13
13
|
"@salt-ds/styles": "0.2.1",
|
|
14
14
|
"@salt-ds/window": "0.1.1",
|
|
15
|
-
"@vuu-ui/vuu-data-react": "0.8.
|
|
16
|
-
"@vuu-ui/vuu-data-remote": "0.8.
|
|
17
|
-
"@vuu-ui/vuu-icons": "0.8.
|
|
18
|
-
"@vuu-ui/vuu-layout": "0.8.
|
|
19
|
-
"@vuu-ui/vuu-popups": "0.8.
|
|
20
|
-
"@vuu-ui/vuu-table": "0.8.
|
|
21
|
-
"@vuu-ui/vuu-ui-controls": "0.8.
|
|
22
|
-
"@vuu-ui/vuu-utils": "0.8.
|
|
15
|
+
"@vuu-ui/vuu-data-react": "0.8.93",
|
|
16
|
+
"@vuu-ui/vuu-data-remote": "0.8.93",
|
|
17
|
+
"@vuu-ui/vuu-icons": "0.8.93",
|
|
18
|
+
"@vuu-ui/vuu-layout": "0.8.93",
|
|
19
|
+
"@vuu-ui/vuu-popups": "0.8.93",
|
|
20
|
+
"@vuu-ui/vuu-table": "0.8.93",
|
|
21
|
+
"@vuu-ui/vuu-ui-controls": "0.8.93",
|
|
22
|
+
"@vuu-ui/vuu-utils": "0.8.93",
|
|
23
23
|
"html-to-image": "^1.11.11"
|
|
24
24
|
},
|
|
25
25
|
"peerDependencies": {
|