"use client" import { useMemo, useState } from "react" import { Search, X, FolderOpen } from "lucide-react" import { formatDistanceToNow } from "date-fns" import { enUS, zhCN, zhTW } from "date-fns/locale" import { useLocale, useTranslations } from "next-intl" import { toast } from "sonner" import { openFolderWindow, removeFolderFromHistory } from "@/lib/api" import type { FolderHistoryEntry } from "@/lib/types" import { Input } from "@/components/ui/input" import { resolveWelcomeError } from "@/components/welcome/error-utils" interface FolderListProps { history: FolderHistoryEntry[] loading: boolean onRefresh: () => void } export function FolderList({ history, loading, onRefresh }: FolderListProps) { const t = useTranslations("WelcomePage") const locale = useLocale() const [search, setSearch] = useState("") const dateFnsLocale = locale === "zh-CN" ? zhCN : locale === "zh-TW" ? zhTW : enUS const filtered = useMemo(() => { if (!search) return history const lowerCaseSearch = search.toLowerCase() return history.filter( (h) => h.name.toLowerCase().includes(lowerCaseSearch) || h.path.toLowerCase().includes(lowerCaseSearch) ) }, [history, search]) const handleOpen = async (path: string) => { try { await openFolderWindow(path) } catch (err) { console.error("Failed to open folder:", err) const resolvedError = resolveWelcomeError(err) toast.error(t("toasts.openFolderFailed"), { description: resolvedError.detail ?? t(resolvedError.key), }) } } const handleRemove = async (e: React.MouseEvent, path: string) => { e.stopPropagation() try { await removeFolderFromHistory(path) onRefresh() } catch (err) { console.error("Failed to remove folder:", err) const resolvedError = resolveWelcomeError(err) toast.error(t("toasts.removeFromHistoryFailed"), { description: resolvedError.detail ?? t(resolvedError.key), }) } } return (