import { timestampDate } from "@bufbuild/protobuf/wkt"; import { LinkIcon } from "lucide-react"; import { MemoPreview } from "@/components/MemoPreview"; import { Dialog, DialogClose, DialogContent, DialogDescription, DialogTitle } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { VisuallyHidden } from "@/components/ui/visually-hidden"; import { cn } from "@/lib/utils"; import type { Memo } from "@/types/proto/api/v1/memo_service_pb"; import { useTranslate } from "@/utils/i18n"; interface LinkMemoDialogProps { open: boolean; onOpenChange: (open: boolean) => void; searchText: string; onSearchChange: (text: string) => void; filteredMemos: Memo[]; isFetching: boolean; onSelectMemo: (memo: Memo) => void; isAlreadyLinked: (memoName: string) => boolean; } export const LinkMemoDialog = ({ open, onOpenChange, searchText, onSearchChange, filteredMemos, isFetching, onSelectMemo, isAlreadyLinked, }: LinkMemoDialogProps) => { const t = useTranslate(); return ( {t("tooltip.link-memo")} Search and select a memo to link
onSearchChange(e.target.value)} className="!text-sm h-9" autoFocus />
{filteredMemos.length === 0 ? (
{isFetching ? "Loading..." : t("reference.no-memos-found")}
) : ( filteredMemos.map((memo) => { const alreadyLinked = isAlreadyLinked(memo.name); return (
!alreadyLinked && onSelectMemo(memo)} >
{alreadyLinked && } {memo.displayTime && timestampDate(memo.displayTime).toLocaleString()}
); }) )}
); };