mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2025-11-17 10:11:31 +10:00
45 lines
1.3 KiB
TypeScript
45 lines
1.3 KiB
TypeScript
import { useEffect } from "react";
|
|
import { Outlet } from "react-router-dom";
|
|
|
|
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);
|
|
if (event.data.type === "SET_THEME") {
|
|
event.data.payload === "dark"
|
|
? document.documentElement.classList.add("dark")
|
|
: document.documentElement.classList.remove("dark");
|
|
}
|
|
};
|
|
|
|
const resumeData = window.localStorage.getItem("resume");
|
|
if (resumeData) {
|
|
setResume(JSON.parse(resumeData));
|
|
return;
|
|
}
|
|
|
|
window.addEventListener("message", handleMessage);
|
|
|
|
return () => {
|
|
window.removeEventListener("message", handleMessage);
|
|
};
|
|
}, [setResume]);
|
|
|
|
// Only for testing, in production this will be fetched from window.postMessage
|
|
// useEffect(() => {
|
|
// setResume(sampleResume);
|
|
// }, [setResume]);
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
if (!resume) return null;
|
|
|
|
return <Outlet />;
|
|
};
|