diff --git a/web/components/issues/issue-modal/draft-issue-layout.tsx b/web/components/issues/issue-modal/draft-issue-layout.tsx index 55f8d711f..78a97675e 100644 --- a/web/components/issues/issue-modal/draft-issue-layout.tsx +++ b/web/components/issues/issue-modal/draft-issue-layout.tsx @@ -1,4 +1,5 @@ import React, { useState } from "react"; +import isEmpty from "lodash/isEmpty"; import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; import type { TIssue } from "@plane/types"; @@ -6,12 +7,10 @@ import type { TIssue } from "@plane/types"; import { TOAST_TYPE, setToast } from "@plane/ui"; import { ConfirmIssueDiscard } from "@/components/issues"; import { IssueFormRoot } from "@/components/issues/issue-modal/form"; +import { isEmptyHtmlString } from "@/helpers/string.helper"; import { useEventTracker } from "@/hooks/store"; // services import { IssueDraftService } from "@/services/issue"; -// ui -// components -// types export interface DraftIssueProps { changesMade: Partial | null; @@ -50,8 +49,24 @@ export const DraftIssueLayout: React.FC = observer((props) => { const { captureIssueEvent } = useEventTracker(); const handleClose = () => { - if (changesMade) setIssueDiscardModal(true); - else onClose(false); + if (changesMade) { + Object.entries(changesMade).forEach(([key, value]) => { + const issueKey = key as keyof TIssue; + if (value === null || value === undefined || value === "") delete changesMade[issueKey]; + if (typeof value === "object" && !value) delete changesMade[issueKey]; + if (Array.isArray(value) && value.length === 0) delete changesMade[issueKey]; + if (issueKey === "project_id") delete changesMade.project_id; + if (issueKey === "priority" && value && value === "none") delete changesMade.priority; + if ( + issueKey === "description_html" && + changesMade.description_html && + isEmptyHtmlString(changesMade.description_html) + ) + delete changesMade.description_html; + }); + if (isEmpty(changesMade)) onClose(false); + else setIssueDiscardModal(true); + } }; const handleCreateDraftIssue = async () => { diff --git a/web/components/issues/issue-modal/form.tsx b/web/components/issues/issue-modal/form.tsx index b6c773335..dcc1a3b7d 100644 --- a/web/components/issues/issue-modal/form.tsx +++ b/web/components/issues/issue-modal/form.tsx @@ -178,6 +178,10 @@ export const IssueFormRoot: FC = observer((props) => { id: data.id, description_html: formData.description_html ?? "

", }; + + // this condition helps to move the issues from draft to project issues + if (formData.hasOwnProperty("is_draft")) submitData.is_draft = formData.is_draft; + await onSubmit(submitData, is_draft_issue); setGptAssistantModal(false); @@ -716,19 +720,24 @@ export const IssueFormRoot: FC = observer((props) => {
-
onCreateMoreToggleChange(!isCreateMoreToggleEnabled)} - onKeyDown={(e) => { - if (e.key === "Enter") onCreateMoreToggleChange(!isCreateMoreToggleEnabled); - }} - tabIndex={getTabIndex("create_more")} - > -
- {}} size="sm" /> -
- Create more +
+ {!data?.id && ( +
onCreateMoreToggleChange(!isCreateMoreToggleEnabled)} + onKeyDown={(e) => { + if (e.key === "Enter") onCreateMoreToggleChange(!isCreateMoreToggleEnabled); + }} + tabIndex={getTabIndex("create_more")} + > +
+ {}} size="sm" /> +
+ Create more +
+ )}
+