2025-02-19 03:00:39 +05:30
|
|
|
import { FC } from "react";
|
2024-12-11 18:02:58 +05:30
|
|
|
import { observer } from "mobx-react";
|
|
|
|
|
import { useParams, usePathname } from "next/navigation";
|
|
|
|
|
// components
|
|
|
|
|
import { BulkDeleteIssuesModal } from "@/components/core";
|
|
|
|
|
import { CreateUpdateIssueModal, DeleteIssueModal } from "@/components/issues";
|
|
|
|
|
// constants
|
|
|
|
|
// hooks
|
2025-02-17 18:09:05 +05:30
|
|
|
import { useCommandPalette, useIssueDetail, useUser } from "@/hooks/store";
|
2024-12-11 18:02:58 +05:30
|
|
|
import { useAppRouter } from "@/hooks/use-app-router";
|
|
|
|
|
import { useIssuesStore } from "@/hooks/use-issue-layout-store";
|
|
|
|
|
|
2025-02-19 03:00:39 +05:30
|
|
|
type Props = {
|
|
|
|
|
projectId: string | undefined;
|
|
|
|
|
issueId: string | undefined;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const IssueLevelModals: FC<Props> = observer((props) => {
|
|
|
|
|
const { projectId, issueId } = props;
|
2024-12-11 18:02:58 +05:30
|
|
|
// router
|
|
|
|
|
const pathname = usePathname();
|
2025-02-19 03:00:39 +05:30
|
|
|
const { workspaceSlug, cycleId, moduleId } = useParams();
|
2024-12-11 18:02:58 +05:30
|
|
|
const router = useAppRouter();
|
|
|
|
|
// store hooks
|
|
|
|
|
const { data: currentUser } = useUser();
|
2025-02-19 03:00:39 +05:30
|
|
|
const {
|
|
|
|
|
issue: { getIssueById },
|
|
|
|
|
} = useIssueDetail();
|
2024-12-11 18:02:58 +05:30
|
|
|
const {
|
|
|
|
|
issues: { removeIssue },
|
|
|
|
|
} = useIssuesStore();
|
|
|
|
|
const {
|
|
|
|
|
isCreateIssueModalOpen,
|
|
|
|
|
toggleCreateIssueModal,
|
|
|
|
|
isDeleteIssueModalOpen,
|
|
|
|
|
toggleDeleteIssueModal,
|
|
|
|
|
isBulkDeleteIssueModalOpen,
|
|
|
|
|
toggleBulkDeleteIssueModal,
|
|
|
|
|
} = useCommandPalette();
|
|
|
|
|
// derived values
|
2025-02-19 03:00:39 +05:30
|
|
|
const issueDetails = issueId ? getIssueById(issueId) : undefined;
|
2024-12-11 18:02:58 +05:30
|
|
|
const isDraftIssue = pathname?.includes("draft-issues") || false;
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<>
|
|
|
|
|
<CreateUpdateIssueModal
|
|
|
|
|
isOpen={isCreateIssueModalOpen}
|
|
|
|
|
onClose={() => toggleCreateIssueModal(false)}
|
|
|
|
|
data={cycleId ? { cycle_id: cycleId.toString() } : moduleId ? { module_ids: [moduleId.toString()] } : undefined}
|
|
|
|
|
isDraft={isDraftIssue}
|
|
|
|
|
/>
|
|
|
|
|
{workspaceSlug && projectId && issueId && issueDetails && (
|
|
|
|
|
<DeleteIssueModal
|
|
|
|
|
handleClose={() => toggleDeleteIssueModal(false)}
|
|
|
|
|
isOpen={isDeleteIssueModalOpen}
|
|
|
|
|
data={issueDetails}
|
|
|
|
|
onSubmit={async () => {
|
|
|
|
|
await removeIssue(workspaceSlug.toString(), projectId.toString(), issueId.toString());
|
|
|
|
|
router.push(`/${workspaceSlug}/projects/${projectId}/issues`);
|
|
|
|
|
}}
|
|
|
|
|
/>
|
|
|
|
|
)}
|
|
|
|
|
<BulkDeleteIssuesModal
|
|
|
|
|
isOpen={isBulkDeleteIssueModalOpen}
|
|
|
|
|
onClose={() => toggleBulkDeleteIssueModal(false)}
|
|
|
|
|
user={currentUser}
|
|
|
|
|
/>
|
|
|
|
|
</>
|
|
|
|
|
);
|
|
|
|
|
});
|