import React, { useState, useEffect } from "react"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog.tsx"; import { Button } from "@/components/ui/button.tsx"; import { Input } from "@/components/ui/input.tsx"; import { Label } from "@/components/ui/label.tsx"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select.tsx"; import { useTranslation } from "react-i18next"; interface CompressDialogProps { open: boolean; onOpenChange: (open: boolean) => void; fileNames: string[]; onCompress: (archiveName: string, format: string) => void; } export function CompressDialog({ open, onOpenChange, fileNames, onCompress, }: CompressDialogProps) { const { t } = useTranslation(); const [archiveName, setArchiveName] = useState(""); const [format, setFormat] = useState("zip"); useEffect(() => { if (open && fileNames.length > 0) { if (fileNames.length === 1) { const baseName = fileNames[0].replace(/\.[^/.]+$/, ""); setArchiveName(baseName); } else { setArchiveName("archive"); } } }, [open, fileNames]); const handleCompress = () => { if (!archiveName.trim()) return; let finalName = archiveName.trim(); const extensions: Record = { zip: ".zip", "tar.gz": ".tar.gz", "tar.bz2": ".tar.bz2", "tar.xz": ".tar.xz", tar: ".tar", "7z": ".7z", }; const expectedExtension = extensions[format]; if (expectedExtension && !finalName.endsWith(expectedExtension)) { finalName += expectedExtension; } onCompress(finalName, format); onOpenChange(false); }; return ( {t("fileManager.compressFiles")} {t("fileManager.compressFilesDesc", { count: fileNames.length })}
setArchiveName(e.target.value)} placeholder={t("fileManager.enterArchiveName")} onKeyDown={(e) => { if (e.key === "Enter") { e.preventDefault(); handleCompress(); } }} />

{t("fileManager.selectedFiles")}:

    {fileNames.slice(0, 5).map((name, index) => (
  • • {name}
  • ))} {fileNames.length > 5 && (
  • {t("fileManager.andMoreFiles", { count: fileNames.length - 5, })}
  • )}
); }