import type { FormEvent } from 'react'; import React, { useCallback, useState } from 'react'; import type { HttpHeader } from '../lib/models'; import { IconButton } from './IconButton'; import { Input } from './Input'; import { HStack, VStack } from './Stacks'; export function HeaderEditor() { const [headers, setHeaders] = useState([]); const [newHeaderName, setNewHeaderName] = useState(''); const [newHeaderValue, setNewHeaderValue] = useState(''); const handleSubmit = useCallback( (e?: FormEvent) => { e?.preventDefault(); setHeaders([...headers, { name: newHeaderName, value: newHeaderValue }]); setNewHeaderName(''); setNewHeaderValue(''); }, [newHeaderName, newHeaderValue], ); const handleChangeHeader = useCallback( (header: Partial, index: number) => { setHeaders((headers) => headers.map((h, i) => { if (i === index) return h; const newHeader: HttpHeader = { ...h, ...header }; console.log('NEW HEADER', newHeader); return newHeader; }), ); }, [headers], ); const handleDelete = (index: number) => { setHeaders((headers) => headers.filter((_, i) => i !== index)); }; console.log('HEADERS', headers); return (
{headers.map((header, i) => ( handleChangeHeader({ name }, i)} onChangeValue={(value) => handleChangeHeader({ value }, i)} onDelete={() => handleDelete(i)} /> ))}
); } function FormRow({ autoFocus, valueKey, name, value, addSubmit, onChangeName, onChangeValue, onDelete, }: { autoFocus?: boolean; valueKey: string | number; name: string; value: string; addSubmit?: boolean; onSubmit?: () => void; onChangeName: (name: string) => void; onChangeValue: (value: string) => void; onDelete?: () => void; }) { return (
{onDelete && } {addSubmit && }
); }