@fundamental-ngx/platform 0.43.37 → 0.43.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/approval-flow/approval-flow-user-list/approval-flow-user-list.component.d.ts +10 -0
  2. package/button/button.component.d.ts +1 -2
  3. package/esm2020/approval-flow/approval-flow-add-node/approval-flow-add-node.component.mjs +2 -4
  4. package/esm2020/approval-flow/approval-flow-user-list/approval-flow-user-list.component.mjs +50 -14
  5. package/esm2020/button/button.component.mjs +5 -3
  6. package/esm2020/list/base-list-item.mjs +4 -2
  7. package/esm2020/list/list.component.mjs +12 -2
  8. package/esm2020/table/components/table-row/table-row.component.mjs +3 -3
  9. package/esm2020/table/table.component.mjs +3 -3
  10. package/esm2020/table-helpers/directives/table-virtual-scroll.directive.mjs +9 -6
  11. package/esm2020/value-help-dialog/value-help-dialog/value-help-dialog.component.mjs +3 -3
  12. package/fesm2015/fundamental-ngx-platform-approval-flow.mjs +52 -20
  13. package/fesm2015/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
  14. package/fesm2015/fundamental-ngx-platform-button.mjs +4 -2
  15. package/fesm2015/fundamental-ngx-platform-button.mjs.map +1 -1
  16. package/fesm2015/fundamental-ngx-platform-list.mjs +15 -2
  17. package/fesm2015/fundamental-ngx-platform-list.mjs.map +1 -1
  18. package/fesm2015/fundamental-ngx-platform-table-helpers.mjs +8 -5
  19. package/fesm2015/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
  20. package/fesm2015/fundamental-ngx-platform-table.mjs +4 -4
  21. package/fesm2015/fundamental-ngx-platform-table.mjs.map +1 -1
  22. package/fesm2015/fundamental-ngx-platform-value-help-dialog.mjs +2 -2
  23. package/fesm2015/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
  24. package/fesm2020/fundamental-ngx-platform-approval-flow.mjs +50 -18
  25. package/fesm2020/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
  26. package/fesm2020/fundamental-ngx-platform-button.mjs +4 -2
  27. package/fesm2020/fundamental-ngx-platform-button.mjs.map +1 -1
  28. package/fesm2020/fundamental-ngx-platform-list.mjs +14 -2
  29. package/fesm2020/fundamental-ngx-platform-list.mjs.map +1 -1
  30. package/fesm2020/fundamental-ngx-platform-table-helpers.mjs +8 -5
  31. package/fesm2020/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
  32. package/fesm2020/fundamental-ngx-platform-table.mjs +4 -4
  33. package/fesm2020/fundamental-ngx-platform-table.mjs.map +1 -1
  34. package/fesm2020/fundamental-ngx-platform-value-help-dialog.mjs +2 -2
  35. package/fesm2020/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
  36. package/fundamental-ngx-platform-v0.43.39.tgz +0 -0
  37. package/list/list.component.d.ts +6 -0
  38. package/package.json +4 -4
  39. package/schematics/ng-add/index.js +1 -1
  40. package/fundamental-ngx-platform-v0.43.37.tgz +0 -0
@@ -1,10 +1,10 @@
1
1
  import * as i0 from '@angular/core';
2
- import { EventEmitter, Component, ViewEncapsulation, ChangeDetectionStrategy, Input, Output, ViewChild, ViewChildren, Directive, Optional, HostBinding, ContentChild, Injectable, Inject, NgModule } from '@angular/core';
2
+ import { EventEmitter, inject, Component, ViewEncapsulation, ChangeDetectionStrategy, Input, Output, ViewChild, ViewChildren, Directive, Optional, HostBinding, ContentChild, Injectable, Inject, NgModule } from '@angular/core';
3
3
  import { UP_ARROW, DOWN_ARROW, RIGHT_ARROW, LEFT_ARROW } from '@angular/cdk/keycodes';
4
- import { Subscription, combineLatest, Subject, merge, fromEvent } from 'rxjs';
4
+ import { takeUntil, Subscription, combineLatest, Subject, merge, fromEvent } from 'rxjs';
5
5
  import { throttleTime, startWith, switchMap, mapTo, map, distinctUntilChanged } from 'rxjs/operators';
6
6
  import * as i6 from '@fundamental-ngx/cdk/utils';
7
- import { KeyUtil } from '@fundamental-ngx/cdk/utils';
7
+ import { DestroyedService, KeyUtil } from '@fundamental-ngx/cdk/utils';
8
8
  import * as i10$2 from '@fundamental-ngx/core/grid-list';
9
9
  import { GridListItemComponent, GridListModule } from '@fundamental-ngx/core/grid-list';
10
10
  import * as i1$1 from '@fundamental-ngx/core/dialog';
