import { Col, Container, Row, ScrollView, StyleSystemThemedProps } from 'components/layout'; import { Add, Dashboard, HelpFill, SettingsFill, AddSquare, Edit, Chat, OpenInWindow, BellAlert, } from 'icons'; import { metrics } from 'config'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; import { useResponsiveLayout, useRouting, useSettings } from 'hooks'; import { COLOR_VALUES } from 'theme/color'; import { useCallback } from 'react'; import { TouchableTile, Button, Text, Visible, Card } from 'components'; import { useReactiveVar } from '@apollo/client'; import { isRoomPageVar } from 'state-management/settings'; import { isNotificationOpenVar, isSettingOpenVar } from 'state-management/dialogs'; import { NavigationRoutes } from 'navigation/enum'; import { Favorite } from './favorite'; import { Header } from './header'; const { STYLES, Z_INDEX } = metrics; export const SideBar: React.FC = ({ ...props }) => { const { isSideBarOpen, isSideBarCollapsed, setIsSideBarOpen } = useSettings(); const { isMobile, isTablet, isDesktop } = useResponsiveLayout(); const { top, bottom } = useSafeAreaInsets(); const { navigateTo, activeRoute, routeSegments } = useRouting(); const isRoomPage = useReactiveVar(isRoomPageVar); const topMargin = isDesktop ? 0 : top + STYLES.topBarHeight; const isDesktopSideNotOpen = isDesktop && !isSideBarOpen; const isIndex = routeSegments.includes('inbox'); const sideBarOpenSide = isMobile ? '100%' : 300; const isSideBarOpened = isSideBarOpen ? sideBarOpenSide : 0; const isDesktopSideNotOpened = isDesktopSideNotOpen ? STYLES.sideBarWidth : isSideBarOpened; const containerWidth = isSideBarCollapsed ? STYLES.sideBarCollapseWidth : isDesktopSideNotOpened; const isOverLayVisible = isTablet && isSideBarOpen; const alignItems = isSideBarCollapsed ? 'center' : 'stretch'; const variant = !isSideBarCollapsed && isRoomPage ? 'float' : 'plain'; const btnSizeVariant = isSideBarCollapsed ? 'undefined' : 'large'; const isOnMobile = isMobile ? 'xs' : 'xs'; const marginY = isSideBarCollapsed ? undefined : isOnMobile; const flexDirection = isSideBarCollapsed ? 'column-reverse' : 'row'; const height = isSideBarCollapsed ? 90 : STYLES.bottomBarHeight; const helpWidth = isSideBarCollapsed ? 40 : undefined; const bottomPL = isSideBarCollapsed ? '2xs' : undefined; const mlHelp = isSideBarCollapsed ? undefined : 'xs'; const isNotificationOpen = useReactiveVar(isNotificationOpenVar); const notificationVariant = isNotificationOpen ? 'base' : 'text'; const spaceBtnVariant = isSideBarCollapsed ? undefined : 'outline'; const spaceBtnColorVariant = isSideBarCollapsed ? 'transparent' : 'base'; const getTileVariant = useCallback( (route: NavigationRoutes) => { const activeRouteColor = route === activeRoute ? 'base' : 'text'; return isNotificationOpen ? 'text' : activeRouteColor; }, [activeRoute, isNotificationOpen] ); const getIconVariant = useCallback( (route: NavigationRoutes) => { return route === activeRoute ? 'primary' : 'body'; }, [activeRoute] ); const closeSideBar = useCallback(() => { setIsSideBarOpen(false); }, [setIsSideBarOpen]); const openRooms = useCallback(() => { navigateTo(NavigationRoutes.Rooms); closeSideBar(); }, [closeSideBar, navigateTo]); const openMyRoom = useCallback(() => { navigateTo(NavigationRoutes.Rooms); closeSideBar(); }, [closeSideBar, navigateTo]); const openDashboard = useCallback(() => { navigateTo(NavigationRoutes.Dashboard); closeSideBar(); }, [closeSideBar, navigateTo]); const openSettings = useCallback(() => { if (isMobile) { navigateTo(NavigationRoutes.Settings); closeSideBar(); } else { isSettingOpenVar(true); } }, [closeSideBar, isMobile, navigateTo]); const openNotifications = useCallback(() => { if (!isIndex) { isNotificationOpenVar(true); } }, [isIndex]); const centerElement = useCallback(() => { return ( <> Help & Support ); }, [isSideBarCollapsed]); return ( <>