import { Tooltip } from "@mui/joy"; import dayjs from "dayjs"; import { ArchiveIcon, ArchiveRestoreIcon, TrashIcon } from "lucide-react"; import { ClientError } from "nice-grpc-web"; import { useMemo } from "react"; import toast from "react-hot-toast"; import MemoContent from "@/components/MemoContent"; import MemoFilters from "@/components/MemoFilters"; import MobileHeader from "@/components/MobileHeader"; import PagedMemoList from "@/components/PagedMemoList"; import SearchBar from "@/components/SearchBar"; import useCurrentUser from "@/hooks/useCurrentUser"; import { useMemoFilterStore, useMemoStore } from "@/store/v1"; import { RowStatus } from "@/types/proto/api/v1/common"; import { Memo } from "@/types/proto/api/v1/memo_service"; import { useTranslate } from "@/utils/i18n"; const Archived = () => { const t = useTranslate(); const user = useCurrentUser(); const memoStore = useMemoStore(); const memoFilterStore = useMemoFilterStore(); const memoListFilter = useMemo(() => { const filters = [`creator == "${user.name}"`, `row_status == "ARCHIVED"`]; const contentSearch: string[] = []; const tagSearch: string[] = []; for (const filter of memoFilterStore.filters) { if (filter.factor === "contentSearch") { contentSearch.push(`"${filter.value}"`); } else if (filter.factor === "tagSearch") { tagSearch.push(`"${filter.value}"`); } } if (memoFilterStore.orderByTimeAsc) { filters.push(`order_by_time_asc == true`); } if (contentSearch.length > 0) { filters.push(`content_search == [${contentSearch.join(", ")}]`); } if (tagSearch.length > 0) { filters.push(`tag_search == [${tagSearch.join(", ")}]`); } return filters.join(" && "); }, [user, memoFilterStore.filters]); const handleDeleteMemoClick = async (memo: Memo) => { const confirmed = window.confirm(t("memo.delete-confirm")); if (confirmed) { await memoStore.deleteMemo(memo.name); } }; const handleRestoreMemoClick = async (memo: Memo) => { try { await memoStore.updateMemo( { name: memo.name, rowStatus: RowStatus.ACTIVE, }, ["row_status"], ); toast(t("message.restored-successfully")); } catch (error: unknown) { console.error(error); toast.error((error as ClientError).details); } }; return (
{t("common.archived")}
(
)} listSort={(memos: Memo[]) => memos .filter((memo) => memo.rowStatus === RowStatus.ARCHIVED) .sort((a, b) => memoFilterStore.orderByTimeAsc ? dayjs(a.displayTime).unix() - dayjs(b.displayTime).unix() : dayjs(b.displayTime).unix() - dayjs(a.displayTime).unix(), ) } filter={memoListFilter} />
); }; export default Archived;