import { useState, useRef } from "react"; import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; import { Draggable } from "@hello-pangea/dnd"; import { MoreHorizontal } from "lucide-react"; // components import { Tooltip } from "@plane/ui"; // hooks import useOutsideClickDetector from "hooks/use-outside-click-detector"; // types import { IIssue } from "types"; import { IIssueResponse } from "store/issues/types"; import { useMobxStore } from "lib/mobx/store-provider"; // constants import { EUserWorkspaceRoles } from "constants/workspace"; type Props = { issues: IIssueResponse | undefined; issueIdList: string[] | null; quickActions: (issue: IIssue, customActionButton?: React.ReactElement) => React.ReactNode; showAllIssues?: boolean; }; export const CalendarIssueBlocks: React.FC = observer((props) => { const { issues, issueIdList, quickActions, showAllIssues = false } = props; // router const router = useRouter(); // states const [isMenuActive, setIsMenuActive] = useState(false); // mobx store const { user: { currentProjectRole }, } = useMobxStore(); const menuActionRef = useRef(null); const handleIssuePeekOverview = (issue: IIssue, event: React.MouseEvent) => { const { query } = router; if (event.ctrlKey || event.metaKey) { const issueUrl = `/${issue.workspace_detail.slug}/projects/${issue.project_detail.id}/issues/${issue?.id}`; window.open(issueUrl, "_blank"); // Open link in a new tab } else { router.push({ pathname: router.pathname, query: { ...query, peekIssueId: issue?.id, peekProjectId: issue?.project }, }); } }; useOutsideClickDetector(menuActionRef, () => setIsMenuActive(false)); const customActionButton = (
setIsMenuActive(!isMenuActive)} >
); const isEditable = !!currentProjectRole && currentProjectRole >= EUserWorkspaceRoles.MEMBER; return ( <> {issueIdList?.slice(0, showAllIssues ? issueIdList.length : 4).map((issueId, index) => { if (!issues?.[issueId]) return null; const issue = issues?.[issueId]; return ( {(provided, snapshot) => (
handleIssuePeekOverview(issue, e)} > {issue?.tempId !== undefined && (
)}
{issue.project_detail.identifier}-{issue.sequence_id}
{issue.name}
{ e.preventDefault(); e.stopPropagation(); }} > {quickActions(issue, customActionButton)}
)} ); })} ); });