@@ -149,17 +149,22 @@ class ApprovalFlowUserListComponent {
149
149
  this._trackByFn = trackByFn;
150
150
  /** @hidden */
151
151
  this._displayUsers = [];
152
+ /** @hidden */
153
+ this._allSelectedUsers = [];
154
+ /** @hidden */
155
+ this._destroyed$ = inject(DestroyedService);
156
+ /** @hidden */
157
+ this._dontCallSelection = false;
152
158
  }
153
159
  /** @hidden */
154
160
  ngAfterViewInit() {
155
161
  if (this.selectedUsers.length) {
156
- const selectedApproversNames = this.selectedUsers.map((approver) => approver.name);
157
- this._selectedItems = this.listItems.filter((item) => !!item.avatar?.ariaLabel && selectedApproversNames.includes(item.avatar.ariaLabel));
158
- this._selectedItems.forEach((item) => {
159
- item._selected = true;
160
- this.list._selectItem(item);
161
- });
162
- this._cdr.detectChanges();
162
+ this._selectItems(this.selectedUsers);
163
+ this._allSelectedUsers = [...this.selectedUsers];
164
+ this._cdr.markForCheck();
165
+ }
166
+ if (this.isSelectable) {
167
+ this._listenToListItemChange();
163
168
  }
164
169
  }
165
170
  /** @hidden */
@@ -174,13 +179,22 @@ class ApprovalFlowUserListComponent {
174
179
  }
175
180
  /** @hidden */
176
181
  _onSelect(event) {
177
- this._selectedItems = event.selectedItems;
178
- this.onSelectionChange.emit(this._getUsersFromSelectedItems(event.selectedItems));
182
+ if (!this._dontCallSelection) {
183
+ this._selectedItems = event.selectedItems;
184
+ if (event.removed) {
185
+ this._allSelectedUsers = this._allSelectedUsers.filter((user) => `${this._idPrefix + user.id}` !== event.removed.id);
186
+ }
187
+ if (event.added) {
188
+ this._allSelectedUsers.push(...this._getUsersFromSelectedItems([event.added]));
189
+ }
190
+ this.onSelectionChange.emit(this._allSelectedUsers);
191
+ this._cdr.detectChanges();
192
+ }
179
193
  }
180
194
  /** @hidden */
181
195
  _getUsersFromSelectedItems(items) {
182
196
  return items
183
- .map((item) => this.users.find((user) => `${this._idPrefix + user.id}` === item.itemEl.nativeElement.id))
197
+ .map((item) => this.users.find((user) => `${this._idPrefix + user.id}` === item.id))
184
198
  .filter((u) => !!u);
185
199
  }
186
200
  /** @hidden */
@@ -215,14 +229,34 @@ class ApprovalFlowUserListComponent {
215
229
  clearInterval(this._intervalID);
216
230
  }
217
231
  }
232
+ /** @hidden */
233
+ _listenToListItemChange() {
234
+ this.listItems.changes.pipe(takeUntil(this._destroyed$)).subscribe(() => {
235
+ this._selectItems(this._allSelectedUsers);
236
+ this._cdr.detectChanges();
237
+ });
238
+ }
239
+ /** @hidden */
240
+ _selectItems(users) {
241
+ this._dontCallSelection = true;
242
+ const allSelectedUserNames = users.map((user) => this._idPrefix + user.id);
243
+ const currentSelectedList = this.listItems.filter((item) => allSelectedUserNames.includes(item.id));
244
+ this.list._clearSelection();
245
+ this._selectedItems = [...currentSelectedList];
246
+ this._selectedItems.forEach((item) => {
247
+ item._selected = true;
248
+ this.list._selectItem(item);
249
+ });
250
+ this._dontCallSelection = false;
251
+ }
218
252
  }
219
253
  ApprovalFlowUserListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ApprovalFlowUserListComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
