diff --git a/.changeset/hot-cups-smash.md b/.changeset/hot-cups-smash.md new file mode 100644 index 0000000000000..3fead344b5deb --- /dev/null +++ b/.changeset/hot-cups-smash.md @@ -0,0 +1,6 @@ +--- +'@rocket.chat/ui-contexts': patch +'@rocket.chat/meteor': patch +--- + +Fixes the sidebar collapse breakpoint in enhanced navigation diff --git a/apps/meteor/client/NavBarV2/NavBarPagesSection.tsx b/apps/meteor/client/NavBarV2/NavBarPagesSection.tsx index f3f949753a903..df157817f5189 100644 --- a/apps/meteor/client/NavBarV2/NavBarPagesSection.tsx +++ b/apps/meteor/client/NavBarV2/NavBarPagesSection.tsx @@ -5,11 +5,11 @@ import NavBarPagesGroup from './NavBarPagesGroup'; import { SidebarTogglerV2 } from '../components/SidebarTogglerV2'; const NavBarPagesSection = () => { - const { isTablet } = useLayout(); + const { sidebar } = useLayout(); return ( - {isTablet && ( + {sidebar.shouldToggle && ( <> diff --git a/apps/meteor/client/components/Page/PageHeaderNoShadow.tsx b/apps/meteor/client/components/Page/PageHeaderNoShadow.tsx index 84e4e9b07a7a2..15f6f001dec5c 100644 --- a/apps/meteor/client/components/Page/PageHeaderNoShadow.tsx +++ b/apps/meteor/client/components/Page/PageHeaderNoShadow.tsx @@ -15,8 +15,7 @@ type PageHeaderProps = { const PageHeaderNoShadow = ({ children = undefined, title, onClickBack, ...props }: PageHeaderProps) => { const { t } = useTranslation(); - - const { isMobile, isTablet, isEmbedded } = useLayout(); + const { sidebar, isEmbedded } = useLayout(); useDocumentTitle(typeof title === 'string' ? title : undefined); @@ -34,21 +33,20 @@ const PageHeaderNoShadow = ({ children = undefined, title, onClickBack, ...props > - {isMobile ? ( + {sidebar.shouldToggle ? ( ) : null} - {isTablet && isEmbedded ? ( + {sidebar.shouldToggle && isEmbedded ? ( ) : null} - {onClickBack && } {title} diff --git a/apps/meteor/client/providers/LayoutProvider.tsx b/apps/meteor/client/providers/LayoutProvider.tsx index fbfdbbf3cf62e..2ef162b26c3c9 100644 --- a/apps/meteor/client/providers/LayoutProvider.tsx +++ b/apps/meteor/client/providers/LayoutProvider.tsx @@ -23,7 +23,6 @@ const LayoutProvider = ({ children }: LayoutProviderProps) => { const [navBarSearchExpanded, setNavBarSearchExpanded] = useState(false); const breakpoints = useBreakpoints(); // ["xs", "sm", "md", "lg", "xl", xxl"] const [hiddenActions, setHiddenActions] = useState(hiddenActionsDefaultValue); - const enhancedNavigationEnabled = useFeaturePreview('newNavigation'); const secondSidebarEnabled = useFeaturePreview('secondarySidebar'); const router = useRouter(); @@ -33,7 +32,7 @@ const LayoutProvider = ({ children }: LayoutProviderProps) => { const isMobile = !breakpoints.includes('md'); const isTablet = !breakpoints.includes('lg'); - const shouldToggle = enhancedNavigationEnabled ? isTablet || isMobile : isMobile; + const shouldToggle = secondSidebarEnabled ? isTablet || isMobile : isMobile; const shouldDisplaySidePanel = !isTablet || displaySidePanel; const defaultSidebarWidth = secondSidebarEnabled ? '220px' : '240px'; @@ -71,6 +70,7 @@ const LayoutProvider = ({ children }: LayoutProviderProps) => { overlayed, setOverlayed, isCollapsed, + shouldToggle, toggle: shouldToggle ? () => setIsCollapsed((isCollapsed) => !isCollapsed) : () => undefined, collapse: () => setIsCollapsed(true), expand: () => setIsCollapsed(false), @@ -82,7 +82,7 @@ const LayoutProvider = ({ children }: LayoutProviderProps) => { openSidePanel: () => setDisplaySidePanel(true), }, size: { - sidebar: isTablet ? '280px' : defaultSidebarWidth, + sidebar: shouldToggle ? '280px' : defaultSidebarWidth, // eslint-disable-next-line no-nested-ternary contextualBar: breakpoints.includes('sm') ? (breakpoints.includes('xl') ? '38%' : '380px') : '100%', }, diff --git a/apps/meteor/client/sidebarv2/SidebarRegion.tsx b/apps/meteor/client/sidebarv2/SidebarRegion.tsx index 83eb4e750c6da..1541c900d7a5d 100644 --- a/apps/meteor/client/sidebarv2/SidebarRegion.tsx +++ b/apps/meteor/client/sidebarv2/SidebarRegion.tsx @@ -7,7 +7,7 @@ import { FocusScope } from 'react-aria'; import Sidebar from './Sidebar'; const SidebarRegion = () => { - const { isTablet, sidebar } = useLayout(); + const { sidebar } = useLayout(); const sidebarMobileClass = css` position: absolute; @@ -93,13 +93,16 @@ const SidebarRegion = () => { - {isTablet && ( + {sidebar.shouldToggle && ( sidebar.toggle()} /> )} diff --git a/apps/meteor/tests/e2e/feature-preview.spec.ts b/apps/meteor/tests/e2e/feature-preview.spec.ts index 5691a840cbcdc..cf0962e54586d 100644 --- a/apps/meteor/tests/e2e/feature-preview.spec.ts +++ b/apps/meteor/tests/e2e/feature-preview.spec.ts @@ -122,15 +122,15 @@ test.describe.serial('feature preview', () => { await expect(poHomeChannel.navbar.btnDirectory).toBeVisible(); }); - await test.step('should display home and directory inside a menu and sidebar toggler in tablet view', async () => { + await test.step('should display home and directory inside a menu', async () => { await page.setViewportSize({ width: 1023, height: 767 }); await expect(poHomeChannel.navbar.btnMenuPages).toBeVisible(); - await expect(poHomeChannel.navbar.btnSidebarToggler()).toBeVisible(); }); - await test.step('should display voice and omnichannel items inside a menu in mobile view', async () => { + await test.step('should display voice and omnichannel items inside a menu and sidebar toggler in mobile view', async () => { await page.setViewportSize({ width: 767, height: 510 }); await expect(poHomeChannel.navbar.btnVoiceAndOmnichannel).toBeVisible(); + await expect(poHomeChannel.navbar.btnSidebarToggler()).toBeVisible(); }); await test.step('should hide everything else when navbar search is focused in mobile view', async () => { diff --git a/packages/ui-contexts/src/LayoutContext.ts b/packages/ui-contexts/src/LayoutContext.ts index 106c35488bfca..6fe5cb10b4c2c 100644 --- a/packages/ui-contexts/src/LayoutContext.ts +++ b/packages/ui-contexts/src/LayoutContext.ts @@ -15,6 +15,7 @@ export type LayoutContextValue = { overlayed: boolean; setOverlayed: (value: boolean) => void; isCollapsed: boolean; + shouldToggle: boolean; toggle: () => void; collapse: () => void; expand: () => void; @@ -56,6 +57,7 @@ export const LayoutContext = createContext({ overlayed: false, setOverlayed: () => undefined, isCollapsed: false, + shouldToggle: false, toggle: () => undefined, collapse: () => undefined, expand: () => undefined,