feat(ui): add value input for new environment variables

- Add newEnvValue state to profile editor
- Update add variable section to include key + value inputs
- Apply to both OpenRouter and standard profile editors
- Clear both key and value after adding variable
This commit is contained in:
kaitranntt
2025-12-20 23:22:04 -05:00
parent 3f7add5c10
commit f947aeb21b
3 changed files with 35 additions and 6 deletions
@@ -16,7 +16,9 @@ import type { Settings } from './types';
interface EnvEditorSectionProps { interface EnvEditorSectionProps {
currentSettings: Settings | undefined; currentSettings: Settings | undefined;
newEnvKey: string; newEnvKey: string;
newEnvValue: string;
onNewEnvKeyChange: (value: string) => void; onNewEnvKeyChange: (value: string) => void;
onNewEnvValueChange: (value: string) => void;
onEnvValueChange: (key: string, value: string) => void; onEnvValueChange: (key: string, value: string) => void;
onAddEnvVar: () => void; onAddEnvVar: () => void;
} }
@@ -24,7 +26,9 @@ interface EnvEditorSectionProps {
export function EnvEditorSection({ export function EnvEditorSection({
currentSettings, currentSettings,
newEnvKey, newEnvKey,
newEnvValue,
onNewEnvKeyChange, onNewEnvKeyChange,
onNewEnvValueChange,
onEnvValueChange, onEnvValueChange,
onAddEnvVar, onAddEnvVar,
}: EnvEditorSectionProps) { }: EnvEditorSectionProps) {
@@ -82,8 +86,15 @@ export function EnvEditorSection({
placeholder="VARIABLE_NAME" placeholder="VARIABLE_NAME"
value={newEnvKey} value={newEnvKey}
onChange={(e) => onNewEnvKeyChange(e.target.value.toUpperCase())} onChange={(e) => onNewEnvKeyChange(e.target.value.toUpperCase())}
className="font-mono text-sm h-8" className="font-mono text-sm h-8 w-2/5"
onKeyDown={(e) => e.key === 'Enter' && onAddEnvVar()} onKeyDown={(e) => e.key === 'Enter' && newEnvKey.trim() && onAddEnvVar()}
/>
<Input
placeholder="value"
value={newEnvValue}
onChange={(e) => onNewEnvValueChange(e.target.value)}
className="font-mono text-sm h-8 flex-1"
onKeyDown={(e) => e.key === 'Enter' && newEnvKey.trim() && onAddEnvVar()}
/> />
<Button <Button
variant="outline" variant="outline"
@@ -26,7 +26,9 @@ interface FriendlyUISectionProps {
data: SettingsResponse | undefined; data: SettingsResponse | undefined;
currentSettings: Settings | undefined; currentSettings: Settings | undefined;
newEnvKey: string; newEnvKey: string;
newEnvValue: string;
onNewEnvKeyChange: (key: string) => void; onNewEnvKeyChange: (key: string) => void;
onNewEnvValueChange: (value: string) => void;
onEnvValueChange: (key: string, value: string) => void; onEnvValueChange: (key: string, value: string) => void;
onAddEnvVar: () => void; onAddEnvVar: () => void;
onEnvBulkChange?: (env: Record<string, string>) => void; onEnvBulkChange?: (env: Record<string, string>) => void;
@@ -37,7 +39,9 @@ export function FriendlyUISection({
data, data,
currentSettings, currentSettings,
newEnvKey, newEnvKey,
newEnvValue,
onNewEnvKeyChange, onNewEnvKeyChange,
onNewEnvValueChange,
onEnvValueChange, onEnvValueChange,
onAddEnvVar, onAddEnvVar,
onEnvBulkChange, onEnvBulkChange,
@@ -222,8 +226,15 @@ export function FriendlyUISection({
placeholder="VARIABLE_NAME" placeholder="VARIABLE_NAME"
value={newEnvKey} value={newEnvKey}
onChange={(e) => onNewEnvKeyChange(e.target.value.toUpperCase())} onChange={(e) => onNewEnvKeyChange(e.target.value.toUpperCase())}
className="font-mono text-sm h-8" className="font-mono text-sm h-8 w-2/5"
onKeyDown={(e) => e.key === 'Enter' && onAddEnvVar()} onKeyDown={(e) => e.key === 'Enter' && newEnvKey.trim() && onAddEnvVar()}
/>
<Input
placeholder="value"
value={newEnvValue}
onChange={(e) => onNewEnvValueChange(e.target.value)}
className="font-mono text-sm h-8 flex-1"
onKeyDown={(e) => e.key === 'Enter' && newEnvKey.trim() && onAddEnvVar()}
/> />
<Button <Button
variant="outline" variant="outline"
@@ -242,7 +253,9 @@ export function FriendlyUISection({
<EnvEditorSection <EnvEditorSection
currentSettings={currentSettings} currentSettings={currentSettings}
newEnvKey={newEnvKey} newEnvKey={newEnvKey}
newEnvValue={newEnvValue}
onNewEnvKeyChange={onNewEnvKeyChange} onNewEnvKeyChange={onNewEnvKeyChange}
onNewEnvValueChange={onNewEnvValueChange}
onEnvValueChange={onEnvValueChange} onEnvValueChange={onEnvValueChange}
onAddEnvVar={onAddEnvVar} onAddEnvVar={onAddEnvVar}
/> />
+7 -2
View File
@@ -21,6 +21,7 @@ export function ProfileEditor({ profileName, onDelete }: ProfileEditorProps) {
const [conflictDialog, setConflictDialog] = useState(false); const [conflictDialog, setConflictDialog] = useState(false);
const [rawJsonEdits, setRawJsonEdits] = useState<string | null>(null); const [rawJsonEdits, setRawJsonEdits] = useState<string | null>(null);
const [newEnvKey, setNewEnvKey] = useState(''); const [newEnvKey, setNewEnvKey] = useState('');
const [newEnvValue, setNewEnvValue] = useState('');
const queryClient = useQueryClient(); const queryClient = useQueryClient();
// Fetch settings for selected profile // Fetch settings for selected profile
@@ -69,10 +70,12 @@ export function ProfileEditor({ profileName, onDelete }: ProfileEditorProps) {
const addNewEnvVar = () => { const addNewEnvVar = () => {
if (!newEnvKey.trim()) return; if (!newEnvKey.trim()) return;
const key = newEnvKey.trim(); const key = newEnvKey.trim();
const newEnv = { ...(currentSettings?.env || {}), [key]: '' }; const value = newEnvValue;
setLocalEdits((prev) => ({ ...prev, [key]: '' })); const newEnv = { ...(currentSettings?.env || {}), [key]: value };
setLocalEdits((prev) => ({ ...prev, [key]: value }));
setRawJsonEdits(JSON.stringify({ ...currentSettings, env: newEnv }, null, 2)); setRawJsonEdits(JSON.stringify({ ...currentSettings, env: newEnv }, null, 2));
setNewEnvKey(''); setNewEnvKey('');
setNewEnvValue('');
}; };
// Computed validity and changes check // Computed validity and changes check
@@ -172,7 +175,9 @@ export function ProfileEditor({ profileName, onDelete }: ProfileEditorProps) {
data={data} data={data}
currentSettings={currentSettings} currentSettings={currentSettings}
newEnvKey={newEnvKey} newEnvKey={newEnvKey}
newEnvValue={newEnvValue}
onNewEnvKeyChange={setNewEnvKey} onNewEnvKeyChange={setNewEnvKey}
onNewEnvValueChange={setNewEnvValue}
onEnvValueChange={updateEnvValue} onEnvValueChange={updateEnvValue}
onAddEnvVar={addNewEnvVar} onAddEnvVar={addNewEnvVar}
/> />