220
- ApprovalFlowUserListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ApprovalFlowUserListComponent, selector: "fdp-approval-flow-user-list", inputs: { users: "users", selectedUsers: "selectedUsers", isSelectable: "isSelectable" }, outputs: { onUserClick: "onUserClick", onSelectionChange: "onSelectionChange" }, host: { classAttribute: "fdp-approval-flow-user-list" }, viewQueries: [{ propertyName: "list", first: true, predicate: ListComponent, descendants: true }, { propertyName: "listItems", predicate: StandardListItemComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"fdp-approval-flow-user-list__selected-count\" *ngIf=\"_selectedItems.length\">\n <ng-container *ngIf=\"_selectedItems.length === 1; else multipleItems\">\n {{ 'platformApprovalFlow.userListSelectedItemsCountSingular' | fdTranslate }}\n </ng-container>\n\n <ng-template #multipleItems>\n {{ 'platformApprovalFlow.userListSelectedItemsCountPlural' | fdTranslate: { count: _selectedItems.length } }}\n </ng-template>\n</div>\n\n<fdp-list\n [selectionMode]=\"isSelectable ? 'multi' : 'none'\"\n [selection]=\"isSelectable\"\n [navigationIndicator]=\"true\"\n [hasByLine]=\"true\"\n [(ngModel)]=\"_selectedItems\"\n [selectedItems]=\"_selectedItems\"\n (selectedItemChange)=\"_onSelect($event)\"\n>\n <fdp-standard-list-item\n *ngFor=\"let _user of _displayUsers; trackBy: _trackByFn\"\n [attr.id]=\"_idPrefix + _user.id\"\n [avatarSrc]=\"_user.imgUrl\"\n [avatarTitle]=\"_user.name\"\n [description]=\"_user.description\"\n [ariaLabel]=\"_user.name\"\n [title]=\"_user.name\"\n (click)=\"$event.stopPropagation(); onUserClick.emit(_user)\"\n ></fdp-standard-list-item>\n</fdp-list>\n", styles: [".fdp-approval-flow-user-list{display:block;margin-top:-1rem}.fdp-approval-flow-user-list__selected-count{line-height:2rem;margin:0 -1rem;padding:0 1rem;background:#f2f2f2;background:var(--sapList_HeaderBackground, #f2f2f2)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.ListComponent, selector: "fdp-list", inputs: ["selectedItems", "ariaSetsize", "ariaMultiselectable", "loadTitle", "loadingLabel", "delayTime", "itemSize", "loadMore", "loadOnScroll", "role", "listType", "maxHeight", "noBorder", "scrollOffsetPercentage", "selection", "selectionMode", "value", "rowSelection", "dataSource", "navigated", "navigationIndicator", "hasByLine", "hasObject", "unreadIndicator", "interceptTabKey"], outputs: ["selectedItemChange"] }, { kind: "component", type: i3.StandardListItemComponent, selector: "fdp-standard-list-item" }, { kind: "pipe", type: i10.FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
254
+ ApprovalFlowUserListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ApprovalFlowUserListComponent, selector: "fdp-approval-flow-user-list", inputs: { users: "users", selectedUsers: "selectedUsers", isSelectable: "isSelectable" }, outputs: { onUserClick: "onUserClick", onSelectionChange: "onSelectionChange" }, host: { classAttribute: "fdp-approval-flow-user-list" }, providers: [DestroyedService], viewQueries: [{ propertyName: "list", first: true, predicate: ListComponent, descendants: true }, { propertyName: "listItems", predicate: StandardListItemComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"fdp-approval-flow-user-list__selected-count\" *ngIf=\"_allSelectedUsers.length\">\n <ng-container *ngIf=\"_allSelectedUsers.length === 1; else multipleItems\">\n {{ 'platformApprovalFlow.userListSelectedItemsCountSingular' | fdTranslate }}\n </ng-container>\n\n <ng-template #multipleItems>\n {{\n 'platformApprovalFlow.userListSelectedItemsCountPlural' | fdTranslate : { count: _allSelectedUsers.length }\n }}\n </ng-template>\n</div>\n\n<fdp-list\n [selectionMode]=\"isSelectable ? 'multi' : 'none'\"\n [selection]=\"isSelectable\"\n [navigationIndicator]=\"true\"\n [hasByLine]=\"true\"\n [(ngModel)]=\"_selectedItems\"\n [selectedItems]=\"_selectedItems\"\n (selectedItemChange)=\"_onSelect($event)\"\n>\n <fdp-standard-list-item\n *ngFor=\"let _user of _displayUsers; trackBy: _trackByFn\"\n [attr.id]=\"_idPrefix + _user.id\"\n [id]=\"_idPrefix + _user.id\"\n [avatarSrc]=\"_user.imgUrl\"\n [avatarTitle]=\"_user.name\"\n [description]=\"_user.description\"\n [ariaLabel]=\"_user.name\"\n [title]=\"_user.name\"\n (click)=\"$event.stopPropagation(); onUserClick.emit(_user)\"\n ></fdp-standard-list-item>\n</fdp-list>\n", styles: [".fdp-approval-flow-user-list{display:block;margin-top:-1rem}.fdp-approval-flow-user-list__selected-count{line-height:2rem;margin:0 -1rem;padding:0 1rem;background:#f2f2f2;background:var(--sapList_HeaderBackground, #f2f2f2)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.ListComponent, selector: "fdp-list", inputs: ["selectedItems", "ariaSetsize", "ariaMultiselectable", "loadTitle", "loadingLabel", "delayTime", "itemSize", "loadMore", "loadOnScroll", "role", "listType", "maxHeight", "noBorder", "scrollOffsetPercentage", "selection", "selectionMode", "value", "rowSelection", "dataSource", "navigated", "navigationIndicator", "hasByLine", "hasObject", "unreadIndicator", "interceptTabKey"], outputs: ["selectedItemChange"] }, { kind: "component", type: i3.StandardListItemComponent, selector: "fdp-standard-list-item" }, { kind: "pipe", type: i10.FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
221
255
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ApprovalFlowUserListComponent, decorators: [{
222
256
  type: Component,
223
257
  args: [{ selector: 'fdp-approval-flow-user-list', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
224
258
  class: 'fdp-approval-flow-user-list'
225
- }, template: "<div class=\"fdp-approval-flow-user-list__selected-count\" *ngIf=\"_selectedItems.length\">\n <ng-container *ngIf=\"_selectedItems.length === 1; else multipleItems\">\n {{ 'platformApprovalFlow.userListSelectedItemsCountSingular' | fdTranslate }}\n </ng-container>\n\n <ng-template #multipleItems>\n {{ 'platformApprovalFlow.userListSelectedItemsCountPlural' | fdTranslate: { count: _selectedItems.length } }}\n </ng-template>\n</div>\n\n<fdp-list\n [selectionMode]=\"isSelectable ? 'multi' : 'none'\"\n [selection]=\"isSelectable\"\n [navigationIndicator]=\"true\"\n [hasByLine]=\"true\"\n [(ngModel)]=\"_selectedItems\"\n [selectedItems]=\"_selectedItems\"\n (selectedItemChange)=\"_onSelect($event)\"\n>\n <fdp-standard-list-item\n *ngFor=\"let _user of _displayUsers; trackBy: _trackByFn\"\n [attr.id]=\"_idPrefix + _user.id\"\n [avatarSrc]=\"_user.imgUrl\"\n [avatarTitle]=\"_user.name\"\n [description]=\"_user.description\"\n [ariaLabel]=\"_user.name\"\n [title]=\"_user.name\"\n (click)=\"$event.stopPropagation(); onUserClick.emit(_user)\"\n ></fdp-standard-list-item>\n</fdp-list>\n", styles: [".fdp-approval-flow-user-list{display:block;margin-top:-1rem}.fdp-approval-flow-user-list__selected-count{line-height:2rem;margin:0 -1rem;padding:0 1rem;background:#f2f2f2;background:var(--sapList_HeaderBackground, #f2f2f2)}\n"] }]
259
+ }, providers: [DestroyedService], template: "<div class=\"fdp-approval-flow-user-list__selected-count\" *ngIf=\"_allSelectedUsers.length\">\n <ng-container *ngIf=\"_allSelectedUsers.length === 1; else multipleItems\">\n {{ 'platformApprovalFlow.userListSelectedItemsCountSingular' | fdTranslate }}\n </ng-container>\n\n <ng-template #multipleItems>\n {{\n 'platformApprovalFlow.userListSelectedItemsCountPlural' | fdTranslate : { count: _allSelectedUsers.length }\n }}\n </ng-template>\n</div>\n\n<fdp-list\n [selectionMode]=\"isSelectable ? 'multi' : 'none'\"\n [selection]=\"isSelectable\"\n [navigationIndicator]=\"true\"\n [hasByLine]=\"true\"\n [(ngModel)]=\"_selectedItems\"\n [selectedItems]=\"_selectedItems\"\n (selectedItemChange)=\"_onSelect($event)\"\n>\n <fdp-standard-list-item\n *ngFor=\"let _user of _displayUsers; trackBy: _trackByFn\"\n [attr.id]=\"_idPrefix + _user.id\"\n [id]=\"_idPrefix + _user.id\"\n [avatarSrc]=\"_user.imgUrl\"\n [avatarTitle]=\"_user.name\"\n [description]=\"_user.description\"\n [ariaLabel]=\"_user.name\"\n [title]=\"_user.name\"\n (click)=\"$event.stopPropagation(); onUserClick.emit(_user)\"\n ></fdp-standard-list-item>\n</fdp-list>\n", styles: [".fdp-approval-flow-user-list{display:block;margin-top:-1rem}.fdp-approval-flow-user-list__selected-count{line-height:2rem;margin:0 -1rem;padding:0 1rem;background:#f2f2f2;background:var(--sapList_HeaderBackground, #f2f2f2)}\n"] }]
226
260
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { users: [{
227
261
  type: Input
228
262
  }], selectedUsers: [{
@@ -937,9 +971,7 @@ class ApprovalFlowAddNodeComponent {
937
971
  }
938
972
  /** @hidden */
939
973
  _exitSelectMode() {
940
- if (this._selectedApprovers.length && !this._data.node?.approvers.length) {
941
- this._selectedApprovers = [];
942
- }
974
+ this._selectedApprovers = this._data.node?.approvers?.length ? [...this._data.node.approvers] : [];
943
975
  if (!this._data.isEdit && !this._data.node?.approvalTeamId) {
944
976
  this.viewService.resetTeam();
945
977
  }