import { FC, useCallback } from "react"; import { observer } from "mobx-react-lite"; import { DragDropContext, DropResult } from "@hello-pangea/dnd"; // mobx store import { useMobxStore } from "lib/mobx/store-provider"; // components import { CalendarChart } from "components/issues"; // types import { IIssue } from "types"; import { ICycleIssuesStore, IModuleIssuesStore, IProjectIssuesStore, IViewIssuesStore } from "store/issues"; import { IIssueCalendarViewStore, IssueStore } from "store/issue"; import { IQuickActionProps } from "../list/list-view-types"; import { EIssueActions } from "../types"; import { IGroupedIssues } from "store/issues/types"; interface IBaseCalendarRoot { issueStore: IProjectIssuesStore | IModuleIssuesStore | ICycleIssuesStore | IViewIssuesStore; calendarViewStore: IIssueCalendarViewStore; QuickActions: FC; issueActions: { [EIssueActions.DELETE]: (issue: IIssue) => void; [EIssueActions.UPDATE]?: (issue: IIssue) => void; [EIssueActions.REMOVE]?: (issue: IIssue) => void; }; viewId?: string; } export const BaseCalendarRoot = observer((props: IBaseCalendarRoot) => { const { issueStore, calendarViewStore, QuickActions, issueActions, viewId } = props; const { projectIssuesFilter: issueFilterStore } = useMobxStore(); const displayFilters = issueFilterStore.issueFilters?.displayFilters; const issues = issueStore.getIssues; const groupedIssueIds = (issueStore.getIssuesIds ?? {}) as IGroupedIssues; const onDragEnd = (result: DropResult) => { if (!result) return; // return if not dropped on the correct place if (!result.destination) return; // return if dropped on the same date if (result.destination.droppableId === result.source.droppableId) return; calendarViewStore?.handleDragDrop(result.source, result.destination); }; const handleIssues = useCallback( (date: string, issue: IIssue, action: EIssueActions) => { if (issueActions[action]) { issueActions[action]!(issue); } }, [issueStore] ); return (
( handleIssues(issue.target_date ?? "", issue, EIssueActions.DELETE)} handleUpdate={ issueActions[EIssueActions.UPDATE] ? async (data) => handleIssues(issue.target_date ?? "", data, EIssueActions.UPDATE) : undefined } handleRemoveFromView={ issueActions[EIssueActions.REMOVE] ? async () => handleIssues(issue.target_date ?? "", issue, EIssueActions.UPDATE) : undefined } /> )} quickAddCallback={issueStore.quickAddIssue} viewId={viewId} />
); });