Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 21 additions & 2 deletions web/core/components/issues/issue-modal/base.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand All @@ -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
Expand Down Expand Up @@ -60,6 +68,7 @@ export const CreateUpdateIssueModalBase: React.FC<IssuesModalProps> = observer((
const { issues: draftIssues } = useIssues(EIssuesStoreType.WORKSPACE_DRAFT);
const { fetchIssue } = useIssueDetail();
const { handleCreateUpdatePropertyValues } = useIssueModal();
const { moveIssue } = useWorkspaceDraftIssues();
// pathname
const pathname = usePathname();
// current store details
Expand Down Expand Up @@ -305,6 +314,14 @@ export const CreateUpdateIssueModalBase: React.FC<IssuesModalProps> = observer((
}
};

const handleMoveIssue = async (payload: Partial<TIssue>) => {
await handleUpdateIssue(payload).then(() => {
if (data?.id) {
moveIssue(workspaceSlug.toString(), data.id, payload as TWorkspaceDraftIssue);
}
});
};
Comment on lines +317 to +323
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Simplify async function and ensure proper type casting

  • Avoid mixing await and .then(): In the handleMoveIssue function, mixing await with .then() is unnecessary and can be simplified by using await alone.

  • Ensure correct type casting: When calling moveIssue, payload is cast to TWorkspaceDraftIssue. Verify that payload conforms to TWorkspaceDraftIssue to prevent potential runtime errors.

Apply this diff to simplify the code:

const handleMoveIssue = async (payload: Partial<TIssue>) => {
-  await handleUpdateIssue(payload).then(() => {
-    if (data?.id) {
-      moveIssue(workspaceSlug.toString(), data.id, payload as TWorkspaceDraftIssue);
-    }
-  });
+  await handleUpdateIssue(payload);
+  if (data?.id) {
+    moveIssue(workspaceSlug.toString(), data.id, payload as TWorkspaceDraftIssue);
+  }
};
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const handleMoveIssue = async (payload: Partial<TIssue>) => {
await handleUpdateIssue(payload).then(() => {
if (data?.id) {
moveIssue(workspaceSlug.toString(), data.id, payload as TWorkspaceDraftIssue);
}
});
};
const handleMoveIssue = async (payload: Partial<TIssue>) => {
await handleUpdateIssue(payload);
if (data?.id) {
moveIssue(workspaceSlug.toString(), data.id, payload as TWorkspaceDraftIssue);
}
};


const handleFormChange = (formData: Partial<TIssue> | null) => setChangesMade(formData);

const handleUpdateUploadedAssetIds = (assetId: string) => setUploadedAssetIds((prev) => [...prev, assetId]);
Expand Down Expand Up @@ -338,6 +355,7 @@ export const CreateUpdateIssueModalBase: React.FC<IssuesModalProps> = observer((
onCreateMoreToggleChange={handleCreateMoreToggleChange}
isDraft={isDraft}
moveToIssue={moveToIssue}
handleMoveIssue={handleMoveIssue}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Ensure handleMoveIssue is defined in child components' props

The handleMoveIssue prop is being passed to DraftIssueLayout and IssueFormRoot. Please ensure that these components accept handleMoveIssue as a prop and that their prop types (DraftIssueProps and IssueFormRootProps) are updated accordingly to include this new prop.

Also applies to: 379-379

/>
) : (
<IssueFormRoot
Expand All @@ -358,6 +376,7 @@ export const CreateUpdateIssueModalBase: React.FC<IssuesModalProps> = observer((
moveToIssue={moveToIssue}
modalTitle={modalTitle}
primaryButtonText={primaryButtonText}
handleMoveIssue={handleMoveIssue}
/>
)}
</ModalCore>
Expand Down
3 changes: 3 additions & 0 deletions web/core/components/issues/issue-modal/draft-issue-layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ export interface DraftIssueProps {
default: string;
loading: string;
};
handleMoveIssue?: (payload: Partial<TIssue>) => Promise<void>;
}

export const DraftIssueLayout: React.FC<DraftIssueProps> = observer((props) => {
Expand All @@ -54,6 +55,7 @@ export const DraftIssueLayout: React.FC<DraftIssueProps> = observer((props) => {
moveToIssue = false,
modalTitle,
primaryButtonText,
handleMoveIssue,
} = props;
// states
const [issueDiscardModal, setIssueDiscardModal] = useState(false);
Expand Down Expand Up @@ -173,6 +175,7 @@ export const DraftIssueLayout: React.FC<DraftIssueProps> = observer((props) => {
moveToIssue={moveToIssue}
modalTitle={modalTitle}
primaryButtonText={primaryButtonText}
handleMoveIssue={handleMoveIssue}
/>
</>
);
Expand Down
14 changes: 7 additions & 7 deletions web/core/components/issues/issue-modal/form.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -66,6 +66,7 @@ export interface IssueFormProps {
default: string;
loading: string;
};
handleMoveIssue?: (payload: Partial<TIssue>) => Promise<void>;
}

export const IssueFormRoot: FC<IssueFormProps> = observer((props) => {
Expand All @@ -86,6 +87,7 @@ export const IssueFormRoot: FC<IssueFormProps> = observer((props) => {
default: `${data?.id ? "Update" : isDraft ? "Save to Drafts" : "Save"}`,
loading: `${data?.id ? "Updating" : "Saving"}`,
},
handleMoveIssue,
} = props;

// states
Expand All @@ -105,7 +107,6 @@ export const IssueFormRoot: FC<IssueFormProps> = observer((props) => {
const { getIssueTypeIdOnProjectChange, getActiveAdditionalPropertiesLength, handlePropertyValuesValidation } =
useIssueModal();
const { isMobile } = usePlatformOS();
const { moveIssue } = useWorkspaceDraftIssues();

const {
issue: { getIssueById },
Expand Down Expand Up @@ -434,12 +435,11 @@ export const IssueFormRoot: FC<IssueFormProps> = 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
Expand Down