import React from "react"; import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; // mobx store import { useMobxStore } from "lib/mobx/store-provider"; // components import { IssueGanttBlock, IssuePeekOverview } from "components/issues"; import { GanttChartRoot, IBlockUpdateData, renderIssueBlocksStructure, IssueGanttSidebar, } from "components/gantt-chart"; // types import { IIssueUnGroupedStructure } from "store/issue"; import { IIssue } from "types"; import { ICycleIssuesFilterStore, ICycleIssuesStore, IModuleIssuesFilterStore, IModuleIssuesStore, IProjectIssuesFilterStore, IProjectIssuesStore, IViewIssuesFilterStore, IViewIssuesStore, } from "store/issues"; import { TUnGroupedIssues } from "store/issues/types"; import { EUserWorkspaceRoles } from "constants/workspace"; interface IBaseGanttRoot { issueFiltersStore: | IProjectIssuesFilterStore | IModuleIssuesFilterStore | ICycleIssuesFilterStore | IViewIssuesFilterStore; issueStore: IProjectIssuesStore | IModuleIssuesStore | ICycleIssuesStore | IViewIssuesStore; viewId?: string; } export const BaseGanttRoot: React.FC = observer((props: IBaseGanttRoot) => { const { issueFiltersStore, issueStore, viewId } = props; const router = useRouter(); const { workspaceSlug, peekIssueId, peekProjectId } = router.query; const { user: { currentProjectRole }, } = useMobxStore(); const appliedDisplayFilters = issueFiltersStore.issueFilters?.displayFilters; const issuesResponse = issueStore.getIssues; const issueIds = (issueStore.getIssuesIds ?? []) as TUnGroupedIssues; const issues = issueIds.map((id) => issuesResponse?.[id]); const updateIssue = async (issue: IIssue, payload: IBlockUpdateData) => { if (!workspaceSlug) return; //Todo fix sort order in the structure await issueStore.updateIssue( workspaceSlug.toString(), issue.project, issue.id, { start_date: payload.start_date, target_date: payload.target_date, }, viewId ); }; const isAllowed = !!currentProjectRole && currentProjectRole >= EUserWorkspaceRoles.MEMBER; return ( <>
} sidebarToRender={(props) => ( )} enableBlockLeftResize={isAllowed} enableBlockRightResize={isAllowed} enableBlockMove={isAllowed} enableReorder={appliedDisplayFilters?.order_by === "sort_order" && isAllowed} />
{workspaceSlug && peekIssueId && peekProjectId && ( { // TODO: update the logic here await updateIssue(issueToUpdate as IIssue, {}); }} /> )} ); });