mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-05-09 04:02:40 -05:00
57 lines
1.0 KiB
TypeScript
57 lines
1.0 KiB
TypeScript
import { useEffect, useRef } from "react";
|
|
import { useLocation } from "react-router";
|
|
|
|
declare global {
|
|
interface Window {
|
|
fusetag: {
|
|
que: Array<() => void>;
|
|
pageInit?: () => void;
|
|
registerZone?: (id: string) => void;
|
|
};
|
|
}
|
|
}
|
|
|
|
function callPageInit() {
|
|
window.fusetag = window.fusetag || { que: [] };
|
|
window.fusetag.que.push(() => {
|
|
window.fusetag.pageInit?.();
|
|
});
|
|
}
|
|
|
|
export function FusePageInit() {
|
|
const { pathname } = useLocation();
|
|
const previousPathname = useRef(pathname);
|
|
|
|
useEffect(() => {
|
|
callPageInit();
|
|
}, []);
|
|
|
|
useEffect(() => {
|
|
if (previousPathname.current === pathname) return;
|
|
|
|
previousPathname.current = pathname;
|
|
callPageInit();
|
|
});
|
|
|
|
return null;
|
|
}
|
|
|
|
export function FuseZone({
|
|
id,
|
|
fuseSlot,
|
|
className,
|
|
}: {
|
|
id: string;
|
|
fuseSlot: string;
|
|
className?: string;
|
|
}) {
|
|
useEffect(() => {
|
|
window.fusetag = window.fusetag || { que: [] };
|
|
window.fusetag.que.push(() => {
|
|
window.fusetag.registerZone?.(id);
|
|
});
|
|
}, [id]);
|
|
|
|
return <div id={id} data-fuse={fuseSlot} className={className} />;
|
|
}
|