(
(props, forwardedRef) => {
const {
href,
message,
display = true,
className,
storageKey = 'rp-banner-closed',
storage = 'localStorage',
customChildren,
} = props as {
href?: string;
message?: string | ReactNode;
display?: boolean;
className?: string;
storageKey?: string;
storage?: 'localStorage' | 'sessionStorage' | false;
customChildren?: ReactNode;
};
const [height, setHeight] = useState(36);
const ref = mergeRefs(forwardedRef, element => {
if (element?.offsetHeight) {
setHeight(element?.offsetHeight);
}
});
const [disable, setDisable] = useState(false);
// TODO: support SSR
useEffect(() => {
if (typeof window === 'undefined' || !storage || !storageKey) {
return;
}
setDisable(Boolean(window[storage].getItem(storageKey)));
}, []);
if (!display || disable) {
return null;
}
return (
<>
{customChildren ?? (
<>
{message}
{
setDisable(true);
if (storage) {
window[storage].setItem(storageKey, 'true');
}
}}
className="rp-banner__close"
/>
>
)}
>
);
},
);