import { useState } from 'react'; import { Check, Minus } from 'lucide-react'; import { Button, Input } from '../../components/ui'; import { EnvParam } from '../../models/EnvParam'; import { AddEvent, RemoveEvent, UpdateEvent } from '../../models/Env'; interface EnvironmentParamProps { param: EnvParam; onChanged: (event: AddEvent | RemoveEvent | UpdateEvent) => void; isNew: boolean; } export function EnvironmentParam({ param, onChanged, isNew }: EnvironmentParamProps) { const [localParam, setLocalParam] = useState(param); const [isFocused, setIsFocused] = useState(false); function updateParam(updates: Partial) { const updated = localParam.update(updates).markChanged(true); setLocalParam(updated); } function handleChange() { if (!localParam.isChanged) return; const savedParam = localParam.markChanged(false); if (!isNew) { onChanged(UpdateEvent.update(savedParam)); } setLocalParam(savedParam); } function handleAdd() { onChanged(AddEvent.add(localParam)); setLocalParam(new EnvParam(0, '', '')); } function handleKeyUp(event: React.KeyboardEvent) { if (event.key === 'Enter') { handleChange(); } } const isChangedClass = localParam.isChanged ? 'ring-2 ring-yellow-400 border-yellow-400' : ''; const focusedClass = isFocused ? 'bg-blue-50' : ''; return (
updateParam({ name: e.target.value })} onBlur={() => { handleChange(); setIsFocused(false); }} onFocus={() => setIsFocused(true)} onKeyUp={handleKeyUp} placeholder="Parameter name" className="text-sm" />
updateParam({ value: e.target.value })} onBlur={() => { handleChange(); setIsFocused(false); }} onFocus={() => setIsFocused(true)} onKeyUp={handleKeyUp} placeholder="Parameter value" className="text-sm" />
{isNew ? (
); }