import React, { useState } from "react"; import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; // hooks import { TOAST_TYPE, setToast } from "@plane/ui"; import { ConfirmIssueDiscard } from "components/issues"; import { IssueFormRoot } from "components/issues/issue-modal/form"; import { useEventTracker } from "hooks/store"; // services import { IssueDraftService } from "services/issue"; // ui // components // types import type { TIssue } from "@plane/types"; export interface DraftIssueProps { changesMade: Partial | null; data?: Partial; isCreateMoreToggleEnabled: boolean; onCreateMoreToggleChange: (value: boolean) => void; onChange: (formData: Partial | null) => void; onClose: (saveDraftIssueInLocalStorage?: boolean) => void; onSubmit: (formData: Partial) => Promise; projectId: string; isDraft: boolean; } const issueDraftService = new IssueDraftService(); export const DraftIssueLayout: React.FC = observer((props) => { const { changesMade, data, onChange, onClose, onSubmit, projectId, isCreateMoreToggleEnabled, onCreateMoreToggleChange, isDraft, } = props; // states const [issueDiscardModal, setIssueDiscardModal] = useState(false); // router const router = useRouter(); const { workspaceSlug } = router.query; // store hooks const { captureIssueEvent } = useEventTracker(); const handleClose = () => { if (changesMade) setIssueDiscardModal(true); else onClose(false); }; const handleCreateDraftIssue = async () => { if (!changesMade || !workspaceSlug || !projectId) return; const payload = { ...changesMade, name: changesMade.name?.trim() === "" ? "Untitled" : changesMade.name?.trim(), }; await issueDraftService .createDraftIssue(workspaceSlug.toString(), projectId.toString(), payload) .then((res) => { setToast({ type: TOAST_TYPE.SUCCESS, title: "Success!", message: "Draft Issue created successfully.", }); captureIssueEvent({ eventName: "Draft issue created", payload: { ...res, state: "SUCCESS" }, path: router.asPath, }); onChange(null); setIssueDiscardModal(false); onClose(false); }) .catch(() => { setToast({ type: TOAST_TYPE.ERROR, title: "Error!", message: "Issue could not be created. Please try again.", }); captureIssueEvent({ eventName: "Draft issue created", payload: { ...payload, state: "FAILED" }, path: router.asPath, }); }); }; return ( <> setIssueDiscardModal(false)} onConfirm={handleCreateDraftIssue} onDiscard={() => { onChange(null); setIssueDiscardModal(false); onClose(false); }} /> ); });