import { Dispatch, SetStateAction, createContext, useContext } from 'react'; import { AnimationConfig } from '@/components/AnimateItems'; import { ShareModalProps } from '@/share'; export interface AppStateContext { // CORE previousPathname?: string hasLoaded?: boolean setHasLoaded?: Dispatch> swrTimestamp?: number invalidateSwr?: () => void nextPhotoAnimation?: AnimationConfig setNextPhotoAnimation?: Dispatch> clearNextPhotoAnimation?: () => void shouldRespondToKeyboardCommands?: boolean setShouldRespondToKeyboardCommands?: Dispatch> // MODAL isCommandKOpen?: boolean setIsCommandKOpen?: Dispatch> shareModalProps?: ShareModalProps setShareModalProps?: Dispatch> // ADMIN userEmail?: string setUserEmail?: Dispatch> isUserSignedIn?: boolean adminUpdateTimes?: Date[] registerAdminUpdate?: () => void hiddenPhotosCount?: number selectedPhotoIds?: string[] setSelectedPhotoIds?: Dispatch> isPerformingSelectEdit?: boolean setIsPerformingSelectEdit?: Dispatch> // DEBUG isGridHighDensity?: boolean setIsGridHighDensity?: Dispatch> areZoomControlsShown?: boolean setAreZoomControlsShown?: Dispatch> arePhotosMatted?: boolean setArePhotosMatted?: Dispatch> shouldDebugImageFallbacks?: boolean setShouldDebugImageFallbacks?: Dispatch> shouldShowBaselineGrid?: boolean setShouldShowBaselineGrid?: Dispatch> } export const AppStateContext = createContext({}); export const useAppState = () => useContext(AppStateContext);