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,