mirror of
https://github.com/usememos/memos.git
synced 2025-06-05 22:09:59 +02:00
chore: add last visited page
This commit is contained in:
@ -1,12 +1,16 @@
|
|||||||
import clsx from "clsx";
|
import clsx from "clsx";
|
||||||
|
import useCurrentUser from "@/hooks/useCurrentUser";
|
||||||
import TagsSection from "../HomeSidebar/TagsSection";
|
import TagsSection from "../HomeSidebar/TagsSection";
|
||||||
import SearchBar from "../SearchBar";
|
import SearchBar from "../SearchBar";
|
||||||
|
import UserStatisticsView from "../UserStatisticsView";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
className?: string;
|
className?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const TimelineSidebar = (props: Props) => {
|
const TimelineSidebar = (props: Props) => {
|
||||||
|
const currentUser = useCurrentUser();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<aside
|
<aside
|
||||||
className={clsx(
|
className={clsx(
|
||||||
@ -15,6 +19,7 @@ const TimelineSidebar = (props: Props) => {
|
|||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
<SearchBar />
|
<SearchBar />
|
||||||
|
<UserStatisticsView user={currentUser} />
|
||||||
<TagsSection />
|
<TagsSection />
|
||||||
</aside>
|
</aside>
|
||||||
);
|
);
|
||||||
|
@ -29,10 +29,6 @@ const UserStatisticsView = (props: Props) => {
|
|||||||
const memos = Object.values(memoStore.getState().memoMapByName);
|
const memos = Object.values(memoStore.getState().memoMapByName);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (memos.length === 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
setIsRequesting(true);
|
setIsRequesting(true);
|
||||||
const { properties } = await memoServiceClient.listMemoProperties({
|
const { properties } = await memoServiceClient.listMemoProperties({
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { Button } from "@mui/joy";
|
import { Button } from "@mui/joy";
|
||||||
import clsx from "clsx";
|
import clsx from "clsx";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
|
import { useLocalStorage } from "react-use";
|
||||||
import Empty from "@/components/Empty";
|
import Empty from "@/components/Empty";
|
||||||
import { HomeSidebar, HomeSidebarDrawer } from "@/components/HomeSidebar";
|
import { HomeSidebar, HomeSidebarDrawer } from "@/components/HomeSidebar";
|
||||||
import Icon from "@/components/Icon";
|
import Icon from "@/components/Icon";
|
||||||
@ -13,6 +14,7 @@ import { getTimeStampByDate } from "@/helpers/datetime";
|
|||||||
import useCurrentUser from "@/hooks/useCurrentUser";
|
import useCurrentUser from "@/hooks/useCurrentUser";
|
||||||
import useFilterWithUrlParams from "@/hooks/useFilterWithUrlParams";
|
import useFilterWithUrlParams from "@/hooks/useFilterWithUrlParams";
|
||||||
import useResponsiveWidth from "@/hooks/useResponsiveWidth";
|
import useResponsiveWidth from "@/hooks/useResponsiveWidth";
|
||||||
|
import { Routes } from "@/router";
|
||||||
import { useMemoList, useMemoStore } from "@/store/v1";
|
import { useMemoList, useMemoStore } from "@/store/v1";
|
||||||
import { RowStatus } from "@/types/proto/api/v1/common";
|
import { RowStatus } from "@/types/proto/api/v1/common";
|
||||||
import { useTranslate } from "@/utils/i18n";
|
import { useTranslate } from "@/utils/i18n";
|
||||||
@ -23,6 +25,7 @@ const Home = () => {
|
|||||||
const user = useCurrentUser();
|
const user = useCurrentUser();
|
||||||
const memoStore = useMemoStore();
|
const memoStore = useMemoStore();
|
||||||
const memoList = useMemoList();
|
const memoList = useMemoList();
|
||||||
|
const [, setLastVisited] = useLocalStorage<string>("lastVisited", Routes.HOME);
|
||||||
const [isRequesting, setIsRequesting] = useState(true);
|
const [isRequesting, setIsRequesting] = useState(true);
|
||||||
const [nextPageToken, setNextPageToken] = useState<string>("");
|
const [nextPageToken, setNextPageToken] = useState<string>("");
|
||||||
const filter = useFilterWithUrlParams();
|
const filter = useFilterWithUrlParams();
|
||||||
@ -31,6 +34,10 @@ const Home = () => {
|
|||||||
.sort((a, b) => getTimeStampByDate(b.displayTime) - getTimeStampByDate(a.displayTime))
|
.sort((a, b) => getTimeStampByDate(b.displayTime) - getTimeStampByDate(a.displayTime))
|
||||||
.sort((a, b) => Number(b.pinned) - Number(a.pinned));
|
.sort((a, b) => Number(b.pinned) - Number(a.pinned));
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setLastVisited(Routes.HOME);
|
||||||
|
}, []);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
memoList.reset();
|
memoList.reset();
|
||||||
fetchMemos("");
|
fetchMemos("");
|
||||||
|
20
web/src/pages/RootRedirector.tsx
Normal file
20
web/src/pages/RootRedirector.tsx
Normal file
@ -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<string>("lastVisited", "/home");
|
||||||
|
const navigateTo = useNavigateTo();
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (lastVisited === "/home" || lastVisited === "/timeline") {
|
||||||
|
navigateTo(lastVisited);
|
||||||
|
} else {
|
||||||
|
navigateTo("/home");
|
||||||
|
}
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return <></>;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default RootRedirector;
|
@ -2,6 +2,7 @@ import { Button, IconButton } from "@mui/joy";
|
|||||||
import clsx from "clsx";
|
import clsx from "clsx";
|
||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
|
import { useLocalStorage } from "react-use";
|
||||||
import ActivityCalendar from "@/components/ActivityCalendar";
|
import ActivityCalendar from "@/components/ActivityCalendar";
|
||||||
import Empty from "@/components/Empty";
|
import Empty from "@/components/Empty";
|
||||||
import Icon from "@/components/Icon";
|
import Icon from "@/components/Icon";
|
||||||
@ -17,6 +18,7 @@ import useCurrentUser from "@/hooks/useCurrentUser";
|
|||||||
import useFilterWithUrlParams from "@/hooks/useFilterWithUrlParams";
|
import useFilterWithUrlParams from "@/hooks/useFilterWithUrlParams";
|
||||||
import useResponsiveWidth from "@/hooks/useResponsiveWidth";
|
import useResponsiveWidth from "@/hooks/useResponsiveWidth";
|
||||||
import i18n from "@/i18n";
|
import i18n from "@/i18n";
|
||||||
|
import { Routes } from "@/router";
|
||||||
import { useMemoList, useMemoStore } from "@/store/v1";
|
import { useMemoList, useMemoStore } from "@/store/v1";
|
||||||
import { useTranslate } from "@/utils/i18n";
|
import { useTranslate } from "@/utils/i18n";
|
||||||
|
|
||||||
@ -26,6 +28,7 @@ const Timeline = () => {
|
|||||||
const user = useCurrentUser();
|
const user = useCurrentUser();
|
||||||
const memoStore = useMemoStore();
|
const memoStore = useMemoStore();
|
||||||
const memoList = useMemoList();
|
const memoList = useMemoList();
|
||||||
|
const [, setLastVisited] = useLocalStorage<string>("lastVisited", Routes.TIMELINE);
|
||||||
const { tag: tagQuery, text: textQuery } = useFilterWithUrlParams();
|
const { tag: tagQuery, text: textQuery } = useFilterWithUrlParams();
|
||||||
const [activityStats, setActivityStats] = useState<Record<string, number>>({});
|
const [activityStats, setActivityStats] = useState<Record<string, number>>({});
|
||||||
const [selectedDateString, setSelectedDateString] = useState<string>(new Date().toDateString());
|
const [selectedDateString, setSelectedDateString] = useState<string>(new Date().toDateString());
|
||||||
@ -34,6 +37,10 @@ const Timeline = () => {
|
|||||||
const sortedMemos = memoList.value.sort((a, b) => getTimeStampByDate(a.displayTime) - getTimeStampByDate(b.displayTime));
|
const sortedMemos = memoList.value.sort((a, b) => getTimeStampByDate(a.displayTime) - getTimeStampByDate(b.displayTime));
|
||||||
const monthString = dayjs(selectedDateString).format("YYYY-MM");
|
const monthString = dayjs(selectedDateString).format("YYYY-MM");
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setLastVisited(Routes.TIMELINE);
|
||||||
|
}, []);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
memoList.reset();
|
memoList.reset();
|
||||||
fetchMemos("");
|
fetchMemos("");
|
||||||
|
@ -12,6 +12,7 @@ import MemoDetail from "@/pages/MemoDetail";
|
|||||||
import NotFound from "@/pages/NotFound";
|
import NotFound from "@/pages/NotFound";
|
||||||
import PermissionDenied from "@/pages/PermissionDenied";
|
import PermissionDenied from "@/pages/PermissionDenied";
|
||||||
import Resources from "@/pages/Resources";
|
import Resources from "@/pages/Resources";
|
||||||
|
import RootRedirector from "@/pages/RootRedirector";
|
||||||
import Setting from "@/pages/Setting";
|
import Setting from "@/pages/Setting";
|
||||||
import SignIn from "@/pages/SignIn";
|
import SignIn from "@/pages/SignIn";
|
||||||
import SignUp from "@/pages/SignUp";
|
import SignUp from "@/pages/SignUp";
|
||||||
@ -19,7 +20,8 @@ import Timeline from "@/pages/Timeline";
|
|||||||
import UserProfile from "@/pages/UserProfile";
|
import UserProfile from "@/pages/UserProfile";
|
||||||
|
|
||||||
export enum Routes {
|
export enum Routes {
|
||||||
HOME = "/",
|
ROOT = "/",
|
||||||
|
HOME = "/home",
|
||||||
TIMELINE = "/timeline",
|
TIMELINE = "/timeline",
|
||||||
RESOURCES = "/resources",
|
RESOURCES = "/resources",
|
||||||
INBOX = "/inbox",
|
INBOX = "/inbox",
|
||||||
@ -57,6 +59,10 @@ const router = createBrowserRouter([
|
|||||||
path: "/",
|
path: "/",
|
||||||
element: <HomeLayout />,
|
element: <HomeLayout />,
|
||||||
children: [
|
children: [
|
||||||
|
{
|
||||||
|
path: Routes.ROOT,
|
||||||
|
element: <RootRedirector />,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: Routes.HOME,
|
path: Routes.HOME,
|
||||||
element: <Home />,
|
element: <Home />,
|
||||||
|
Reference in New Issue
Block a user