import { FC, useMemo } from "react"; import { observer } from "mobx-react-lite"; import { IIssueLabel, TIssue } from "@plane/types"; // components import { TOAST_TYPE, setToast } from "@plane/ui"; // hooks import { useIssueDetail, useLabel, useProjectInbox } from "@/hooks/store"; // ui // types import { LabelList, LabelCreate, IssueLabelSelectRoot } from "./"; export type TIssueLabel = { workspaceSlug: string; projectId: string; issueId: string; disabled: boolean; isInboxIssue?: boolean; onLabelUpdate?: (labelIds: string[]) => void; }; export type TLabelOperations = { updateIssue: (workspaceSlug: string, projectId: string, issueId: string, data: Partial) => Promise; createLabel: (workspaceSlug: string, projectId: string, data: Partial) => Promise; }; export const IssueLabel: FC = observer((props) => { const { workspaceSlug, projectId, issueId, disabled = false, isInboxIssue = false, onLabelUpdate } = props; // hooks const { updateIssue } = useIssueDetail(); const { createLabel } = useLabel(); const { issue: { getIssueById }, } = useIssueDetail(); const { getIssueInboxByIssueId } = useProjectInbox(); const issue = isInboxIssue ? getIssueInboxByIssueId(issueId)?.issue : getIssueById(issueId); const labelOperations: TLabelOperations = useMemo( () => ({ updateIssue: async (workspaceSlug: string, projectId: string, issueId: string, data: Partial) => { try { if (onLabelUpdate) onLabelUpdate(data.label_ids || []); else await updateIssue(workspaceSlug, projectId, issueId, data); } catch (error) { setToast({ title: "Issue update failed", type: TOAST_TYPE.ERROR, message: "Issue update failed", }); } }, createLabel: async (workspaceSlug: string, projectId: string, data: Partial) => { try { const labelResponse = await createLabel(workspaceSlug, projectId, data); if (!isInboxIssue) setToast({ title: "Label created successfully", type: TOAST_TYPE.SUCCESS, message: "Label created successfully", }); return labelResponse; } catch (error) { setToast({ title: "Label creation failed", type: TOAST_TYPE.ERROR, message: "Label creation failed", }); return error; } }, }), [updateIssue, createLabel, onLabelUpdate] ); return (
{!disabled && ( )} {!disabled && ( )}
); });