11import type { MutableRefObject } from "react" ;
22import { observer } from "mobx-react" ;
3+ // plane imports
34import type {
45 GroupByColumnTypes ,
56 IGroupByColumn ,
@@ -12,33 +13,32 @@ import type {
1213 TIssueGroupByOptions ,
1314 TIssueOrderByOptions ,
1415} from "@plane/types" ;
15- // UI
1616import { Row } from "@plane/ui" ;
1717// hooks
1818import { useIssueStoreType } from "@/hooks/use-issue-layout-store" ;
19- // components
19+ // plane web imports
2020import { useWorkFlowFDragNDrop } from "@/plane-web/components/workflow" ;
21+ // local imports
2122import type { TRenderQuickActions } from "../list/list-view-types" ;
2223import type { GroupDropLocation } from "../utils" ;
2324import { getGroupByColumns , isWorkspaceLevel } from "../utils" ;
2425import { KanBan } from "./default" ;
2526import { HeaderGroupByCard } from "./headers/group-by-card" ;
2627import { HeaderSubGroupByCard } from "./headers/sub-group-by-card" ;
27- // types
28- // constants
2928
3029interface ISubGroupSwimlaneHeader {
30+ collapsedGroups : TIssueKanbanFilters ;
31+ group_by : TIssueGroupByOptions | undefined ;
3132 getGroupIssueCount : (
3233 groupId : string | undefined ,
3334 subGroupId : string | undefined ,
3435 isSubGroupCumulative : boolean
3536 ) => number | undefined ;
36- sub_group_by : TIssueGroupByOptions | undefined ;
37- group_by : TIssueGroupByOptions | undefined ;
38- list : IGroupByColumn [ ] ;
39- collapsedGroups : TIssueKanbanFilters ;
4037 handleCollapsedGroups : ( toggle : "group_by" | "sub_group_by" , value : string ) => void ;
38+ isEpic ?: boolean ;
39+ list : IGroupByColumn [ ] ;
4140 showEmptyGroup : boolean ;
41+ sub_group_by : TIssueGroupByOptions | undefined ;
4242}
4343
4444const visibilitySubGroupByGroupCount = ( subGroupIssueCount : number , showEmptyGroup : boolean ) : boolean => {
@@ -54,13 +54,14 @@ const visibilitySubGroupByGroupCount = (subGroupIssueCount: number, showEmptyGro
5454} ;
5555
5656const SubGroupSwimlaneHeader = observer ( function SubGroupSwimlaneHeader ( {
57+ collapsedGroups,
5758 getGroupIssueCount,
58- sub_group_by,
5959 group_by,
60- list,
61- collapsedGroups,
6260 handleCollapsedGroups,
61+ isEpic = false ,
62+ list,
6363 showEmptyGroup,
64+ sub_group_by,
6465} : ISubGroupSwimlaneHeader ) {
6566 const { getIsWorkflowWorkItemCreationDisabled } = useWorkFlowFDragNDrop ( group_by , sub_group_by ) ;
6667
@@ -88,6 +89,7 @@ const SubGroupSwimlaneHeader = observer(function SubGroupSwimlaneHeader({
8889 handleCollapsedGroups = { handleCollapsedGroups }
8990 issuePayload = { _list . payload }
9091 disableIssueCreation = { getIsWorkflowWorkItemCreationDisabled ( _list . id ) }
92+ isEpic = { isEpic }
9193 />
9294 </ div >
9395 ) ;
@@ -97,53 +99,55 @@ const SubGroupSwimlaneHeader = observer(function SubGroupSwimlaneHeader({
9799} ) ;
98100
99101interface ISubGroupSwimlane extends ISubGroupSwimlaneHeader {
100- issuesMap : IIssueMap ;
101- groupedIssueIds : TGroupedIssues | TSubGroupedIssues ;
102+ addIssuesToView ?: ( issueIds : string [ ] ) => Promise < TIssue > ;
103+ canEditProperties : ( projectId : string | undefined ) => boolean ;
104+ collapsedGroups : TIssueKanbanFilters ;
105+ disableIssueCreation ?: boolean ;
106+ displayProperties : IIssueDisplayProperties | undefined ;
107+ enableQuickIssueCreate : boolean ;
102108 getGroupIssueCount : (
103109 groupId : string | undefined ,
104110 subGroupId : string | undefined ,
105111 isSubGroupCumulative : boolean
106112 ) => number | undefined ;
107- showEmptyGroup : boolean ;
108- displayProperties : IIssueDisplayProperties | undefined ;
109- updateIssue : ( ( projectId : string | null , issueId : string , data : Partial < TIssue > ) => Promise < void > ) | undefined ;
110- quickActions : TRenderQuickActions ;
111- collapsedGroups : TIssueKanbanFilters ;
113+ groupedIssueIds : TGroupedIssues | TSubGroupedIssues ;
112114 handleCollapsedGroups : ( toggle : "group_by" | "sub_group_by" , value : string ) => void ;
113115 handleOnDrop : ( source : GroupDropLocation , destination : GroupDropLocation ) => Promise < void > ;
114- disableIssueCreation ?: boolean ;
115- enableQuickIssueCreate : boolean ;
116+ isEpic ?: boolean ;
117+ issuesMap : IIssueMap ;
118+ loadMoreIssues : ( groupId ?: string , subGroupId ?: string ) => void ;
116119 orderBy : TIssueOrderByOptions | undefined ;
117- canEditProperties : ( projectId : string | undefined ) => boolean ;
118- addIssuesToView ?: ( issueIds : string [ ] ) => Promise < TIssue > ;
120+ quickActions : TRenderQuickActions ;
119121 quickAddCallback ?: ( projectId : string | null | undefined , data : TIssue ) => Promise < TIssue | undefined > ;
120122 scrollableContainerRef ?: MutableRefObject < HTMLDivElement | null > ;
121- loadMoreIssues : ( groupId ?: string , subGroupId ?: string ) => void ;
123+ showEmptyGroup : boolean ;
124+ updateIssue : ( ( projectId : string | null , issueId : string , data : Partial < TIssue > ) => Promise < void > ) | undefined ;
122125}
123126
124127const SubGroupSwimlane = observer ( function SubGroupSwimlane ( props : ISubGroupSwimlane ) {
125128 const {
126- issuesMap,
127- groupedIssueIds,
129+ addIssuesToView,
130+ canEditProperties,
131+ collapsedGroups,
132+ disableIssueCreation,
133+ displayProperties,
134+ enableQuickIssueCreate,
128135 getGroupIssueCount,
129- sub_group_by,
130136 group_by,
131- list,
132- updateIssue,
133- quickActions,
134- displayProperties,
135- collapsedGroups,
137+ groupedIssueIds,
136138 handleCollapsedGroups,
139+ handleOnDrop,
140+ isEpic = false ,
141+ issuesMap,
142+ list,
137143 loadMoreIssues,
138- showEmptyGroup,
139- enableQuickIssueCreate,
140- disableIssueCreation,
141- canEditProperties,
142- addIssuesToView,
144+ orderBy,
145+ quickActions,
143146 quickAddCallback,
144147 scrollableContainerRef,
145- handleOnDrop,
146- orderBy,
148+ showEmptyGroup,
149+ sub_group_by,
150+ updateIssue,
147151 } = props ;
148152
149153 const visibilitySubGroupBy = (
@@ -214,6 +218,7 @@ const SubGroupSwimlane = observer(function SubGroupSwimlane(props: ISubGroupSwim
214218 orderBy = { orderBy }
215219 isDropDisabled = { _list . isDropDisabled }
216220 dropErrorMessage = { _list . dropErrorMessage }
221+ isEpic = { isEpic }
217222 />
218223 </ div >
219224 ) }
@@ -225,30 +230,31 @@ const SubGroupSwimlane = observer(function SubGroupSwimlane(props: ISubGroupSwim
225230} ) ;
226231
227232export interface IKanBanSwimLanes {
228- issuesMap : IIssueMap ;
229- groupedIssueIds : TGroupedIssues | TSubGroupedIssues ;
233+ addIssuesToView ?: ( issueIds : string [ ] ) => Promise < TIssue > ;
234+ canEditProperties : ( projectId : string | undefined ) => boolean ;
235+ collapsedGroups : TIssueKanbanFilters ;
236+ disableIssueCreation ?: boolean ;
237+ displayProperties : IIssueDisplayProperties | undefined ;
238+ enableQuickIssueCreate : boolean ;
230239 getGroupIssueCount : (
231240 groupId : string | undefined ,
232241 subGroupId : string | undefined ,
233242 isSubGroupCumulative : boolean
234243 ) => number | undefined ;
235- displayProperties : IIssueDisplayProperties | undefined ;
236- sub_group_by : TIssueGroupByOptions | undefined ;
237244 group_by : TIssueGroupByOptions | undefined ;
238- updateIssue : ( ( projectId : string | null , issueId : string , data : Partial < TIssue > ) => Promise < void > ) | undefined ;
239- quickActions : TRenderQuickActions ;
240- collapsedGroups : TIssueKanbanFilters ;
245+ groupedIssueIds : TGroupedIssues | TSubGroupedIssues ;
241246 handleCollapsedGroups : ( toggle : "group_by" | "sub_group_by" , value : string ) => void ;
242- loadMoreIssues : ( groupId ?: string , subGroupId ?: string ) => void ;
243- showEmptyGroup : boolean ;
244247 handleOnDrop : ( source : GroupDropLocation , destination : GroupDropLocation ) => Promise < void > ;
245- disableIssueCreation ?: boolean ;
246- addIssuesToView ?: ( issueIds : string [ ] ) => Promise < TIssue > ;
247- enableQuickIssueCreate : boolean ;
248+ isEpic ?: boolean ;
249+ issuesMap : IIssueMap ;
250+ loadMoreIssues : ( groupId ?: string , subGroupId ?: string ) => void ;
251+ orderBy : TIssueOrderByOptions | undefined ;
252+ quickActions : TRenderQuickActions ;
248253 quickAddCallback ?: ( projectId : string | null | undefined , data : TIssue ) => Promise < TIssue | undefined > ;
249- canEditProperties : ( projectId : string | undefined ) => boolean ;
250254 scrollableContainerRef ?: MutableRefObject < HTMLDivElement | null > ;
251- orderBy : TIssueOrderByOptions | undefined ;
255+ showEmptyGroup : boolean ;
256+ sub_group_by : TIssueGroupByOptions | undefined ;
257+ updateIssue : ( ( projectId : string | null , issueId : string , data : Partial < TIssue > ) => Promise < void > ) | undefined ;
252258}
253259
254260export const KanBanSwimLanes = observer ( function KanBanSwimLanes ( props : IKanBanSwimLanes ) {
@@ -273,6 +279,7 @@ export const KanBanSwimLanes = observer(function KanBanSwimLanes(props: IKanBanS
273279 addIssuesToView,
274280 quickAddCallback,
275281 scrollableContainerRef,
282+ isEpic = false ,
276283 } = props ;
277284 // store hooks
278285 const storeType = useIssueStoreType ( ) ;
@@ -281,11 +288,13 @@ export const KanBanSwimLanes = observer(function KanBanSwimLanes(props: IKanBanS
281288 groupBy : group_by as GroupByColumnTypes ,
282289 includeNone : true ,
283290 isWorkspaceLevel : isWorkspaceLevel ( storeType ) ,
291+ isEpic : isEpic ,
284292 } ) ;
285293 const subGroupByList = getGroupByColumns ( {
286294 groupBy : sub_group_by as GroupByColumnTypes ,
287295 includeNone : true ,
288296 isWorkspaceLevel : isWorkspaceLevel ( storeType ) ,
297+ isEpic : isEpic ,
289298 } ) ;
290299
291300 if ( ! groupByList || ! subGroupByList ) return null ;
@@ -301,6 +310,7 @@ export const KanBanSwimLanes = observer(function KanBanSwimLanes(props: IKanBanS
301310 handleCollapsedGroups = { handleCollapsedGroups }
302311 list = { groupByList }
303312 showEmptyGroup = { showEmptyGroup }
313+ isEpic = { isEpic }
304314 />
305315 </ Row >
306316
@@ -327,6 +337,7 @@ export const KanBanSwimLanes = observer(function KanBanSwimLanes(props: IKanBanS
327337 canEditProperties = { canEditProperties }
328338 quickAddCallback = { quickAddCallback }
329339 scrollableContainerRef = { scrollableContainerRef }
340+ isEpic = { isEpic }
330341 />
331342 ) }
332343 </ div >
0 commit comments