diff --git a/src/admin/ClearCacheButton.tsx b/src/admin/ClearCacheButton.tsx new file mode 100644 index 00000000..0e14ba3a --- /dev/null +++ b/src/admin/ClearCacheButton.tsx @@ -0,0 +1,23 @@ +'use client'; + +import SubmitButtonWithStatus from '@/components/SubmitButtonWithStatus'; +import { syncCacheAction } from '@/photo/actions'; +import { useMoreComponentsState } from '@/state/MoreComponentsState'; +import { BiTrash } from 'react-icons/bi'; + +export default function ClearCacheButton() { + const { + clearMoreComponentsState, + } = useMoreComponentsState(); + + return ( +
+ } + onFormSubmit={clearMoreComponentsState} + > + Clear Cache + +
+ ); +} diff --git a/src/app/admin/configuration/page.tsx b/src/app/admin/configuration/page.tsx index 21bc272b..fc9962ab 100644 --- a/src/app/admin/configuration/page.tsx +++ b/src/app/admin/configuration/page.tsx @@ -1,9 +1,7 @@ +import ClearCacheButton from '@/admin/ClearCacheButton'; import InfoBlock from '@/components/InfoBlock'; import SiteGrid from '@/components/SiteGrid'; -import SubmitButtonWithStatus from '@/components/SubmitButtonWithStatus'; -import { syncCacheAction } from '@/photo/actions'; import SiteChecklist from '@/site/SiteChecklist'; -import { BiTrash } from 'react-icons/bi'; export default async function AdminConfigurationPage() { return ( @@ -14,13 +12,7 @@ export default async function AdminConfigurationPage() {
App Configuration
-
- } - > - Clear Cache - -
+ diff --git a/src/components/SubmitButtonWithStatus.tsx b/src/components/SubmitButtonWithStatus.tsx index d3f1dfb2..09a65df0 100644 --- a/src/components/SubmitButtonWithStatus.tsx +++ b/src/components/SubmitButtonWithStatus.tsx @@ -12,6 +12,7 @@ interface Props extends HTMLProps { spinnerColor?: SpinnerColor onFormStatusChange?: (pending: boolean) => void onFormSubmitToastMessage?: string + onFormSubmit?: () => void primary?: boolean } @@ -21,6 +22,7 @@ export default function SubmitButtonWithStatus({ spinnerColor, onFormStatusChange, onFormSubmitToastMessage, + onFormSubmit, children, disabled, className, @@ -39,9 +41,10 @@ export default function SubmitButtonWithStatus({ onFormSubmitToastMessage ) { toastSuccess(onFormSubmitToastMessage); + onFormSubmit?.(); } pendingPrevious.current = pending; - }, [pending, onFormSubmitToastMessage]); + }, [pending, onFormSubmitToastMessage, onFormSubmit]); useEffect(() => { onFormStatusChange?.(pending); diff --git a/src/state/MoreComponentsProvider.tsx b/src/state/MoreComponentsProvider.tsx index 94389bd5..c0380158 100644 --- a/src/state/MoreComponentsProvider.tsx +++ b/src/state/MoreComponentsProvider.tsx @@ -29,11 +29,16 @@ export default function MoreComponentsProvider({ })); }, []); + const clearMoreComponentsState = useCallback(() => { + setState(MORE_COMPONENTS_INITIAL_STATE); + }, []); + return ( {children} diff --git a/src/state/MoreComponentsState.ts b/src/state/MoreComponentsState.ts index 82295f6e..e31f1023 100644 --- a/src/state/MoreComponentsState.ts +++ b/src/state/MoreComponentsState.ts @@ -36,6 +36,7 @@ export interface MoreComponentsContext { key: MoreComponentsKey, state: MoreComponentsStateForKeyArgument, ) => void + clearMoreComponentsState: () => void } export const MORE_COMPONENTS_INITIAL_STATE: MoreComponentsState = { @@ -47,6 +48,7 @@ export const MoreComponentsContext = createContext({ state: MORE_COMPONENTS_INITIAL_STATE, setStateForKey: () => {}, + clearMoreComponentsState: () => {}, }); export const useMoreComponentsState = () =>