import { useState } from "react"; import { useTranslation } from "react-i18next"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, } from "@/components/dialog"; import { Button } from "@/components/button"; import { Input } from "@/components/input"; import type { CanvasWidget, ServiceLinkConfig, FolderConfig, NotesConfig, BookmarkListConfig, ClockConfig, HostStatusConfig, WeatherConfig, IframeConfig, RssFeedConfig, MetricsChartConfig, HostGridConfig, AlertFeedConfig, PingStatusConfig, RecentActivityConfig, TermixUptimeConfig, SystemOverviewConfig, SshTerminalConfig, QuickConnectConfig, FileManagerWidgetConfig, DockerWidgetConfig, TunnelWidgetConfig, CalendarConfig, CountdownConfig, SearchBarConfig, TextBannerConfig, ImageWidgetConfig, MarkdownNotesConfig, CustomApiConfig, ServiceGridConfig, DashboardLinksConfig, SearchLinksConfig, LinkTreeConfig, } from "@/types/homepage-types"; import { ServiceLinkEditForm } from "./ServiceLinkEditForm"; import { FolderEditForm } from "./FolderEditForm"; import { NotesEditForm } from "./NotesEditForm"; import { BookmarkListEditForm } from "./BookmarkListEditForm"; import { ClockEditForm } from "./ClockEditForm"; import { HostStatusEditForm } from "./HostStatusEditForm"; import { WeatherEditForm } from "./WeatherEditForm"; import { IframeEditForm } from "./IframeEditForm"; import { RssFeedEditForm } from "./RssFeedEditForm"; import { MetricsChartEditForm } from "./MetricsChartEditForm"; import { HostGridEditForm } from "./HostGridEditForm"; import { AlertFeedEditForm } from "./AlertFeedEditForm"; import { PingStatusEditForm } from "./PingStatusEditForm"; import { RecentActivityEditForm } from "./RecentActivityEditForm"; import { TermixUptimeEditForm } from "./TermixUptimeEditForm"; import { SystemOverviewEditForm } from "./SystemOverviewEditForm"; import { SshTerminalEditForm } from "./SshTerminalEditForm"; import { QuickConnectEditForm } from "./QuickConnectEditForm"; import { FileManagerWidgetEditForm } from "./FileManagerWidgetEditForm"; import { DockerWidgetEditForm } from "./DockerWidgetEditForm"; import { TunnelWidgetEditForm } from "./TunnelWidgetEditForm"; import { CalendarEditForm } from "./CalendarEditForm"; import { CountdownEditForm } from "./CountdownEditForm"; import { SearchBarEditForm } from "./SearchBarEditForm"; import { TextBannerEditForm } from "./TextBannerEditForm"; import { ImageWidgetEditForm } from "./ImageWidgetEditForm"; import { MarkdownNotesEditForm } from "./MarkdownNotesEditForm"; import { CustomApiEditForm } from "./CustomApiEditForm"; import { ServiceGridEditForm } from "./ServiceGridEditForm"; import { DashboardLinksEditForm } from "./DashboardLinksEditForm"; import { SearchLinksEditForm } from "./SearchLinksEditForm"; import { LinkTreeEditForm } from "./LinkTreeEditForm"; interface WidgetEditDialogProps { widget: CanvasWidget | null; onSave: ( id: number, title: string | null, config: Record, ) => void; onClose: () => void; } export function WidgetEditDialog({ widget, onSave, onClose, }: WidgetEditDialogProps) { const { t } = useTranslation(); const [title, setTitle] = useState(widget?.title ?? ""); const [config, setConfig] = useState>( widget?.config ?? {}, ); if (!widget) return null; const handleSave = () => { onSave(widget.id, title || null, config); onClose(); }; const renderForm = () => { switch (widget.typeId) { case "service_link": return ( setConfig(c as unknown as Record)} /> ); case "folder": return ( setConfig(c as unknown as Record)} /> ); case "notes": return ( setConfig(c as unknown as Record)} /> ); case "bookmark_list": return ( setConfig(c as unknown as Record)} /> ); case "clock": return ( setConfig(c as unknown as Record)} /> ); case "host_status": return ( setConfig(c as unknown as Record)} /> ); case "weather": return ( setConfig(c as unknown as Record)} /> ); case "iframe_embed": return ( setConfig(c as unknown as Record)} /> ); case "rss_feed": return ( setConfig(c as unknown as Record)} /> ); case "metrics_chart": return ( setConfig(c as unknown as Record)} /> ); case "host_grid": return ( setConfig(c as unknown as Record)} /> ); case "alert_feed": return ( setConfig(c as unknown as Record)} /> ); case "ping_status": return ( setConfig(c as unknown as Record)} /> ); case "recent_activity": return ( setConfig(c as unknown as Record)} /> ); case "termix_uptime": return ( setConfig(c as unknown as Record)} /> ); case "system_overview": return ( setConfig(c as unknown as Record)} /> ); case "ssh_terminal": return ( setConfig(c as unknown as Record)} /> ); case "quick_connect": return ( setConfig(c as unknown as Record)} /> ); case "file_manager_widget": return ( setConfig(c as unknown as Record)} /> ); case "docker_widget": return ( setConfig(c as unknown as Record)} /> ); case "tunnel_widget": return ( setConfig(c as unknown as Record)} /> ); case "calendar": return ( setConfig(c as unknown as Record)} /> ); case "countdown": return ( setConfig(c as unknown as Record)} /> ); case "search_bar": return ( setConfig(c as unknown as Record)} /> ); case "text_banner": return ( setConfig(c as unknown as Record)} /> ); case "image_widget": return ( setConfig(c as unknown as Record)} /> ); case "markdown_notes": return ( setConfig(c as unknown as Record)} /> ); case "custom_api": return ( setConfig(c as unknown as Record)} /> ); case "service_grid": return ( setConfig(c as unknown as Record)} /> ); case "dashboard_links": return ( setConfig(c as unknown as Record)} /> ); case "search_links": return ( setConfig(c as unknown as Record)} /> ); case "link_tree": return ( setConfig(c as unknown as Record)} /> ); default: return null; } }; return ( { if (!open) onClose(); }} > e.stopPropagation()} > {t("homepage.editWidget")}
setTitle(e.target.value)} placeholder={t("homepage.widgetTitlePlaceholder")} className="h-8 text-sm" />
{renderForm()}
); }