mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2025-11-15 17:21:35 +10:00
40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
import { useEffect } from "react";
|
|
import { HelmetProvider } from "react-helmet-async";
|
|
import { Outlet } from "react-router";
|
|
|
|
import { helmetContext } from "../constants/helmet";
|
|
import { useArtboardStore } from "../store/artboard";
|
|
|
|
export const Providers = () => {
|
|
const resume = useArtboardStore((state) => state.resume);
|
|
const setResume = useArtboardStore((state) => state.setResume);
|
|
|
|
useEffect(() => {
|
|
const handleMessage = (event: MessageEvent) => {
|
|
if (event.origin !== window.location.origin) return;
|
|
if (event.data.type === "SET_RESUME") setResume(event.data.payload);
|
|
};
|
|
|
|
window.addEventListener("message", handleMessage, false);
|
|
|
|
return () => {
|
|
window.removeEventListener("message", handleMessage, false);
|
|
};
|
|
}, []);
|
|
|
|
useEffect(() => {
|
|
const resumeData = window.localStorage.getItem("resume");
|
|
|
|
if (resumeData) setResume(JSON.parse(resumeData));
|
|
}, [window.localStorage.getItem("resume")]);
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
if (!resume) return null;
|
|
|
|
return (
|
|
<HelmetProvider context={helmetContext}>
|
|
<Outlet />
|
|
</HelmetProvider>
|
|
);
|
|
};
|