import dayjs from "dayjs"; import { last } from "lodash-es"; import { useEffect, useRef, useState } from "react"; import toast from "react-hot-toast"; import { useTranslation } from "react-i18next"; import { useMemoStore, useUserStore } from "@/store/module"; import { DAILY_TIMESTAMP, DEFAULT_MEMO_LIMIT } from "@/helpers/consts"; import * as utils from "@/helpers/utils"; import MobileHeader from "@/components/MobileHeader"; import useToggle from "@/hooks/useToggle"; import toImage from "@/labs/html2image"; import showPreviewImageDialog from "@/components/PreviewImageDialog"; import Icon from "@/components/Icon"; import DatePicker from "@/components/kit/DatePicker"; import DailyMemo from "@/components/DailyMemo"; const DailyReview = () => { const { t } = useTranslation(); const memoStore = useMemoStore(); const memos = memoStore.state.memos; const userStore = useUserStore(); const { localSetting } = userStore.state.user as User; const [currentDateStamp, setCurrentDateStamp] = useState(utils.getDateStampByDate(utils.getDateString(Date.now()))); const [showDatePicker, toggleShowDatePicker] = useToggle(false); const memosElRef = useRef(null); const currentDate = new Date(currentDateStamp); const dailyMemos = memos .filter((m) => { const createdTimestamp = utils.getTimeStampByDate(m.createdTs); const currentDateStampWithOffset = currentDateStamp + utils.convertToMillis(localSetting); return ( m.rowStatus === "NORMAL" && createdTimestamp >= currentDateStampWithOffset && createdTimestamp < currentDateStampWithOffset + DAILY_TIMESTAMP ); }) .sort((a, b) => utils.getTimeStampByDate(a.createdTs) - utils.getTimeStampByDate(b.createdTs)); useEffect(() => { const fetchMoreMemos = async () => { try { const fetchedMemos = await memoStore.fetchMemos(); if (fetchedMemos.length === DEFAULT_MEMO_LIMIT) { const lastMemo = last(fetchedMemos); if (lastMemo && lastMemo.createdTs > currentDateStamp) { await fetchMoreMemos(); } } } catch (error: any) { console.error(error); toast.error(error.response.data.message); } }; fetchMoreMemos(); }, [currentDateStamp]); const handleShareBtnClick = () => { if (!memosElRef.current) { return; } toggleShowDatePicker(false); toImage(memosElRef.current, { pixelRatio: window.devicePixelRatio * 2, }) .then((url) => { showPreviewImageDialog(url); }) .catch(() => { // do nth }); }; const handleDataPickerChange = (datestamp: DateStamp): void => { setCurrentDateStamp(datestamp); toggleShowDatePicker(false); }; const currentMonth = dayjs().format("MMM"); const currentDayOfWeek = dayjs().format("ddd"); return (

toggleShowDatePicker()} > {t("daily-review.title")}

{currentDate.getFullYear()}
{currentMonth[0].toUpperCase() + currentMonth.substring(1)}
{currentDate.getDate()}
{currentDayOfWeek[0].toUpperCase() + currentDayOfWeek.substring(1)}
{dailyMemos.length === 0 ? (

Oops, there is nothing.

) : (
{dailyMemos.map((memo) => ( ))}
)}
); }; export default DailyReview;