diff --git a/apps/admin/src/components/EditorShell.tsx b/apps/admin/src/components/EditorShell.tsx index 37a4fbb..a7f480d 100644 --- a/apps/admin/src/components/EditorShell.tsx +++ b/apps/admin/src/components/EditorShell.tsx @@ -31,6 +31,7 @@ export default function EditorShell({ onLogout: _onLogout, initialPostId, onBack genImageKeys, generatedDraft, imagePlaceholders, + generationSources, // setters setDraft, setMeta, @@ -40,6 +41,7 @@ export default function EditorShell({ onLogout: _onLogout, initialPostId, onBack setActiveStep, setGeneratedDraft, setImagePlaceholders, + setGenerationSources, // actions savePost, deletePost, @@ -151,6 +153,7 @@ export default function EditorShell({ onLogout: _onLogout, initialPostId, onBack onChangePrompt={setPromptText} generatedDraft={generatedDraft} imagePlaceholders={imagePlaceholders} + generationSources={generationSources} onGeneratedDraft={(content) => { setGeneratedDraft(content); void savePost({ generatedDraft: content }); @@ -159,6 +162,10 @@ export default function EditorShell({ onLogout: _onLogout, initialPostId, onBack setImagePlaceholders(placeholders); void savePost({ imagePlaceholders: placeholders }); }} + onGenerationSources={(sources) => { + setGenerationSources(sources); + void savePost({ generationSources: sources }); + }} /> )} diff --git a/apps/admin/src/components/steps/StepGenerate.tsx b/apps/admin/src/components/steps/StepGenerate.tsx index c83078c..5a9ea3f 100644 --- a/apps/admin/src/components/steps/StepGenerate.tsx +++ b/apps/admin/src/components/steps/StepGenerate.tsx @@ -14,8 +14,10 @@ export default function StepGenerate({ onChangePrompt, generatedDraft, imagePlaceholders, + generationSources, onGeneratedDraft, onImagePlaceholders, + onGenerationSources, }: { postClips: Clip[]; genImageKeys: string[]; @@ -24,13 +26,14 @@ export default function StepGenerate({ onChangePrompt: (v: string) => void; generatedDraft: string; imagePlaceholders: string[]; + generationSources: Array<{ title: string; url: string }>; onGeneratedDraft: (content: string) => void; onImagePlaceholders: (placeholders: string[]) => void; + onGenerationSources: (sources: Array<{ title: string; url: string }>) => void; }) { const [generating, setGenerating] = useState(false); const [error, setError] = useState(''); const [useWebSearch, setUseWebSearch] = useState(false); - const [sources, setSources] = useState>([]); return ( - {sources.length > 0 && ( + {generationSources.length > 0 && ( - Sources ({sources.length}): + Sources ({generationSources.length}): - {sources.map((source, idx) => ( + {generationSources.map((source: { title: string; url: string }, idx: number) => ( {idx + 1}. {source.title} diff --git a/apps/admin/src/hooks/usePostEditor.ts b/apps/admin/src/hooks/usePostEditor.ts index 2ad8ace..b656e9e 100644 --- a/apps/admin/src/hooks/usePostEditor.ts +++ b/apps/admin/src/hooks/usePostEditor.ts @@ -18,6 +18,7 @@ export function usePostEditor(initialPostId?: string | null) { const [genImageKeys, setGenImageKeys] = useState([]); const [generatedDraft, setGeneratedDraft] = useState(''); const [imagePlaceholders, setImagePlaceholders] = useState([]); + const [generationSources, setGenerationSources] = useState>([]); const autoSaveTimeoutRef = useRef | null>(null); useEffect(() => { @@ -45,6 +46,7 @@ export function usePostEditor(initialPostId?: string | null) { if (Array.isArray(data.selectedImageKeys)) setGenImageKeys(data.selectedImageKeys); if (data.generatedDraft) setGeneratedDraft(data.generatedDraft); if (Array.isArray(data.imagePlaceholders)) setImagePlaceholders(data.imagePlaceholders); + if (Array.isArray(data.generationSources)) setGenerationSources(data.generationSources); } catch {} })(); } @@ -64,6 +66,7 @@ export function usePostEditor(initialPostId?: string | null) { selectedImageKeys: genImageKeys.length > 0 ? genImageKeys : undefined, generatedDraft: generatedDraft || undefined, imagePlaceholders: imagePlaceholders.length > 0 ? imagePlaceholders : undefined, + generationSources: generationSources.length > 0 ? generationSources : undefined, ...(overrides || {}), }; const data = await savePostApi(payload); @@ -75,7 +78,7 @@ export function usePostEditor(initialPostId?: string | null) { setToast({ open: true, message: 'Post saved', severity: 'success' }); } return data; - }, [postId, draft, meta, postStatus, promptText, genImageKeys, generatedDraft, imagePlaceholders]); + }, [postId, draft, meta, postStatus, promptText, genImageKeys, generatedDraft, imagePlaceholders, generationSources]); const deletePost = async () => { if (!postId) return; @@ -176,6 +179,7 @@ export function usePostEditor(initialPostId?: string | null) { genImageKeys, generatedDraft, imagePlaceholders, + generationSources, // setters setDraft, setMeta, @@ -186,6 +190,7 @@ export function usePostEditor(initialPostId?: string | null) { setActiveStep, setGeneratedDraft, setImagePlaceholders, + setGenerationSources, // actions savePost, deletePost, diff --git a/apps/admin/src/services/posts.ts b/apps/admin/src/services/posts.ts index 40c318d..f2bc17c 100644 --- a/apps/admin/src/services/posts.ts +++ b/apps/admin/src/services/posts.ts @@ -10,6 +10,7 @@ export type SavePostPayload = { selectedImageKeys?: string[]; generatedDraft?: string; imagePlaceholders?: string[]; + generationSources?: Array<{ title: string; url: string }>; }; export async function getPost(id: string) {