* fix: remove unused imports and variables (part 1) Resolve oxlint no-unused-vars warnings in packages/*, apps/admin, apps/space, apps/live, and apps/web (non-core). * fix: resolve CI check failures * fix: resolve check:types failures * fix: resolve check:types and check:format failures - Use destructuring alias for activeCycleResolvedPath - Format propel tab-navigation file * fix: format propel button helper with oxfmt Reorder Tailwind classes to match oxfmt canonical ordering.
87 lines
2.7 KiB
TypeScript
87 lines
2.7 KiB
TypeScript
/**
|
|
* Copyright (c) 2023-present Plane Software, Inc. and contributors
|
|
* SPDX-License-Identifier: AGPL-3.0-only
|
|
* See the LICENSE file for details.
|
|
*/
|
|
|
|
import React from "react";
|
|
import { observer } from "mobx-react";
|
|
// plane imports
|
|
import { useTranslation } from "@plane/i18n";
|
|
import { TOAST_TYPE, setToast } from "@plane/propel/toast";
|
|
// components
|
|
import type { TIssueOperations } from "@/components/issues/issue-detail";
|
|
import { IssueParentSelect } from "@/components/issues/issue-detail/parent-select";
|
|
// hooks
|
|
import { useIssueDetail } from "@/hooks/store/use-issue-detail";
|
|
|
|
type TIssueParentSelect = {
|
|
className?: string;
|
|
disabled?: boolean;
|
|
issueId: string;
|
|
issueOperations: TIssueOperations;
|
|
projectId: string;
|
|
workspaceSlug: string;
|
|
};
|
|
|
|
export const IssueParentSelectRoot = observer(function IssueParentSelectRoot(props: TIssueParentSelect) {
|
|
const { issueId, issueOperations, projectId, workspaceSlug } = props;
|
|
const { t } = useTranslation();
|
|
// store hooks
|
|
const {
|
|
issue: { getIssueById },
|
|
} = useIssueDetail();
|
|
const {
|
|
toggleParentIssueModal,
|
|
removeSubIssue,
|
|
subIssues: { setSubIssueHelpers, fetchSubIssues },
|
|
} = useIssueDetail();
|
|
|
|
// derived values
|
|
const issue = getIssueById(issueId);
|
|
const parentIssue = issue?.parent_id ? getIssueById(issue.parent_id) : undefined;
|
|
|
|
const handleParentIssue = async (_issueId: string | null = null) => {
|
|
try {
|
|
await issueOperations.update(workspaceSlug, projectId, issueId, { parent_id: _issueId });
|
|
await issueOperations.fetch(workspaceSlug, projectId, issueId, false);
|
|
if (_issueId) await fetchSubIssues(workspaceSlug, projectId, _issueId);
|
|
toggleParentIssueModal(null);
|
|
} catch (_error) {
|
|
console.error("something went wrong while fetching the issue");
|
|
}
|
|
};
|
|
|
|
const handleRemoveSubIssue = async (
|
|
workspaceSlug: string,
|
|
projectId: string,
|
|
parentIssueId: string,
|
|
issueId: string
|
|
) => {
|
|
try {
|
|
setSubIssueHelpers(parentIssueId, "issue_loader", issueId);
|
|
await removeSubIssue(workspaceSlug, projectId, parentIssueId, issueId);
|
|
await fetchSubIssues(workspaceSlug, projectId, parentIssueId);
|
|
setSubIssueHelpers(parentIssueId, "issue_loader", issueId);
|
|
} catch (_error) {
|
|
setToast({
|
|
type: TOAST_TYPE.ERROR,
|
|
title: t("common.error.label"),
|
|
message: t("common.something_went_wrong"),
|
|
});
|
|
}
|
|
};
|
|
|
|
const workItemLink = `/${workspaceSlug}/projects/${parentIssue?.project_id}/issues/${parentIssue?.id}`;
|
|
|
|
if (!issue) return <></>;
|
|
|
|
return (
|
|
<IssueParentSelect
|
|
{...props}
|
|
handleParentIssue={handleParentIssue}
|
|
handleRemoveSubIssue={handleRemoveSubIssue}
|
|
workItemLink={workItemLink}
|
|
/>
|
|
);
|
|
});
|