Refresh admin data on menu open

This commit is contained in:
Sam Becker 2025-02-26 23:10:23 -06:00
parent a7435852c4
commit b5c256eee6
4 changed files with 22 additions and 2 deletions

View File

@ -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={<BiLockAlt size={16} className="translate-y-[-0.5px]" />}
align="start"
onOpen={refreshAdminData}
className={clsx(
'border-medium',
className,

View File

@ -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<typeof MoreMenuItem>[]
@ -20,6 +27,7 @@ export default function MoreMenu({
className?: string
buttonClassName?: string
ariaLabel: string
onOpen?: () => void
} & ComponentProps<typeof DropdownMenu.Content>){
const [isOpen, setIsOpen] = useState(false);
@ -27,6 +35,10 @@ export default function MoreMenu({
setIsOpen(false);
}, [setIsOpen]);
useEffect(() => {
if (isOpen) { onOpen?.(); }
}, [isOpen, onOpen]);
return (
<DropdownMenu.Root open={isOpen} onOpenChange={setIsOpen}>
<DropdownMenu.Trigger asChild>

View File

@ -29,6 +29,7 @@ export interface AppStateContext {
// ADMIN
adminUpdateTimes?: Date[]
registerAdminUpdate?: () => void
refreshAdminData?: () => void
photosCount?: number
photosCountHidden?: number
uploadsCount?: number

View File

@ -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,