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"
>
-
{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()}
/>
>