import { DownloadIcon } from "lucide-react"; import { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import CodeViewer from "@/components/code-viewer"; import { Button } from "@/components/ui/button"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { base64ToBytes, downloadBytes, downloadContent } from "@/lib/utils"; export function MultiPackResult({ allPackResults, packMethod, shellClassName, height = 350, }: Readonly<{ allPackResults: object | undefined; packMethod: string; shellClassName?: string; height?: number; }>) { const showCode = packMethod === "JSP"; const { t } = useTranslation(); const packMethods = Object.keys(allPackResults ?? {}); const [selectedMethod, setSelectedMethod] = useState(packMethods[0]); const [packResult, setPackResult] = useState( allPackResults?.[selectedMethod as keyof typeof allPackResults] ?? "", ); useEffect(() => { const newPackMethods = Object.keys(allPackResults ?? {}); if (!newPackMethods.includes(selectedMethod)) { const newSelectedMethod = newPackMethods[0]; setSelectedMethod(newSelectedMethod); setPackResult( allPackResults?.[newSelectedMethod as keyof typeof allPackResults] ?? "", ); } else { setPackResult( allPackResults?.[selectedMethod as keyof typeof allPackResults] ?? "", ); } }, [allPackResults, selectedMethod]); const handleDownload = () => { const fileName = shellClassName?.substring(shellClassName?.lastIndexOf(".") ?? 0) ?? ""; if (packMethod === "JSP") { const fileExtension = selectedMethod.includes("JSPX") ? ".jspx" : ".jsp"; const content = new Blob([packResult], { type: "text/plain" }); return downloadContent(content, fileName, fileExtension); } else if ( packMethod === "JavaDeserialize" || packMethod.includes("Hessian") ) { const content = new Blob([base64ToBytes(packResult)], { type: "application/octet-stream", }); return downloadContent(content, fileName, ".data"); } else if (packMethod === "Base64") { const base64Content = allPackResults?.[ Object.keys(allPackResults)[0] as keyof typeof allPackResults ] ?? ""; return downloadBytes(base64Content, shellClassName); } }; return ( ({packResult?.length}) } button={ packMethod === "JSP" || packMethod === "Base64" || packMethod === "JavaDeserialize" || packMethod.includes("Hessian") ? ( ) : null } wrapLongLines={!showCode} showLineNumbers={showCode} language={showCode ? "java" : "text"} height={height} /> ); }