diff --git a/packages/react/src/components/Modal/ModalProvider.tsx b/packages/react/src/components/Modal/ModalProvider.tsx index cad3cda..3361efb 100644 --- a/packages/react/src/components/Modal/ModalProvider.tsx +++ b/packages/react/src/components/Modal/ModalProvider.tsx @@ -7,6 +7,7 @@ import React, { ReactNode, useContext, useEffect, + useId, useMemo, useState, } from "react"; @@ -112,6 +113,8 @@ export const ModalProvider = ({ modalParentSelector, }: ModalProviderProps) => { const [modals, setModals] = useState({} as ModalMap); + const modalId = useId(); + const modalParentId = `c__modals-portal-${modalId}`; useEffect(() => { ReactModal.setAppElement(".c__app"); @@ -160,10 +163,8 @@ export const ModalProvider = ({ confirmationModal: ModalHelper(ConfirmationModal), messageModal: ModalHelper(MessageModal), modalParentSelector: () => { - if (modalParentSelector) { - return modalParentSelector(); - } - return document.getElementById("c__modals-portal")!; + if (modalParentSelector) return modalParentSelector(); + return document.getElementById(modalParentId)!; }, }), [], @@ -172,7 +173,7 @@ export const ModalProvider = ({ return ( {children} -
+
{Object.entries(modals).map(([key, modal]) => ( {modal} ))} diff --git a/packages/react/src/components/Modal/index.tsx b/packages/react/src/components/Modal/index.tsx index 516c691..e557663 100644 --- a/packages/react/src/components/Modal/index.tsx +++ b/packages/react/src/components/Modal/index.tsx @@ -58,7 +58,7 @@ export type ModalProps = PropsWithChildren & { export const Modal = (props: ModalProps) => { /** * This is a workaround to prevent the modal from rendering on the first render because if the modal is open on the - * first render, it will not be able to resolve document.getElementById("c__modals-portal") which is not rendered yet. + * first render, it will not be able to resolve document.getElementById() which is not rendered yet. */ const [firstRender, setFirstRender] = React.useState(true); useEffect(() => {