import { Button, Tooltip } from "@mui/joy"; import { ClientError } from "nice-grpc-web"; import { useEffect, useState } from "react"; import toast from "react-hot-toast"; import Empty from "@/components/Empty"; import Icon from "@/components/Icon"; import MemoContent from "@/components/MemoContent"; import MobileHeader from "@/components/MobileHeader"; import SearchBar from "@/components/SearchBar"; import { DEFAULT_LIST_MEMOS_PAGE_SIZE } from "@/helpers/consts"; import { getTimeStampByDate } from "@/helpers/datetime"; import useCurrentUser from "@/hooks/useCurrentUser"; import useFilterWithUrlParams from "@/hooks/useFilterWithUrlParams"; import { useMemoList, 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 memoList = useMemoList(); const [isRequesting, setIsRequesting] = useState(true); const [nextPageToken, setNextPageToken] = useState(""); const { tag: tagQuery, text: textQuery } = useFilterWithUrlParams(); const sortedMemos = memoList.value .filter((memo) => memo.rowStatus === RowStatus.ARCHIVED) .sort((a, b) => getTimeStampByDate(b.displayTime) - getTimeStampByDate(a.displayTime)); useEffect(() => { memoList.reset(); fetchMemos(""); }, [tagQuery, textQuery]); const fetchMemos = async (nextPageToken: string) => { setIsRequesting(true); const filters = [`creator == "${user.name}"`, `row_status == "ARCHIVED"`]; const contentSearch: string[] = []; if (textQuery) { contentSearch.push(JSON.stringify(textQuery)); } if (contentSearch.length > 0) { filters.push(`content_search == [${contentSearch.join(", ")}]`); } if (tagQuery) { filters.push(`tag == "${tagQuery}"`); } const response = await memoStore.fetchMemos({ pageSize: DEFAULT_LIST_MEMOS_PAGE_SIZE, filter: filters.join(" && "), pageToken: nextPageToken, }); setIsRequesting(false); setNextPageToken(response.nextPageToken); }; 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")}
{sortedMemos.map((memo) => (
))} {isRequesting ? (

{t("memo.fetching-data")}

) : !nextPageToken ? ( sortedMemos.length === 0 && (

{t("message.no-data")}

) ) : (
)}
); }; export default Archived;