diff --git a/src/admin/AdminAppMenu.tsx b/src/admin/AdminAppMenu.tsx index 5147eecc..af6714a7 100644 --- a/src/admin/AdminAppMenu.tsx +++ b/src/admin/AdminAppMenu.tsx @@ -34,6 +34,7 @@ export default function AdminAppMenu({ tagsCount, selectedPhotoIds, setSelectedPhotoIds, + refreshAdminData, clearAuthStateAndRedirect, } = useAppState(); @@ -116,6 +117,7 @@ export default function AdminAppMenu({ header="Admin menu" icon={} align="start" + onOpen={refreshAdminData} className={clsx( 'border-medium', className, diff --git a/src/components/more/MoreMenu.tsx b/src/components/more/MoreMenu.tsx index 6b134d97..a7fe80c7 100644 --- a/src/components/more/MoreMenu.tsx +++ b/src/components/more/MoreMenu.tsx @@ -1,4 +1,10 @@ -import { ComponentProps, ReactNode, useCallback, useState } from 'react'; +import { + ComponentProps, + ReactNode, + useCallback, + useEffect, + useState, +} from 'react'; import * as DropdownMenu from '@radix-ui/react-dropdown-menu'; import { clsx } from 'clsx/lite'; import { FiMoreHorizontal } from 'react-icons/fi'; @@ -12,6 +18,7 @@ export default function MoreMenu({ buttonClassName, ariaLabel, align = 'end', + onOpen, ...props }: { items: ComponentProps[] @@ -20,6 +27,7 @@ export default function MoreMenu({ className?: string buttonClassName?: string ariaLabel: string + onOpen?: () => void } & ComponentProps){ const [isOpen, setIsOpen] = useState(false); @@ -27,6 +35,10 @@ export default function MoreMenu({ setIsOpen(false); }, [setIsOpen]); + useEffect(() => { + if (isOpen) { onOpen?.(); } + }, [isOpen, onOpen]); + return ( diff --git a/src/state/AppState.ts b/src/state/AppState.ts index 6a24e41c..c0091658 100644 --- a/src/state/AppState.ts +++ b/src/state/AppState.ts @@ -29,6 +29,7 @@ export interface AppStateContext { // ADMIN adminUpdateTimes?: Date[] registerAdminUpdate?: () => void + refreshAdminData?: () => void photosCount?: number photosCountHidden?: number uploadsCount?: number diff --git a/src/state/AppStateProvider.tsx b/src/state/AppStateProvider.tsx index bfb2f658..1124cca4 100644 --- a/src/state/AppStateProvider.tsx +++ b/src/state/AppStateProvider.tsx @@ -96,7 +96,11 @@ export default function AppStateProvider({ }, [auth, authError]); const isUserSignedIn = Boolean(userEmail); - const { data: adminData, error: adminError } = useSWR( + const { + data: adminData, + error: adminError, + mutate: refreshAdminData, + } = useSWR( isUserSignedIn ? 'getAdminData' : null, getAdminDataAction, { refreshInterval: 1000 * 60, @@ -164,6 +168,7 @@ export default function AppStateProvider({ // ADMIN adminUpdateTimes, registerAdminUpdate, + refreshAdminData, photosCount, photosCountHidden, uploadsCount,