import { Button } from "@mui/joy"; import clsx from "clsx"; import { useEffect, useState } from "react"; import useLocalStorage from "react-use/lib/useLocalStorage"; import Empty from "@/components/Empty"; import { HomeSidebar, HomeSidebarDrawer } from "@/components/HomeSidebar"; import Icon from "@/components/Icon"; import MemoEditor from "@/components/MemoEditor"; import MemoFilter from "@/components/MemoFilter"; import MemoView from "@/components/MemoView"; import MobileHeader from "@/components/MobileHeader"; 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 useResponsiveWidth from "@/hooks/useResponsiveWidth"; import { Routes } from "@/router"; import { useMemoList, useMemoStore } from "@/store/v1"; import { RowStatus } from "@/types/proto/api/v1/common"; import { useTranslate } from "@/utils/i18n"; const Home = () => { const t = useTranslate(); const { md } = useResponsiveWidth(); const user = useCurrentUser(); const memoStore = useMemoStore(); const memoList = useMemoList(); const [, setLastVisited] = useLocalStorage("lastVisited", Routes.HOME); const [isRequesting, setIsRequesting] = useState(true); const [nextPageToken, setNextPageToken] = useState(""); const filter = useFilterWithUrlParams(); const sortedMemos = memoList.value .filter((memo) => memo.rowStatus === RowStatus.ACTIVE) .sort((a, b) => getTimeStampByDate(b.displayTime) - getTimeStampByDate(a.displayTime)) .sort((a, b) => Number(b.pinned) - Number(a.pinned)); useEffect(() => { setLastVisited(Routes.HOME); }, []); useEffect(() => { memoList.reset(); fetchMemos(""); }, [filter.tag, filter.text, filter.memoPropertyFilter]); const fetchMemos = async (nextPageToken: string) => { setIsRequesting(true); const filters = [`creator == "${user.name}"`, `row_status == "NORMAL"`, `order_by_pinned == true`]; const contentSearch: string[] = []; if (filter.tag) { contentSearch.push(JSON.stringify(filter.tag)); } if (contentSearch.length > 0) { filters.push(`content_search == [${contentSearch.join(", ")}]`); } if (filter.text) { filters.push(`tag == "${filter.text}"`); } if (filter.memoPropertyFilter) { if (filter.memoPropertyFilter.hasLink) { filters.push(`has_link == true`); } if (filter.memoPropertyFilter.hasTaskList) { filters.push(`has_task_list == true`); } if (filter.memoPropertyFilter.hasCode) { filters.push(`has_code == true`); } } const response = await memoStore.fetchMemos({ pageSize: DEFAULT_LIST_MEMOS_PAGE_SIZE, filter: filters.join(" && "), pageToken: nextPageToken, }); setIsRequesting(false); setNextPageToken(response.nextPageToken); }; return (
{!md && ( )}
{sortedMemos.map((memo) => ( ))} {isRequesting ? (

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

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

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

) ) : (
)}
{md && (
)}
); }; export default Home;