import React, {useCallback} from "react"; import {Drawer} from "expo-router/drawer"; import {DrawerContentScrollView, DrawerContentComponentProps, DrawerNavigationOptions} from "@react-navigation/drawer"; import {ImageBackground, Pressable, StyleSheet} from "react-native"; import {Button, ButtonSize, Text, View} from "react-native-ui-lib"; import * as Device from "expo-device"; import {useSetAtom} from "jotai"; import {Ionicons} from "@expo/vector-icons"; import {DeviceType} from "expo-device"; import {DrawerNavigationProp} from "@react-navigation/drawer"; import {ParamListBase, Theme} from '@react-navigation/native'; import {RouteProp} from "@react-navigation/native"; import {useSignOut} from "@/hooks/firebase/useSignOut"; import {CalendarHeader} from "@/components/pages/calendar/CalendarHeader"; import DrawerButton from "@/components/shared/DrawerButton"; import DrawerIcon from "@/assets/svgs/DrawerIcon"; import NavGroceryIcon from "@/assets/svgs/NavGroceryIcon"; import NavToDosIcon from "@/assets/svgs/NavToDosIcon"; import NavBrainDumpIcon from "@/assets/svgs/NavBrainDumpIcon"; import NavCalendarIcon from "@/assets/svgs/NavCalendarIcon"; import NavSettingsIcon from "@/assets/svgs/NavSettingsIcon"; import FeedbackNavIcon from "@/assets/svgs/FeedbackNavIcon"; import { isFamilyViewAtom, settingsPageIndex, toDosPageIndex, userSettingsView, } from "@/components/pages/calendar/atoms"; import ViewSwitch from "@/components/pages/(tablet_pages)/ViewSwitch"; const isTablet = Device.deviceType === DeviceType.TABLET; type DrawerParamList = { index: undefined; calendar: undefined; brain_dump: undefined; settings: undefined; grocery: undefined; reminders: undefined; todos: undefined; notifications: undefined; feedback: undefined; }; type DrawerScreenNavigationProp = DrawerNavigationProp; interface DrawerButtonConfig { id: string; title: string; color: string; bgColor: string; icon: React.FC; route: keyof DrawerParamList; } const DRAWER_BUTTONS: DrawerButtonConfig[] = [ { id: 'calendar', title: 'Calendar', color: 'rgb(7, 184, 199)', bgColor: 'rgb(231, 248, 250)', icon: NavCalendarIcon, route: 'calendar' }, { id: 'grocery', title: 'Groceries', color: '#50be0c', bgColor: '#eef9e7', icon: NavGroceryIcon, route: 'grocery' }, { id: 'feedback', title: 'Feedback', color: '#ea156d', bgColor: '#fdedf4', icon: FeedbackNavIcon, route: 'feedback' }, { id: 'todos', title: 'To Dos', color: '#8005eb', bgColor: '#f3e6fd', icon: NavToDosIcon, route: 'todos' }, { id: 'brain_dump', title: 'Brain Dump', color: '#e0ca03', bgColor: '#fffacb', icon: NavBrainDumpIcon, route: 'brain_dump' }, { id: 'notifications', title: 'Notifications', color: '#ffa200', bgColor: '#ffdda1', icon: () => , route: 'notifications' } ]; interface DrawerContentProps { props: DrawerContentComponentProps; } const DrawerContent: React.FC = ({props}) => { const {mutateAsync: signOut} = useSignOut(); const setIsFamilyView = useSetAtom(isFamilyViewAtom); const setPageIndex = useSetAtom(settingsPageIndex); const setUserView = useSetAtom(userSettingsView); const setToDosIndex = useSetAtom(toDosPageIndex); const handleNavigation = useCallback((route: keyof DrawerParamList) => { props.navigation.navigate(route); setPageIndex(0); setToDosIndex(0); setUserView(true); setIsFamilyView(false); }, [props.navigation, setPageIndex, setToDosIndex, setUserView, setIsFamilyView]); const renderDrawerButtons = () => { const midPoint = Math.ceil(DRAWER_BUTTONS.length / 2); const leftButtons = DRAWER_BUTTONS.slice(0, midPoint); const rightButtons = DRAWER_BUTTONS.slice(midPoint); return ( {leftButtons.map(button => ( handleNavigation(button.route)} icon={} /> ))} {rightButtons.map(button => ( handleNavigation(button.route)} icon={} /> ))} ); }; return ( Welcome to Cally {renderDrawerButtons()}