Procházet zdrojové kódy

fix: reliable auto-trigger for Steps 0/1/2 in marathon mode — remove brittle conditions, add short delay

nonvioce před 6 měsíci
rodič
revize
389438d348

+ 4 - 3
src/app/features/novel-writer/components/pipeline/Step0ControlCard.tsx

@@ -69,11 +69,12 @@ export default function Step0ControlCard({
 
   // Auto-mode: auto-trigger generation on mount
   useEffect(() => {
-    if (autoMode && apiSettings && !autoModeStartedRef.current && !savedControlCard) {
+    if (autoMode && apiSettings && !autoModeStartedRef.current) {
       autoModeStartedRef.current = true;
-      handleGenerate();
+      const timer = setTimeout(() => handleGenerate(), 200);
+      return () => clearTimeout(timer);
     }
-  }, [autoMode]); // eslint-disable-line react-hooks/exhaustive-deps
+  }, [autoMode, apiSettings]);
 
   const handleGenerate = async () => {
     if (!apiSettings) return;

+ 4 - 3
src/app/features/novel-writer/components/pipeline/Step2EmbedHooks.tsx

@@ -46,11 +46,12 @@ export default function Step2EmbedHooks({
 
   // Auto-mode: auto-trigger generation on mount
   useEffect(() => {
-    if (autoMode && apiSettings && !autoModeStartedRef.current && hookOptions.length === 0) {
+    if (autoMode && apiSettings && !autoModeStartedRef.current) {
       autoModeStartedRef.current = true;
-      generateHookOptions();
+      const timer = setTimeout(() => generateHookOptions(), 200);
+      return () => clearTimeout(timer);
     }
-  }, [autoMode]); // eslint-disable-line react-hooks/exhaustive-deps
+  }, [autoMode, apiSettings]);
 
   // Auto-mode: auto-advance after hooks are generated
   useEffect(() => {

+ 5 - 3
src/app/features/novel-writer/components/pipeline/Step4ContentEditor.tsx

@@ -677,11 +677,13 @@ ${antiText}
   const autoContentStartedRef = useRef(false);
   const autoDeAIStartedRef = useRef(false);
   useEffect(() => {
-    if (autoMode && apiSettings && !autoContentStartedRef.current && !content && !isGenerating) {
+    if (autoMode && apiSettings && !autoContentStartedRef.current && !isGenerating) {
       autoContentStartedRef.current = true;
-      generateContent();
+      // Small delay to ensure all state is initialized
+      const timer = setTimeout(() => generateContent(), 200);
+      return () => clearTimeout(timer);
     }
-  }, [autoMode]); // eslint-disable-line react-hooks/exhaustive-deps
+  }, [autoMode, apiSettings, isGenerating]);
 
   // Auto-mode: auto-run de-AI after generation, then auto-advance
   useEffect(() => {