import { Button } from "@mui/joy"; import classNames from "classnames"; import { useEffect, useRef, useState } from "react"; import Empty from "@/components/Empty"; import { ExploreSidebar, ExploreSidebarDrawer } from "@/components/ExploreSidebar"; import Icon from "@/components/Icon"; 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 { useMemoList, useMemoStore } from "@/store/v1"; import { useTranslate } from "@/utils/i18n"; const Explore = () => { const t = useTranslate(); const { md } = useResponsiveWidth(); const user = useCurrentUser(); const memoStore = useMemoStore(); const memoList = useMemoList(); const [isRequesting, setIsRequesting] = useState(true); const nextPageTokenRef = useRef(undefined); const { tag: tagQuery, text: textQuery } = useFilterWithUrlParams(); const sortedMemos = memoList.value.sort((a, b) => getTimeStampByDate(b.displayTime) - getTimeStampByDate(a.displayTime)); useEffect(() => { nextPageTokenRef.current = undefined; memoList.reset(); fetchMemos(); }, [tagQuery, textQuery]); const fetchMemos = async () => { const filters = [`row_status == "NORMAL"`, `visibilities == [${user ? "'PUBLIC', 'PROTECTED'" : "'PUBLIC'"}]`]; const contentSearch: string[] = []; if (tagQuery) { contentSearch.push(JSON.stringify(`#${tagQuery}`)); } if (textQuery) { contentSearch.push(JSON.stringify(textQuery)); } if (contentSearch.length > 0) { filters.push(`content_search == [${contentSearch.join(", ")}]`); } setIsRequesting(true); const data = await memoStore.fetchMemos({ pageSize: DEFAULT_LIST_MEMOS_PAGE_SIZE, filter: filters.join(" && "), pageToken: nextPageTokenRef.current, }); setIsRequesting(false); nextPageTokenRef.current = data.nextPageToken; }; return (
{!md && ( )}
{sortedMemos.map((memo) => ( ))} {isRequesting ? (

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

) : !nextPageTokenRef.current ? ( sortedMemos.length === 0 && (

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

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