diff --git a/ui/desktop/src/components/Modal.tsx b/ui/desktop/src/components/Modal.tsx index b8cd5665..20a8363b 100644 --- a/ui/desktop/src/components/Modal.tsx +++ b/ui/desktop/src/components/Modal.tsx @@ -55,7 +55,7 @@ export default function Modal({ ref={modalRef} className="relative w-[500px] max-w-full bg-bgApp rounded-xl my-10 max-h-[90vh] flex flex-col" > -
{children}
+
{children}
{footer && (
{footer} diff --git a/ui/desktop/src/components/settings_v2/extensions/modal/EnvVarsSection.tsx b/ui/desktop/src/components/settings_v2/extensions/modal/EnvVarsSection.tsx index 39d95e28..ecb565ed 100644 --- a/ui/desktop/src/components/settings_v2/extensions/modal/EnvVarsSection.tsx +++ b/ui/desktop/src/components/settings_v2/extensions/modal/EnvVarsSection.tsx @@ -2,14 +2,14 @@ import React from 'react'; import { Button } from '../../../ui/button'; import { Plus, X } from 'lucide-react'; import { Input } from '../../../ui/input'; +import { cn } from '../../../../utils'; interface EnvVarsSectionProps { envVars: { key: string; value: string }[]; - onAdd: () => void; + onAdd: (key: string, value: string) => void; onRemove: (index: number) => void; onChange: (index: number, field: 'key' | 'value', value: string) => void; submitAttempted: boolean; - isValid: boolean; } export default function EnvVarsSection({ @@ -17,24 +17,46 @@ export default function EnvVarsSection({ onAdd, onRemove, onChange, - submitAttempted, - isValid, }: EnvVarsSectionProps) { + const [newKey, setNewKey] = React.useState(''); + const [newValue, setNewValue] = React.useState(''); + const [validationError, setValidationError] = React.useState(null); + const [invalidFields, setInvalidFields] = React.useState<{ key: boolean; value: boolean }>({ + key: false, + value: false, + }); + + const handleAdd = () => { + const keyEmpty = !newKey.trim(); + const valueEmpty = !newValue.trim(); + + if (keyEmpty || valueEmpty) { + setInvalidFields({ + key: keyEmpty, + value: valueEmpty, + }); + setValidationError('Both variable name and value must be entered'); + return; + } + + setValidationError(null); + setInvalidFields({ key: false, value: false }); + onAdd(newKey, newValue); + setNewKey(''); + setNewValue(''); + }; + + const clearValidation = () => { + setValidationError(null); + setInvalidFields({ key: false, value: false }); + }; + return (
- {' '} - {/* Added relative positioning with minimal margin */} - {submitAttempted && !isValid && ( -
- {' '} - {/* Removed absolute positioning */} - Environment variables must consist of sets of variable names and values -
- )}
{/* Existing environment variables */} @@ -46,6 +68,7 @@ export default function EnvVarsSection({ onChange={(e) => onChange(index, 'key', e.target.value)} placeholder="Variable name" className={`w-full border-borderSubtle text-textStandard`} + disabled />
@@ -54,6 +77,7 @@ export default function EnvVarsSection({ onChange={(e) => onChange(index, 'value', e.target.value)} placeholder="Value" className={`w-full border-borderSubtle text-textStandard`} + disabled />
+ {validationError &&
{validationError}
}
); } diff --git a/ui/desktop/src/components/settings_v2/extensions/modal/ExtensionModal.tsx b/ui/desktop/src/components/settings_v2/extensions/modal/ExtensionModal.tsx index 5434177a..dd782b27 100644 --- a/ui/desktop/src/components/settings_v2/extensions/modal/ExtensionModal.tsx +++ b/ui/desktop/src/components/settings_v2/extensions/modal/ExtensionModal.tsx @@ -1,9 +1,6 @@ import React, { useState } from 'react'; import { Button } from '../../../ui/button'; import Modal from '../../../Modal'; -import { Input } from '../../../ui/input'; -import Select from 'react-select'; -import { createDarkSelectStyles, darkSelectTheme } from '../../../ui/select-styles'; import { ExtensionFormData } from '../utils'; import EnvVarsSection from './EnvVarsSection'; import ExtensionConfigFields from './ExtensionConfigFields'; @@ -33,10 +30,10 @@ export default function ExtensionModal({ const [showDeleteConfirmation, setShowDeleteConfirmation] = useState(false); const [submitAttempted, setSubmitAttempted] = useState(false); - const handleAddEnvVar = () => { + const handleAddEnvVar = (key: string, value: string) => { setFormData({ ...formData, - envVars: [...formData.envVars, { key: '', value: '' }], + envVars: [...formData.envVars, { key, value }], }); }; @@ -208,7 +205,6 @@ export default function ExtensionModal({ onRemove={handleRemoveEnvVar} onChange={Object.assign(handleEnvVarChange, { setSubmitAttempted })} submitAttempted={submitAttempted} - isValid={isEnvVarsValid()} />