From 2e036a9d28103f3d9c11424629b2687192e38db5 Mon Sep 17 00:00:00 2001 From: ali asaria <ali.asaria@gmail.com> Date: Tue, 27 Feb 2024 15:47:40 -0500 Subject: [PATCH] enforce required fields on dynamic forms Fixes #12 --- .../Experiment/DynamicPluginForm.tsx | 28 ++++++++++++++----- .../Experiment/Train/TrainingModalLoRA.tsx | 1 - 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/renderer/components/Experiment/DynamicPluginForm.tsx b/src/renderer/components/Experiment/DynamicPluginForm.tsx index cde000f7..15d35546 100644 --- a/src/renderer/components/Experiment/DynamicPluginForm.tsx +++ b/src/renderer/components/Experiment/DynamicPluginForm.tsx @@ -47,7 +47,7 @@ import { const schemaTemplate: RJSFSchema = { type: 'object', - required: ['title'], + required: [], properties: {}, }; @@ -99,6 +99,7 @@ function BaseInputTemplate(props: BaseInputTemplateProps) { value={value} placeholder={placeholder} disabled={disabled} + required={required} readOnly={readonly} autoFocus={autofocus} error={hasError} @@ -117,8 +118,15 @@ function getSchema(data) { console.log(data); let parsedData = JSON.parse(data); let schemaParameters = parsedData.parameters; + let requiredParameters = []; + for (let key in schemaParameters) { + if (schemaParameters[key]?.required) { + requiredParameters.push(key); + } + } let newSchemaTemplate = { ...schemaTemplate }; newSchemaTemplate.properties = schemaParameters; + newSchemaTemplate.required = requiredParameters; const uiSchema = parsedData.parameters_ui; return { JSONSchema: newSchemaTemplate, uiSchema: uiSchema }; } @@ -161,6 +169,7 @@ const CustomRange = function (props: WidgetProps) { <Stack direction="row"> <Slider disabled={disabled || readonly} + required={required} onChange={_onChange} onBlur={_onBlur} onFocus={_onFocus} @@ -225,7 +234,7 @@ function CustomSelect< ); // set a default value for the field if it's not multi-select and value is set - const defaultValue = (!isEmpty && !multiple) ? value : emptyValue + const defaultValue = !isEmpty && !multiple ? value : emptyValue; return ( <> @@ -274,12 +283,17 @@ function CustomSelect< Array.isArray(enumDisabled) && enumDisabled.indexOf(value) !== -1; // selectedIndexes is an array if multiple is set, or an integer (or undefined) if not multiple - const selected: boolean = - multiple ? - (Array.isArray(selectedIndexes) && selectedIndexes.indexOf(i) !== -1) : - (i == selectedIndexes); + const selected: boolean = multiple + ? Array.isArray(selectedIndexes) && + selectedIndexes.indexOf(i) !== -1 + : i == selectedIndexes; return ( - <Option key={i} value={String(label)} disabled={disabled} selected={selected}> + <Option + key={i} + value={String(label)} + disabled={disabled} + selected={selected} + > {label} </Option> ); diff --git a/src/renderer/components/Experiment/Train/TrainingModalLoRA.tsx b/src/renderer/components/Experiment/Train/TrainingModalLoRA.tsx index 73aa2ada..153809b5 100644 --- a/src/renderer/components/Experiment/Train/TrainingModalLoRA.tsx +++ b/src/renderer/components/Experiment/Train/TrainingModalLoRA.tsx @@ -125,7 +125,6 @@ export default function TrainingModalLoRA({ open, onClose, experimentInfo }) { event.preventDefault(); const formData = new FormData(event.currentTarget); const formJson = Object.fromEntries((formData as any).entries()); - //alert(JSON.stringify(formJson)); chatAPI.saveTrainingTemplate( event.currentTarget.elements['template_name'].value, 'Description', -- GitLab