import { IconX } from "@tabler/icons-react"; import { useFormikContext } from "formik"; import { useState } from "react"; import type { AccessListItem } from "src/api/backend"; import { T } from "src/locale"; interface Props { initialValues: AccessListItem[]; name?: string; } export function BasicAuthFields({ initialValues, name = "items" }: Props) { const [values, setValues] = useState(initialValues || []); const { setFieldValue } = useFormikContext(); const blankItem: AccessListItem = { username: "", password: "" }; if (values?.length === 0) { setValues([blankItem]); } const handleAdd = () => { setValues([...values, blankItem]); }; const handleRemove = (idx: number) => { const newValues = values.filter((_: AccessListItem, i: number) => i !== idx); if (newValues.length === 0) { newValues.push(blankItem); } setValues(newValues); setFormField(newValues); }; const handleChange = (idx: number, field: string, fieldValue: string) => { const newValues = values.map((v: AccessListItem, i: number) => (i === idx ? { ...v, [field]: fieldValue } : v)); setValues(newValues); setFormField(newValues); }; const setFormField = (newValues: AccessListItem[]) => { const filtered = newValues.filter((v: AccessListItem) => v?.username?.trim() !== ""); setFieldValue(name, filtered); }; return ( <>
{values.map((item: AccessListItem, idx: number) => (
handleChange(idx, "username", e.target.value)} />
iv.username === item.username).length > 0 ? "••••••••" : "" } onChange={(e) => handleChange(idx, "password", e.target.value)} />
{ e.preventDefault(); handleRemove(idx); }} >
))}
); }