Show data loading status in admin menu
This commit is contained in:
parent
5a97b8f7c2
commit
b30cdc90d6
@ -25,6 +25,7 @@ import IconFolder from '@/components/icons/IconFolder';
|
|||||||
import IconSignOut from '@/components/icons/IconSignOut';
|
import IconSignOut from '@/components/icons/IconSignOut';
|
||||||
import IconLock from '@/components/icons/IconLock';
|
import IconLock from '@/components/icons/IconLock';
|
||||||
import { IoMdCheckboxOutline } from 'react-icons/io';
|
import { IoMdCheckboxOutline } from 'react-icons/io';
|
||||||
|
import Spinner from '@/components/Spinner';
|
||||||
|
|
||||||
export default function AdminAppMenu({
|
export default function AdminAppMenu({
|
||||||
active,
|
active,
|
||||||
@ -40,6 +41,8 @@ export default function AdminAppMenu({
|
|||||||
uploadsCount = 0,
|
uploadsCount = 0,
|
||||||
tagsCount = 0,
|
tagsCount = 0,
|
||||||
recipesCount = 0,
|
recipesCount = 0,
|
||||||
|
hasAdminData,
|
||||||
|
isLoadingAdminData,
|
||||||
selectedPhotoIds,
|
selectedPhotoIds,
|
||||||
startUpload,
|
startUpload,
|
||||||
setSelectedPhotoIds,
|
setSelectedPhotoIds,
|
||||||
@ -154,11 +157,18 @@ export default function AdminAppMenu({
|
|||||||
return (
|
return (
|
||||||
<MoreMenu
|
<MoreMenu
|
||||||
header={<div className="flex items-center select-none">
|
header={<div className="flex items-center select-none">
|
||||||
<IconLock
|
<span className="inline-flex items-center justify-center w-5 mr-2">
|
||||||
size={15}
|
{!hasAdminData && isLoadingAdminData
|
||||||
className="inline-block w-5 mr-2"
|
? <Spinner
|
||||||
narrow
|
className="translate-x-[1px] translate-y-[1px]"
|
||||||
/>
|
size={13}
|
||||||
|
/>
|
||||||
|
:<IconLock
|
||||||
|
size={16}
|
||||||
|
className="translate-x-[1px] translate-y-[0.5px]"
|
||||||
|
narrow
|
||||||
|
/>}
|
||||||
|
</span>
|
||||||
<span className="grow">Admin menu</span>
|
<span className="grow">Admin menu</span>
|
||||||
</div>}
|
</div>}
|
||||||
icon={<div className={clsx(
|
icon={<div className={clsx(
|
||||||
|
|||||||
@ -127,6 +127,7 @@ export default function CommandKClient({
|
|||||||
clearAuthStateAndRedirectIfNecessary,
|
clearAuthStateAndRedirectIfNecessary,
|
||||||
isCommandKOpen: isOpen,
|
isCommandKOpen: isOpen,
|
||||||
startUpload,
|
startUpload,
|
||||||
|
photosCountTotal,
|
||||||
photosCountHidden,
|
photosCountHidden,
|
||||||
uploadsCount,
|
uploadsCount,
|
||||||
tagsCount,
|
tagsCount,
|
||||||
@ -465,20 +466,20 @@ export default function CommandKClient({
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
adminSection.items.push({
|
adminSection.items.push({
|
||||||
label: 'Manage Photos',
|
label: `Manage Photos (${photosCountTotal})`,
|
||||||
annotation: <IconLock narrow />,
|
annotation: <IconLock narrow />,
|
||||||
path: PATH_ADMIN_PHOTOS,
|
path: PATH_ADMIN_PHOTOS,
|
||||||
});
|
});
|
||||||
if (tagsCount) {
|
if (tagsCount) {
|
||||||
adminSection.items.push({
|
adminSection.items.push({
|
||||||
label: 'Manage Tags',
|
label: `Manage Tags (${tagsCount})`,
|
||||||
annotation: <IconLock narrow />,
|
annotation: <IconLock narrow />,
|
||||||
path: PATH_ADMIN_TAGS,
|
path: PATH_ADMIN_TAGS,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (recipesCount) {
|
if (recipesCount) {
|
||||||
adminSection.items.push({
|
adminSection.items.push({
|
||||||
label: 'Manage Recipes',
|
label: `Manage Recipes (${recipesCount})`,
|
||||||
annotation: <IconLock narrow />,
|
annotation: <IconLock narrow />,
|
||||||
path: PATH_ADMIN_RECIPES,
|
path: PATH_ADMIN_RECIPES,
|
||||||
});
|
});
|
||||||
|
|||||||
@ -45,6 +45,8 @@ export type AppStateContextType = {
|
|||||||
isCheckingAuth?: boolean
|
isCheckingAuth?: boolean
|
||||||
adminUpdateTimes?: Date[]
|
adminUpdateTimes?: Date[]
|
||||||
registerAdminUpdate?: () => void
|
registerAdminUpdate?: () => void
|
||||||
|
hasAdminData?: boolean
|
||||||
|
isLoadingAdminData?: boolean
|
||||||
refreshAdminData?: () => void
|
refreshAdminData?: () => void
|
||||||
updateAdminData?: (updatedData: Partial<AdminData>) => void
|
updateAdminData?: (updatedData: Partial<AdminData>) => void
|
||||||
selectedPhotoIds?: string[]
|
selectedPhotoIds?: string[]
|
||||||
|
|||||||
@ -129,7 +129,11 @@ export default function AppStateProvider({
|
|||||||
}, [auth, authError]);
|
}, [auth, authError]);
|
||||||
const isUserSignedIn = Boolean(userEmail);
|
const isUserSignedIn = Boolean(userEmail);
|
||||||
|
|
||||||
const { data: adminData, mutate: refreshAdminData } = useSWR(
|
const {
|
||||||
|
data: adminData,
|
||||||
|
mutate: refreshAdminData,
|
||||||
|
isLoading: isLoadingAdminData,
|
||||||
|
} = useSWR(
|
||||||
isUserSignedIn ? 'getAdminData' : null,
|
isUserSignedIn ? 'getAdminData' : null,
|
||||||
getAdminDataAction,
|
getAdminDataAction,
|
||||||
);
|
);
|
||||||
@ -212,9 +216,11 @@ export default function AppStateProvider({
|
|||||||
// ADMIN
|
// ADMIN
|
||||||
adminUpdateTimes,
|
adminUpdateTimes,
|
||||||
registerAdminUpdate,
|
registerAdminUpdate,
|
||||||
|
...adminData,
|
||||||
|
hasAdminData: Boolean(adminData),
|
||||||
|
isLoadingAdminData,
|
||||||
refreshAdminData,
|
refreshAdminData,
|
||||||
updateAdminData,
|
updateAdminData,
|
||||||
...adminData,
|
|
||||||
selectedPhotoIds,
|
selectedPhotoIds,
|
||||||
setSelectedPhotoIds,
|
setSelectedPhotoIds,
|
||||||
isPerformingSelectEdit,
|
isPerformingSelectEdit,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user