ui(deploy): extract VariablesTab component
Pure presentational tab receiving VariablesFormState via value/onChange. Rows use the new .envVarsList / .envVarRow CSS grid (1fr 2fr auto). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
import { Button, Input } from '@cameleer/design-system';
|
||||
import type { VariablesFormState } from '../hooks/useDeploymentPageState';
|
||||
import styles from '../AppDeploymentPage.module.css';
|
||||
|
||||
interface Props {
|
||||
value: VariablesFormState;
|
||||
onChange: (next: VariablesFormState) => void;
|
||||
disabled?: boolean;
|
||||
}
|
||||
|
||||
export function VariablesTab({ value, onChange, disabled }: Props) {
|
||||
function updateRow(index: number, field: 'key' | 'value', v: string) {
|
||||
const next = value.envVars.map((row, i) => (i === index ? { ...row, [field]: v } : row));
|
||||
onChange({ envVars: next });
|
||||
}
|
||||
|
||||
function removeRow(index: number) {
|
||||
onChange({ envVars: value.envVars.filter((_, i) => i !== index) });
|
||||
}
|
||||
|
||||
function addRow() {
|
||||
onChange({ envVars: [...value.envVars, { key: '', value: '' }] });
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div className={styles.envVarsList}>
|
||||
{value.envVars.map((row, i) => (
|
||||
<div key={i} className={styles.envVarRow}>
|
||||
<Input
|
||||
disabled={disabled}
|
||||
value={row.key}
|
||||
onChange={(e) => updateRow(i, 'key', e.target.value)}
|
||||
placeholder="KEY"
|
||||
/>
|
||||
<Input
|
||||
disabled={disabled}
|
||||
value={row.value}
|
||||
onChange={(e) => updateRow(i, 'value', e.target.value)}
|
||||
placeholder="value"
|
||||
/>
|
||||
<Button
|
||||
size="sm"
|
||||
variant="ghost"
|
||||
disabled={disabled}
|
||||
onClick={() => removeRow(i)}
|
||||
>
|
||||
×
|
||||
</Button>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
<div style={{ marginTop: 10 }}>
|
||||
<Button size="sm" variant="secondary" disabled={disabled} onClick={addRow}>
|
||||
+ Add Variable
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user