diff --git a/web/src/components/TimelineSidebar/TimelineSidebar.tsx b/web/src/components/TimelineSidebar/TimelineSidebar.tsx
index 90c4de49..eb6bd1a8 100644
--- a/web/src/components/TimelineSidebar/TimelineSidebar.tsx
+++ b/web/src/components/TimelineSidebar/TimelineSidebar.tsx
@@ -1,12 +1,16 @@
import clsx from "clsx";
+import useCurrentUser from "@/hooks/useCurrentUser";
import TagsSection from "../HomeSidebar/TagsSection";
import SearchBar from "../SearchBar";
+import UserStatisticsView from "../UserStatisticsView";
interface Props {
className?: string;
}
const TimelineSidebar = (props: Props) => {
+ const currentUser = useCurrentUser();
+
return (
);
diff --git a/web/src/components/UserStatisticsView.tsx b/web/src/components/UserStatisticsView.tsx
index b17aa3b5..d6b4663f 100644
--- a/web/src/components/UserStatisticsView.tsx
+++ b/web/src/components/UserStatisticsView.tsx
@@ -29,10 +29,6 @@ const UserStatisticsView = (props: Props) => {
const memos = Object.values(memoStore.getState().memoMapByName);
useEffect(() => {
- if (memos.length === 0) {
- return;
- }
-
(async () => {
setIsRequesting(true);
const { properties } = await memoServiceClient.listMemoProperties({
diff --git a/web/src/pages/Home.tsx b/web/src/pages/Home.tsx
index 60b1e227..95dbb97c 100644
--- a/web/src/pages/Home.tsx
+++ b/web/src/pages/Home.tsx
@@ -1,6 +1,7 @@
import { Button } from "@mui/joy";
import clsx from "clsx";
import { useEffect, useState } from "react";
+import { useLocalStorage } from "react-use";
import Empty from "@/components/Empty";
import { HomeSidebar, HomeSidebarDrawer } from "@/components/HomeSidebar";
import Icon from "@/components/Icon";
@@ -13,6 +14,7 @@ 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";
@@ -23,6 +25,7 @@ const Home = () => {
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();
@@ -31,6 +34,10 @@ const Home = () => {
.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("");
diff --git a/web/src/pages/RootRedirector.tsx b/web/src/pages/RootRedirector.tsx
new file mode 100644
index 00000000..d1632b50
--- /dev/null
+++ b/web/src/pages/RootRedirector.tsx
@@ -0,0 +1,20 @@
+import { useEffect } from "react";
+import useLocalStorage from "react-use/lib/useLocalStorage";
+import useNavigateTo from "@/hooks/useNavigateTo";
+
+const RootRedirector: React.FC = () => {
+ const [lastVisited] = useLocalStorage("lastVisited", "/home");
+ const navigateTo = useNavigateTo();
+
+ useEffect(() => {
+ if (lastVisited === "/home" || lastVisited === "/timeline") {
+ navigateTo(lastVisited);
+ } else {
+ navigateTo("/home");
+ }
+ }, []);
+
+ return <>>;
+};
+
+export default RootRedirector;
diff --git a/web/src/pages/Timeline.tsx b/web/src/pages/Timeline.tsx
index 432028f2..d986e8f5 100644
--- a/web/src/pages/Timeline.tsx
+++ b/web/src/pages/Timeline.tsx
@@ -2,6 +2,7 @@ import { Button, IconButton } from "@mui/joy";
import clsx from "clsx";
import dayjs from "dayjs";
import { useEffect, useState } from "react";
+import { useLocalStorage } from "react-use";
import ActivityCalendar from "@/components/ActivityCalendar";
import Empty from "@/components/Empty";
import Icon from "@/components/Icon";
@@ -17,6 +18,7 @@ import useCurrentUser from "@/hooks/useCurrentUser";
import useFilterWithUrlParams from "@/hooks/useFilterWithUrlParams";
import useResponsiveWidth from "@/hooks/useResponsiveWidth";
import i18n from "@/i18n";
+import { Routes } from "@/router";
import { useMemoList, useMemoStore } from "@/store/v1";
import { useTranslate } from "@/utils/i18n";
@@ -26,6 +28,7 @@ const Timeline = () => {
const user = useCurrentUser();
const memoStore = useMemoStore();
const memoList = useMemoList();
+ const [, setLastVisited] = useLocalStorage("lastVisited", Routes.TIMELINE);
const { tag: tagQuery, text: textQuery } = useFilterWithUrlParams();
const [activityStats, setActivityStats] = useState>({});
const [selectedDateString, setSelectedDateString] = useState(new Date().toDateString());
@@ -34,6 +37,10 @@ const Timeline = () => {
const sortedMemos = memoList.value.sort((a, b) => getTimeStampByDate(a.displayTime) - getTimeStampByDate(b.displayTime));
const monthString = dayjs(selectedDateString).format("YYYY-MM");
+ useEffect(() => {
+ setLastVisited(Routes.TIMELINE);
+ }, []);
+
useEffect(() => {
memoList.reset();
fetchMemos("");
diff --git a/web/src/router/index.tsx b/web/src/router/index.tsx
index 168aa5b3..58bc443b 100644
--- a/web/src/router/index.tsx
+++ b/web/src/router/index.tsx
@@ -12,6 +12,7 @@ import MemoDetail from "@/pages/MemoDetail";
import NotFound from "@/pages/NotFound";
import PermissionDenied from "@/pages/PermissionDenied";
import Resources from "@/pages/Resources";
+import RootRedirector from "@/pages/RootRedirector";
import Setting from "@/pages/Setting";
import SignIn from "@/pages/SignIn";
import SignUp from "@/pages/SignUp";
@@ -19,7 +20,8 @@ import Timeline from "@/pages/Timeline";
import UserProfile from "@/pages/UserProfile";
export enum Routes {
- HOME = "/",
+ ROOT = "/",
+ HOME = "/home",
TIMELINE = "/timeline",
RESOURCES = "/resources",
INBOX = "/inbox",
@@ -57,6 +59,10 @@ const router = createBrowserRouter([
path: "/",
element: ,
children: [
+ {
+ path: Routes.ROOT,
+ element: ,
+ },
{
path: Routes.HOME,
element: ,