diff --git a/web/core/components/issues/issue-modal/base.tsx b/web/core/components/issues/issue-modal/base.tsx index 19d54a973f1..d6ca5ceb103 100644 --- a/web/core/components/issues/issue-modal/base.tsx +++ b/web/core/components/issues/issue-modal/base.tsx @@ -4,7 +4,7 @@ import React, { useEffect, useRef, useState } from "react"; import { observer } from "mobx-react"; import { useParams, usePathname } from "next/navigation"; // types -import type { TIssue } from "@plane/types"; +import type { TIssue, TWorkspaceDraftIssue } from "@plane/types"; // ui import { EModalPosition, EModalWidth, ModalCore, TOAST_TYPE, setToast } from "@plane/ui"; import { CreateIssueToastActionItems, IssuesModalProps } from "@/components/issues"; @@ -13,7 +13,15 @@ import { ISSUE_CREATED, ISSUE_UPDATED } from "@/constants/event-tracker"; import { EIssuesStoreType } from "@/constants/issue"; // hooks import { useIssueModal } from "@/hooks/context/use-issue-modal"; -import { useEventTracker, useCycle, useIssues, useModule, useIssueDetail, useUser } from "@/hooks/store"; +import { + useEventTracker, + useCycle, + useIssues, + useModule, + useIssueDetail, + useUser, + useWorkspaceDraftIssues, +} from "@/hooks/store"; import { useIssueStoreType } from "@/hooks/use-issue-layout-store"; import { useIssuesActions } from "@/hooks/use-issues-actions"; // services @@ -60,6 +68,7 @@ export const CreateUpdateIssueModalBase: React.FC = observer(( const { issues: draftIssues } = useIssues(EIssuesStoreType.WORKSPACE_DRAFT); const { fetchIssue } = useIssueDetail(); const { handleCreateUpdatePropertyValues } = useIssueModal(); + const { moveIssue } = useWorkspaceDraftIssues(); // pathname const pathname = usePathname(); // current store details @@ -305,6 +314,14 @@ export const CreateUpdateIssueModalBase: React.FC = observer(( } }; + const handleMoveIssue = async (payload: Partial) => { + await handleUpdateIssue(payload).then(() => { + if (data?.id) { + moveIssue(workspaceSlug.toString(), data.id, payload as TWorkspaceDraftIssue); + } + }); + }; + const handleFormChange = (formData: Partial | null) => setChangesMade(formData); const handleUpdateUploadedAssetIds = (assetId: string) => setUploadedAssetIds((prev) => [...prev, assetId]); @@ -338,6 +355,7 @@ export const CreateUpdateIssueModalBase: React.FC = observer(( onCreateMoreToggleChange={handleCreateMoreToggleChange} isDraft={isDraft} moveToIssue={moveToIssue} + handleMoveIssue={handleMoveIssue} /> ) : ( = observer(( moveToIssue={moveToIssue} modalTitle={modalTitle} primaryButtonText={primaryButtonText} + handleMoveIssue={handleMoveIssue} /> )} diff --git a/web/core/components/issues/issue-modal/draft-issue-layout.tsx b/web/core/components/issues/issue-modal/draft-issue-layout.tsx index 8146e6cb403..4056cfedd0f 100644 --- a/web/core/components/issues/issue-modal/draft-issue-layout.tsx +++ b/web/core/components/issues/issue-modal/draft-issue-layout.tsx @@ -36,6 +36,7 @@ export interface DraftIssueProps { default: string; loading: string; }; + handleMoveIssue?: (payload: Partial) => Promise; } export const DraftIssueLayout: React.FC = observer((props) => { @@ -54,6 +55,7 @@ export const DraftIssueLayout: React.FC = observer((props) => { moveToIssue = false, modalTitle, primaryButtonText, + handleMoveIssue, } = props; // states const [issueDiscardModal, setIssueDiscardModal] = useState(false); @@ -173,6 +175,7 @@ export const DraftIssueLayout: React.FC = observer((props) => { moveToIssue={moveToIssue} modalTitle={modalTitle} primaryButtonText={primaryButtonText} + handleMoveIssue={handleMoveIssue} /> ); diff --git a/web/core/components/issues/issue-modal/form.tsx b/web/core/components/issues/issue-modal/form.tsx index 74808a003af..3e00e8cd6d9 100644 --- a/web/core/components/issues/issue-modal/form.tsx +++ b/web/core/components/issues/issue-modal/form.tsx @@ -7,7 +7,7 @@ import { useForm } from "react-hook-form"; // editor import { EditorRefApi } from "@plane/editor"; // types -import type { TIssue, ISearchIssueResponse, TWorkspaceDraftIssue } from "@plane/types"; +import type { TIssue, ISearchIssueResponse } from "@plane/types"; // hooks import { Button, ToggleSwitch, TOAST_TYPE, setToast } from "@plane/ui"; // components @@ -26,7 +26,7 @@ import { getChangedIssuefields } from "@/helpers/issue.helper"; import { getTabIndex } from "@/helpers/tab-indices.helper"; // hooks import { useIssueModal } from "@/hooks/context/use-issue-modal"; -import { useIssueDetail, useProject, useProjectState, useWorkspaceDraftIssues } from "@/hooks/store"; +import { useIssueDetail, useProject, useProjectState } from "@/hooks/store"; import { usePlatformOS } from "@/hooks/use-platform-os"; import { useProjectIssueProperties } from "@/hooks/use-project-issue-properties"; // plane web components @@ -66,6 +66,7 @@ export interface IssueFormProps { default: string; loading: string; }; + handleMoveIssue?: (payload: Partial) => Promise; } export const IssueFormRoot: FC = observer((props) => { @@ -86,6 +87,7 @@ export const IssueFormRoot: FC = observer((props) => { default: `${data?.id ? "Update" : isDraft ? "Save to Drafts" : "Save"}`, loading: `${data?.id ? "Updating" : "Saving"}`, }, + handleMoveIssue, } = props; // states @@ -105,7 +107,6 @@ export const IssueFormRoot: FC = observer((props) => { const { getIssueTypeIdOnProjectChange, getActiveAdditionalPropertiesLength, handlePropertyValuesValidation } = useIssueModal(); const { isMobile } = usePlatformOS(); - const { moveIssue } = useWorkspaceDraftIssues(); const { issue: { getIssueById }, @@ -434,12 +435,11 @@ export const IssueFormRoot: FC = observer((props) => { size="sm" loading={isSubmitting} onClick={() => { - if (data?.id && data) { - moveIssue(workspaceSlug.toString(), data?.id, { + if (handleMoveIssue && data) + handleMoveIssue({ ...data, ...getValues(), - } as TWorkspaceDraftIssue); - } + }); }} > Add to project