import { FileText } from "lucide-react"; import React, { useEffect, useState } from "react"; import { useI18n } from "../../application/i18n/I18nProvider"; import { LazyMessageResponse } from "../ai-elements/LazyMessageResponse"; import { ScrollArea } from "../ui/scroll-area"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "../ui/tabs"; import { Textarea } from "../ui/textarea"; import { cn } from "../../lib/utils"; const PREVIEW_PROSE_CLASS = "text-sm text-foreground/90 [&>*:first-child]:mt-0 [&>*:last-child]:mb-0"; function defaultNotesTab(notes: string, preferredTab?: "edit" | "preview"): "edit" | "preview" { if (preferredTab) return preferredTab; return notes.trim() ? "preview" : "edit"; } export interface HostNotesEditorProps { value: string; onChange: (value: string) => void; /** Changes when opening a different host (e.g. host id) to reset the active tab */ panelKey?: string; className?: string; showHeader?: boolean; defaultTab?: "edit" | "preview"; } export const HostNotesEditor: React.FC = ({ value, onChange, panelKey, className, showHeader = true, defaultTab, }) => { const { t } = useI18n(); const [tab, setTab] = useState<"edit" | "preview">(() => defaultNotesTab(value, defaultTab)); useEffect(() => { if (panelKey === undefined) return; setTab(defaultNotesTab(value, defaultTab)); // Only reset tab when opening another host, not while editing notes. // eslint-disable-next-line react-hooks/exhaustive-deps -- value read on panelKey change }, [panelKey, defaultTab]); const trimmed = value.trim(); return (
{showHeader && ( <>

{t("hostDetails.notes.label")}

{t("hostDetails.notes.help")}

)} setTab(v as "edit" | "preview")}> {t("hostDetails.notes.tab.edit")} {t("hostDetails.notes.tab.preview")}