import { observer } from "mobx-react-lite"; //mobx import { useMobxStore } from "lib/mobx/store-provider"; // components import { KanBan } from "./default"; import { HeaderSubGroupByCard } from "./headers/sub-group-by-card"; import { HeaderGroupByCard } from "./headers/group-by-card"; // types import { IIssue, IIssueDisplayProperties } from "types"; import { IIssueResponse, IGroupedIssues, ISubGroupedIssues, TUnGroupedIssues } from "store_legacy/issues/types"; // constants import { EIssueActions } from "../types"; import { EProjectStore } from "store_legacy/command-palette.store"; import { IKanbanColumn, columnTypes, getKanbanColumns } from "./utils"; interface ISubGroupSwimlaneHeader { issueIds: any; sub_group_by: string | null; group_by: string | null; list: IKanbanColumn[]; kanBanToggle: any; handleKanBanToggle: any; } const SubGroupSwimlaneHeader: React.FC = ({ issueIds, sub_group_by, group_by, list, kanBanToggle, handleKanBanToggle, }) => (
{list && list.length > 0 && list.map((_list: IKanbanColumn) => (
))}
); interface ISubGroupSwimlane extends ISubGroupSwimlaneHeader { issues: IIssueResponse; issueIds: any; showEmptyGroup: boolean; handleIssues: (issue: IIssue, action: EIssueActions) => void; quickActions: (issue: IIssue, customActionButton?: React.ReactElement) => React.ReactNode; displayProperties: IIssueDisplayProperties | null; kanBanToggle: any; handleKanBanToggle: any; isDragStarted?: boolean; disableIssueCreation?: boolean; currentStore?: EProjectStore; enableQuickIssueCreate: boolean; canEditProperties: (projectId: string | undefined) => boolean; addIssuesToView?: (issueIds: string[]) => Promise; quickAddCallback?: ( workspaceSlug: string, projectId: string, data: IIssue, viewId?: string ) => Promise; viewId?: string; } const SubGroupSwimlane: React.FC = observer((props) => { const { issues, issueIds, sub_group_by, group_by, list, handleIssues, quickActions, displayProperties, kanBanToggle, handleKanBanToggle, showEmptyGroup, enableQuickIssueCreate, canEditProperties, addIssuesToView, quickAddCallback, viewId, } = props; const calculateIssueCount = (column_id: string) => { let issueCount = 0; issueIds?.[column_id] && Object.keys(issueIds?.[column_id])?.forEach((_list: any) => { issueCount += issueIds?.[column_id]?.[_list]?.length || 0; }); return issueCount; }; return (
{list && list.length > 0 && list.map((_list: any) => (
{!kanBanToggle?.subgroupByIssuesVisibility.includes(_list.id) && (
)}
))}
); }); export interface IKanBanSwimLanes { issues: IIssueResponse; issueIds: IGroupedIssues | ISubGroupedIssues | TUnGroupedIssues; sub_group_by: string | null; group_by: string | null; handleIssues: (issue: IIssue, action: EIssueActions) => void; quickActions: (issue: IIssue, customActionButton?: React.ReactElement) => React.ReactNode; displayProperties: IIssueDisplayProperties | null; kanBanToggle: any; handleKanBanToggle: any; showEmptyGroup: boolean; isDragStarted?: boolean; disableIssueCreation?: boolean; currentStore?: EProjectStore; addIssuesToView?: (issueIds: string[]) => Promise; enableQuickIssueCreate: boolean; quickAddCallback?: ( workspaceSlug: string, projectId: string, data: IIssue, viewId?: string ) => Promise; viewId?: string; canEditProperties: (projectId: string | undefined) => boolean; } export const KanBanSwimLanes: React.FC = observer((props) => { const { issues, issueIds, sub_group_by, group_by, handleIssues, quickActions, displayProperties, kanBanToggle, handleKanBanToggle, showEmptyGroup, isDragStarted, disableIssueCreation, enableQuickIssueCreate, canEditProperties, addIssuesToView, quickAddCallback, viewId, } = props; const { project, projectLabel, projectMember, projectState } = useMobxStore(); const groupByList = getKanbanColumns(group_by as columnTypes, project, projectLabel, projectMember, projectState); const subGroupByList = getKanbanColumns( sub_group_by as columnTypes, project, projectLabel, projectMember, projectState ); if (!groupByList || !subGroupByList) return null; return (
{sub_group_by && ( )}
); });