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 (
+
+ );
+}
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
-
+
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 = () =>