From 04d6329d0f080adc7754635ed356600991803097 Mon Sep 17 00:00:00 2001 From: johnnyjoy Date: Sat, 19 Oct 2024 20:46:57 +0800 Subject: [PATCH] feat: use hash router to sub-setting pages --- web/src/components/Empty.tsx | 2 +- web/src/pages/Setting.tsx | 17 ++++++++++++++--- web/src/pages/UserProfile.tsx | 4 ++-- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/web/src/components/Empty.tsx b/web/src/components/Empty.tsx index a4ba6bd31bd6a..e6a2348fd983f 100644 --- a/web/src/components/Empty.tsx +++ b/web/src/components/Empty.tsx @@ -3,7 +3,7 @@ import { BirdIcon } from "lucide-react"; const Empty = () => { return (
- +
); }; diff --git a/web/src/pages/Setting.tsx b/web/src/pages/Setting.tsx index 297cdd68d9b6d..f6a95b88c26c0 100644 --- a/web/src/pages/Setting.tsx +++ b/web/src/pages/Setting.tsx @@ -1,6 +1,7 @@ import { Option, Select } from "@mui/joy"; import { CogIcon, DatabaseIcon, KeyIcon, LibraryIcon, LucideIcon, Settings2Icon, UserIcon, UsersIcon } from "lucide-react"; import { useCallback, useEffect, useMemo, useState } from "react"; +import { useLocation } from "react-router-dom"; import MobileHeader from "@/components/MobileHeader"; import MemberSection from "@/components/Settings/MemberSection"; import MemoRelatedSettings from "@/components/Settings/MemoRelatedSettings"; @@ -37,6 +38,7 @@ const SECTION_ICON_MAP: Record = { const Setting = () => { const t = useTranslate(); + const location = useLocation(); const commonContext = useCommonContext(); const user = useCurrentUser(); const workspaceSettingStore = useWorkspaceSettingStore(); @@ -53,6 +55,17 @@ const Setting = () => { return settingList; }, [isHost]); + useEffect(() => { + let hash = location.hash.slice(1) as SettingSection; + // If the hash is not a valid section, redirect to the default section. + if (![...BASIC_SECTIONS, ...ADMIN_SECTIONS].includes(hash)) { + hash = "my-account"; + } + setState({ + selectedSection: hash, + }); + }, [location.hash]); + useEffect(() => { if (!isHost) { return; @@ -67,9 +80,7 @@ const Setting = () => { }, [isHost]); const handleSectionSelectorItemClick = useCallback((settingSection: SettingSection) => { - setState({ - selectedSection: settingSection, - }); + window.location.hash = settingSection; }, []); return ( diff --git a/web/src/pages/UserProfile.tsx b/web/src/pages/UserProfile.tsx index 46707416cda60..e422f7ac1c63c 100644 --- a/web/src/pages/UserProfile.tsx +++ b/web/src/pages/UserProfile.tsx @@ -100,10 +100,10 @@ const UserProfile = () => {
-

+

{user.nickname || user.username}

-

+

{user.description}