ERP-node/frontend/lib/modalPortalRef.ts

32 lines
855 B
TypeScript
Raw Normal View History

"use client";
import { useState, useEffect } from "react";
/**
* .
* TabContent가 registerModalPortal(el) ,
* useModalPortal() .
* React .
*/
let _container: HTMLElement | null = null;
const _subscribers = new Set<(el: HTMLElement | null) => void>();
export function registerModalPortal(el: HTMLElement | null) {
_container = el;
_subscribers.forEach((fn) => fn(el));
}
export function useModalPortal(): HTMLElement | null {
const [el, setEl] = useState<HTMLElement | null>(_container);
useEffect(() => {
setEl(_container);
_subscribers.add(setEl);
return () => {
_subscribers.delete(setEl);
};
}, []);
return el;
}