From 24fe9c7afd75942cd9d14d090ff03e79b59fc086 Mon Sep 17 00:00:00 2001 From: sanbornsen Date: Fri, 6 Jul 2018 10:19:00 +0530 Subject: [PATCH 01/52] fix(navigation): board side panel navigation added --- .../planner-board/planner-board.component.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/app/components_ngrx/planner-board/planner-board.component.ts b/src/app/components_ngrx/planner-board/planner-board.component.ts index 632fb4ff7..907cd7f46 100644 --- a/src/app/components_ngrx/planner-board/planner-board.component.ts +++ b/src/app/components_ngrx/planner-board/planner-board.component.ts @@ -37,6 +37,13 @@ export class PlannerBoardComponent implements AfterViewChecked, OnInit, OnDestro this.iterationQuery.deselectAllIteration(); this.eventListeners.push( this.spaceQuery.getCurrentSpace + .switchMap(() => { + return this.groupTypeQuery.getFirstGroupType; + }).take(1) + .do((groupType) => { + this.setDefaultUrl(groupType); + this.checkUrl(groupType); + }) .switchMap(() => { return this.groupTypeQuery.getFirstGroupType; }).take(1) From a474d1657fb0f31240b13a8ef3ee03e86fe16ce9 Mon Sep 17 00:00:00 2001 From: Vikram Raj Date: Thu, 5 Jul 2018 08:25:34 +0530 Subject: [PATCH 02/52] feat(card): add planner card component --- .../planner-card/planner-card.component.html | 42 ++++++++++++ .../planner-card/planner-card.component.less | 39 +++++++++++ .../planner-card/planner-card.component.ts | 68 +++++++++++++++++++ .../planner-card/planner-card.module.ts | 25 +++++++ 4 files changed, 174 insertions(+) create mode 100644 src/app/components_ngrx/planner-card/planner-card.component.html create mode 100644 src/app/components_ngrx/planner-card/planner-card.component.less create mode 100644 src/app/components_ngrx/planner-card/planner-card.component.ts create mode 100644 src/app/components_ngrx/planner-card/planner-card.module.ts diff --git a/src/app/components_ngrx/planner-card/planner-card.component.html b/src/app/components_ngrx/planner-card/planner-card.component.html new file mode 100644 index 000000000..2f9ab7ed5 --- /dev/null +++ b/src/app/components_ngrx/planner-card/planner-card.component.html @@ -0,0 +1,42 @@ +
+ + +
+
+ +
+
+ #2583: + A development platform should provide as application + - created by viraj +
+
+
+
+
+ Sprint #151 Sprint #151 Sprint #151 Sprint #151 Sprint #151 +
+
+ + + + + + +
+
+ +
+
diff --git a/src/app/components_ngrx/planner-card/planner-card.component.less b/src/app/components_ngrx/planner-card/planner-card.component.less new file mode 100644 index 000000000..1f6d3e451 --- /dev/null +++ b/src/app/components_ngrx/planner-card/planner-card.component.less @@ -0,0 +1,39 @@ +@import (reference) '../../../assets/stylesheets/_base'; +@import '../../../assets/stylesheets/_planner-layout'; + +.f8-custom { + &-card { + &-header { + position: relative; + padding-top: 18px; + padding-right: 18px; + padding-left: 46px; + .wi-type-icon-wrapper { + position: absolute; + top: 17px; + left: 18px; + font-size: 18px; + } + .title-wrapper { + .creator { + color: @color-pf-black-400; + } + } + } + &-body { + padding-top: 15px; + padding-right: 18px; + padding-bottom: 15px; + padding-left: 46px; + .sprint-name { + width: 50%; + float: left; + } + } + &-footer { + padding-right: 18px; + padding-bottom: 18px; + padding-left: 46px; + } + } +} diff --git a/src/app/components_ngrx/planner-card/planner-card.component.ts b/src/app/components_ngrx/planner-card/planner-card.component.ts new file mode 100644 index 000000000..16f967e3e --- /dev/null +++ b/src/app/components_ngrx/planner-card/planner-card.component.ts @@ -0,0 +1,68 @@ +import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { CardConfig } from 'patternfly-ng/card'; +import { WorkItemUI } from './../../models/work-item'; + +@Component({ + selector: 'f8-planner-card', + templateUrl: './planner-card.component.html', + styleUrls: ['./planner-card.component.less'] +}) +export class PlannerCardComponent { + + @Input() workItem: WorkItemUI; + @Output() readonly onCardClick = new EventEmitter(); + @Output() readonly onTitleClick = new EventEmitter(); + + private config: CardConfig = { + noPadding: true, + topBorder: false, + titleBorder: false + }; + + private labels = [{ + backgroundColor: '#d1d1d1', + borderColor: '#8461f7', + id: '22fdcbda-6556-4940-8637-8af834499271', + name: 'Area/Planner', + textColor: '#000000', + version: 0 + }, { + backgroundColor: '#a18fff', + borderColor: '#bbbbbb', + id: '2698b84a-c121-47b2-8ff5-28a76c808958', + name: 'Important', + textColor: '#000000', + version: 0 + }, { + backgroundColor: '#fbeabc', + borderColor: '#f39d3c', + id: '197725a8-1cd4-4e25-a763-b4a2747fc92b', + name: 'label 9', + textColor: '#000000', + version: 0 + }, { + backgroundColor: '#a18fff', + borderColor: '#bbbbbb', + id: '2698b84a-c121-47b2-8ff5-28a76c808958', + name: 'Important', + textColor: '#000000', + version: 0 + }, { + backgroundColor: '#fbeabc', + borderColor: '#f39d3c', + id: '197725a8-1cd4-4e25-a763-b4a2747fc92b', + name: 'label 9', + textColor: '#000000', + version: 0 + }]; + + cardClick(workItem: WorkItemUI, event) { + event.stopPropagation(); + this.onCardClick.emit(workItem); + } + + titleClick(workItem: WorkItemUI, event) { + event.stopPropagation(); + this.onTitleClick.emit(workItem); + } +} diff --git a/src/app/components_ngrx/planner-card/planner-card.module.ts b/src/app/components_ngrx/planner-card/planner-card.module.ts new file mode 100644 index 000000000..b25bb9574 --- /dev/null +++ b/src/app/components_ngrx/planner-card/planner-card.module.ts @@ -0,0 +1,25 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { TooltipConfig, TooltipModule } from 'ngx-bootstrap/tooltip'; +import { CardModule } from 'patternfly-ng/card'; +import { UserAvatarModule } from './../../widgets/user-avatar/user-avatar.module'; +import { LabelsModule } from './../labels/labels.module'; +import { PlannerCardComponent } from './planner-card.component'; + +@NgModule({ + imports: [ + CardModule, + CommonModule, + TooltipModule, + UserAvatarModule, + LabelsModule + ], + declarations: [ + PlannerCardComponent + ], + providers: [ TooltipConfig ], + exports: [ + PlannerCardComponent + ] +}) +export class PlannerCardModule {} From 066ae4fc8b05bf0283230bda067ce2a824b4cdc3 Mon Sep 17 00:00:00 2001 From: Vikram Raj Date: Fri, 6 Jul 2018 11:16:19 +0530 Subject: [PATCH 03/52] feat(column): add column component --- .../planner-board-column.component.html | 9 ++++++ .../planner-board-column.component.less | 28 +++++++++++++++++++ .../planner-board-column.component.ts | 12 ++++++++ .../planner-board-column.module.ts | 15 ++++++++++ .../planner-board.component.html | 6 +++- .../planner-board.component.less | 15 ++++++++++ .../planner-board/planner-board.module.ts | 2 ++ .../planner-card/planner-card.component.html | 2 +- .../planner-card/planner-card.component.less | 3 ++ 9 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 src/app/components_ngrx/planner-board-column/planner-board-column.component.html create mode 100644 src/app/components_ngrx/planner-board-column/planner-board-column.component.less create mode 100644 src/app/components_ngrx/planner-board-column/planner-board-column.component.ts create mode 100644 src/app/components_ngrx/planner-board-column/planner-board-column.module.ts diff --git a/src/app/components_ngrx/planner-board-column/planner-board-column.component.html b/src/app/components_ngrx/planner-board-column/planner-board-column.component.html new file mode 100644 index 000000000..63a887a25 --- /dev/null +++ b/src/app/components_ngrx/planner-board-column/planner-board-column.component.html @@ -0,0 +1,9 @@ +
+
+ 42 + Open +
+
+ +
+
diff --git a/src/app/components_ngrx/planner-board-column/planner-board-column.component.less b/src/app/components_ngrx/planner-board-column/planner-board-column.component.less new file mode 100644 index 000000000..a77811b29 --- /dev/null +++ b/src/app/components_ngrx/planner-board-column/planner-board-column.component.less @@ -0,0 +1,28 @@ +@import (reference) '../../../assets/stylesheets/_base'; + +.f8-board { + &-column { + height: 100%; + width: 25%; + background-color: @color-pf-black-200; + border: 1px solid @color-pf-black-300; + display: inline-block; + &__header { + padding-top: 20px; + padding-right: 10px; + padding-bottom: 0; + padding-left: 10px; + &-title { + font-weight: 600; + padding-left: 8px; + } + } + &__body { + padding-top: 20px; + padding-right: 20px; + padding-bottom: 20px; + padding-left: 20px; + white-space: normal; + } + } +} diff --git a/src/app/components_ngrx/planner-board-column/planner-board-column.component.ts b/src/app/components_ngrx/planner-board-column/planner-board-column.component.ts new file mode 100644 index 000000000..66045fd10 --- /dev/null +++ b/src/app/components_ngrx/planner-board-column/planner-board-column.component.ts @@ -0,0 +1,12 @@ +import { Component, Input } from '@angular/core'; +import { WorkItemUI } from './../../models/work-item'; + +@Component({ + selector: 'f8-planner-column', + templateUrl: './planner-board-column.component.html', + styleUrls: ['./planner-board-column.component.less'] +}) + +export class PlannerBoardColumnComponent { + @Input() workItems: WorkItemUI[]; +} diff --git a/src/app/components_ngrx/planner-board-column/planner-board-column.module.ts b/src/app/components_ngrx/planner-board-column/planner-board-column.module.ts new file mode 100644 index 000000000..9d1739143 --- /dev/null +++ b/src/app/components_ngrx/planner-board-column/planner-board-column.module.ts @@ -0,0 +1,15 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { PlannerCardModule } from './../planner-card/planner-card.module'; +import { PlannerBoardColumnComponent } from './planner-board-column.component'; + +@NgModule({ + imports: [ + CommonModule, + PlannerCardModule + ], + declarations: [ PlannerBoardColumnComponent ], + exports: [ PlannerBoardColumnComponent ] +}) + +export class PlannerBoardColumnModule {} diff --git a/src/app/components_ngrx/planner-board/planner-board.component.html b/src/app/components_ngrx/planner-board/planner-board.component.html index 3a434c5ab..0b230edbc 100644 --- a/src/app/components_ngrx/planner-board/planner-board.component.html +++ b/src/app/components_ngrx/planner-board/planner-board.component.html @@ -48,6 +48,10 @@

Please wait, we are loading your data.

- + + + + +
diff --git a/src/app/components_ngrx/planner-board/planner-board.component.less b/src/app/components_ngrx/planner-board/planner-board.component.less index 30375dd2b..7b637e7e5 100644 --- a/src/app/components_ngrx/planner-board/planner-board.component.less +++ b/src/app/components_ngrx/planner-board/planner-board.component.less @@ -5,6 +5,21 @@ .f8-wi-container { + .f8-wi-board { + background-color: @color-pf-black-100; + padding-top: 24px; + padding-right: 24px; + padding-bottom: 24px; + padding-left: 24px; + overflow-x: auto; + white-space: nowrap; + .f8-planner-column { + margin-left: 10px; + &:first-of-type { + margin-left: 0; + } + } + } .lock-overlay-list { position: absolute; top: 0; diff --git a/src/app/components_ngrx/planner-board/planner-board.module.ts b/src/app/components_ngrx/planner-board/planner-board.module.ts index 03bc54998..47bc0e20d 100644 --- a/src/app/components_ngrx/planner-board/planner-board.module.ts +++ b/src/app/components_ngrx/planner-board/planner-board.module.ts @@ -9,6 +9,7 @@ import { BoardService } from '../../services/board.service'; import { InitialBoardState, InitialColumnWorkItemState } from './../../states/index.state'; import { PlannerLayoutModule } from './../../widgets/planner-layout/planner-layout.module'; +import { PlannerBoardColumnModule } from './../planner-board-column/planner-board-column.module'; import { SidepanelModule } from './../side-panel/side-panel.module'; import { WorkItemPreviewPanelModule } from './../work-item-preview-panel/work-item-preview-panel.module'; import { PlannerBoardRoutingModule } from './planner-board-routing.module'; @@ -40,6 +41,7 @@ import { WorkItemQuery } from './../../models/work-item'; imports: [ CommonModule, PlannerBoardRoutingModule, + PlannerBoardColumnModule, PlannerLayoutModule, WorkItemPreviewPanelModule, SidepanelModule, diff --git a/src/app/components_ngrx/planner-card/planner-card.component.html b/src/app/components_ngrx/planner-card/planner-card.component.html index 2f9ab7ed5..b0abf4cfd 100644 --- a/src/app/components_ngrx/planner-card/planner-card.component.html +++ b/src/app/components_ngrx/planner-card/planner-card.component.html @@ -1,4 +1,4 @@ -
+
diff --git a/src/app/components_ngrx/planner-card/planner-card.component.less b/src/app/components_ngrx/planner-card/planner-card.component.less index 1f6d3e451..dd1148f76 100644 --- a/src/app/components_ngrx/planner-card/planner-card.component.less +++ b/src/app/components_ngrx/planner-card/planner-card.component.less @@ -29,6 +29,9 @@ width: 50%; float: left; } + .assignee { + text-align: right; + } } &-footer { padding-right: 18px; From c5c75777348c64297da555217aa488344254a157 Mon Sep 17 00:00:00 2001 From: sahil143 Date: Sun, 8 Jul 2018 20:45:49 +0530 Subject: [PATCH 04/52] fix(board): use action to update board --- .../planner-board-column.component.html | 10 +++++++--- .../planner-board-column.component.ts | 13 +++++++++++-- .../planner-board-column.module.ts | 4 +++- .../planner-board/planner-board.component.html | 10 +++++----- .../planner-board/planner-board.component.ts | 1 + .../planner-board/planner-board.module.ts | 2 ++ src/app/pipes/sort-by.module.ts | 9 +++++++++ src/app/pipes/sort-by.pipe.ts | 9 +++++++++ 8 files changed, 47 insertions(+), 11 deletions(-) create mode 100644 src/app/pipes/sort-by.module.ts create mode 100644 src/app/pipes/sort-by.pipe.ts diff --git a/src/app/components_ngrx/planner-board-column/planner-board-column.component.html b/src/app/components_ngrx/planner-board-column/planner-board-column.component.html index 63a887a25..acf2eaf3f 100644 --- a/src/app/components_ngrx/planner-board-column/planner-board-column.component.html +++ b/src/app/components_ngrx/planner-board-column/planner-board-column.component.html @@ -1,9 +1,13 @@
- 42 - Open + {{ workItems.length }} + {{ columnName }}
- + + +
diff --git a/src/app/components_ngrx/planner-board-column/planner-board-column.component.ts b/src/app/components_ngrx/planner-board-column/planner-board-column.component.ts index 66045fd10..936e5edd1 100644 --- a/src/app/components_ngrx/planner-board-column/planner-board-column.component.ts +++ b/src/app/components_ngrx/planner-board-column/planner-board-column.component.ts @@ -1,5 +1,6 @@ import { Component, Input } from '@angular/core'; -import { WorkItemUI } from './../../models/work-item'; +import { Observable } from 'rxjs'; +import { WorkItemQuery, WorkItemUI } from './../../models/work-item'; @Component({ selector: 'f8-planner-column', @@ -8,5 +9,13 @@ import { WorkItemUI } from './../../models/work-item'; }) export class PlannerBoardColumnComponent { - @Input() workItems: WorkItemUI[]; + @Input('workItemIds') set WorkItemIds(ids: string[]) { + // Change this to this.workItemQuery.getWorkitemsById(ids) + this.workItems = Observable.of([] as WorkItemUI[]); + } + @Input() columnName: string; + + private workItems: Observable; + + constructor(private workItemQuery: WorkItemQuery) {} } diff --git a/src/app/components_ngrx/planner-board-column/planner-board-column.module.ts b/src/app/components_ngrx/planner-board-column/planner-board-column.module.ts index 9d1739143..b4c0bc728 100644 --- a/src/app/components_ngrx/planner-board-column/planner-board-column.module.ts +++ b/src/app/components_ngrx/planner-board-column/planner-board-column.module.ts @@ -1,5 +1,6 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; +import { WorkItemQuery } from '../../models/work-item'; import { PlannerCardModule } from './../planner-card/planner-card.module'; import { PlannerBoardColumnComponent } from './planner-board-column.component'; @@ -9,7 +10,8 @@ import { PlannerBoardColumnComponent } from './planner-board-column.component'; PlannerCardModule ], declarations: [ PlannerBoardColumnComponent ], - exports: [ PlannerBoardColumnComponent ] + exports: [ PlannerBoardColumnComponent ], + providers: [WorkItemQuery] }) export class PlannerBoardColumnModule {} diff --git a/src/app/components_ngrx/planner-board/planner-board.component.html b/src/app/components_ngrx/planner-board/planner-board.component.html index 0b230edbc..b9bb71202 100644 --- a/src/app/components_ngrx/planner-board/planner-board.component.html +++ b/src/app/components_ngrx/planner-board/planner-board.component.html @@ -48,10 +48,10 @@

Please wait, we are loading your data.

- - - - - +
diff --git a/src/app/components_ngrx/planner-board/planner-board.component.ts b/src/app/components_ngrx/planner-board/planner-board.component.ts index 907cd7f46..90843e098 100644 --- a/src/app/components_ngrx/planner-board/planner-board.component.ts +++ b/src/app/components_ngrx/planner-board/planner-board.component.ts @@ -81,6 +81,7 @@ export class PlannerBoardComponent implements AfterViewChecked, OnInit, OnDestro .map(params => params.boardContextId) .subscribe(contextId => { console.log(contextId); + // Fetching work item // Dispatch action to fetch work items per lane for this context ID }) diff --git a/src/app/components_ngrx/planner-board/planner-board.module.ts b/src/app/components_ngrx/planner-board/planner-board.module.ts index 47bc0e20d..b85673053 100644 --- a/src/app/components_ngrx/planner-board/planner-board.module.ts +++ b/src/app/components_ngrx/planner-board/planner-board.module.ts @@ -24,6 +24,7 @@ import { CommentQuery } from './../../models/comment'; import { SpaceQuery } from './../../models/space'; import { UserQuery } from './../../models/user'; import { WorkItemQuery } from './../../models/work-item'; +import { F8SortByPipeModule } from './../../pipes/sort-by.module'; @NgModule({ providers: [ @@ -40,6 +41,7 @@ import { WorkItemQuery } from './../../models/work-item'; ], imports: [ CommonModule, + F8SortByPipeModule, PlannerBoardRoutingModule, PlannerBoardColumnModule, PlannerLayoutModule, diff --git a/src/app/pipes/sort-by.module.ts b/src/app/pipes/sort-by.module.ts new file mode 100644 index 000000000..4126f1f3d --- /dev/null +++ b/src/app/pipes/sort-by.module.ts @@ -0,0 +1,9 @@ +import { NgModule } from '@angular/core'; +import { F8SortByPipe } from './sort-by.pipe'; + +@NgModule({ + declarations: [F8SortByPipe], + exports: [F8SortByPipe] +}) + +export class F8SortByPipeModule { } diff --git a/src/app/pipes/sort-by.pipe.ts b/src/app/pipes/sort-by.pipe.ts new file mode 100644 index 000000000..650526e10 --- /dev/null +++ b/src/app/pipes/sort-by.pipe.ts @@ -0,0 +1,9 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import { sortBy } from 'lodash'; + +@Pipe({ name: 'f8SortBy' }) +export class F8SortByPipe implements PipeTransform { + transform(value: string, key: string) { + return sortBy(value, key); + } +} From 8d3c202c3ee0641b9c2702dbd849b0027863b374 Mon Sep 17 00:00:00 2001 From: sahil143 Date: Wed, 4 Jul 2018 17:39:14 +0530 Subject: [PATCH 05/52] fix(actions): add action for BoardView --- src/app/actions/board.actions.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/app/actions/board.actions.ts b/src/app/actions/board.actions.ts index 51a4b6b3e..e388647c6 100644 --- a/src/app/actions/board.actions.ts +++ b/src/app/actions/board.actions.ts @@ -22,9 +22,7 @@ export class GetError implements Action { readonly type = GET_ERROR; } - export type All = Get | GetSuccess | GetError; - From 67cdf35cc2cfa50cb944b6ad5e1910bff378eb13 Mon Sep 17 00:00:00 2001 From: sahil143 Date: Thu, 5 Jul 2018 16:54:38 +0530 Subject: [PATCH 06/52] fix(actions): add actions for to get Board api --- src/app/actions/board.actions.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/app/actions/board.actions.ts b/src/app/actions/board.actions.ts index e388647c6..9226d4e74 100644 --- a/src/app/actions/board.actions.ts +++ b/src/app/actions/board.actions.ts @@ -4,6 +4,8 @@ import { BoardState } from '../states/board.state'; export const GET = '[board] Get'; export const GET_SUCCESS = '[board] GetSuccess'; export const GET_ERROR = '[board] GetError'; +export const GET_BOARD_URL = '[board] GetBoardapiUrl'; +export const GET_BOARD_URL_ERROR = '[board] GetBoardapiUrl'; export class Get implements Action { readonly type = GET; @@ -22,6 +24,14 @@ export class GetError implements Action { readonly type = GET_ERROR; } +export class GetBoardUrl implements Action { + readonly type = GET_BOARD_URL; +} + +export class GetBoardUrlError implements Action { + readonly type = GET_BOARD_URL; +} + export type All = Get | GetSuccess From 4bc8d821bfacb8ab4e0c0313580193a904b92312 Mon Sep 17 00:00:00 2001 From: sahil143 Date: Fri, 6 Jul 2018 13:46:10 +0530 Subject: [PATCH 07/52] fix(effects): call boardApi in getBoards Effect --- src/app/actions/board.actions.ts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/app/actions/board.actions.ts b/src/app/actions/board.actions.ts index 9226d4e74..18753e165 100644 --- a/src/app/actions/board.actions.ts +++ b/src/app/actions/board.actions.ts @@ -24,13 +24,6 @@ export class GetError implements Action { readonly type = GET_ERROR; } -export class GetBoardUrl implements Action { - readonly type = GET_BOARD_URL; -} - -export class GetBoardUrlError implements Action { - readonly type = GET_BOARD_URL; -} export type All = Get From cb8bf5d3bd9d86ee31fe20904872366a275817b6 Mon Sep 17 00:00:00 2001 From: sahil143 Date: Sun, 8 Jul 2018 19:38:30 +0530 Subject: [PATCH 08/52] fix(board): add mapper in workitem and Board --- src/app/effects/work-item.effects.ts | 1 + src/app/models/board.model.ts | 1 + src/app/models/work-item.ts | 9 +++++++++ 3 files changed, 11 insertions(+) diff --git a/src/app/effects/work-item.effects.ts b/src/app/effects/work-item.effects.ts index 83f32b128..33f5be3af 100644 --- a/src/app/effects/work-item.effects.ts +++ b/src/app/effects/work-item.effects.ts @@ -162,6 +162,7 @@ export class WorkItemEffects { return [...wis]; }) .map((workItems: WorkItemUI[]) => { + console.log('##### - 1', payload.filters); return new WorkItemActions.GetSuccess( workItems ); diff --git a/src/app/models/board.model.ts b/src/app/models/board.model.ts index 724c25e47..4d568dd18 100644 --- a/src/app/models/board.model.ts +++ b/src/app/models/board.model.ts @@ -58,6 +58,7 @@ export class BoardModelUI { title: string; columnOrder: 0; type: string; + workitemsId?: string[]; }[]; } diff --git a/src/app/models/work-item.ts b/src/app/models/work-item.ts index ce7defb1a..c585cfe56 100644 --- a/src/app/models/work-item.ts +++ b/src/app/models/work-item.ts @@ -303,10 +303,14 @@ export class WorkItemMapper implements Mapper { toValue: false }, { fromPath: ['relationships', 'system.boardcolumns', 'data'], +<<<<<<< HEAD toPath: ['columnIds'], toFunction: (data) => { return Array.isArray(data) ? data.map(col => col.id) : null; } +======= + toPath: ['columnsId'] +>>>>>>> fix(board): add mapper in workitem and Board } ]; @@ -635,11 +639,16 @@ export class WorkItemQuery { return this.store.select(workItemEntities); } +<<<<<<< HEAD getWorkItemsWithIds(ids: string[]): Store { const selector = createSelector( workItemEntities, state => ids.map(i => this.resolveWorkItem(state[i])) ); return this.store.select(selector); +======= + getWorkitemsByIds(ids: string[]): Observable { + return Observable.combineLatest(ids.map(id => this.getWorkItem(id))); +>>>>>>> fix(board): add mapper in workitem and Board } } From 22e2ddebedd66edb7ec3383cdbdc7188859e40b9 Mon Sep 17 00:00:00 2001 From: sahil143 Date: Mon, 9 Jul 2018 12:06:30 +0530 Subject: [PATCH 09/52] fix(board): add reducer for boardColumn --- src/app/models/board.model.ts | 1 - src/app/reducers/column.reducer.ts | 27 +++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 src/app/reducers/column.reducer.ts diff --git a/src/app/models/board.model.ts b/src/app/models/board.model.ts index 4d568dd18..724c25e47 100644 --- a/src/app/models/board.model.ts +++ b/src/app/models/board.model.ts @@ -58,7 +58,6 @@ export class BoardModelUI { title: string; columnOrder: 0; type: string; - workitemsId?: string[]; }[]; } diff --git a/src/app/reducers/column.reducer.ts b/src/app/reducers/column.reducer.ts new file mode 100644 index 000000000..1afb16109 --- /dev/null +++ b/src/app/reducers/column.reducer.ts @@ -0,0 +1,27 @@ +import { ActionReducer } from '@ngrx/store'; +import * as WorkItemActions from '../actions/work-item.actions'; +import { ColumnWorkItemState, InitialColumnWorkItemState } from '../states/index.state'; + +export type Action = WorkItemActions.All; + +export const ColumnWorkItemReducer: ActionReducer = (state = InitialColumnWorkItemState, action: Action) => { + switch (action.type) { + case WorkItemActions.GET_SUCCESS: { + action.payload.forEach(item => { + if (item.columnsId === null) { + return state; + } else { + item.columnsId.forEach(col => { + if (state.hasOwnProperty(col.id)) { + state[col.id].push(item.id); + } else { + state[col.id] = []; + state[col.id].push(item.id); + } + }); + } + }); + return {...state}; + } + } +}; From e8dd86ddc086bd2cfc827fcf4ded5784a8fade66 Mon Sep 17 00:00:00 2001 From: sahil143 Date: Mon, 9 Jul 2018 12:19:30 +0530 Subject: [PATCH 10/52] fix(board): add states and reducer to board module --- .../components_ngrx/planner-board/planner-board.module.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/app/components_ngrx/planner-board/planner-board.module.ts b/src/app/components_ngrx/planner-board/planner-board.module.ts index b85673053..55cf96205 100644 --- a/src/app/components_ngrx/planner-board/planner-board.module.ts +++ b/src/app/components_ngrx/planner-board/planner-board.module.ts @@ -8,6 +8,11 @@ import { BoardReducer, ColumnWorkItemReducer } from '../../reducers/index.reduce import { BoardService } from '../../services/board.service'; import { InitialBoardState, InitialColumnWorkItemState } from './../../states/index.state'; +import { EffectsModule } from '@ngrx/effects'; +import { StoreModule } from '@ngrx/store'; +import { BoardEffects } from '../../effects/board.effect'; +import { BoardReducer, ColumnWorkItemReducer } from '../../reducers/index.reducer'; +import { InitialBoardState, InitialColumnWorkItemState } from './../../states/index.state'; import { PlannerLayoutModule } from './../../widgets/planner-layout/planner-layout.module'; import { PlannerBoardColumnModule } from './../planner-board-column/planner-board-column.module'; import { SidepanelModule } from './../side-panel/side-panel.module'; From 7434484d448d89b62be86d5b04b34a529f119518 Mon Sep 17 00:00:00 2001 From: sahil143 Date: Mon, 9 Jul 2018 12:20:03 +0530 Subject: [PATCH 11/52] fix(board): add column-workItem reducer --- src/app/reducers/column-workitem.reducer.ts | 18 ++++++-------- src/app/reducers/column.reducer.ts | 27 --------------------- 2 files changed, 8 insertions(+), 37 deletions(-) delete mode 100644 src/app/reducers/column.reducer.ts diff --git a/src/app/reducers/column-workitem.reducer.ts b/src/app/reducers/column-workitem.reducer.ts index ebfc823f4..1afb16109 100644 --- a/src/app/reducers/column-workitem.reducer.ts +++ b/src/app/reducers/column-workitem.reducer.ts @@ -2,27 +2,25 @@ import { ActionReducer } from '@ngrx/store'; import * as WorkItemActions from '../actions/work-item.actions'; import { ColumnWorkItemState, InitialColumnWorkItemState } from '../states/index.state'; - export type Action = WorkItemActions.All; export const ColumnWorkItemReducer: ActionReducer = (state = InitialColumnWorkItemState, action: Action) => { switch (action.type) { case WorkItemActions.GET_SUCCESS: { - const cwState = {...state}; action.payload.forEach(item => { - if (item.columnIds !== null) { - item.columnIds.forEach(col => { - if (cwState.hasOwnProperty(col)) { - cwState[col] = [...cwState[col], item.id]; + if (item.columnsId === null) { + return state; + } else { + item.columnsId.forEach(col => { + if (state.hasOwnProperty(col.id)) { + state[col.id].push(item.id); } else { - cwState[col] = [item.id]; + state[col.id] = []; + state[col.id].push(item.id); } }); } }); - return {...cwState}; - } - default: { return {...state}; } } diff --git a/src/app/reducers/column.reducer.ts b/src/app/reducers/column.reducer.ts deleted file mode 100644 index 1afb16109..000000000 --- a/src/app/reducers/column.reducer.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { ActionReducer } from '@ngrx/store'; -import * as WorkItemActions from '../actions/work-item.actions'; -import { ColumnWorkItemState, InitialColumnWorkItemState } from '../states/index.state'; - -export type Action = WorkItemActions.All; - -export const ColumnWorkItemReducer: ActionReducer = (state = InitialColumnWorkItemState, action: Action) => { - switch (action.type) { - case WorkItemActions.GET_SUCCESS: { - action.payload.forEach(item => { - if (item.columnsId === null) { - return state; - } else { - item.columnsId.forEach(col => { - if (state.hasOwnProperty(col.id)) { - state[col.id].push(item.id); - } else { - state[col.id] = []; - state[col.id].push(item.id); - } - }); - } - }); - return {...state}; - } - } -}; From 9672dc468ab3ceeedfa8837947c8838e96624ec7 Mon Sep 17 00:00:00 2001 From: sahil143 Date: Mon, 9 Jul 2018 13:08:32 +0530 Subject: [PATCH 12/52] fix(board): fix tests for board service, reducer, model --- .../planner-board/planner-board.module.ts | 2 ++ .../reducers/column-workitem.reducer.ts~HEAD | 29 +++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 src/app/reducers/column-workitem.reducer.ts~HEAD diff --git a/src/app/components_ngrx/planner-board/planner-board.module.ts b/src/app/components_ngrx/planner-board/planner-board.module.ts index 55cf96205..31ff1bcee 100644 --- a/src/app/components_ngrx/planner-board/planner-board.module.ts +++ b/src/app/components_ngrx/planner-board/planner-board.module.ts @@ -12,6 +12,7 @@ import { EffectsModule } from '@ngrx/effects'; import { StoreModule } from '@ngrx/store'; import { BoardEffects } from '../../effects/board.effect'; import { BoardReducer, ColumnWorkItemReducer } from '../../reducers/index.reducer'; +import { BoardService } from '../../services/board.service'; import { InitialBoardState, InitialColumnWorkItemState } from './../../states/index.state'; import { PlannerLayoutModule } from './../../widgets/planner-layout/planner-layout.module'; import { PlannerBoardColumnModule } from './../planner-board-column/planner-board-column.module'; @@ -33,6 +34,7 @@ import { F8SortByPipeModule } from './../../pipes/sort-by.module'; @NgModule({ providers: [ + BoardService, TooltipConfig, CommentQuery, UserQuery, diff --git a/src/app/reducers/column-workitem.reducer.ts~HEAD b/src/app/reducers/column-workitem.reducer.ts~HEAD new file mode 100644 index 000000000..ebfc823f4 --- /dev/null +++ b/src/app/reducers/column-workitem.reducer.ts~HEAD @@ -0,0 +1,29 @@ +import { ActionReducer } from '@ngrx/store'; +import * as WorkItemActions from '../actions/work-item.actions'; +import { ColumnWorkItemState, InitialColumnWorkItemState } from '../states/index.state'; + + +export type Action = WorkItemActions.All; + +export const ColumnWorkItemReducer: ActionReducer = (state = InitialColumnWorkItemState, action: Action) => { + switch (action.type) { + case WorkItemActions.GET_SUCCESS: { + const cwState = {...state}; + action.payload.forEach(item => { + if (item.columnIds !== null) { + item.columnIds.forEach(col => { + if (cwState.hasOwnProperty(col)) { + cwState[col] = [...cwState[col], item.id]; + } else { + cwState[col] = [item.id]; + } + }); + } + }); + return {...cwState}; + } + default: { + return {...state}; + } + } +}; From a8b624b2e3673ae8fd04e7f53da51d8c3ba50b4b Mon Sep 17 00:00:00 2001 From: sahil143 Date: Mon, 9 Jul 2018 13:28:44 +0530 Subject: [PATCH 13/52] fix(reducer): add unit test for column-workitem reducer --- src/app/effects/work-item.effects.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/app/effects/work-item.effects.ts b/src/app/effects/work-item.effects.ts index 33f5be3af..83f32b128 100644 --- a/src/app/effects/work-item.effects.ts +++ b/src/app/effects/work-item.effects.ts @@ -162,7 +162,6 @@ export class WorkItemEffects { return [...wis]; }) .map((workItems: WorkItemUI[]) => { - console.log('##### - 1', payload.filters); return new WorkItemActions.GetSuccess( workItems ); From 1cd90e4db39e69b6bb021392d70e99f97324cd11 Mon Sep 17 00:00:00 2001 From: sahil143 Date: Mon, 9 Jul 2018 13:36:08 +0530 Subject: [PATCH 14/52] fix(board): remove board-api-url action from boardAction --- src/app/actions/board.actions.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/app/actions/board.actions.ts b/src/app/actions/board.actions.ts index 18753e165..7b36bc021 100644 --- a/src/app/actions/board.actions.ts +++ b/src/app/actions/board.actions.ts @@ -4,8 +4,6 @@ import { BoardState } from '../states/board.state'; export const GET = '[board] Get'; export const GET_SUCCESS = '[board] GetSuccess'; export const GET_ERROR = '[board] GetError'; -export const GET_BOARD_URL = '[board] GetBoardapiUrl'; -export const GET_BOARD_URL_ERROR = '[board] GetBoardapiUrl'; export class Get implements Action { readonly type = GET; From b2af3910f519547ba2d94bf2daa4b6e894253600 Mon Sep 17 00:00:00 2001 From: sahil143 Date: Mon, 9 Jul 2018 13:41:48 +0530 Subject: [PATCH 15/52] fix(workitem): add getWorkItemWithIds query to WorItemQuery --- src/app/models/work-item.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/app/models/work-item.ts b/src/app/models/work-item.ts index c585cfe56..d3ae27085 100644 --- a/src/app/models/work-item.ts +++ b/src/app/models/work-item.ts @@ -303,14 +303,10 @@ export class WorkItemMapper implements Mapper { toValue: false }, { fromPath: ['relationships', 'system.boardcolumns', 'data'], -<<<<<<< HEAD toPath: ['columnIds'], toFunction: (data) => { return Array.isArray(data) ? data.map(col => col.id) : null; } -======= - toPath: ['columnsId'] ->>>>>>> fix(board): add mapper in workitem and Board } ]; @@ -640,15 +636,21 @@ export class WorkItemQuery { } <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> fix(workitem): add getWorkItemWithIds query to WorItemQuery getWorkItemsWithIds(ids: string[]): Store { const selector = createSelector( workItemEntities, state => ids.map(i => this.resolveWorkItem(state[i])) ); return this.store.select(selector); +<<<<<<< HEAD ======= getWorkitemsByIds(ids: string[]): Observable { return Observable.combineLatest(ids.map(id => this.getWorkItem(id))); >>>>>>> fix(board): add mapper in workitem and Board +======= +>>>>>>> fix(workitem): add getWorkItemWithIds query to WorItemQuery } } From 530aefadf563e6f1dd95b18485c477a05ae20f55 Mon Sep 17 00:00:00 2001 From: sahil143 Date: Mon, 9 Jul 2018 17:39:44 +0530 Subject: [PATCH 16/52] fix(board): integrate board components with action, effects and model --- .../planner-board-column.component.html | 2 +- .../planner-board-column.component.ts | 3 +- .../planner-board.component.html | 8 +- .../planner-board/planner-board.component.ts | 13 ++- .../planner-board/planner-board.module.ts | 88 +++++++++---------- .../planner-card/planner-card.component.html | 26 ++---- .../planner-card/planner-card.module.ts | 4 +- src/app/models/board.model.ts | 54 ++++++++++++ src/app/states/app.state.ts | 10 ++- 9 files changed, 131 insertions(+), 77 deletions(-) diff --git a/src/app/components_ngrx/planner-board-column/planner-board-column.component.html b/src/app/components_ngrx/planner-board-column/planner-board-column.component.html index acf2eaf3f..30adeaee4 100644 --- a/src/app/components_ngrx/planner-board-column/planner-board-column.component.html +++ b/src/app/components_ngrx/planner-board-column/planner-board-column.component.html @@ -1,6 +1,6 @@
- {{ workItems.length }} + {{ (workItems | async).length }} {{ columnName }}
diff --git a/src/app/components_ngrx/planner-board-column/planner-board-column.component.ts b/src/app/components_ngrx/planner-board-column/planner-board-column.component.ts index 936e5edd1..bce095f0b 100644 --- a/src/app/components_ngrx/planner-board-column/planner-board-column.component.ts +++ b/src/app/components_ngrx/planner-board-column/planner-board-column.component.ts @@ -10,8 +10,7 @@ import { WorkItemQuery, WorkItemUI } from './../../models/work-item'; export class PlannerBoardColumnComponent { @Input('workItemIds') set WorkItemIds(ids: string[]) { - // Change this to this.workItemQuery.getWorkitemsById(ids) - this.workItems = Observable.of([] as WorkItemUI[]); + this.workItems = this.workItemQuery.getWorkItemsWithIds(ids); } @Input() columnName: string; diff --git a/src/app/components_ngrx/planner-board/planner-board.component.html b/src/app/components_ngrx/planner-board/planner-board.component.html index b9bb71202..f15a4d9db 100644 --- a/src/app/components_ngrx/planner-board/planner-board.component.html +++ b/src/app/components_ngrx/planner-board/planner-board.component.html @@ -48,10 +48,12 @@

Please wait, we are loading your data.

+ +
diff --git a/src/app/components_ngrx/planner-board/planner-board.component.ts b/src/app/components_ngrx/planner-board/planner-board.component.ts index 90843e098..07fb8864d 100644 --- a/src/app/components_ngrx/planner-board/planner-board.component.ts +++ b/src/app/components_ngrx/planner-board/planner-board.component.ts @@ -8,6 +8,11 @@ import { ViewChild } from '@angular/core'; import { ActivatedRoute, NavigationStart, Router } from '@angular/router'; +import { Store } from '@ngrx/store'; +import { sortBy } from 'lodash'; +import { BoardQuery } from '../../models/board.model'; +import { AppState } from '../../states/app.state'; +import * as BoardActions from './../../actions/board.actions'; import { GroupTypeQuery, GroupTypeUI } from './../../models/group-types.model'; import { IterationQuery } from './../../models/iteration.model'; import { SpaceQuery } from './../../models/space'; @@ -23,6 +28,7 @@ export class PlannerBoardComponent implements AfterViewChecked, OnInit, OnDestro private uiLockedSidebar: boolean = false; private sidePanelOpen: boolean = true; private eventListeners: any[] = []; + private board$; constructor( private renderer: Renderer2, @@ -30,7 +36,9 @@ export class PlannerBoardComponent implements AfterViewChecked, OnInit, OnDestro private groupTypeQuery: GroupTypeQuery, private iterationQuery: IterationQuery, private route: ActivatedRoute, - private router: Router + private router: Router, + private store: Store, + private boardQuery: BoardQuery ) {} ngOnInit() { @@ -50,6 +58,7 @@ export class PlannerBoardComponent implements AfterViewChecked, OnInit, OnDestro .do((groupType) => { this.setDefaultUrl(groupType); this.checkUrl(groupType); + this.store.dispatch(new BoardActions.Get()); }) .subscribe() ); @@ -81,7 +90,7 @@ export class PlannerBoardComponent implements AfterViewChecked, OnInit, OnDestro .map(params => params.boardContextId) .subscribe(contextId => { console.log(contextId); - + this.board$ = this.boardQuery.getBoardById(contextId); // Fetching work item // Dispatch action to fetch work items per lane for this context ID }) diff --git a/src/app/components_ngrx/planner-board/planner-board.module.ts b/src/app/components_ngrx/planner-board/planner-board.module.ts index 31ff1bcee..4a80d699a 100644 --- a/src/app/components_ngrx/planner-board/planner-board.module.ts +++ b/src/app/components_ngrx/planner-board/planner-board.module.ts @@ -8,12 +8,6 @@ import { BoardReducer, ColumnWorkItemReducer } from '../../reducers/index.reduce import { BoardService } from '../../services/board.service'; import { InitialBoardState, InitialColumnWorkItemState } from './../../states/index.state'; -import { EffectsModule } from '@ngrx/effects'; -import { StoreModule } from '@ngrx/store'; -import { BoardEffects } from '../../effects/board.effect'; -import { BoardReducer, ColumnWorkItemReducer } from '../../reducers/index.reducer'; -import { BoardService } from '../../services/board.service'; -import { InitialBoardState, InitialColumnWorkItemState } from './../../states/index.state'; import { PlannerLayoutModule } from './../../widgets/planner-layout/planner-layout.module'; import { PlannerBoardColumnModule } from './../planner-board-column/planner-board-column.module'; import { SidepanelModule } from './../side-panel/side-panel.module'; @@ -23,6 +17,7 @@ import { PlannerBoardComponent } from './planner-board.component'; // Data Querries import { AreaQuery } from '../../models/area.model'; +import { BoardQuery, ColumnWorkItemQuery } from '../../models/board.model'; import { GroupTypeQuery } from '../../models/group-types.model'; import { IterationQuery } from '../../models/iteration.model'; import { LabelQuery } from '../../models/label.model'; @@ -33,46 +28,45 @@ import { WorkItemQuery } from './../../models/work-item'; import { F8SortByPipeModule } from './../../pipes/sort-by.module'; @NgModule({ - providers: [ - BoardService, - TooltipConfig, - CommentQuery, - UserQuery, - LabelQuery, - IterationQuery, - WorkItemQuery, - AreaQuery, - SpaceQuery, - GroupTypeQuery, - BoardService - ], - imports: [ - CommonModule, - F8SortByPipeModule, - PlannerBoardRoutingModule, - PlannerBoardColumnModule, - PlannerLayoutModule, - WorkItemPreviewPanelModule, - SidepanelModule, - TooltipModule.forRoot(), - StoreModule.forFeature('boardView', { - boards: BoardReducer, - columnWorkItem: ColumnWorkItemReducer - }, { - initialState: { - boards: InitialBoardState, - columnWorkItem: InitialColumnWorkItemState - } - }), - EffectsModule.forFeature([ - BoardEffects - ]) - ], - declarations: [ - PlannerBoardComponent - ], - exports: [ - PlannerBoardComponent - ] + providers: [ + TooltipConfig, + BoardService, + CommentQuery, + UserQuery, + LabelQuery, + IterationQuery, + WorkItemQuery, + AreaQuery, + SpaceQuery, + GroupTypeQuery, + BoardQuery, + ColumnWorkItemQuery + ], + imports: [ + CommonModule, + F8SortByPipeModule, + PlannerBoardRoutingModule, + PlannerBoardColumnModule, + PlannerLayoutModule, + WorkItemPreviewPanelModule, + SidepanelModule, + TooltipModule.forRoot(), + StoreModule.forFeature( + 'boardView', + { + boards: BoardReducer, + columnWorkItem: ColumnWorkItemReducer + }, + { + initialState: { + boards: InitialBoardState, + columnWorkItem: InitialColumnWorkItemState + } + } + ), + EffectsModule.forFeature([BoardEffects]) + ], + declarations: [PlannerBoardComponent], + exports: [PlannerBoardComponent] }) export class PlannerBoardModule {} diff --git a/src/app/components_ngrx/planner-card/planner-card.component.html b/src/app/components_ngrx/planner-card/planner-card.component.html index b0abf4cfd..863391aca 100644 --- a/src/app/components_ngrx/planner-card/planner-card.component.html +++ b/src/app/components_ngrx/planner-card/planner-card.component.html @@ -6,36 +6,28 @@
- #2583: - A development platform should provide as application - - created by viraj + {{ workItem.number }}: + {{ workItem.title }} + - created by {{ (workItem.creatorObs | async).username }}
- Sprint #151 Sprint #151 Sprint #151 Sprint #151 Sprint #151 + [tooltip]="iteration.resolvedParenPath + iteration.name"> + {{ iteration.name }}
- - - - - - +
diff --git a/src/app/components_ngrx/planner-card/planner-card.module.ts b/src/app/components_ngrx/planner-card/planner-card.module.ts index b25bb9574..6149e9fc3 100644 --- a/src/app/components_ngrx/planner-card/planner-card.module.ts +++ b/src/app/components_ngrx/planner-card/planner-card.module.ts @@ -2,6 +2,7 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; import { TooltipConfig, TooltipModule } from 'ngx-bootstrap/tooltip'; import { CardModule } from 'patternfly-ng/card'; +import { AssigneesModule } from '../assignee/assignee.module'; import { UserAvatarModule } from './../../widgets/user-avatar/user-avatar.module'; import { LabelsModule } from './../labels/labels.module'; import { PlannerCardComponent } from './planner-card.component'; @@ -12,7 +13,8 @@ import { PlannerCardComponent } from './planner-card.component'; CommonModule, TooltipModule, UserAvatarModule, - LabelsModule + LabelsModule, + AssigneesModule ], declarations: [ PlannerCardComponent diff --git a/src/app/models/board.model.ts b/src/app/models/board.model.ts index 724c25e47..36eb5fa34 100644 --- a/src/app/models/board.model.ts +++ b/src/app/models/board.model.ts @@ -1,3 +1,13 @@ +import { Injectable } from '@angular/core'; + +// MemoizedSelector is needed even if it's not being used in this file +// Else you get this error +// Exported variable 'plannerSelector' has or is using name 'MemoizedSelector' +// from external module "@ngrx/store/src/selector" but cannot be named. +import { createFeatureSelector, createSelector, MemoizedSelector, Store } from '@ngrx/store'; +import { Observable } from 'rxjs'; +import { BoardViewState } from '../states/app.state'; +import { AppState } from '../states/index.state'; import { cleanObject, CommonSelectorUI, @@ -58,6 +68,7 @@ export class BoardModelUI { title: string; columnOrder: 0; type: string; + workItemIds?: Observable }[]; } @@ -105,3 +116,46 @@ export class BoardMapper implements Mapper { return {} as BoardModelData; } } + +export const boardSelector = createFeatureSelector('boardView'); + +@Injectable() +export class BoardQuery { + private boards = createSelector( + boardSelector, + (state) => state ? state.boards : {} + ); + private boardSource = this.store.select(this.boards); + + constructor(private store: Store, + private columnWorkItemQuery: ColumnWorkItemQuery) {} + + getBoardById(id: string): Observable { + return this.boardSource.select(boards => boards[id]) + .map(board => { + board.columns.map(col => { + return { + ...col, + workItemIds: this.columnWorkItemQuery.getWorkItemIdsByColumnId(col.id) + }; + }); + return board; + }); + } +} + +@Injectable() +export class ColumnWorkItemQuery { + private columnWorkitems = createSelector( + boardSelector, + (state) => state ? state.columnWorkItem : {} + ); + + private columnWorkitemSource = this.store.select(this.columnWorkitems); + + constructor(private store: Store) {} + + getWorkItemIdsByColumnId(id: string): Observable { + return this.columnWorkitemSource.select(state => state[id]); + } +} diff --git a/src/app/states/app.state.ts b/src/app/states/app.state.ts index c54ee7796..a1c4b2b55 100644 --- a/src/app/states/app.state.ts +++ b/src/app/states/app.state.ts @@ -5,10 +5,7 @@ export interface AppState { listPage?: ListPage; - boardView?: { - boards: states.BoardState, - columnWorkItem: states.ColumnWorkItemState - }; + boardView?: BoardViewState; iterationPanel: { iterationUI: states.IterationUIState @@ -31,6 +28,11 @@ export interface AppState { }; } +export interface BoardViewState { + boards: states.BoardState; + columnWorkItem: states.ColumnWorkItemState; +} + export interface ListPage {} export interface PlannerState { From 58bb0496835f3f70a26b40bff50eca7ae1da7064 Mon Sep 17 00:00:00 2001 From: sahil143 Date: Tue, 10 Jul 2018 11:26:25 +0530 Subject: [PATCH 17/52] fix(board): assign value in board effects, change type of columnIds, fix unit tests, fix column-workItem reducer --- src/app/reducers/column-workitem.reducer.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/app/reducers/column-workitem.reducer.ts b/src/app/reducers/column-workitem.reducer.ts index 1afb16109..b3725c20f 100644 --- a/src/app/reducers/column-workitem.reducer.ts +++ b/src/app/reducers/column-workitem.reducer.ts @@ -2,26 +2,26 @@ import { ActionReducer } from '@ngrx/store'; import * as WorkItemActions from '../actions/work-item.actions'; import { ColumnWorkItemState, InitialColumnWorkItemState } from '../states/index.state'; + export type Action = WorkItemActions.All; export const ColumnWorkItemReducer: ActionReducer = (state = InitialColumnWorkItemState, action: Action) => { switch (action.type) { case WorkItemActions.GET_SUCCESS: { + const cwState = {...state}; action.payload.forEach(item => { - if (item.columnsId === null) { - return state; - } else { - item.columnsId.forEach(col => { - if (state.hasOwnProperty(col.id)) { - state[col.id].push(item.id); + if (item.columnIds !== null) { + item.columnIds.forEach(col => { + if (cwState.hasOwnProperty(col)) { + cwState[col] = [...cwState[col], item.id]; } else { - state[col.id] = []; - state[col.id].push(item.id); + cwState[col] = []; + cwState[col] = [...cwState[col], item.id]; } }); } }); - return {...state}; + return {...cwState}; } } }; From ed9d4ce64340cd31ccfae0c6721149bff4ebbbfe Mon Sep 17 00:00:00 2001 From: Sudipta Sen Date: Mon, 9 Jul 2018 22:22:15 +0530 Subject: [PATCH 18/52] fix(type): using proper type for side panel context --- .../planner-board/planner-board.component.ts | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/app/components_ngrx/planner-board/planner-board.component.ts b/src/app/components_ngrx/planner-board/planner-board.component.ts index 07fb8864d..bcf5f5469 100644 --- a/src/app/components_ngrx/planner-board/planner-board.component.ts +++ b/src/app/components_ngrx/planner-board/planner-board.component.ts @@ -52,14 +52,6 @@ export class PlannerBoardComponent implements AfterViewChecked, OnInit, OnDestro this.setDefaultUrl(groupType); this.checkUrl(groupType); }) - .switchMap(() => { - return this.groupTypeQuery.getFirstGroupType; - }).take(1) - .do((groupType) => { - this.setDefaultUrl(groupType); - this.checkUrl(groupType); - this.store.dispatch(new BoardActions.Get()); - }) .subscribe() ); } From 10e0b9c4dc591972851c6c4b480e3e66bb3be24b Mon Sep 17 00:00:00 2001 From: Vikram Raj Date: Mon, 9 Jul 2018 23:06:23 +0530 Subject: [PATCH 19/52] fix(board):add drag and drop --- .../planner-board-column.component.less | 8 ++- .../planner-board-column.module.ts | 1 - .../planner-board/planner-board.component.ts | 68 +++++++++++++++++++ .../planner-card/planner-card.component.html | 2 +- src/assets/stylesheets/_dragula.less | 42 ++++++------ 5 files changed, 96 insertions(+), 25 deletions(-) diff --git a/src/app/components_ngrx/planner-board-column/planner-board-column.component.less b/src/app/components_ngrx/planner-board-column/planner-board-column.component.less index a77811b29..d85d28a6a 100644 --- a/src/app/components_ngrx/planner-board-column/planner-board-column.component.less +++ b/src/app/components_ngrx/planner-board-column/planner-board-column.component.less @@ -1,4 +1,5 @@ @import (reference) '../../../assets/stylesheets/_base'; +@import './../../../assets/stylesheets/_dragula'; .f8-board { &-column { @@ -10,7 +11,7 @@ &__header { padding-top: 20px; padding-right: 10px; - padding-bottom: 0; + padding-bottom: 10px; padding-left: 10px; &-title { font-weight: 600; @@ -18,11 +19,14 @@ } } &__body { - padding-top: 20px; + padding-top: 5px; padding-right: 20px; padding-bottom: 20px; padding-left: 20px; white-space: normal; + overflow-y: auto; + overflow-x: hidden; + height: ~"calc(e('100% - 58px'))"; } } } diff --git a/src/app/components_ngrx/planner-board-column/planner-board-column.module.ts b/src/app/components_ngrx/planner-board-column/planner-board-column.module.ts index b4c0bc728..79cc2c106 100644 --- a/src/app/components_ngrx/planner-board-column/planner-board-column.module.ts +++ b/src/app/components_ngrx/planner-board-column/planner-board-column.module.ts @@ -3,7 +3,6 @@ import { NgModule } from '@angular/core'; import { WorkItemQuery } from '../../models/work-item'; import { PlannerCardModule } from './../planner-card/planner-card.module'; import { PlannerBoardColumnComponent } from './planner-board-column.component'; - @NgModule({ imports: [ CommonModule, diff --git a/src/app/components_ngrx/planner-board/planner-board.component.ts b/src/app/components_ngrx/planner-board/planner-board.component.ts index bcf5f5469..ae5a4ba4a 100644 --- a/src/app/components_ngrx/planner-board/planner-board.component.ts +++ b/src/app/components_ngrx/planner-board/planner-board.component.ts @@ -29,6 +29,7 @@ export class PlannerBoardComponent implements AfterViewChecked, OnInit, OnDestro private sidePanelOpen: boolean = true; private eventListeners: any[] = []; private board$; + private columns; constructor( private renderer: Renderer2, @@ -54,6 +55,73 @@ export class PlannerBoardComponent implements AfterViewChecked, OnInit, OnDestro }) .subscribe() ); + + this.columns = [{ + name: 'New', + count: 3, + id: '1', + workItems: [{ + id: '1', + title: 'Work Item 1', + number: 1, + iteration: 'Sprint #1' + }, { + id: '2', + title: 'Work Item 2', + number: 2, + iteration: 'Sprint #2' + }, { + id: '3', + title: 'Work Item 3', + number: 3, + iteration: 'Sprint #3' + }] + }, { + name: 'Open', + count: 2, + id: '2', + workItems: [{ + id: '4', + title: 'Work Item 4', + number: 4, + iteration: 'Sprint #4' + }, { + id: '5', + title: 'Work Item 5', + number: 5, + iteration: 'Sprint #5' + }] + }, { + name: 'InProgress', + count: 2, + id: '3', + workItems: [{ + id: '6', + title: 'Work Item 6', + number: 6, + iteration: 'Sprint #6' + }, { + id: '7', + title: 'Work Item 7', + number: 7, + iteration: 'Sprint #7' + }] + }, { + name: 'Resolved', + count: 2, + id: '4', + workItems: [{ + id: '8', + title: 'Work Item 8', + number: 8, + iteration: 'Sprint #8' + }, { + id: '9', + title: 'Work Item 9', + number: 9, + iteration: 'Sprint #9' + }] + }]; } setDefaultUrl(groupType: GroupTypeUI) { diff --git a/src/app/components_ngrx/planner-card/planner-card.component.html b/src/app/components_ngrx/planner-card/planner-card.component.html index 863391aca..73b06d603 100644 --- a/src/app/components_ngrx/planner-card/planner-card.component.html +++ b/src/app/components_ngrx/planner-card/planner-card.component.html @@ -1,4 +1,4 @@ -
+
diff --git a/src/assets/stylesheets/_dragula.less b/src/assets/stylesheets/_dragula.less index 94712cb8c..7444f437e 100644 --- a/src/assets/stylesheets/_dragula.less +++ b/src/assets/stylesheets/_dragula.less @@ -1,23 +1,23 @@ @import (reference) 'shared/_variables'; -.gu { - &-mirror { - position: fixed; - z-index: 9999; - margin: 0; - background-color: @color-pf-white; - cursor: grabbing; - opacity: 1; - -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=80)'; - filter: alpha(opacity=80); - } - &-hide { - display: none; - } - &-unselectable { - user-select: none; - } - &-transit { - border-color: @color-pf-black-400; - opacity: .1; - } +.gu-mirror { + position: fixed !important; + margin: 0 !important; + z-index: 9999 !important; + opacity: 0.8; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); +} +.gu-hide { + display: none !important; +} +.gu-unselectable { + -webkit-user-select: none !important; + -moz-user-select: none !important; + -ms-user-select: none !important; + user-select: none !important; +} +.gu-transit { + opacity: 0.2; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)"; + filter: alpha(opacity=20); } From 05a01d65ace4ddda56a8dff2815a5420f02ca7f4 Mon Sep 17 00:00:00 2001 From: Vikram Raj Date: Tue, 10 Jul 2018 16:55:16 +0530 Subject: [PATCH 20/52] fix(board): change structure of column component --- .../planner-board-column.component.html | 8 +--- .../planner-board-column.component.less | 3 +- .../planner-board-column.component.ts | 13 ++---- .../planner-board-column.module.ts | 8 +--- .../planner-board.component.html | 20 ++++++---- .../planner-board.component.less | 4 ++ .../planner-board/planner-board.component.ts | 40 +++++++++++++++++-- .../planner-board/planner-board.module.ts | 2 + 8 files changed, 63 insertions(+), 35 deletions(-) diff --git a/src/app/components_ngrx/planner-board-column/planner-board-column.component.html b/src/app/components_ngrx/planner-board-column/planner-board-column.component.html index 30adeaee4..ef792ac4d 100644 --- a/src/app/components_ngrx/planner-board-column/planner-board-column.component.html +++ b/src/app/components_ngrx/planner-board-column/planner-board-column.component.html @@ -3,11 +3,7 @@ {{ (workItems | async).length }} {{ columnName }}
-
- - - +
+
diff --git a/src/app/components_ngrx/planner-board-column/planner-board-column.component.less b/src/app/components_ngrx/planner-board-column/planner-board-column.component.less index d85d28a6a..755a45410 100644 --- a/src/app/components_ngrx/planner-board-column/planner-board-column.component.less +++ b/src/app/components_ngrx/planner-board-column/planner-board-column.component.less @@ -1,5 +1,4 @@ @import (reference) '../../../assets/stylesheets/_base'; -@import './../../../assets/stylesheets/_dragula'; .f8-board { &-column { @@ -18,7 +17,7 @@ padding-left: 8px; } } - &__body { + &__wrapper { padding-top: 5px; padding-right: 20px; padding-bottom: 20px; diff --git a/src/app/components_ngrx/planner-board-column/planner-board-column.component.ts b/src/app/components_ngrx/planner-board-column/planner-board-column.component.ts index bce095f0b..0af3759d8 100644 --- a/src/app/components_ngrx/planner-board-column/planner-board-column.component.ts +++ b/src/app/components_ngrx/planner-board-column/planner-board-column.component.ts @@ -1,6 +1,4 @@ -import { Component, Input } from '@angular/core'; -import { Observable } from 'rxjs'; -import { WorkItemQuery, WorkItemUI } from './../../models/work-item'; +import { Component, Input, TemplateRef } from '@angular/core'; @Component({ selector: 'f8-planner-column', @@ -9,12 +7,7 @@ import { WorkItemQuery, WorkItemUI } from './../../models/work-item'; }) export class PlannerBoardColumnComponent { - @Input('workItemIds') set WorkItemIds(ids: string[]) { - this.workItems = this.workItemQuery.getWorkItemsWithIds(ids); - } + @Input() columnBody: TemplateRef; + @Input() itemCount: number; @Input() columnName: string; - - private workItems: Observable; - - constructor(private workItemQuery: WorkItemQuery) {} } diff --git a/src/app/components_ngrx/planner-board-column/planner-board-column.module.ts b/src/app/components_ngrx/planner-board-column/planner-board-column.module.ts index 79cc2c106..65d6b0ed9 100644 --- a/src/app/components_ngrx/planner-board-column/planner-board-column.module.ts +++ b/src/app/components_ngrx/planner-board-column/planner-board-column.module.ts @@ -1,16 +1,12 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; -import { WorkItemQuery } from '../../models/work-item'; -import { PlannerCardModule } from './../planner-card/planner-card.module'; import { PlannerBoardColumnComponent } from './planner-board-column.component'; @NgModule({ imports: [ - CommonModule, - PlannerCardModule + CommonModule ], declarations: [ PlannerBoardColumnComponent ], - exports: [ PlannerBoardColumnComponent ], - providers: [WorkItemQuery] + exports: [ PlannerBoardColumnComponent ] }) export class PlannerBoardColumnModule {} diff --git a/src/app/components_ngrx/planner-board/planner-board.component.html b/src/app/components_ngrx/planner-board/planner-board.component.html index f15a4d9db..618eb84ea 100644 --- a/src/app/components_ngrx/planner-board/planner-board.component.html +++ b/src/app/components_ngrx/planner-board/planner-board.component.html @@ -48,12 +48,18 @@

Please wait, we are loading your data.

- - - + + +
+ +
+
+
diff --git a/src/app/components_ngrx/planner-board/planner-board.component.less b/src/app/components_ngrx/planner-board/planner-board.component.less index 7b637e7e5..bf0ec5fcd 100644 --- a/src/app/components_ngrx/planner-board/planner-board.component.less +++ b/src/app/components_ngrx/planner-board/planner-board.component.less @@ -2,6 +2,7 @@ @import '../../../assets/stylesheets/_planner-layout'; @import '~rh-ngx-datatable/release/assets/icons.css'; @import '~rh-ngx-datatable/release/themes/material.css'; +@import './../../../assets/stylesheets/_dragula'; .f8-wi-container { @@ -52,3 +53,6 @@ } } } +.f8-board-column__body { + height: 100%; +} diff --git a/src/app/components_ngrx/planner-board/planner-board.component.ts b/src/app/components_ngrx/planner-board/planner-board.component.ts index ae5a4ba4a..63518bcae 100644 --- a/src/app/components_ngrx/planner-board/planner-board.component.ts +++ b/src/app/components_ngrx/planner-board/planner-board.component.ts @@ -10,6 +10,8 @@ import { import { ActivatedRoute, NavigationStart, Router } from '@angular/router'; import { Store } from '@ngrx/store'; import { sortBy } from 'lodash'; +import { DragulaService } from 'ng2-dragula'; +import { Subject } from 'rxjs'; import { BoardQuery } from '../../models/board.model'; import { AppState } from '../../states/app.state'; import * as BoardActions from './../../actions/board.actions'; @@ -30,17 +32,22 @@ export class PlannerBoardComponent implements AfterViewChecked, OnInit, OnDestro private eventListeners: any[] = []; private board$; private columns; + private destroy$ = new Subject(); constructor( + private dragulaService: DragulaService, private renderer: Renderer2, private spaceQuery: SpaceQuery, private groupTypeQuery: GroupTypeQuery, private iterationQuery: IterationQuery, + private boardQuery: BoardQuery, private route: ActivatedRoute, - private router: Router, - private store: Store, - private boardQuery: BoardQuery - ) {} + private router: Router + ) { + this.dragulaService.drop.asObservable().takeUntil(this.destroy$).subscribe((value) => { + this.onDrop(value.slice(1)); + }); + } ngOnInit() { this.iterationQuery.deselectAllIteration(); @@ -158,6 +165,7 @@ export class PlannerBoardComponent implements AfterViewChecked, OnInit, OnDestro } ngOnDestroy() { + this.destroy$.next(); this.eventListeners.forEach(e => e.unsubscribe()); } @@ -180,4 +188,28 @@ export class PlannerBoardComponent implements AfterViewChecked, OnInit, OnDestro this.sidePanelOpen = event === 'out'; }, 200); } + onDrop(args) { + const [el, target, source, sibling] = args; + let direction; + let destinationWorkItemID; + if (sibling === null && el.previousElementSibling !== null) { + direction = 'below'; + destinationWorkItemID = el.previousElementSibling.children[0].getAttribute('data-id'); + console.log(el.previousElementSibling, '####-1'); + } else if (sibling !== null) { + direction = 'above'; + destinationWorkItemID = sibling.children[0].getAttribute('data-id'); + } else if (sibling === null && el.previousElementSibling === null) { + // no reorder action dispatch only update action will dispatch + } + console.log(el.previousElementSibling, '####-1'); + const payload = { + workItem: el.children[0].getAttribute('data-id'), + destinationWorkItemID: destinationWorkItemID, + direction: direction + }; + console.log(el.children[0].getAttribute('data-id'), '####-34'); + console.log(destinationWorkItemID, '####-35'); + console.log(direction, '####-36'); + } } diff --git a/src/app/components_ngrx/planner-board/planner-board.module.ts b/src/app/components_ngrx/planner-board/planner-board.module.ts index 4a80d699a..e37c04145 100644 --- a/src/app/components_ngrx/planner-board/planner-board.module.ts +++ b/src/app/components_ngrx/planner-board/planner-board.module.ts @@ -10,12 +10,14 @@ import { InitialBoardState, InitialColumnWorkItemState } from './../../states/in import { PlannerLayoutModule } from './../../widgets/planner-layout/planner-layout.module'; import { PlannerBoardColumnModule } from './../planner-board-column/planner-board-column.module'; +import { PlannerCardModule } from './../planner-card/planner-card.module'; import { SidepanelModule } from './../side-panel/side-panel.module'; import { WorkItemPreviewPanelModule } from './../work-item-preview-panel/work-item-preview-panel.module'; import { PlannerBoardRoutingModule } from './planner-board-routing.module'; import { PlannerBoardComponent } from './planner-board.component'; // Data Querries +import { DragulaModule, DragulaService } from 'ng2-dragula'; import { AreaQuery } from '../../models/area.model'; import { BoardQuery, ColumnWorkItemQuery } from '../../models/board.model'; import { GroupTypeQuery } from '../../models/group-types.model'; From ca30acaf0d406dd8d44eca5442b483e82d407c0a Mon Sep 17 00:00:00 2001 From: sahil143 Date: Thu, 12 Jul 2018 15:27:15 +0530 Subject: [PATCH 21/52] fix(css): fix linter error for css --- .../planner-board-column.component.less | 2 +- src/assets/stylesheets/_dragula.less | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/app/components_ngrx/planner-board-column/planner-board-column.component.less b/src/app/components_ngrx/planner-board-column/planner-board-column.component.less index 755a45410..bedcd6cf4 100644 --- a/src/app/components_ngrx/planner-board-column/planner-board-column.component.less +++ b/src/app/components_ngrx/planner-board-column/planner-board-column.component.less @@ -25,7 +25,7 @@ white-space: normal; overflow-y: auto; overflow-x: hidden; - height: ~"calc(e('100% - 58px'))"; + height: ~'calc(e("100% - 58px"))'; } } } diff --git a/src/assets/stylesheets/_dragula.less b/src/assets/stylesheets/_dragula.less index 7444f437e..a819673fb 100644 --- a/src/assets/stylesheets/_dragula.less +++ b/src/assets/stylesheets/_dragula.less @@ -3,8 +3,8 @@ position: fixed !important; margin: 0 !important; z-index: 9999 !important; - opacity: 0.8; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + opacity: .8; + -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=80)'; filter: alpha(opacity=80); } .gu-hide { @@ -17,7 +17,7 @@ user-select: none !important; } .gu-transit { - opacity: 0.2; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)"; + opacity: .2; + -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=20)'; filter: alpha(opacity=20); } From e6a3280419991c9b5d0d29682eadbb1b734fbf2e Mon Sep 17 00:00:00 2001 From: sahil143 Date: Mon, 16 Jul 2018 13:52:18 +0530 Subject: [PATCH 22/52] fix(board): get workitems for each column in board query --- .../planner-board/planner-board.component.html | 10 ++++++---- .../planner-board/planner-board.component.ts | 1 - src/app/models/board.model.ts | 14 ++++++++++---- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/app/components_ngrx/planner-board/planner-board.component.html b/src/app/components_ngrx/planner-board/planner-board.component.html index 618eb84ea..605cd1de2 100644 --- a/src/app/components_ngrx/planner-board/planner-board.component.html +++ b/src/app/components_ngrx/planner-board/planner-board.component.html @@ -48,18 +48,20 @@

Please wait, we are loading your data.

- +
- +
+
diff --git a/src/app/components_ngrx/planner-board/planner-board.component.ts b/src/app/components_ngrx/planner-board/planner-board.component.ts index 63518bcae..430a48f8e 100644 --- a/src/app/components_ngrx/planner-board/planner-board.component.ts +++ b/src/app/components_ngrx/planner-board/planner-board.component.ts @@ -156,7 +156,6 @@ export class PlannerBoardComponent implements AfterViewChecked, OnInit, OnDestro .filter(params => params.hasOwnProperty('boardContextId')) .map(params => params.boardContextId) .subscribe(contextId => { - console.log(contextId); this.board$ = this.boardQuery.getBoardById(contextId); // Fetching work item // Dispatch action to fetch work items per lane for this context ID diff --git a/src/app/models/board.model.ts b/src/app/models/board.model.ts index 36eb5fa34..d0396f3b7 100644 --- a/src/app/models/board.model.ts +++ b/src/app/models/board.model.ts @@ -16,6 +16,7 @@ import { modelService, switchModel } from './common.model'; +import { WorkItemQuery, WorkItemUI } from './work-item'; export class BoardModelData { id: string; @@ -68,7 +69,7 @@ export class BoardModelUI { title: string; columnOrder: 0; type: string; - workItemIds?: Observable + workItems?: Observable }[]; } @@ -128,15 +129,20 @@ export class BoardQuery { private boardSource = this.store.select(this.boards); constructor(private store: Store, - private columnWorkItemQuery: ColumnWorkItemQuery) {} + private columnWorkItemQuery: ColumnWorkItemQuery, + private workItemQuery: WorkItemQuery) {} getBoardById(id: string): Observable { - return this.boardSource.select(boards => boards[id]) + return this.boardSource.filter(boards => !!boards.length) + .map(boards => boards[id]) .map(board => { board.columns.map(col => { return { ...col, - workItemIds: this.columnWorkItemQuery.getWorkItemIdsByColumnId(col.id) + workItems: this.columnWorkItemQuery.getWorkItemIdsByColumnId(col.id) + .map(ids => { + return this.workItemQuery.getWorkItemsWithIds(ids); + }) }; }); return board; From e3c01f864c6665050ea90fb6ace7f1772902bb2a Mon Sep 17 00:00:00 2001 From: sahil143 Date: Tue, 17 Jul 2018 17:18:50 +0530 Subject: [PATCH 23/52] fix(columnWorkitem/board): use switchMap, add dafault to reducer switch case --- .../planner-board/planner-board.component.html | 4 ++-- src/app/models/board.model.ts | 18 ++++++++++++++---- src/app/reducers/column-workitem.reducer.ts | 3 +++ 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/app/components_ngrx/planner-board/planner-board.component.html b/src/app/components_ngrx/planner-board/planner-board.component.html index 605cd1de2..c1e5751b0 100644 --- a/src/app/components_ngrx/planner-board/planner-board.component.html +++ b/src/app/components_ngrx/planner-board/planner-board.component.html @@ -51,8 +51,8 @@

Please wait, we are loading your data.

+ [itemCount]="(column.workItems | async)?.length" + [columnName]="column.title">
}[]; @@ -133,14 +133,24 @@ export class BoardQuery { private workItemQuery: WorkItemQuery) {} getBoardById(id: string): Observable { - return this.boardSource.filter(boards => !!boards.length) + return this.boardSource.filter(boards => !!boards[id]) + .do((boards) => { + console.log('#### - 2 boards', boards); + }) .map(boards => boards[id]) + .do((board) => { + console.log('### - 2.1 - selected board', board); + }) .map(board => { - board.columns.map(col => { + board.columns = board.columns + .map(col => { return { ...col, workItems: this.columnWorkItemQuery.getWorkItemIdsByColumnId(col.id) - .map(ids => { + .do((ids) => { + console.log('### - 3 - columnworkitemids', ids); + }) + .flatMap(ids => { return this.workItemQuery.getWorkItemsWithIds(ids); }) }; diff --git a/src/app/reducers/column-workitem.reducer.ts b/src/app/reducers/column-workitem.reducer.ts index b3725c20f..5de0eeb69 100644 --- a/src/app/reducers/column-workitem.reducer.ts +++ b/src/app/reducers/column-workitem.reducer.ts @@ -23,5 +23,8 @@ export const ColumnWorkItemReducer: ActionReducer = (state }); return {...cwState}; } + default: { + return state; + } } }; From 37c215283b63278c12e691464cc4a50d2449a93c Mon Sep 17 00:00:00 2001 From: Sahil Budhwar Date: Tue, 17 Jul 2018 18:55:26 +0530 Subject: [PATCH 24/52] fix(board-ngrx): Board State, Actions, Effects, Reducers (#2708) * fix(states): add BoardState to app.state * fix(actions): add action for BoardView * fix(actions): add actions for to get Board api * fix(common): add optional parameter to have different key in normalization * fix(reducersBoard): add reducers for BoardView * fix(effectsBoard): add effects for boardView * fix(effects): call boardApi in getBoards Effect * fix(common): add test for nprmalize array * fix(board): add mapper in workitem and Board * fix(column-workitem): add state for column-workitem * fix(board): add reducer for boardColumn * fix(board): add states and reducer to board module * fix(board): add column-workItem reducer * fix(board): fix tests for board service, reducer, model * fix(reducer): add unit test for column-workitem reducer * fix(board): remove board-api-url action from boardAction * fix(workitem): add getWorkItemWithIds query to WorItemQuery * fix(board): assign value in board effects, change type of columnIds, fix unit tests, fix column-workItem reducer * fix(board): add default for column workItem reducer * fix(columnWorkitem): add unit test for default case --- .../components_ngrx/planner-board/planner-board.module.ts | 3 +++ src/app/reducers/column-workitem.reducer.spec.ts | 8 ++++---- src/app/reducers/column-workitem.reducer.ts | 4 ++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/app/components_ngrx/planner-board/planner-board.module.ts b/src/app/components_ngrx/planner-board/planner-board.module.ts index e37c04145..0f500a29d 100644 --- a/src/app/components_ngrx/planner-board/planner-board.module.ts +++ b/src/app/components_ngrx/planner-board/planner-board.module.ts @@ -31,6 +31,7 @@ import { F8SortByPipeModule } from './../../pipes/sort-by.module'; @NgModule({ providers: [ + DragulaService, TooltipConfig, BoardService, CommentQuery, @@ -46,9 +47,11 @@ import { F8SortByPipeModule } from './../../pipes/sort-by.module'; ], imports: [ CommonModule, + DragulaModule, F8SortByPipeModule, PlannerBoardRoutingModule, PlannerBoardColumnModule, + PlannerCardModule, PlannerLayoutModule, WorkItemPreviewPanelModule, SidepanelModule, diff --git a/src/app/reducers/column-workitem.reducer.spec.ts b/src/app/reducers/column-workitem.reducer.spec.ts index 50b10ee3b..0e65419f6 100644 --- a/src/app/reducers/column-workitem.reducer.spec.ts +++ b/src/app/reducers/column-workitem.reducer.spec.ts @@ -12,19 +12,19 @@ describe('ColumnWorkitemReducer: ', () => { id: '1', title: 'Work Item 2', number: '2', - columnIds: [ '0000-000-05', '0000-000-06'] + columnsId: [ '0000-000-05', '0000-000-06'] }, { id: '2', title: 'Work Item 1', number: '1', - columnIds: ['0000-000-05', '0000-000-07'] + columnsId: ['0000-000-05', '0000-000-07'] }, { id: '3', title: 'Work Item 1', number: '3', - columnIds: null + columnsId: null } ] as WorkItemUI[]; @@ -46,7 +46,7 @@ describe('ColumnWorkitemReducer: ', () => { id: '1', title: 'Work Item 1', number: '1', - columnIds: null + columnsId: null } ] as WorkItemUI[]; diff --git a/src/app/reducers/column-workitem.reducer.ts b/src/app/reducers/column-workitem.reducer.ts index 5de0eeb69..c5df4e2fe 100644 --- a/src/app/reducers/column-workitem.reducer.ts +++ b/src/app/reducers/column-workitem.reducer.ts @@ -23,8 +23,8 @@ export const ColumnWorkItemReducer: ActionReducer = (state }); return {...cwState}; } - default: { - return state; + default: { + return {...state}; } } }; From 8b0caa04cb889fd6082c6a6d5f7c2b07d9bdaaab Mon Sep 17 00:00:00 2001 From: Vikram Raj Date: Wed, 18 Jul 2018 13:31:34 +0530 Subject: [PATCH 25/52] fix(card): add assignee component --- .../planner-card/planner-card.component.html | 7 +++- .../planner-card/planner-card.component.ts | 37 ------------------- 2 files changed, 6 insertions(+), 38 deletions(-) diff --git a/src/app/components_ngrx/planner-card/planner-card.component.html b/src/app/components_ngrx/planner-card/planner-card.component.html index 73b06d603..e14e6e54b 100644 --- a/src/app/components_ngrx/planner-card/planner-card.component.html +++ b/src/app/components_ngrx/planner-card/planner-card.component.html @@ -20,7 +20,12 @@ {{ iteration.name }}
- + +