+
diff --git a/apps/web/core/components/analytics/work-items/modal/index.tsx b/apps/web/core/components/analytics/work-items/modal/index.tsx
index 78b07161ec4..06d09aa1e9b 100644
--- a/apps/web/core/components/analytics/work-items/modal/index.tsx
+++ b/apps/web/core/components/analytics/work-items/modal/index.tsx
@@ -1,8 +1,9 @@
import React, { useEffect, useState } from "react";
import { observer } from "mobx-react";
-import { Dialog, Transition } from "@headlessui/react";
// plane package imports
+import { createPortal } from "react-dom";
import { ICycle, IModule, IProject } from "@plane/types";
+import { cn } from "@plane/utils";
import { useAnalytics } from "@/hooks/store";
// plane web components
import { WorkItemsModalMainContent } from "./content";
@@ -23,6 +24,7 @@ export const WorkItemsModal: React.FC = observer((props) => {
const [fullScreen, setFullScreen] = useState(false);
const handleClose = () => {
+ setFullScreen(false);
onClose();
};
@@ -30,50 +32,40 @@ export const WorkItemsModal: React.FC = observer((props) => {
updateIsEpic(isEpic ?? false);
}, [isEpic, updateIsEpic]);
- return (
-
-
);
+
+ return fullScreen && portalContainer ? createPortal(content, portalContainer) : content;
});
diff --git a/apps/web/core/components/gantt-chart/chart/root.tsx b/apps/web/core/components/gantt-chart/chart/root.tsx
index edc10ce52d7..11bc0ee5469 100644
--- a/apps/web/core/components/gantt-chart/chart/root.tsx
+++ b/apps/web/core/components/gantt-chart/chart/root.tsx
@@ -1,4 +1,5 @@
import { FC, useEffect, useState } from "react";
+import { createPortal } from "react-dom";
import { observer } from "mobx-react";
// plane imports
// components
@@ -176,10 +177,12 @@ export const ChartViewRoot: FC
= observer((props) => {
scrollContainer.scrollLeft = scrollWidth;
};
- return (
+ const portalContainer = document.getElementById("full-screen-portal") as HTMLElement;
+
+ const content = (
@@ -217,4 +220,6 @@ export const ChartViewRoot: FC = observer((props) => {
/>
);
+
+ return fullScreenMode && portalContainer ? createPortal(content, portalContainer) : content;
});
diff --git a/apps/web/core/components/issues/peek-overview/view.tsx b/apps/web/core/components/issues/peek-overview/view.tsx
index c30a40fb54c..8e2c1e20072 100644
--- a/apps/web/core/components/issues/peek-overview/view.tsx
+++ b/apps/web/core/components/issues/peek-overview/view.tsx
@@ -23,6 +23,7 @@ import useKeypress from "@/hooks/use-keypress";
import usePeekOverviewOutsideClickDetector from "@/hooks/use-peek-overview-outside-click";
// store hooks
import { IssueActivity } from "../issue-detail/issue-activity";
+import { createPortal } from "react-dom";
interface IIssueView {
workspaceSlug: string;
@@ -108,15 +109,151 @@ export const IssueView: FC = observer((props) => {
const peekOverviewIssueClassName = cn(
!embedIssue
- ? "fixed z-20 flex flex-col overflow-hidden rounded border border-custom-border-200 bg-custom-background-100 transition-all duration-300"
+ ? "fixed z-[25] flex flex-col overflow-hidden rounded border border-custom-border-200 bg-custom-background-100 transition-all duration-300"
: `w-full h-full`,
!embedIssue && {
"bottom-0 right-0 top-0 w-full md:w-[50%] border-0 border-l": peekMode === "side-peek",
"size-5/6 top-[8.33%] left-[8.33%]": peekMode === "modal",
- "inset-0 m-4": peekMode === "full-screen",
+ "inset-0 m-4 absolute": peekMode === "full-screen",
}
);
+ const shouldUsePortal = !embedIssue && peekMode === "full-screen";
+
+ const portalContainer = document.getElementById("full-screen-portal") as HTMLElement;
+
+ const content = (
+
+ {issueId && (
+
+ {isError ? (
+
+
+
+ ) : (
+ isLoading &&
+ )}
+ {!isLoading && !isError && issue && (
+ <>
+ {/* header */}
+
setPeekMode(value)}
+ removeRoutePeekId={removeRoutePeekId}
+ toggleDeleteIssueModal={toggleDeleteIssueModal}
+ toggleArchiveIssueModal={toggleArchiveIssueModal}
+ handleRestoreIssue={handleRestore}
+ isArchived={is_archived}
+ issueId={issueId}
+ workspaceSlug={workspaceSlug}
+ projectId={projectId}
+ isSubmitting={isSubmitting}
+ disabled={disabled}
+ embedIssue={embedIssue}
+ />
+ {/* content */}
+
+ {["side-peek", "modal"].includes(peekMode) ? (
+
+
setIsSubmitting(value)}
+ />
+
+
+
+
+
+
+
+
+
+ ) : (
+
+
+
+
setIsSubmitting(value)}
+ />
+
+
+
+
+
+
+
+
+
+
+ )}
+
+ >
+ )}
+
+ )}
+
+ );
+
return (
<>
{issue && !is_archived && (
@@ -142,135 +279,7 @@ export const IssueView: FC = observer((props) => {
/>
)}
-
- {issueId && (
-
- {isError ? (
-
-
-
- ) : (
- isLoading &&
- )}
- {!isLoading && !isError && issue && (
- <>
- {/* header */}
-
setPeekMode(value)}
- removeRoutePeekId={removeRoutePeekId}
- toggleDeleteIssueModal={toggleDeleteIssueModal}
- toggleArchiveIssueModal={toggleArchiveIssueModal}
- handleRestoreIssue={handleRestore}
- isArchived={is_archived}
- issueId={issueId}
- workspaceSlug={workspaceSlug}
- projectId={projectId}
- isSubmitting={isSubmitting}
- disabled={disabled}
- embedIssue={embedIssue}
- />
- {/* content */}
-
- {["side-peek", "modal"].includes(peekMode) ? (
-
-
setIsSubmitting(value)}
- />
-
-
-
-
-
-
-
-
-
- ) : (
-
-
-
-
setIsSubmitting(value)}
- />
-
-
-
-
-
-
-
-
-
-
- )}
-
- >
- )}
-
- )}
-
+ {shouldUsePortal && portalContainer ? createPortal(content, portalContainer) : content}
>
);
});