@tsc_tech/medusa-plugin-notification-template
Version:
65 lines (64 loc) • 2.22 kB
JavaScript
import { jsx } from "react/jsx-runtime";
import { FocusModal, clx } from "@medusajs/ui";
import { useState, useEffect } from "react";
import { useNavigate } from "react-router-dom";
import { RouteModalProvider } from "../route-modal-provider/route-provider.js";
import { useRouteModal } from "../route-modal-provider/use-route-modal.js";
import { StackedModalProvider } from "../stacked-modal-provider/stacked-modal-provider.js";
import "../stacked-modal-provider/stacked-modal-context.js";
import { useStateAwareTo } from "../../../../hooks/use-state-aware-to.js";
const Root = ({ prev = "..", children }) => {
const navigate = useNavigate();
const [open, setOpen] = useState(false);
const [stackedModalOpen, onStackedModalOpen] = useState(false);
const to = useStateAwareTo(prev);
useEffect(() => {
setOpen(true);
return () => {
setOpen(false);
onStackedModalOpen(false);
};
}, []);
const handleOpenChange = (open2) => {
if (!open2) {
document.body.style.pointerEvents = "auto";
navigate(to, { replace: true });
return;
}
setOpen(open2);
};
return /* @__PURE__ */ jsx(FocusModal, { open, onOpenChange: handleOpenChange, children: /* @__PURE__ */ jsx(RouteModalProvider, { prev: to, children: /* @__PURE__ */ jsx(StackedModalProvider, { onOpenChange: onStackedModalOpen, children: /* @__PURE__ */ jsx(Content, { stackedModalOpen, children }) }) }) });
};
const Content = ({ stackedModalOpen, children }) => {
const { __internal } = useRouteModal();
const shouldPreventClose = !__internal.closeOnEscape;
return /* @__PURE__ */ jsx(
FocusModal.Content,
{
onEscapeKeyDown: shouldPreventClose ? (e) => {
e.preventDefault();
} : void 0,
className: clx({
"!bg-ui-bg-disabled !inset-x-5 !inset-y-3": stackedModalOpen
}),
children
}
);
};
const Header = FocusModal.Header;
const Title = FocusModal.Title;
const Description = FocusModal.Description;
const Footer = FocusModal.Footer;
const Body = FocusModal.Body;
const Close = FocusModal.Close;
const RouteFocusModal = Object.assign(Root, {
Header,
Title,
Body,
Description,
Footer,
Close
});
export {
RouteFocusModal
};