import { useState } from "react"; import { useTranslation } from "react-i18next"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Button } from "@/components/ui/button"; import { Plus, Trash2 } from "lucide-react"; import { useConfig } from "./ConfigProvider"; import { TransformerList } from "./TransformerList"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; export function Transformers() { const { t } = useTranslation(); const { config, setConfig } = useConfig(); const [editingTransformerIndex, setEditingTransformerIndex] = useState(null); const [deletingTransformerIndex, setDeletingTransformerIndex] = useState(null); const [newTransformer, setNewTransformer] = useState<{ path: string; options: { [key: string]: string } } | null>(null); if (!config) { return null; } const handleAddTransformer = () => { const newTransformer = { path: "", options: {} }; setNewTransformer(newTransformer); setEditingTransformerIndex(config.transformers.length); // Use the length as index for the new item }; const handleRemoveTransformer = (index: number) => { const newTransformers = [...config.transformers]; newTransformers.splice(index, 1); setConfig({ ...config, transformers: newTransformers }); setDeletingTransformerIndex(null); }; const handleTransformerChange = (index: number, field: string, value: string, optionKey?: string) => { if (index < config.transformers.length) { // Editing an existing transformer const newTransformers = [...config.transformers]; if (optionKey !== undefined) { newTransformers[index].options[optionKey] = value; } else { (newTransformers[index] as Record)[field] = value; } setConfig({ ...config, transformers: newTransformers }); } else { // Editing the new transformer if (newTransformer) { const updatedTransformer = { ...newTransformer }; if (optionKey !== undefined) { updatedTransformer.options[optionKey] = value; } else { (updatedTransformer as Record)[field] = value; } setNewTransformer(updatedTransformer); } } }; const editingTransformer = editingTransformerIndex !== null ? (editingTransformerIndex < config.transformers.length ? config.transformers[editingTransformerIndex] : newTransformer) : null; const handleSaveTransformer = () => { if (newTransformer && editingTransformerIndex === config.transformers.length) { // Saving a new transformer const newTransformers = [...config.transformers, newTransformer]; setConfig({ ...config, transformers: newTransformers }); } // Close the dialog setEditingTransformerIndex(null); setNewTransformer(null); }; const handleCancelTransformer = () => { // Close the dialog without saving setEditingTransformerIndex(null); setNewTransformer(null); }; return ( {t("transformers.title")} ({config.transformers.length}) {/* Edit Dialog */} {t("transformers.edit")} {editingTransformer && editingTransformerIndex !== null && (
handleTransformerChange(editingTransformerIndex, "path", e.target.value)} />
{Object.entries(editingTransformer.options).map(([key, value]) => (
{ const newOptions = { ...editingTransformer.options }; delete newOptions[key]; newOptions[e.target.value] = value; if (editingTransformerIndex !== null) { if (editingTransformerIndex < config.transformers.length) { const newTransformers = [...config.transformers]; newTransformers[editingTransformerIndex].options = newOptions; setConfig({ ...config, transformers: newTransformers }); } else if (newTransformer) { setNewTransformer({ ...newTransformer, options: newOptions }); } } }} className="flex-1" /> { if (editingTransformerIndex !== null) { handleTransformerChange(editingTransformerIndex, "options", e.target.value, key); } }} className="flex-1" />
))}
)}
{/* Delete Confirmation Dialog */} setDeletingTransformerIndex(null)}> {t("transformers.delete")} {t("transformers.delete_transformer_confirm")}
); }