diff --git a/electron/servers/nextjs/app/(presentation-generator)/outline/hooks/useOutlineStreaming.ts b/electron/servers/nextjs/app/(presentation-generator)/outline/hooks/useOutlineStreaming.ts index edbcbb6c..0a556d2a 100644 --- a/electron/servers/nextjs/app/(presentation-generator)/outline/hooks/useOutlineStreaming.ts +++ b/electron/servers/nextjs/app/(presentation-generator)/outline/hooks/useOutlineStreaming.ts @@ -4,6 +4,7 @@ import { toast } from "sonner"; import { setOutlines } from "@/store/slices/presentationGeneration"; import { jsonrepair } from "jsonrepair"; import { RootState } from "@/store/store"; +import { getFastAPIUrl } from "@/utils/api"; @@ -28,9 +29,7 @@ export const useOutlineStreaming = (presentationId: string | null) => { setIsStreaming(true) setIsLoading(true) try { - eventSource = new EventSource( - `/api/v1/ppt/outlines/stream/${presentationId}` - ); + eventSource = new EventSource(`${getFastAPIUrl()}/api/v1/ppt/outlines/stream/${presentationId}`) ; eventSource.addEventListener("response", (event) => { const data = JSON.parse(event.data); diff --git a/electron/servers/nextjs/app/(presentation-generator)/pdf-maker/PdfMakerPage.tsx b/electron/servers/nextjs/app/(presentation-generator)/pdf-maker/PdfMakerPage.tsx index 3ab5272f..67792250 100644 --- a/electron/servers/nextjs/app/(presentation-generator)/pdf-maker/PdfMakerPage.tsx +++ b/electron/servers/nextjs/app/(presentation-generator)/pdf-maker/PdfMakerPage.tsx @@ -10,6 +10,7 @@ import { trackEvent, MixpanelEvent } from "@/utils/mixpanel"; import { AlertCircle } from "lucide-react"; import { setPresentationData } from "@/store/slices/presentationGeneration"; import { DashboardApi } from "../services/api/dashboard"; +import { setupImageUrlConverter } from "@/utils/image-url-converter"; import { V1ContentRender } from "../components/V1ContentRender"; @@ -43,6 +44,13 @@ const PresentationPage = ({ presentation_id }: { presentation_id: string }) => { } } }, [presentationData]); + + // Ensure /app_data and /static image paths resolve through FastAPI in Electron. + useEffect(() => { + const observer = setupImageUrlConverter(); + return () => observer?.disconnect(); + }, []); + // Function to fetch the slides useEffect(() => { fetchUserSlides(); diff --git a/electron/servers/nextjs/app/(presentation-generator)/presentation/components/PresentationPage.tsx b/electron/servers/nextjs/app/(presentation-generator)/presentation/components/PresentationPage.tsx index bc03b7b8..931ac183 100644 --- a/electron/servers/nextjs/app/(presentation-generator)/presentation/components/PresentationPage.tsx +++ b/electron/servers/nextjs/app/(presentation-generator)/presentation/components/PresentationPage.tsx @@ -16,8 +16,10 @@ import { usePresentationNavigation, useAutoSave, } from "../hooks"; +import { useEffect } from "react"; import { PresentationPageProps } from "../types"; import LoadingState from "./LoadingState"; +import { setupImageUrlConverter } from "@/utils/image-url-converter"; import { usePresentationUndoRedo } from "../hooks/PresentationUndoRedo"; import PresentationHeader from "./PresentationHeader"; @@ -32,6 +34,12 @@ const PresentationPage: React.FC = ({ const [isFullscreen, setIsFullscreen] = useState(false); const [error, setError] = useState(false); + // Ensure /app_data and /static image paths resolve through FastAPI in Electron. + useEffect(() => { + const observer = setupImageUrlConverter(); + return () => observer?.disconnect(); + }, []); + const { presentationData, isStreaming } = useSelector( (state: RootState) => state.presentationGeneration diff --git a/electron/servers/nextjs/app/(presentation-generator)/presentation/hooks/usePresentationStreaming.ts b/electron/servers/nextjs/app/(presentation-generator)/presentation/hooks/usePresentationStreaming.ts index aafc7a5e..58cddf4e 100644 --- a/electron/servers/nextjs/app/(presentation-generator)/presentation/hooks/usePresentationStreaming.ts +++ b/electron/servers/nextjs/app/(presentation-generator)/presentation/hooks/usePresentationStreaming.ts @@ -8,6 +8,7 @@ import { import { jsonrepair } from "jsonrepair"; import { toast } from "sonner"; import { MixpanelEvent, trackEvent } from "@/utils/mixpanel"; +import {getFastAPIUrl} from "@/utils/api"; export const usePresentationStreaming = ( presentationId: string, @@ -30,7 +31,7 @@ export const usePresentationStreaming = ( trackEvent(MixpanelEvent.Presentation_Stream_API_Call); eventSource = new EventSource( - `/api/v1/ppt/presentation/stream/${presentationId}` + `${getFastAPIUrl()}/api/v1/ppt/presentation/stream/${presentationId}` ); eventSource.addEventListener("response", (event) => {