+
Статус
{stateOptions.map((state) => (
-
-
>
);
const dateButton = (
@@ -214,7 +208,7 @@ export const InternalContourKanbanCard = observer(function InternalContourKanban
issue,
parentRef: cardRef,
customActionButton,
- menuClassName: "min-w-[18rem]",
+ menuClassName: "nodedc-work-item-action-menu",
menuContentBefore,
placement: "bottom-end",
})}
diff --git a/plane-src/apps/web/core/components/issues/issue-layouts/quick-action-dropdowns/project-issue.tsx b/plane-src/apps/web/core/components/issues/issue-layouts/quick-action-dropdowns/project-issue.tsx
index 7b4dbbb..122d5d8 100644
--- a/plane-src/apps/web/core/components/issues/issue-layouts/quick-action-dropdowns/project-issue.tsx
+++ b/plane-src/apps/web/core/components/issues/issue-layouts/quick-action-dropdowns/project-issue.tsx
@@ -12,7 +12,8 @@ import { useParams } from "next/navigation";
import { ARCHIVABLE_STATE_GROUPS, EUserPermissions, EUserPermissionsLevel } from "@plane/constants";
import type { TIssue } from "@plane/types";
import { EIssuesStoreType } from "@plane/types";
-import { ActionDropdown, ContextMenu } from "@plane/ui";
+import { ActionDropdown, ContextMenu, type TContextMenuItem } from "@plane/ui";
+import { cn } from "@plane/utils";
// hooks
import { useIssues } from "@/hooks/store/use-issues";
import { useProject } from "@/hooks/store/use-project";
@@ -102,6 +103,56 @@ export const ProjectIssueQuickActions = observer(function ProjectIssueQuickActio
};
const MENU_ITEMS = useProjectIssueMenuItems(menuItemProps);
+ const shouldUseNodedcActionGrid = menuClassName?.includes("nodedc-work-item-action-menu") ?? false;
+ const DROPDOWN_MENU_ITEMS = shouldUseNodedcActionGrid
+ ? MENU_ITEMS.filter((item) => item.key !== "open-in-new-tab")
+ : MENU_ITEMS;
+
+ const renderNodedcMenuItem = (item: TContextMenuItem, closeDropdown: () => void) => {
+ if (item.shouldRender === false) return null;
+
+ const Icon = item.icon;
+
+ return (
+
+ );
+ };
+
+ const renderNodedcMenuContent = ({ closeDropdown }: { closeDropdown: () => void }) => (
+
+ {typeof menuContentBefore === "function" ? menuContentBefore({ closeDropdown }) : menuContentBefore}
+
+
+ Быстрые действия
+
+ {DROPDOWN_MENU_ITEMS.map((item) => renderNodedcMenuItem(item, closeDropdown))}
+
+
+ );
const CONTEXT_MENU_ITEMS = MENU_ITEMS.map(function CONTEXT_MENU_ITEMS(item) {
return {
@@ -153,9 +204,10 @@ export const ProjectIssueQuickActions = observer(function ProjectIssueQuickActio
diff --git a/plane-src/apps/web/styles/globals.css b/plane-src/apps/web/styles/globals.css
index 72b0cff..6da5dda 100644
--- a/plane-src/apps/web/styles/globals.css
+++ b/plane-src/apps/web/styles/globals.css
@@ -347,6 +347,37 @@
0 6px 18px rgba(0, 0, 0, 0.2);
}
+ .nodedc-tall-action-menu > div {
+ max-height: calc(100vh - 24px) !important;
+ }
+
+ .nodedc-work-item-action-menu {
+ width: min(calc(100vw - 24px), 46rem);
+ }
+
+ .nodedc-work-item-action-grid {
+ display: grid;
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ gap: 0.5rem;
+ align-items: start;
+ }
+
+ .nodedc-work-item-action-section {
+ min-width: 0;
+ }
+
+ @media (max-width: 760px) {
+ .nodedc-work-item-action-menu {
+ width: min(calc(100vw - 24px), 18rem);
+ }
+
+ .nodedc-work-item-action-grid {
+ grid-template-columns: 1fr;
+ max-height: calc(100vh - 24px);
+ overflow-y: auto;
+ }
+ }
+
.nodedc-bottom-dock {
background:
linear-gradient(180deg, rgba(255, 255, 255, 0.024) 0%, rgba(255, 255, 255, 0.008) 100%), rgba(7, 7, 10, 0.72) !important;