'use client'; import MoreMenu from '@/components/more/MoreMenu'; import { PATH_ADMIN_CONFIGURATION, PATH_ADMIN_INSIGHTS, PATH_ADMIN_PHOTOS, PATH_ADMIN_TAGS, PATH_ADMIN_UPLOADS, PATH_GRID_INFERRED, } from '@/app/paths'; import { useAppState } from '@/state/AppState'; import { ImCheckboxUnchecked } from 'react-icons/im'; import { IoArrowDown, IoArrowUp, IoCloseSharp } from 'react-icons/io5'; import { clsx } from 'clsx/lite'; import { TbPhoto } from 'react-icons/tb'; import { FiTag } from 'react-icons/fi'; import { BiLockAlt } from 'react-icons/bi'; import AdminAppInfoIcon from './AdminAppInfoIcon'; import { PiSignOutBold } from 'react-icons/pi'; import { signOutAction } from '@/auth/actions'; import { ComponentProps } from 'react'; import { FaRegFolderOpen } from 'react-icons/fa'; import { FiUploadCloud } from 'react-icons/fi'; export default function AdminAppMenu({ active, className, }: { active?: boolean className?: string }) { const { photosCountTotal = 0, uploadsCount = 0, tagsCount = 0, selectedPhotoIds, startUpload, setSelectedPhotoIds, refreshAdminData, clearAuthStateAndRedirect, } = useAppState(); const isSelecting = selectedPhotoIds !== undefined; const items: ComponentProps['items'] = [{ label: 'Upload Photos', icon: , action: () => new Promise(resolve => { if (startUpload) { startUpload(() => resolve()); } else { resolve(); } }), }, { label: 'Manage Photos', ...photosCountTotal && { annotation: `${photosCountTotal}`, }, icon: , href: PATH_ADMIN_PHOTOS, }]; if (uploadsCount) { items.push({ label: 'Uploads', annotation: `${uploadsCount}`, icon: , href: PATH_ADMIN_UPLOADS, }); } if (tagsCount) { items.push({ label: 'Manage Tags', annotation: `${tagsCount}`, icon: , href: PATH_ADMIN_TAGS, }); } items.push({ label: photosCountTotal > 0 ? 'App Insights' : 'App Configuration', icon: , href: photosCountTotal > 0 ? PATH_ADMIN_INSIGHTS : PATH_ADMIN_CONFIGURATION, }, { label: isSelecting ? 'Exit Select' : 'Edit Multiple', icon: isSelecting ? : , href: PATH_GRID_INFERRED, action: () => { if (isSelecting) { setSelectedPhotoIds?.(undefined); } else { setSelectedPhotoIds?.([]); } if (document.activeElement instanceof HTMLElement) { document.activeElement.blur(); } }, shouldPreventDefault: false, }, { label: 'Sign Out', icon: , action: () => signOutAction().then(clearAuthStateAndRedirect), }); return ( Admin menu } icon={
} align="start" sideOffset={12} alignOffset={-85} onOpen={refreshAdminData} className={clsx( 'border-medium', className, )} buttonClassName={clsx( 'w-full h-full', 'flex items-center justify-center', 'hover:bg-transparent dark:hover:bg-transparent', 'active:bg-transparent dark:active:bg-transparent', 'rounded-none focus:outline-none', active ? 'text-black dark:text-white' : 'text-gray-400 dark:text-gray-600', )} buttonClassNameOpen={clsx( 'bg-dim', 'text-main!', '[&>*>*]:translate-y-[6px]', )} items={items} ariaLabel="Admin Menu" /> ); }