import { t } from "@lingui/macro"; import type { ResumeDto } from "@reactive-resume/dto"; import { useCallback, useEffect } from "react"; import { Helmet } from "react-helmet-async"; import type { LoaderFunction } from "react-router"; import { redirect } from "react-router"; import { queryClient } from "@/client/libs/query-client"; import { findResumeById } from "@/client/services/resume"; import { useBuilderStore } from "@/client/stores/builder"; import { useResumeStore } from "@/client/stores/resume"; export const BuilderPage = () => { const frameRef = useBuilderStore((state) => state.frame.ref); const setFrameRef = useBuilderStore((state) => state.frame.setRef); const resume = useResumeStore((state) => state.resume); const title = useResumeStore((state) => state.resume.title); const updateResumeInFrame = useCallback(() => { const message = { type: "SET_RESUME", payload: resume.data }; setImmediate(() => { frameRef?.contentWindow?.postMessage(message, "*"); }); }, [frameRef?.contentWindow, resume.data]); // Send resume data to iframe on initial load useEffect(() => { if (!frameRef) return; frameRef.addEventListener("load", updateResumeInFrame); return () => { frameRef.removeEventListener("load", updateResumeInFrame); }; }, [frameRef]); // Send resume data to iframe on change of resume data useEffect(updateResumeInFrame, [resume.data]); return ( <> {title} - {t`Reactive Resume`}