From 3dd5bd8b2502a22f348796f03cc151bb70e29858 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Thu, 6 Feb 2025 15:10:35 +0800 Subject: [PATCH] Chore/mobile sheet app state (#33361) * init * Update app-state.ts * Update ProjectLayout.tsx --- .../layouts/AccountLayout/WithSidebar.tsx | 20 ++++++------------- .../LayoutHeader/LayoutHeader.tsx | 6 +++--- .../NavigationBar/MobileViewNav.tsx | 8 +++++--- .../layouts/ProjectLayout/ProjectLayout.tsx | 17 +++++----------- apps/studio/state/app-state.ts | 7 +++++++ 5 files changed, 26 insertions(+), 32 deletions(-) diff --git a/apps/studio/components/layouts/AccountLayout/WithSidebar.tsx b/apps/studio/components/layouts/AccountLayout/WithSidebar.tsx index 4e0c983b360..16ef1db313f 100644 --- a/apps/studio/components/layouts/AccountLayout/WithSidebar.tsx +++ b/apps/studio/components/layouts/AccountLayout/WithSidebar.tsx @@ -2,11 +2,11 @@ import { isUndefined } from 'lodash' import { ArrowUpRight, LogOut } from 'lucide-react' import Link from 'next/link' import { PropsWithChildren, ReactNode, useState } from 'react' - -import { Badge, cn, Menu, Sheet, SheetContent } from 'ui' +import { Badge, cn, Menu } from 'ui' +import MobileSheetNav from 'ui-patterns/MobileSheetNav/MobileSheetNav' import { LayoutHeader } from '../ProjectLayout/LayoutHeader' import type { SidebarLink, SidebarSection } from './AccountLayout.types' -import MobileSheetNav from 'ui-patterns/MobileSheetNav/MobileSheetNav' +import { useAppStateSnapshot } from 'state/app-state' interface WithSidebarProps { title: string @@ -31,11 +31,7 @@ const WithSidebar = ({ customSidebarContent, }: PropsWithChildren) => { const noContent = !sections && !customSidebarContent - const [isSheetOpen, setIsSheetOpen] = useState(false) - - const handleMobileMenu = () => { - setIsSheetOpen(true) - } + const { mobileMenuOpen, setMobileMenuOpen } = useAppStateSnapshot() return (
@@ -51,14 +47,10 @@ const WithSidebar = ({ /> )}
- +
{children}
- + ( @@ -44,7 +45,6 @@ interface LayoutHeaderProps { headerBorder?: boolean showProductMenu?: boolean customSidebarContent?: ReactNode - handleMobileMenu: Function } const LayoutHeader = ({ @@ -52,11 +52,11 @@ const LayoutHeader = ({ breadcrumbs = [], headerBorder = true, showProductMenu, - handleMobileMenu, }: LayoutHeaderProps) => { const { ref: projectRef } = useParams() const selectedProject = useSelectedProject() const selectedOrganization = useSelectedOrganization() + const { mobileMenuOpen, setMobileMenuOpen } = useAppStateSnapshot() const isBranchingEnabled = selectedProject?.is_branch_enabled === true const { data: subscription } = useOrgSubscriptionQuery({ @@ -91,7 +91,7 @@ const LayoutHeader = ({ className={cn( 'group/view-toggle ml-4 flex justify-center flex-col border-none space-x-0 items-start gap-1 !bg-transparent rounded-md min-w-[30px] w-[30px] h-[30px]' )} - onClick={() => handleMobileMenu()} + onClick={() => setMobileMenuOpen(!mobileMenuOpen)} >
diff --git a/apps/studio/components/layouts/ProjectLayout/NavigationBar/MobileViewNav.tsx b/apps/studio/components/layouts/ProjectLayout/NavigationBar/MobileViewNav.tsx index 8cf6394923e..b1f0a90e730 100644 --- a/apps/studio/components/layouts/ProjectLayout/NavigationBar/MobileViewNav.tsx +++ b/apps/studio/components/layouts/ProjectLayout/NavigationBar/MobileViewNav.tsx @@ -1,4 +1,5 @@ import { PropsWithChildren } from 'react' +import { useAppStateSnapshot } from 'state/app-state' import { cn } from 'ui' export const ICON_SIZE = 20 @@ -6,10 +7,11 @@ export const ICON_STROKE_WIDTH = 1.5 interface Props { title?: string - handleMobileMenu: Function } -const MobileViewNav = ({ title, handleMobileMenu }: PropsWithChildren) => { +const MobileViewNav = ({ title }: PropsWithChildren) => { + const { mobileMenuOpen, setMobileMenuOpen } = useAppStateSnapshot() + return (