61 lines
1.8 KiB
TypeScript
61 lines
1.8 KiB
TypeScript
|
|
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>
|
||
|
|
);
|
||
|
|
}
|