diff --git a/packages/types/src/issues/issue.d.ts b/packages/types/src/issues/issue.d.ts index e51bfa36d0..a9d8970f90 100644 --- a/packages/types/src/issues/issue.d.ts +++ b/packages/types/src/issues/issue.d.ts @@ -119,7 +119,7 @@ export type TBulkOperationsPayload = { properties: Partial; }; -export type TIssueDetailWidget = "sub-issues" | "relations" | "links" | "attachments"; +export type TWorkItemWidgets = "sub-work-items" | "relations" | "links" | "attachments"; export type TIssueServiceType = EIssueServiceType.ISSUES | EIssueServiceType.EPICS | EIssueServiceType.WORK_ITEMS; diff --git a/web/ce/components/issues/issue-detail-widgets/action-buttons.tsx b/web/ce/components/issues/issue-detail-widgets/action-buttons.tsx new file mode 100644 index 0000000000..1312c08395 --- /dev/null +++ b/web/ce/components/issues/issue-detail-widgets/action-buttons.tsx @@ -0,0 +1,14 @@ +import { FC } from "react"; +// plane types +import { TIssueServiceType, TWorkItemWidgets } from "@plane/types"; + +export type TWorkItemAdditionalWidgetActionButtonsProps = { + disabled: boolean; + hideWidgets: TWorkItemWidgets[]; + issueServiceType: TIssueServiceType; + projectId: string; + workItemId: string; + workspaceSlug: string; +}; + +export const WorkItemAdditionalWidgetActionButtons: FC = () => null; diff --git a/web/ce/components/issues/issue-detail-widgets/additional-widgets.tsx b/web/ce/components/issues/issue-detail-widgets/additional-widgets.tsx deleted file mode 100644 index 04288603ab..0000000000 --- a/web/ce/components/issues/issue-detail-widgets/additional-widgets.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { FC } from "react"; - -export type TWorkItemAdditionalWidgets = { - workspaceSlug: string; - projectId: string; - workItemId: string; - disabled: boolean; -}; - -export const WorkItemAdditionalWidgets: FC = (props) => <>; diff --git a/web/ce/components/issues/issue-detail-widgets/collapsibles.tsx b/web/ce/components/issues/issue-detail-widgets/collapsibles.tsx new file mode 100644 index 0000000000..a9a6a1b295 --- /dev/null +++ b/web/ce/components/issues/issue-detail-widgets/collapsibles.tsx @@ -0,0 +1,14 @@ +import { FC } from "react"; +// plane types +import { TIssueServiceType, TWorkItemWidgets } from "@plane/types"; + +export type TWorkItemAdditionalWidgetCollapsiblesProps = { + disabled: boolean; + hideWidgets: TWorkItemWidgets[]; + issueServiceType: TIssueServiceType; + projectId: string; + workItemId: string; + workspaceSlug: string; +}; + +export const WorkItemAdditionalWidgetCollapsibles: FC = () => null; diff --git a/web/ce/components/issues/issue-detail-widgets/index.ts b/web/ce/components/issues/issue-detail-widgets/index.ts deleted file mode 100644 index a972c50538..0000000000 --- a/web/ce/components/issues/issue-detail-widgets/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./additional-widgets"; diff --git a/web/ce/components/issues/issue-detail-widgets/modals.tsx b/web/ce/components/issues/issue-detail-widgets/modals.tsx new file mode 100644 index 0000000000..2e9dfe40d5 --- /dev/null +++ b/web/ce/components/issues/issue-detail-widgets/modals.tsx @@ -0,0 +1,13 @@ +import { FC } from "react"; +// plane types +import { TIssueServiceType, TWorkItemWidgets } from "@plane/types"; + +export type TWorkItemAdditionalWidgetModalsProps = { + hideWidgets: TWorkItemWidgets[]; + issueServiceType: TIssueServiceType; + projectId: string; + workItemId: string; + workspaceSlug: string; +}; + +export const WorkItemAdditionalWidgetModals: FC = () => null; diff --git a/web/core/components/issues/issue-detail-widgets/action-buttons.tsx b/web/core/components/issues/issue-detail-widgets/action-buttons.tsx index 29d1ff00d3..27b6b4265c 100644 --- a/web/core/components/issues/issue-detail-widgets/action-buttons.tsx +++ b/web/core/components/issues/issue-detail-widgets/action-buttons.tsx @@ -4,7 +4,7 @@ import React, { FC } from "react"; import { Layers, Link, Paperclip, Waypoints } from "lucide-react"; // plane imports import { useTranslation } from "@plane/i18n"; -import { TIssueServiceType } from "@plane/types"; +import { TIssueServiceType, TWorkItemWidgets } from "@plane/types"; // components import { IssueAttachmentActionButton, @@ -12,8 +12,9 @@ import { RelationActionButton, SubIssuesActionButton, IssueDetailWidgetButton, - TWorkItemWidgets, } from "@/components/issues/issue-detail-widgets"; +// plane web imports +import { WorkItemAdditionalWidgetActionButtons } from "@/plane-web/components/issues/issue-detail-widgets/action-buttons"; type Props = { workspaceSlug: string; @@ -88,6 +89,14 @@ export const IssueDetailWidgetActionButtons: FC = (props) => { issueServiceType={issueServiceType} /> )} + ); }; diff --git a/web/core/components/issues/issue-detail-widgets/issue-detail-widget-collapsibles.tsx b/web/core/components/issues/issue-detail-widgets/issue-detail-widget-collapsibles.tsx index f73114effc..ec3302d611 100644 --- a/web/core/components/issues/issue-detail-widgets/issue-detail-widget-collapsibles.tsx +++ b/web/core/components/issues/issue-detail-widgets/issue-detail-widget-collapsibles.tsx @@ -2,19 +2,18 @@ import React, { FC } from "react"; import { observer } from "mobx-react"; // plane imports -import { TIssueServiceType } from "@plane/types"; +import { TIssueServiceType, TWorkItemWidgets } from "@plane/types"; // components import { AttachmentsCollapsible, LinksCollapsible, RelationsCollapsible, SubIssuesCollapsible, - TWorkItemWidgets, } from "@/components/issues/issue-detail-widgets"; // hooks import { useIssueDetail } from "@/hooks/store"; // Plane-web -import { WorkItemAdditionalWidgets } from "@/plane-web/components/issues/issue-detail-widgets"; +import { WorkItemAdditionalWidgetCollapsibles } from "@/plane-web/components/issues/issue-detail-widgets/collapsibles"; import { useTimeLineRelationOptions } from "@/plane-web/components/relations"; type Props = { @@ -87,11 +86,13 @@ export const IssueDetailWidgetCollapsibles: FC = observer((props) => { issueServiceType={issueServiceType} /> )} - ); diff --git a/web/core/components/issues/issue-detail-widgets/issue-detail-widget-modals.tsx b/web/core/components/issues/issue-detail-widgets/issue-detail-widget-modals.tsx index f68d3dad60..d798798724 100644 --- a/web/core/components/issues/issue-detail-widgets/issue-detail-widget-modals.tsx +++ b/web/core/components/issues/issue-detail-widgets/issue-detail-widget-modals.tsx @@ -1,18 +1,19 @@ import React, { FC } from "react"; import { observer } from "mobx-react"; -import { ISearchIssueResponse, TIssue, TIssueServiceType } from "@plane/types"; +import { ISearchIssueResponse, TIssue, TIssueServiceType, TWorkItemWidgets } from "@plane/types"; import { setToast, TOAST_TYPE } from "@plane/ui"; // components import { ExistingIssuesListModal } from "@/components/core"; import { CreateUpdateIssueModal } from "@/components/issues/issue-modal"; // hooks import { useIssueDetail } from "@/hooks/store"; - +// plane web imports +import { WorkItemAdditionalWidgetModals } from "@/plane-web/components/issues/issue-detail-widgets/modals"; +// local imports import { IssueLinkCreateUpdateModal } from "../issue-detail/links/create-update-link-modal"; // helpers import { useLinkOperations } from "./links/helper"; import { useSubIssueOperations } from "./sub-issues/helper"; -import { TWorkItemWidgets } from "."; type Props = { workspaceSlug: string; @@ -65,7 +66,7 @@ export const IssueDetailWidgetModals: FC = observer((props) => { const handleExistingIssuesModalClose = () => { handleIssueCrudState("existing", null, null); - setLastWidgetAction("sub-issues"); + setLastWidgetAction("sub-work-items"); toggleSubIssuesModal(null); }; @@ -80,7 +81,7 @@ export const IssueDetailWidgetModals: FC = observer((props) => { const handleCreateUpdateModalClose = () => { handleIssueCrudState("create", null, null); toggleCreateIssueModal(false); - setLastWidgetAction("sub-issues"); + setLastWidgetAction("sub-work-items"); }; const handleCreateUpdateModalOnSubmit = async (_issue: TIssue) => { @@ -190,6 +191,14 @@ export const IssueDetailWidgetModals: FC = observer((props) => { workspaceLevelToggle /> )} + + ); }); diff --git a/web/core/components/issues/issue-detail-widgets/root.tsx b/web/core/components/issues/issue-detail-widgets/root.tsx index b1cebf9b11..ef8b8c285d 100644 --- a/web/core/components/issues/issue-detail-widgets/root.tsx +++ b/web/core/components/issues/issue-detail-widgets/root.tsx @@ -2,7 +2,7 @@ import React, { FC } from "react"; // plane imports -import { TIssueServiceType } from "@plane/types"; +import { TIssueServiceType, TWorkItemWidgets } from "@plane/types"; // components import { IssueDetailWidgetActionButtons, @@ -10,8 +10,6 @@ import { IssueDetailWidgetModals, } from "@/components/issues/issue-detail-widgets"; -export type TWorkItemWidgets = "sub-work-items" | "relations" | "links" | "attachments"; - type Props = { workspaceSlug: string; projectId: string; diff --git a/web/core/components/issues/issue-detail-widgets/sub-issues/root.tsx b/web/core/components/issues/issue-detail-widgets/sub-issues/root.tsx index adea10b7d8..a48d2ef5cc 100644 --- a/web/core/components/issues/issue-detail-widgets/sub-issues/root.tsx +++ b/web/core/components/issues/issue-detail-widgets/sub-issues/root.tsx @@ -22,12 +22,12 @@ export const SubIssuesCollapsible: FC = observer((props) => { // store hooks const { openWidgets, toggleOpenWidget } = useIssueDetail(issueServiceType); // derived values - const isCollapsibleOpen = openWidgets.includes("sub-issues"); + const isCollapsibleOpen = openWidgets.includes("sub-work-items"); return ( toggleOpenWidget("sub-issues")} + onToggle={() => toggleOpenWidget("sub-work-items")} title={ void; toggleSubIssuesModal: (value: string | null) => void; toggleDeleteAttachmentModal: (attachmentId: string | null) => void; - setOpenWidgets: (state: TIssueDetailWidget[]) => void; - setLastWidgetAction: (action: TIssueDetailWidget) => void; - toggleOpenWidget: (state: TIssueDetailWidget) => void; + setOpenWidgets: (state: TWorkItemWidgets[]) => void; + setLastWidgetAction: (action: TWorkItemWidgets) => void; + toggleOpenWidget: (state: TWorkItemWidgets) => void; setRelationKey: (relationKey: TIssueRelationTypes | null) => void; setIssueCrudOperationState: (state: TIssueCrudOperationState) => void; // store @@ -131,8 +131,8 @@ export class IssueDetail implements IIssueDetail { issue: undefined, }, }; - openWidgets: TIssueDetailWidget[] = ["sub-issues", "links", "attachments"]; - lastWidgetAction: TIssueDetailWidget | null = null; + openWidgets: TWorkItemWidgets[] = ["sub-work-items", "links", "attachments"]; + lastWidgetAction: TWorkItemWidgets | null = null; isCreateIssueModalOpen: boolean = false; isIssueLinkModalOpen: boolean = false; isParentIssueModalOpen: string | null = null; @@ -238,14 +238,14 @@ export class IssueDetail implements IIssueDetail { (this.isRelationModalOpen = { issueId, relationType }); toggleSubIssuesModal = (issueId: string | null) => (this.isSubIssuesModalOpen = issueId); toggleDeleteAttachmentModal = (attachmentId: string | null) => (this.attachmentDeleteModalId = attachmentId); - setOpenWidgets = (state: TIssueDetailWidget[]) => { + setOpenWidgets = (state: TWorkItemWidgets[]) => { this.openWidgets = state; if (this.lastWidgetAction) this.lastWidgetAction = null; }; - setLastWidgetAction = (action: TIssueDetailWidget) => { + setLastWidgetAction = (action: TWorkItemWidgets) => { this.openWidgets = [action]; }; - toggleOpenWidget = (state: TIssueDetailWidget) => { + toggleOpenWidget = (state: TWorkItemWidgets) => { if (this.openWidgets && this.openWidgets.includes(state)) this.openWidgets = this.openWidgets.filter((s) => s !== state); else this.openWidgets = [state, ...this.openWidgets];