From 25efc33b24bb8853aabc2dd9252febca3ab963e8 Mon Sep 17 00:00:00 2001 From: Steven Date: Mon, 5 Feb 2024 21:37:43 +0800 Subject: [PATCH] chore: tweak timeline styles --- web/src/components/TimelineSidebar.tsx | 23 ++++ web/src/components/TimelineSidebarDrawer.tsx | 37 +++++ web/src/pages/Timeline.tsx | 137 ++++++++++--------- web/vite.config.ts | 2 +- 4 files changed, 134 insertions(+), 65 deletions(-) create mode 100644 web/src/components/TimelineSidebar.tsx create mode 100644 web/src/components/TimelineSidebarDrawer.tsx diff --git a/web/src/components/TimelineSidebar.tsx b/web/src/components/TimelineSidebar.tsx new file mode 100644 index 00000000..483e12d6 --- /dev/null +++ b/web/src/components/TimelineSidebar.tsx @@ -0,0 +1,23 @@ +import classNames from "classnames"; +import SearchBar from "./SearchBar"; +import TagList from "./TagList"; + +interface Props { + className?: string; +} + +const TimelineSidebar = (props: Props) => { + return ( + + ); +}; + +export default TimelineSidebar; diff --git a/web/src/components/TimelineSidebarDrawer.tsx b/web/src/components/TimelineSidebarDrawer.tsx new file mode 100644 index 00000000..a281f99f --- /dev/null +++ b/web/src/components/TimelineSidebarDrawer.tsx @@ -0,0 +1,37 @@ +import { Drawer, IconButton } from "@mui/joy"; +import { useEffect, useState } from "react"; +import { useLocation } from "react-router-dom"; +import Icon from "./Icon"; +import TimelineSidebar from "./TimelineSidebar"; + +const TimelineSidebarDrawer = () => { + const location = useLocation(); + const [open, setOpen] = useState(false); + + useEffect(() => { + setOpen(false); + }, [location.pathname]); + + const toggleDrawer = (inOpen: boolean) => (event: React.KeyboardEvent | React.MouseEvent) => { + if (event.type === "keydown" && ((event as React.KeyboardEvent).key === "Tab" || (event as React.KeyboardEvent).key === "Shift")) { + return; + } + + setOpen(inOpen); + }; + + return ( + <> + + + + +
+ +
+
+ + ); +}; + +export default TimelineSidebarDrawer; diff --git a/web/src/pages/Timeline.tsx b/web/src/pages/Timeline.tsx index d5868456..0bac270b 100644 --- a/web/src/pages/Timeline.tsx +++ b/web/src/pages/Timeline.tsx @@ -1,6 +1,5 @@ import { Button, Divider, IconButton } from "@mui/joy"; import classNames from "classnames"; -import { sum } from "lodash-es"; import { Fragment, useEffect, useRef, useState } from "react"; import ActivityCalendar from "@/components/ActivityCalendar"; import Empty from "@/components/Empty"; @@ -9,6 +8,8 @@ import showMemoEditorDialog from "@/components/MemoEditor/MemoEditorDialog"; import MemoFilter from "@/components/MemoFilter"; import MemoView from "@/components/MemoView"; import MobileHeader from "@/components/MobileHeader"; +import TimelineSidebar from "@/components/TimelineSidebar"; +import TimelineSidebarDrawer from "@/components/TimelineSidebarDrawer"; import { memoServiceClient } from "@/grpcweb"; import { DAILY_TIMESTAMP, DEFAULT_MEMO_LIMIT } from "@/helpers/consts"; import { getNormalizedTimeString, getTimeStampByDate } from "@/helpers/datetime"; @@ -120,50 +121,53 @@ const Timeline = () => { return (
- -
-
-
-
-
setSelectedDay(undefined)} - > - - {t("timeline.title")} + {!md && ( + + + + )} +
+
+
+
+
+
setSelectedDay(undefined)} + > + + {t("timeline.title")} +
+
+
+ handleNewMemo()}> + +
-
- handleNewMemo()}> - - -
-
-
- +
+ - {groupedByMonth.map((group, index) => ( - -
-
-
- - {new Date(group.month).toLocaleString(i18n.language, { month: "short", timeZone: "UTC" })} - - {new Date(group.month).getUTCFullYear()} - Total: {sum(Object.values(group.data))} + {groupedByMonth.map((group, index) => ( + +
+
+
+ + {new Date(group.month).toLocaleString(i18n.language, { month: "short", timeZone: "UTC" })} + + {new Date(group.month).getUTCFullYear()} +
+ setSelectedDay(date)} />
- setSelectedDay(date)} /> -
-
- {group.memos.map((memo, index) => ( -
- - {group.memos.length > 1 && ( +
+ {group.memos.map((memo, index) => ( +
+
{index !== group.memos.length - 1 && (
@@ -172,35 +176,40 @@ const Timeline = () => {
- )} -
- ))} +
+ ))} +
+ {index !== groupedByMonth.length - 1 && } + + ))} + {isRequesting ? ( +
+ +

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

- {index !== groupedByMonth.length - 1 && } - - ))} - {isRequesting ? ( -
- -

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

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

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

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

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

+
+ ) + ) : ( +
+
- ) - ) : ( -
- -
- )} + )} +
+ {md && ( +
+ +
+ )}
); diff --git a/web/vite.config.ts b/web/vite.config.ts index d668b71c..92b64aed 100644 --- a/web/vite.config.ts +++ b/web/vite.config.ts @@ -2,7 +2,7 @@ import react from "@vitejs/plugin-react"; import { resolve } from "path"; import { defineConfig } from "vite"; -let devProxyServer = "http://localhost:8081/"; +let devProxyServer = "http://localhost:8081"; if (process.env.DEV_PROXY_SERVER && process.env.DEV_PROXY_SERVER.length > 0) { console.log("Use devProxyServer from environment: ", process.env.DEV_PROXY_SERVER); devProxyServer = process.env.DEV_PROXY_SERVER;