import { useState, useRef } from "react"; import { Draggable } from "@hello-pangea/dnd"; import { observer } from "mobx-react-lite"; import { MoreHorizontal } from "lucide-react"; // components import { Tooltip, ControlLink } from "@plane/ui"; // hooks import { cn } from "helpers/common.helper"; import { useApplication, useIssueDetail, useProject, useProjectState } from "hooks/store"; import useOutsideClickDetector from "hooks/use-outside-click-detector"; import { usePlatformOS } from "hooks/use-platform-os"; // helpers // types import { TIssue, TIssueMap } from "@plane/types"; type Props = { issues: TIssueMap | undefined; issueIdList: string[] | null; quickActions: (issue: TIssue, customActionButton?: React.ReactElement) => React.ReactNode; showAllIssues?: boolean; isDragDisabled?: boolean; }; export const CalendarIssueBlocks: React.FC = observer((props) => { const { issues, issueIdList, quickActions, showAllIssues = false, isDragDisabled = false } = props; // hooks const { router: { workspaceSlug, projectId }, } = useApplication(); const { getProjectIdentifierById } = useProject(); const { getProjectStates } = useProjectState(); const { peekIssue, setPeekIssue } = useIssueDetail(); const { isMobile } = usePlatformOS(); // states const [isMenuActive, setIsMenuActive] = useState(false); const menuActionRef = useRef(null); const handleIssuePeekOverview = (issue: TIssue) => workspaceSlug && issue && issue.project_id && issue.id && setPeekIssue({ workspaceSlug, projectId: issue.project_id, issueId: issue.id }); useOutsideClickDetector(menuActionRef, () => setIsMenuActive(false)); const customActionButton = (
setIsMenuActive(!isMenuActive)} >
); return ( <> {issueIdList?.slice(0, showAllIssues ? issueIdList.length : 4).map((issueId, index) => { if (!issues?.[issueId]) return null; const issue = issues?.[issueId]; const stateColor = getProjectStates(issue?.project_id)?.find((state) => state?.id == issue?.state_id)?.color || ""; return ( {(provided, snapshot) => (
handleIssuePeekOverview(issue)} className="w-full line-clamp-1 cursor-pointer text-sm text-custom-text-100" disabled={!!issue?.tempId} > <> {issue?.tempId !== undefined && (
)}
{getProjectIdentifierById(issue?.project_id)}-{issue.sequence_id}
{issue.name}
{ e.preventDefault(); e.stopPropagation(); }} > {quickActions(issue, customActionButton)}
)} ); })} ); });