import { useState } from "react"; import { TextField, Button, Chip, Box, Stack } from "@mui/material"; interface PropsOptionsManager { items: string[]; setItems: (items: string[]) => void; label?: string; maxLength: number; onlyStrings?: boolean; } export function OptionsManager({ items, setItems, label = "Keyword", maxLength, onlyStrings, }: PropsOptionsManager) { const [inputValue, setInputValue] = useState(""); const [editIndex, setEditIndex] = useState(null); const handleAddOrUpdateItem = () => { const trimmed = inputValue.trim(); if (!trimmed) return; let value: string; if (onlyStrings) { value = trimmed; } else { value = isNaN(Number(trimmed)) ? trimmed : String(Number(trimmed)); } if (editIndex !== null) { const updatedItems = [...items]; updatedItems[editIndex] = value; setItems(updatedItems); setEditIndex(null); } else { if (maxLength && items.length >= maxLength) return; if (!items.includes(value)) { setItems([...items, value]); } } setInputValue(""); }; const handleDeleteItem = (index: number) => { setItems(items.filter((_, i) => i !== index)); }; const handleEditItem = (index: number) => { setInputValue(items[index]); setEditIndex(index); }; return ( setInputValue(e.target.value)} onKeyDown={(e) => { if (e.key === "Enter") handleAddOrUpdateItem(); }} sx={{ width: "240px" }} /> {items.map((item, index) => ( handleDeleteItem(index)} onClick={() => handleEditItem(index)} sx={{ margin: 0.5 }} /> ))} ); }