From e92037cc7dd8f96fe144aa367264d08db52fe154 Mon Sep 17 00:00:00 2001
From: timothycarambat <rambat1010@gmail.com>
Date: Wed, 12 Jun 2024 12:21:37 -0700
Subject: [PATCH] update ModalWrapper component for `noPortal` prop

---
 .../src/components/ModalWrapper/index.jsx     | 22 ++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/frontend/src/components/ModalWrapper/index.jsx b/frontend/src/components/ModalWrapper/index.jsx
index bd3995ce4..b780e5731 100644
--- a/frontend/src/components/ModalWrapper/index.jsx
+++ b/frontend/src/components/ModalWrapper/index.jsx
@@ -1,8 +1,28 @@
 import { createPortal } from "react-dom";
+/**
+ * @typedef {Object} ModalWrapperProps
+ * @property {import("react").ReactComponentElement} children - The DOM/JSX to render 
+ * @property {boolean} isOpen - Option that renders the modal
+ * @property {boolean} noPortal - (default: false) Used for creating sub-DOM modals that need to be rendered as a child element instead of a modal placed at the root
+ * Note: This can impact the bg-overlay presentation due to conflicting DOM positions so if using this property you should
+   double check it renders as desired.
+ */
 
-export default function ModalWrapper({ children, isOpen }) {
+/**
+ * @param {ModalWrapperProps} props - ModalWrapperProps to pass
+ * @returns {import("react").ReactNode}
+ */
+export default function ModalWrapper({ children, isOpen, noPortal = false }) {
   if (!isOpen) return null;
 
+  if (noPortal) {
+    return (
+      <div className="bg-black/60 backdrop-blur-sm fixed top-0 left-0 outline-none w-screen h-screen flex items-center justify-center z-30">
+        {children}
+      </div>
+    );
+  }
+
   return createPortal(
     <div className="bg-black/60 backdrop-blur-sm fixed top-0 left-0 outline-none w-screen h-screen flex items-center justify-center z-30">
       {children}
-- 
GitLab