import { useState } from "react"; import { useTranslation } from "react-i18next"; import { useImportTools, type ToolImportResponse } from "@workspace/api-client-react"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Textarea } from "@/components/ui/textarea"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { Label } from "@/components/ui/label"; import { GuideHelp } from "@/components/guide-help"; import { Upload, FileUp, CheckCircle2, AlertCircle } from "lucide-react"; type Format = "auto" | "csv" | "json" | "yaml"; type Delimiter = "auto" | "comma" | "semicolon" | "tab"; export function ToolImportDialog({ open, onOpenChange, onImported, }: { open: boolean; onOpenChange: (open: boolean) => void; onImported: () => void; }) { const { t } = useTranslation(); const importTools = useImportTools(); const [format, setFormat] = useState("auto"); const [delimiter, setDelimiter] = useState("auto"); const [data, setData] = useState(""); const [result, setResult] = useState(null); function handleFile(file: File) { const reader = new FileReader(); reader.onload = () => { setData(String(reader.result ?? "")); }; reader.readAsText(file); } function handleImport() { importTools.mutate( { data: { format, delimiter, data } }, { onSuccess: (res) => { setResult(res); if (res.imported > 0) onImported(); }, }, ); } function handleClose(open: boolean) { if (!importTools.isPending) { onOpenChange(open); if (!open) { setData(""); setResult(null); setFormat("auto"); setDelimiter("auto"); } } } const canSubmit = data.trim().length > 0 && !importTools.isPending; const placeholder = format === "csv" ? t("adminTools.importTextareaPlaceholderCsv") : format === "json" ? t("adminTools.importTextareaPlaceholderJson") : format === "yaml" ? t("adminTools.importTextareaPlaceholderYaml") : t("adminTools.importTextareaPlaceholderAuto"); return ( {t("adminTools.importTitle")}

{t("adminTools.importSub")}

setFormat(v as Format)}> {t("adminTools.importFormatAuto")} CSV JSON YAML {t("adminTools.importFormatAutoSub")}

{t("adminTools.importCsvSub")}

{t("adminTools.importJsonSub")}

{t("adminTools.importYamlSub")}

{ const f = e.target.files?.[0]; if (f) handleFile(f); e.target.value = ""; }} />