"use client";
import { Suspense, useEffect, useState } from "react";
import { ReactFlowProvider } from "@xyflow/react";
import { Header } from "@/components/Header";
import { WorkflowCanvas } from "@/components/WorkflowCanvas";
import { FloatingActionBar } from "@/components/FloatingActionBar";
import { AnnotationModal } from "@/components/AnnotationModal";
import { PopiaiEmbedBridge } from "@/components/PopiaiEmbedBridge";
import { useWorkflowStore } from "@/store/workflowStore";
import { FTUXModal } from "@/components/onboarding/FTUXModal";
import { getFTUXCompleted, setFTUXCompleted } from "@/store/utils/localStorage";
import { useFTUXStore } from "@/store/ftuxStore";
import { useSearchParams } from "next/navigation";
import { useModelStore } from "@/store/modelStore";
import { isPopiProviderMode } from "@/lib/providerMode";
import { useCanvasWorkflowLoader } from "@/hooks/useCanvasWorkflowLoader";
import { useCanvasWorkflowAutoUpdate } from "@/hooks/useCanvasWorkflowAutoUpdate";
function CanvasPageContent() {
const initializeAutoSave = useWorkflowStore(
(state) => state.initializeAutoSave
);
const cleanupAutoSave = useWorkflowStore((state) => state.cleanupAutoSave);
const setShowQuickstart = useWorkflowStore((state) => state.setShowQuickstart);
const initializePopiModels = useModelStore((state) => state.initializePopiModels);
const [showFTUX, setShowFTUX] = useState(false);
const searchParams = useSearchParams();
const workflowId = searchParams.get("workflowId");
useCanvasWorkflowLoader(workflowId);
useCanvasWorkflowAutoUpdate();
useEffect(() => {
if (!isPopiProviderMode()) return;
void initializePopiModels();
}, [initializePopiModels]);
useEffect(() => {
initializeAutoSave();
return () => cleanupAutoSave();
}, [initializeAutoSave, cleanupAutoSave]);
useEffect(() => {
const handleBeforeUnload = (e: BeforeUnloadEvent) => {
if (useWorkflowStore.getState().hasUnsavedChanges) {
e.preventDefault();
}
};
window.addEventListener("beforeunload", handleBeforeUnload);
return () => window.removeEventListener("beforeunload", handleBeforeUnload);
}, []);
// Client-side only FTUX check (SSR-safe)
useEffect(() => {
const isPopiaiEmbed = new URLSearchParams(window.location.search).get("embed") === "popiai";
if (isPopiaiEmbed) {
setShowFTUX(false);
setShowQuickstart(false);
useFTUXStore.getState().resetTutorial();
return;
}
if (!getFTUXCompleted()) {
setShowFTUX(true);
}
}, [setShowQuickstart]);
const handleFTUXComplete = () => {
setShowFTUX(false);
setFTUXCompleted(true);
};
const handleStartTutorial = () => {
setShowFTUX(false);
setFTUXCompleted(true);
setShowQuickstart(false); // Close WelcomeModal if open
useFTUXStore.getState().startTutorial();
};
return (
);
}
export default function Home() {
return (
);
}