diff --git a/web/src/components/Header.tsx b/web/src/components/Header.tsx index 07fa3980..fe4905cc 100644 --- a/web/src/components/Header.tsx +++ b/web/src/components/Header.tsx @@ -1,12 +1,10 @@ import classNames from "classnames"; import { useEffect } from "react"; -import { NavLink, useLocation } from "react-router-dom"; +import { NavLink } from "react-router-dom"; import useCurrentUser from "@/hooks/useCurrentUser"; -import { useLayoutStore } from "@/store/module"; import { useInboxStore } from "@/store/v1"; import { Inbox_Status } from "@/types/proto/api/v2/inbox_service"; import { useTranslate } from "@/utils/i18n"; -import { resolution } from "@/utils/layout"; import Icon from "./Icon"; import UserBanner from "./UserBanner"; @@ -19,11 +17,8 @@ interface NavLinkItem { const Header = () => { const t = useTranslate(); - const location = useLocation(); - const layoutStore = useLayoutStore(); const user = useCurrentUser(); const inboxStore = useInboxStore(); - const showHeader = layoutStore.state.showHeader; const hasUnreadInbox = inboxStore.inboxes.some((inbox) => inbox.status === Inbox_Status.UNREAD); useEffect(() => { @@ -42,22 +37,6 @@ const Header = () => { }; }, []); - useEffect(() => { - const handleWindowResize = () => { - if (window.innerWidth < resolution.sm) { - layoutStore.setHeaderStatus(false); - } else { - layoutStore.setHeaderStatus(true); - } - }; - handleWindowResize(); - window.addEventListener("resize", handleWindowResize); - - return () => { - window.removeEventListener("resize", handleWindowResize); - }; - }, [location]); - const homeNavLink: NavLinkItem = { id: "header-home", path: "/", @@ -119,44 +98,28 @@ const Header = () => { : [exploreNavLink, signInNavLink]; return ( -
-
layoutStore.setHeaderStatus(false)} - >
-
- -
- {navLinks.map((navLink) => ( - - classNames( - "px-4 pr-5 py-2 rounded-2xl border flex flex-row items-center text-lg text-gray-800 dark:text-gray-300 hover:bg-white hover:border-gray-200 dark:hover:border-zinc-600 dark:hover:bg-zinc-700", - isActive ? "bg-white drop-shadow-sm dark:bg-zinc-700 border-gray-200 dark:border-zinc-600" : "border-transparent" - ) - } - > - <> - {navLink.icon} {navLink.title} - - - ))} -
-
-
+
+ +
+ {navLinks.map((navLink) => ( + + classNames( + "px-4 pr-5 py-2 rounded-2xl border flex flex-row items-center text-lg text-gray-800 dark:text-gray-300 hover:bg-white hover:border-gray-200 dark:hover:border-zinc-600 dark:hover:bg-zinc-700", + isActive ? "bg-white drop-shadow-sm dark:bg-zinc-700 border-gray-200 dark:border-zinc-600" : "border-transparent" + ) + } + > + <> + {navLink.icon} {navLink.title} + + + ))} +
+
); }; diff --git a/web/src/components/HeaderDrawer.tsx b/web/src/components/HeaderDrawer.tsx new file mode 100644 index 00000000..99671315 --- /dev/null +++ b/web/src/components/HeaderDrawer.tsx @@ -0,0 +1,37 @@ +import { Drawer, IconButton } from "@mui/joy"; +import { useEffect, useState } from "react"; +import { useLocation } from "react-router-dom"; +import Header from "./Header"; +import Icon from "./Icon"; + +const HeaderDrawer = () => { + 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 HeaderDrawer; diff --git a/web/src/components/MobileHeader.tsx b/web/src/components/MobileHeader.tsx index aeb8fe66..2cf61f6b 100644 --- a/web/src/components/MobileHeader.tsx +++ b/web/src/components/MobileHeader.tsx @@ -1,5 +1,6 @@ import { useState } from "react"; import { useLayoutStore } from "@/store/module"; +import HeaderDrawer from "./HeaderDrawer"; import Icon from "./Icon"; interface Props { @@ -14,12 +15,13 @@ const MobileHeader = (props: Props) => { return (
-
layoutStore.setHeaderStatus(true)} > -
+
*/} + location.reload()} diff --git a/web/src/layouts/Root.tsx b/web/src/layouts/Root.tsx index d7631439..73380b1c 100644 --- a/web/src/layouts/Root.tsx +++ b/web/src/layouts/Root.tsx @@ -9,7 +9,9 @@ function Root() {
-
+
+
+
diff --git a/web/src/store/module/layout.ts b/web/src/store/module/layout.ts index 7158a7b1..1437ab9c 100644 --- a/web/src/store/module/layout.ts +++ b/web/src/store/module/layout.ts @@ -1,5 +1,5 @@ import store, { useAppSelector } from ".."; -import { setHeaderStatus, setHomeSidebarStatus } from "../reducer/layout"; +import { setHomeSidebarStatus } from "../reducer/layout"; export const useLayoutStore = () => { const state = useAppSelector((state) => state.layout); @@ -8,9 +8,6 @@ export const useLayoutStore = () => { getState: () => { return store.getState().tag; }, - setHeaderStatus: (showHeader: boolean) => { - store.dispatch(setHeaderStatus(showHeader)); - }, setHomeSidebarStatus: (showHomeSidebar: boolean) => { store.dispatch(setHomeSidebarStatus(showHomeSidebar)); }, diff --git a/web/src/store/reducer/layout.ts b/web/src/store/reducer/layout.ts index 7d7e7951..5af9fd0f 100644 --- a/web/src/store/reducer/layout.ts +++ b/web/src/store/reducer/layout.ts @@ -1,23 +1,15 @@ import { createSlice, PayloadAction } from "@reduxjs/toolkit"; interface State { - showHeader: boolean; showHomeSidebar: boolean; } const layoutSlice = createSlice({ name: "layout", initialState: { - showHeader: false, showHomeSidebar: false, } as State, reducers: { - setHeaderStatus: (state, action: PayloadAction) => { - return { - ...state, - showHeader: action.payload, - }; - }, setHomeSidebarStatus: (state, action: PayloadAction) => { return { ...state, @@ -27,6 +19,6 @@ const layoutSlice = createSlice({ }, }); -export const { setHeaderStatus, setHomeSidebarStatus } = layoutSlice.actions; +export const { setHomeSidebarStatus } = layoutSlice.actions; export default layoutSlice.reducer;