import { Box, Scrollable, ScrollableProps } from '@rocket.chat/fuselage'; import { useMediaQuery } from '@rocket.chat/fuselage-hooks'; import React, { createContext, useContext, useState, FC, Dispatch, SetStateAction } from 'react'; import { useSidebar } from '../../contexts/SidebarContext'; import BurgerMenuButton from './burger/BurgerMenuButton'; import { useSession } from '../../contexts/SessionContext'; type PageContextValue = [ boolean, Dispatch>, ]; const PageContext = createContext([false, (): void => undefined]); const Page: FC = (props) => { const [border, setBorder] = useState(false); return ; }; type PageHeaderProps = { title: string; }; const PageHeader: FC = ({ children = undefined, title, ...props }) => { const [border] = useContext(PageContext); const hasBurgerMenuButton = useMediaQuery('(max-width: 780px)'); const [isSidebarOpen, setSidebarOpen] = useSidebar(); const unreadMessagesBadge = useSession('unread'); const handleBurgerMenuButtonClick = (): void => { setSidebarOpen((isSidebarOpen) => !isSidebarOpen); }; return {hasBurgerMenuButton && } {title} {children} ; }; const PageContent = React.forwardRef(function PageContent(props, ref) { return ; }); type PageScrollableContentProps = { onScrollContent?: ScrollableProps['onScrollContent']; }; const PageScrollableContent: FC = ({ onScrollContent, ...props }) => ; const PageScrollableContentWithShadow: FC = ({ onScrollContent, ...props }) => { const [, setBorder] = useContext(PageContext); return { setBorder(!top); onScrollContent && onScrollContent({ top, ...args }); }} { ...props } />; }; export default Object.assign(Page, { Header: PageHeader, Content: PageContent, ScrollableContent: PageScrollableContent, ScrollableContentWithShadow: PageScrollableContentWithShadow, });