'use client'; import { useMemo } from 'react'; import Link from 'next/link'; import { StoreCart } from '@medusajs/types'; import { Cross, Menu, Shield, ShoppingCart } from 'lucide-react'; import { usePersonalAccountData } from '@kit/accounts/hooks/use-personal-account-data'; import { ApplicationRoleEnum } from '@kit/accounts/types/accounts'; import { pathsConfig } from '@kit/shared/config'; import { useSignOut } from '@kit/supabase/hooks/use-sign-out'; import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from '@kit/ui/dropdown-menu'; import { If } from '@kit/ui/if'; import { Trans } from '@kit/ui/trans'; import SignOutDropdownItem from '@kit/shared/components/sign-out-dropdown-item'; import DropdownLink from '@kit/shared/components/ui/dropdown-link'; import { UserWorkspace } from '../../_lib/server/load-user-workspace'; import { routes } from './settings-sidebar'; export function SettingsMobileNavigation(props: { workspace: UserWorkspace; cart: StoreCart | null; }) { const user = props.workspace.user; const signOut = useSignOut(); const { data: personalAccountData } = usePersonalAccountData(user.id); const Links = [ { children: [{ path: pathsConfig.app.home, label: 'common:routes.home' }], }, ] .concat(routes) .map((item, index) => { if ('children' in item) { return item.children.map((child) => { return ( ); }); } if ('divider' in item) { return ; } }); const hasTotpFactor = useMemo(() => { const factors = user?.factors ?? []; return factors.some( (factor) => factor.factor_type === 'totp' && factor.status === 'verified', ); }, [user?.factors]); const isSuperAdmin = useMemo(() => { const hasAdminRole = personalAccountData?.application_role === ApplicationRoleEnum.SuperAdmin; return hasAdminRole && hasTotpFactor; }, [user, personalAccountData, hasTotpFactor]); const isDoctor = useMemo(() => { const hasDoctorRole = personalAccountData?.application_role === ApplicationRoleEnum.Doctor; return hasDoctorRole && hasTotpFactor; }, [user, personalAccountData, hasTotpFactor]); const cartQuantityTotal = props.cart?.items?.reduce((acc, item) => acc + item.quantity, 0) ?? 0; const hasCartItems = cartQuantityTotal > 0; return ( } labelOptions={{ count: cartQuantityTotal }} /> {Links} Super Admin signOut.mutateAsync()} /> ); }