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<{ name?: string; path: string; options: { [key: string]: string } } | null>(null); // Handle case where config is null or undefined if (!config) { return ( {t("transformers.title")}
Loading transformers configuration...
); } // Validate config.Transformers to ensure it's an array const validTransformers = Array.isArray(config.transformers) ? config.transformers : []; const handleAddTransformer = () => { const newTransformer = { name: "", path: "", options: {} }; setNewTransformer(newTransformer); setEditingTransformerIndex(validTransformers.length); // Use the length as index for the new item }; const handleRemoveTransformer = (index: number) => { const newTransformers = [...validTransformers]; newTransformers.splice(index, 1); setConfig({ ...config, transformers: newTransformers }); setDeletingTransformerIndex(null); }; const handleTransformerChange = (index: number, field: string, value: string, parameterKey?: string) => { if (index < validTransformers.length) { // Editing an existing transformer const newTransformers = [...validTransformers]; if (parameterKey !== undefined) { newTransformers[index].options![parameterKey] = value; } else { (newTransformers[index] as unknown as Record)[field] = value; } setConfig({ ...config, transformers: newTransformers }); } else { // Editing the new transformer if (newTransformer) { const updatedTransformer = { ...newTransformer }; if (parameterKey !== undefined) { updatedTransformer.options![parameterKey] = value; } else { (updatedTransformer as Record)[field] = value; } setNewTransformer(updatedTransformer); } } }; const editingTransformer = editingTransformerIndex !== null ? (editingTransformerIndex < validTransformers.length ? validTransformers[editingTransformerIndex] : newTransformer) : null; const handleSaveTransformer = () => { if (newTransformer && editingTransformerIndex === validTransformers.length) { // Saving a new transformer const newTransformers = [...validTransformers, 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")} ({validTransformers.length}) {/* Edit Dialog */} {t("transformers.edit")} {editingTransformer && editingTransformerIndex !== null && (
handleTransformerChange(editingTransformerIndex, "path", e.target.value)} />
{Object.entries(editingTransformer.options || {}).map(([key, value]) => (
{ const parameters = editingTransformer.options || {}; const newParameters = { ...parameters }; delete newParameters[key]; newParameters[e.target.value] = value; if (editingTransformerIndex !== null) { if (editingTransformerIndex < validTransformers.length) { const newTransformers = [...validTransformers]; newTransformers[editingTransformerIndex].options = newParameters; setConfig({ ...config, transformers: newTransformers }); } else if (newTransformer) { setNewTransformer({ ...newTransformer, options: newParameters }); } } }} className="flex-1" /> { if (editingTransformerIndex !== null) { handleTransformerChange(editingTransformerIndex, "parameters", e.target.value, key); } }} className="flex-1" />
))}
)}
{/* Delete Confirmation Dialog */} setDeletingTransformerIndex(null)}> {t("transformers.delete")} {t("transformers.delete_transformer_confirm")}
); }