diff --git a/web/src/components/DailyMemo.tsx b/web/src/components/DailyMemo.tsx deleted file mode 100644 index 42170c82..00000000 --- a/web/src/components/DailyMemo.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { getTimeString } from "@/helpers/datetime"; -import MemoContent from "./MemoContent"; -import MemoResourceListView from "./MemoResourceListView"; -import "@/less/daily-memo.less"; - -interface Props { - memo: Memo; -} - -const DailyMemo: React.FC = (props: Props) => { - const { memo } = props; - const displayTimeStr = getTimeString(memo.displayTs); - - return ( -
-
- {displayTimeStr} -
-
- - -
-
-
- ); -}; - -export default DailyMemo; diff --git a/web/src/components/kit/DatePicker.tsx b/web/src/components/kit/DatePicker.tsx index dc9a81e5..5964e7d4 100644 --- a/web/src/components/kit/DatePicker.tsx +++ b/web/src/components/kit/DatePicker.tsx @@ -86,13 +86,13 @@ const DatePicker: React.FC = (props: DatePickerProps) => {
+ {t("days.sun")} {t("days.mon")} {t("days.tue")} {t("days.wed")} {t("days.thu")} {t("days.fri")} {t("days.sat")} - {t("days.sun")}
{dayList.map((d) => { diff --git a/web/src/helpers/datetime.ts b/web/src/helpers/datetime.ts index c801d58e..88bc8c13 100644 --- a/web/src/helpers/datetime.ts +++ b/web/src/helpers/datetime.ts @@ -1,10 +1,5 @@ import i18n from "@/i18n"; -export function convertToMillis(localSetting: LocalSetting) { - const hoursToMillis = localSetting.dailyReviewTimeOffset * 60 * 60 * 1000; - return hoursToMillis; -} - export function getTimeStampByDate(t: Date | number | string | any): number { return new Date(t).getTime(); } @@ -172,21 +167,6 @@ export function getNormalizedTimeString(t?: Date | number | string): string { return `${yyyy}-${MM}-${dd}T${hh}:${mm}`; } -/** - * This returns the number of **milliseconds** since the Unix Epoch of the provided date. - * - * If no date is provided, the current date is used. - * - * ``` - * getUnixTimeMillis("2019-01-25 00:00") // 1548381600000 - * ``` - * To get a Unix timestamp (the number of seconds since the epoch), use `getUnixTime()`. - */ -export function getUnixTimeMillis(t?: Date | number | string): number { - const date = new Date(t ? t : Date.now()); - return date.getTime(); -} - /** * This returns the Unix timestamp (the number of **seconds** since the Unix Epoch) of the provided date. * diff --git a/web/src/less/daily-memo.less b/web/src/less/daily-memo.less deleted file mode 100644 index 62d45c57..00000000 --- a/web/src/less/daily-memo.less +++ /dev/null @@ -1,31 +0,0 @@ -.daily-memo-wrapper { - @apply flex flex-row justify-start items-start relative w-full flex-nowrap pb-6; - - &:last-child { - > .split-line { - @apply hidden; - } - } - - > .split-line { - @apply h-full px-px bg-gray-50 dark:bg-zinc-600 absolute top-1 left-6 -ml-px; - } - - > .time-wrapper { - @apply mt-px mr-4 w-12 h-7 shrink-0 text-xs leading-6 text-center font-mono rounded-lg bg-gray-100 dark:bg-zinc-600 border-2 border-white z-1 dark:border-zinc-700 text-gray-600 dark:text-gray-300; - } - - > .memo-container { - @apply w-full overflow-x-hidden flex flex-col justify-start items-start; - - .memo-content-text { - @apply mt-1; - } - - > .resource-wrapper { - > .images-wrapper { - @apply !grid-cols-2; - } - } - } -} diff --git a/web/src/pages/DailyReview.tsx b/web/src/pages/DailyReview.tsx index bf4158e0..aa919df4 100644 --- a/web/src/pages/DailyReview.tsx +++ b/web/src/pages/DailyReview.tsx @@ -1,22 +1,21 @@ -import classNames from "classnames"; +import { Button } from "@mui/joy"; import { last } from "lodash-es"; -import { useEffect, useRef } from "react"; +import { useEffect, useState } from "react"; import toast from "react-hot-toast"; -import useSessionStorage from "react-use/lib/useSessionStorage"; import useToggle from "react-use/lib/useToggle"; -import DailyMemo from "@/components/DailyMemo"; import Empty from "@/components/Empty"; import Icon from "@/components/Icon"; +import MemoContent from "@/components/MemoContent"; +import MemoEditor from "@/components/MemoEditor"; +import MemoRelationListView from "@/components/MemoRelationListView"; +import MemoResourceListView from "@/components/MemoResourceListView"; import MobileHeader from "@/components/MobileHeader"; -import showPreviewImageDialog from "@/components/PreviewImageDialog"; import DatePicker from "@/components/kit/DatePicker"; import { DAILY_TIMESTAMP, DEFAULT_MEMO_LIMIT } from "@/helpers/consts"; -import { convertToMillis, getDateStampByDate, getNormalizedDateString, getTimeStampByDate, isFutureDate } from "@/helpers/datetime"; +import { getDateStampByDate, getNormalizedDateString, getTimeStampByDate, getTimeString } from "@/helpers/datetime"; import useCurrentUser from "@/hooks/useCurrentUser"; -import i18n from "@/i18n"; -import toImage from "@/labs/html2image"; import { useMemoStore, useUserStore } from "@/store/module"; -import { findNearestLanguageMatch, useTranslate } from "@/utils/i18n"; +import { useTranslate } from "@/utils/i18n"; const DailyReview = () => { const t = useTranslate(); @@ -24,23 +23,18 @@ const DailyReview = () => { const userStore = useUserStore(); const user = useCurrentUser(); const { localSetting } = userStore.state.user as User; - const [currentDateStampRaw, setCurrentDateStamp] = useSessionStorage( - "daily-review-datestamp", - getDateStampByDate(getNormalizedDateString()) - ); - const currentDateStamp = currentDateStampRaw as number; + const currentDateStamp = getDateStampByDate(getNormalizedDateString()) as number; + const [selectedDateStamp, setSelectedDateStamp] = useState(currentDateStamp as number); const [showDatePicker, toggleShowDatePicker] = useToggle(false); - const memosElRef = useRef(null); - const currentDate = new Date(currentDateStamp); const dailyMemos = memoStore.state.memos .filter((m) => { const displayTimestamp = getTimeStampByDate(m.displayTs); - const currentDateStampWithOffset = currentDateStamp + convertToMillis(localSetting); + const selectedDateStampWithOffset = selectedDateStamp + localSetting.dailyReviewTimeOffset * 60 * 60 * 1000; return ( m.rowStatus === "NORMAL" && m.creatorUsername === user.username && - displayTimestamp >= currentDateStampWithOffset && - displayTimestamp < currentDateStampWithOffset + DAILY_TIMESTAMP + displayTimestamp >= selectedDateStampWithOffset && + displayTimestamp < selectedDateStampWithOffset + DAILY_TIMESTAMP ); }) .sort((a, b) => getTimeStampByDate(a.displayTs) - getTimeStampByDate(b.displayTs)); @@ -53,7 +47,7 @@ const DailyReview = () => { offset += fetchedMemos.length; if (fetchedMemos.length === DEFAULT_MEMO_LIMIT) { const lastMemo = last(fetchedMemos); - if (lastMemo && lastMemo.displayTs > currentDateStamp) { + if (lastMemo && lastMemo.displayTs > selectedDateStamp) { await fetchMoreMemos(); } } @@ -63,36 +57,13 @@ const DailyReview = () => { } }; fetchMoreMemos(); - }, [currentDateStamp]); - - const handleShareBtnClick = () => { - if (!memosElRef.current) { - return; - } - - toggleShowDatePicker(false); - - toImage(memosElRef.current, { - pixelRatio: window.devicePixelRatio * 2, - }) - .then((url) => { - showPreviewImageDialog(url); - }) - .catch(() => { - // do nth - }); - }; + }, [selectedDateStamp]); const handleDataPickerChange = (datestamp: number): void => { - setCurrentDateStamp(datestamp); + setSelectedDateStamp(datestamp); toggleShowDatePicker(false); }; - const locale = findNearestLanguageMatch(i18n.language); - const currentMonth = currentDate.toLocaleDateString(locale, { month: "short" }); - const currentDayOfWeek = currentDate.toLocaleDateString(locale, { weekday: "short" }); - const isFutureDateDisabled = isFutureDate(currentDateStamp + DAILY_TIMESTAMP); - return (
@@ -102,69 +73,62 @@ const DailyReview = () => { className="px-2 py-1 flex flex-row justify-start items-center cursor-pointer select-none rounded opacity-80 hover:bg-gray-100 dark:hover:bg-zinc-700" onClick={() => toggleShowDatePicker()} > - {t("daily-review.title")} + + {new Date(selectedDateStamp).toLocaleDateString()}

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

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

- ) : ( -
- {dailyMemos.map((memo) => ( - - ))} -
)} +
+ {dailyMemos.map((memo, index) => ( +
+
+ {getTimeString(memo.displayTs)} + + #{memo.id} +
+ + + relation.type === "REFERENCE")} /> +
+ + {index !== dailyMemos.length - 1 && ( +
+ )} +
+
+ ))} + +
+ {selectedDateStamp === currentDateStamp ? ( +
+ +
+ ) : ( +
+ +
+ )} +
+