diff --git a/src/app/admin/uploads/[uploadPath]/page.tsx b/src/app/admin/uploads/[uploadPath]/page.tsx
index a99a94c8..9cf664ab 100644
--- a/src/app/admin/uploads/[uploadPath]/page.tsx
+++ b/src/app/admin/uploads/[uploadPath]/page.tsx
@@ -3,6 +3,7 @@ import { extractExifDataFromBlobPath } from '@/photo/server';
import { redirect } from 'next/navigation';
import { getUniqueTagsCached } from '@/photo/cache';
import UploadPageClient from '@/photo/UploadPageClient';
+import { AI_TEXT_GENERATION_ENABLED } from '@/site/config';
interface Params {
params: { uploadPath: string }
@@ -18,11 +19,14 @@ export default async function UploadPage({ params: { uploadPath } }: Params) {
const uniqueTags = await getUniqueTagsCached();
+ const hasAiTextGeneration = AI_TEXT_GENERATION_ENABLED;
+
return (
);
};
diff --git a/src/photo/PhotoEditPageClient.tsx b/src/photo/PhotoEditPageClient.tsx
index 8522bd01..ea4b809a 100644
--- a/src/photo/PhotoEditPageClient.tsx
+++ b/src/photo/PhotoEditPageClient.tsx
@@ -7,7 +7,6 @@ import SubmitButtonWithStatus from '@/components/SubmitButtonWithStatus';
import {
PhotoFormData,
convertPhotoToFormData,
- formHasTextContent,
} from './form';
import PhotoForm from './form/PhotoForm';
import { useFormState } from 'react-dom';
@@ -15,9 +14,8 @@ import { areSimpleObjectsEqual } from '@/utility/object';
import IconGrSync from '@/site/IconGrSync';
import { getExifDataAction } from './actions';
import { Tags } from '@/tag';
-import { useState } from 'react';
-import useAiImageQueries from './ai/useAiImageQueries';
import AiButton from './ai/AiButton';
+import usePhotoFormParent from './form/usePhotoFormParent';
export default function PhotoEditPageClient({
photo,
@@ -35,19 +33,22 @@ export default function PhotoEditPageClient({
seedExifData,
);
- const photoForm = convertPhotoToFormData(photo);
-
- const [pending, setIsPending] = useState(false);
- const [updatedTitle, setUpdatedTitle] = useState('');
- const [hasTextContent, setHasTextContent] =
- useState(formHasTextContent(photoForm));
-
const hasExifDataBeenFound = !areSimpleObjectsEqual(
updatedExifData,
seedExifData,
);
- const aiContent = useAiImageQueries();
+ const photoForm = convertPhotoToFormData(photo);
+
+ const {
+ pending,
+ setIsPending,
+ updatedTitle,
+ setUpdatedTitle,
+ hasTextContent,
+ setHasTextContent,
+ aiContent,
+ } = usePhotoFormParent(photoForm);
return (
uniqueTags: Tags
+ hasAiTextGeneration: boolean
}) {
- const [pending, setIsPending] = useState(false);
- const [updatedTitle, setUpdatedTitle] = useState('');
+ const {
+ pending,
+ setIsPending,
+ updatedTitle,
+ setUpdatedTitle,
+ hasTextContent,
+ setHasTextContent,
+ aiContent,
+ } = usePhotoFormParent();
return (
}
isLoading={pending}
>
diff --git a/src/photo/form/usePhotoFormParent.ts b/src/photo/form/usePhotoFormParent.ts
new file mode 100644
index 00000000..4f2c68bb
--- /dev/null
+++ b/src/photo/form/usePhotoFormParent.ts
@@ -0,0 +1,24 @@
+import { useState } from 'react';
+import { PhotoFormData, formHasTextContent } from '.';
+import useAiImageQueries from '../ai/useAiImageQueries';
+
+export default function usePhotoFormParent(
+ photoForm?: Partial
+) {
+ const [pending, setIsPending] = useState(false);
+ const [updatedTitle, setUpdatedTitle] = useState('');
+ const [hasTextContent, setHasTextContent] =
+ useState(photoForm ? formHasTextContent(photoForm) : false);
+
+ const aiContent = useAiImageQueries();
+
+ return {
+ pending,
+ setIsPending,
+ updatedTitle,
+ setUpdatedTitle,
+ hasTextContent,
+ setHasTextContent,
+ aiContent,
+ };
+}