"use client"; import React, { FC, useState } from "react"; import { observer } from "mobx-react"; import { copyUrlToClipboard, generateWorkItemLink } from "@plane/utils"; // plane imports // helpers // hooks import { useIssueDetail } from "@/hooks/store/use-issue-detail"; import { useProject } from "@/hooks/store/use-project"; type TCreateIssueToastActionItems = { workspaceSlug: string; projectId: string; issueId: string; isEpic?: boolean; }; export const CreateIssueToastActionItems: FC = observer((props) => { const { workspaceSlug, projectId, issueId, isEpic = false } = props; // state const [copied, setCopied] = useState(false); // store hooks const { issue: { getIssueById }, } = useIssueDetail(); const { getProjectIdentifierById } = useProject(); // derived values const issue = getIssueById(issueId); const projectIdentifier = getProjectIdentifierById(issue?.project_id); if (!issue) return null; const workItemLink = generateWorkItemLink({ workspaceSlug, projectId: issue?.project_id, issueId, projectIdentifier, sequenceId: issue?.sequence_id, isEpic, }); const copyToClipboard = async (e: React.MouseEvent) => { try { await copyUrlToClipboard(workItemLink); setCopied(true); setTimeout(() => setCopied(false), 3000); } catch (error) { setCopied(false); } e.preventDefault(); e.stopPropagation(); }; return (
{`View ${isEpic ? "epic" : "work item"}`} {copied ? ( <> Copied! ) : ( <> )}
); });