Updated SEO Analysis Modal

This commit is contained in:
ajaysi
2025-09-22 21:02:32 +05:30
parent f98d49cea7
commit 12119d418b
38 changed files with 5742 additions and 2337 deletions

View File

@@ -14,6 +14,8 @@ export const useBlogWriterState = () => {
const [seoMetadata, setSeoMetadata] = useState<BlogSEOMetadataResponse | null>(null);
const [continuityRefresh, setContinuityRefresh] = useState<number>(0);
const [outlineTaskId, setOutlineTaskId] = useState<string | null>(null);
const [flowAnalysisCompleted, setFlowAnalysisCompleted] = useState<boolean>(false);
const [flowAnalysisResults, setFlowAnalysisResults] = useState<any>(null);
// Enhanced metadata state
const [sourceMappingStats, setSourceMappingStats] = useState<SourceMappingStats | null>(null);
@@ -27,6 +29,9 @@ export const useBlogWriterState = () => {
// Outline confirmation state
const [outlineConfirmed, setOutlineConfirmed] = useState<boolean>(false);
// Content confirmation state
const [contentConfirmed, setContentConfirmed] = useState<boolean>(false);
// Cache recovery - restore most recent research on page load
useEffect(() => {
@@ -203,6 +208,9 @@ export const useBlogWriterState = () => {
researchTitles,
aiGeneratedTitles,
outlineConfirmed,
contentConfirmed,
flowAnalysisCompleted,
flowAnalysisResults,
// Setters
setResearch,
@@ -222,6 +230,9 @@ export const useBlogWriterState = () => {
setResearchTitles,
setAiGeneratedTitles,
setOutlineConfirmed,
setContentConfirmed,
setFlowAnalysisCompleted,
setFlowAnalysisResults,
// Handlers
handleResearchComplete,

View File

@@ -166,3 +166,12 @@ export function useMediumGenerationPolling(options: UsePollingOptions = {}) {
// eslint-disable-next-line react-hooks/rules-of-hooks
return usePolling(wrapped, options);
}
export function useRewritePolling(options: UsePollingOptions = {}) {
// Lazy import to avoid circular: poll function from blogWriterApi
const pollFn = (taskId: string) => import('../services/blogWriterApi').then(m => m.blogWriterApi.pollRewriteStatus(taskId));
// Wrap to satisfy type
const wrapped = (taskId: string) => pollFn(taskId) as unknown as Promise<TaskStatusResponse>;
// eslint-disable-next-line react-hooks/rules-of-hooks
return usePolling(wrapped, options);
}