From 2dc3780da2af9cb1d7bcacfec03239ef379f2219 Mon Sep 17 00:00:00 2001 From: Prateek Shourya Date: Mon, 30 Sep 2024 13:38:51 +0530 Subject: [PATCH 1/3] [WEB-2568] chore: minor improvements related to issue identifier and issue modal. --- .../components/issues/issue-details/index.ts | 1 + .../issue-details/issue-type-switcher.tsx | 24 +++++++++++++++++++ .../issues/issue-detail/main-content.tsx | 8 +++---- .../components/issues/issue-modal/base.tsx | 4 +++- .../components/issues/issue-modal/form.tsx | 8 +------ .../components/issues/issue-modal/modal.tsx | 14 +++++++---- .../issues/peek-overview/issue-detail.tsx | 9 +++---- .../components/issues/issue-details/index.ts | 1 + .../issue-details/issue-type-switcher.tsx | 1 + 9 files changed, 48 insertions(+), 22 deletions(-) create mode 100644 web/ce/components/issues/issue-details/issue-type-switcher.tsx create mode 100644 web/ee/components/issues/issue-details/issue-type-switcher.tsx diff --git a/web/ce/components/issues/issue-details/index.ts b/web/ce/components/issues/issue-details/index.ts index a465ed4b3b5..8a71f51f5dd 100644 --- a/web/ce/components/issues/issue-details/index.ts +++ b/web/ce/components/issues/issue-details/index.ts @@ -1,2 +1,3 @@ export * from "./issue-identifier"; export * from "./issue-properties-activity"; +export * from "./issue-type-switcher"; diff --git a/web/ce/components/issues/issue-details/issue-type-switcher.tsx b/web/ce/components/issues/issue-details/issue-type-switcher.tsx new file mode 100644 index 00000000000..5cbd8e6d67f --- /dev/null +++ b/web/ce/components/issues/issue-details/issue-type-switcher.tsx @@ -0,0 +1,24 @@ +import { observer } from "mobx-react"; +// store hooks +import { useIssueDetail } from "@/hooks/store"; +// plane web components +import { IssueIdentifier } from "@/plane-web/components/issues"; + +export type TIssueTypeSwitcherProps = { + issueId: string; + disabled: boolean; +}; + +export const IssueTypeSwitcher: React.FC = observer((props) => { + const { issueId } = props; + // store hooks + const { + issue: { getIssueById }, + } = useIssueDetail(); + // derived values + const issue = getIssueById(issueId); + + if (!issue || !issue.project_id) return <>; + + return ; +}); diff --git a/web/core/components/issues/issue-detail/main-content.tsx b/web/core/components/issues/issue-detail/main-content.tsx index 729300c17a7..0dccf616350 100644 --- a/web/core/components/issues/issue-detail/main-content.tsx +++ b/web/core/components/issues/issue-detail/main-content.tsx @@ -2,8 +2,6 @@ import { useEffect, useState } from "react"; import { observer } from "mobx-react"; -// types -import { TIssue } from "@plane/types"; // components import { IssueActivity, @@ -20,7 +18,7 @@ import { useIssueDetail, useUser } from "@/hooks/store"; import useReloadConfirmations from "@/hooks/use-reload-confirmation"; import useSize from "@/hooks/use-window-size"; // plane web components -import { IssueIdentifier } from "@/plane-web/components/issues"; +import { IssueTypeSwitcher } from "@/plane-web/components/issues"; // types import { TIssueOperations } from "./root"; @@ -68,8 +66,8 @@ export const IssueMainContent: React.FC = observer((props) => { /> )} -
- +
+
diff --git a/web/core/components/issues/issue-modal/base.tsx b/web/core/components/issues/issue-modal/base.tsx index 8ff824ec807..0d1763011c4 100644 --- a/web/core/components/issues/issue-modal/base.tsx +++ b/web/core/components/issues/issue-modal/base.tsx @@ -30,6 +30,7 @@ export const CreateUpdateIssueModalBase: React.FC = observer(( withDraftIssueWrapper = true, storeType: issueStoreFromProps, isDraft = false, + fetchIssueDetails = true, } = props; const issueStoreType = useIssueStoreType(); @@ -68,7 +69,8 @@ export const CreateUpdateIssueModalBase: React.FC = observer(( setDescription(undefined); if (!workspaceSlug) return; - if (!projectId || issueId === undefined) { + if (!projectId || issueId === undefined || !fetchIssueDetails) { + // Set description to the issue description from the props if available setDescription(data?.description_html || "

"); return; } diff --git a/web/core/components/issues/issue-modal/form.tsx b/web/core/components/issues/issue-modal/form.tsx index d18538b7f35..ec6c4219278 100644 --- a/web/core/components/issues/issue-modal/form.tsx +++ b/web/core/components/issues/issue-modal/form.tsx @@ -146,12 +146,6 @@ export const IssueFormRoot: FC = observer((props) => { useEffect(() => { const issueTypeId = watch("type_id"); - // if data is present, set active type id to the type id of the issue - if (data && data.type_id) { - setValue("type_id", data.type_id, { shouldValidate: true }); - return; - } - // if issue type id is present or project not available, return if (issueTypeId || !projectId) return; @@ -284,7 +278,7 @@ export const IssueFormRoot: FC = observer((props) => { )} diff --git a/web/core/components/issues/issue-modal/modal.tsx b/web/core/components/issues/issue-modal/modal.tsx index 0f2d3ce0008..9266cb32255 100644 --- a/web/core/components/issues/issue-modal/modal.tsx +++ b/web/core/components/issues/issue-modal/modal.tsx @@ -19,10 +19,14 @@ export interface IssuesModalProps { withDraftIssueWrapper?: boolean; storeType?: EIssuesStoreType; isDraft?: boolean; + fetchIssueDetails?: boolean; } -export const CreateUpdateIssueModal: React.FC = observer((props) => ( - - - -)); +export const CreateUpdateIssueModal: React.FC = observer( + (props) => + props.isOpen && ( + + + + ) +); diff --git a/web/core/components/issues/peek-overview/issue-detail.tsx b/web/core/components/issues/peek-overview/issue-detail.tsx index b51e2834eb2..7c801dd01ac 100644 --- a/web/core/components/issues/peek-overview/issue-detail.tsx +++ b/web/core/components/issues/peek-overview/issue-detail.tsx @@ -1,13 +1,14 @@ import { FC, useEffect } from "react"; import { observer } from "mobx-react"; -// store hooks +// components import { TIssueOperations } from "@/components/issues"; +// store hooks import { useIssueDetail, useUser } from "@/hooks/store"; // hooks import useReloadConfirmations from "@/hooks/use-reload-confirmation"; // plane web components -import { IssueIdentifier } from "@/plane-web/components/issues"; -// components +import { IssueTypeSwitcher } from "@/plane-web/components/issues"; +// local components import { IssueDescriptionInput } from "../description-input"; import { IssueReaction } from "../issue-detail/reactions"; import { IssueTitleInput } from "../title-input"; @@ -56,7 +57,7 @@ export const PeekOverviewIssueDetails: FC = observer( return (
- + Date: Mon, 30 Sep 2024 13:39:57 +0530 Subject: [PATCH 2/3] fix: error handling for session recorder script. --- web/app/layout.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/app/layout.tsx b/web/app/layout.tsx index 3784191d965..202c19df568 100644 --- a/web/app/layout.tsx +++ b/web/app/layout.tsx @@ -93,7 +93,7 @@ export default function RootLayout({ children }: { children: React.ReactNode }) {`(function(c,l,a,r,i,t,y){ c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)}; t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i; - y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y); + y=l.getElementsByTagName(r)[0];if(y)y.parentNode.insertBefore(t,y); })(window, document, "clarity", "script", "${process.env.NEXT_PUBLIC_SESSION_RECORDER_KEY}");`} )} From 131e8974cf32635044119f041e54295c971c67e4 Mon Sep 17 00:00:00 2001 From: Prateek Shourya Date: Mon, 30 Sep 2024 13:59:06 +0530 Subject: [PATCH 3/3] chore: minor improvement --- web/app/layout.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/app/layout.tsx b/web/app/layout.tsx index 202c19df568..648f70357dc 100644 --- a/web/app/layout.tsx +++ b/web/app/layout.tsx @@ -93,7 +93,7 @@ export default function RootLayout({ children }: { children: React.ReactNode }) {`(function(c,l,a,r,i,t,y){ c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)}; t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i; - y=l.getElementsByTagName(r)[0];if(y)y.parentNode.insertBefore(t,y); + y=l.getElementsByTagName(r)[0];if(y){y.parentNode.insertBefore(t,y);} })(window, document, "clarity", "script", "${process.env.NEXT_PUBLIC_SESSION_RECORDER_KEY}");`} )}