import React from "react"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, } from "./ui/dialog"; import { Button } from "./ui/button"; import { toast } from "sonner"; import copy from "copy-to-clipboard"; import { CodeEditor } from "./ui/code-editor"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "./ui/tabs"; import { Label } from "./ui/label"; import { Clipboard } from "lucide-react"; import { Input } from "./ui/input"; interface Template { id: string; name: string; description: string; version: string; logo?: string; links: { github?: string; website?: string; docs?: string; }; tags: string[]; } interface TemplateFiles { dockerCompose: string | null; config: string | null; } interface TemplateDialogProps { selectedTemplate: Template | null; templateFiles: TemplateFiles | null; modalLoading: boolean; onOpenChange: (open: boolean) => void; } const TemplateDialog: React.FC = ({ selectedTemplate, templateFiles, modalLoading, onOpenChange, }) => { const getBase64Config = () => { if (!templateFiles?.dockerCompose && !templateFiles?.config) return ""; const configObj = { compose: templateFiles.dockerCompose || "", config: templateFiles.config || "", }; // Use encodeURIComponent to handle Unicode characters properly const jsonString = JSON.stringify(configObj, null, 2); return btoa(unescape(encodeURIComponent(jsonString))); }; return (
{selectedTemplate?.logo && ( {selectedTemplate.name} )}
{selectedTemplate?.name}
{selectedTemplate?.version}
{selectedTemplate?.links.github && ( GitHub )} {selectedTemplate?.links.docs && ( Docs )} Edit Template
{selectedTemplate?.description}
{selectedTemplate?.tags.map((tag) => ( {tag} ))}
{modalLoading ? (

Loading template files...

) : (
{(templateFiles?.dockerCompose || templateFiles?.config) && (
)} Docker Compose Configuration {templateFiles?.dockerCompose && (
)}
{templateFiles?.config && (
)}
{!templateFiles?.dockerCompose && !templateFiles?.config && (

No configuration files available for this template.

)}
)}
); }; export default TemplateDialog;