@firestitch/list 9.11.0 → 9.12.0

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 (41) hide show
  1. package/app/classes/list-controller.d.ts +4 -2
  2. package/app/classes/reorder-controller.d.ts +2 -0
  3. package/app/components/body/row/inline-action/inline-action.component.d.ts +3 -0
  4. package/app/components/body/row/menu-action/menu-action.component.d.ts +9 -0
  5. package/app/components/list/list.component.d.ts +1 -0
  6. package/app/interfaces/listconfig.interface.d.ts +9 -0
  7. package/app/models/row-action.model.d.ts +4 -1
  8. package/bundles/firestitch-list.umd.js +111 -16
  9. package/bundles/firestitch-list.umd.js.map +1 -1
  10. package/bundles/firestitch-list.umd.min.js +2 -2
  11. package/bundles/firestitch-list.umd.min.js.map +1 -1
  12. package/esm2015/app/classes/list-controller.js +11 -4
  13. package/esm2015/app/classes/reorder-controller.js +12 -3
  14. package/esm2015/app/components/body/row/actions/actions.component.js +2 -2
  15. package/esm2015/app/components/body/row/inline-action/inline-action.component.js +10 -2
  16. package/esm2015/app/components/body/row/menu-action/menu-action.component.js +41 -0
  17. package/esm2015/app/components/list/list.component.js +12 -1
  18. package/esm2015/app/fs-list.module.js +5 -1
  19. package/esm2015/app/interfaces/listconfig.interface.js +1 -1
  20. package/esm2015/app/models/row-action.model.js +10 -1
  21. package/esm2015/firestitch-list.js +7 -6
  22. package/esm2015/public_api.js +1 -1
  23. package/esm5/app/classes/list-controller.js +19 -4
  24. package/esm5/app/classes/reorder-controller.js +12 -3
  25. package/esm5/app/components/body/row/actions/actions.component.js +2 -2
  26. package/esm5/app/components/body/row/inline-action/inline-action.component.js +10 -2
  27. package/esm5/app/components/body/row/menu-action/menu-action.component.js +42 -0
  28. package/esm5/app/components/list/list.component.js +13 -1
  29. package/esm5/app/fs-list.module.js +5 -1
  30. package/esm5/app/interfaces/listconfig.interface.js +1 -1
  31. package/esm5/app/models/row-action.model.js +10 -1
  32. package/esm5/firestitch-list.js +7 -6
  33. package/esm5/public_api.js +1 -1
  34. package/fesm2015/firestitch-list.js +93 -8
  35. package/fesm2015/firestitch-list.js.map +1 -1
  36. package/fesm5/firestitch-list.js +103 -8
  37. package/fesm5/firestitch-list.js.map +1 -1
  38. package/firestitch-list.d.ts +7 -6
  39. package/firestitch-list.metadata.json +1 -1
  40. package/package.json +1 -1
  41. package/public_api.d.ts +1 -1
@@ -15,6 +15,7 @@ import { ItemType, FilterComponent, ExternalParamsController as ExternalParamsCo
15
15
  import { FsScrollService, FsScrollModule } from '@firestitch/scroll';
16
16
  import { FsMenuModule } from '@firestitch/menu';
17
17
  import { FsPrompt, FsPromptModule } from '@firestitch/prompt';
18
+ import { FsFileModule } from '@firestitch/file';
18
19
  import { isString, isObject, isBoolean, isNumber, isFunction, get, cloneDeep, mergeWith, random, merge as merge$1 } from 'lodash-es';
19
20
  import { Subject, BehaviorSubject, Observable, merge, from, combineLatest, of } from 'rxjs';
20
21
  import { takeUntil, tap, take, map, debounceTime, switchMap, mapTo, catchError, distinctUntilChanged, shareReplay, skip, filter } from 'rxjs/operators';
@@ -356,6 +357,15 @@ var RowAction = /** @class */ (function (_super) {
356
357
  return _this.clickEvent(row, event, index, rowActionsRef, clickFn);
357
358
  };
358
359
  this._linkFn = value.link;
360
+ if (value.file) {
361
+ if (value.file.select) {
362
+ this.fileUploadFn = function (selection, row, index) {
363
+ value.file.select(selection, row, index);
364
+ };
365
+ }
366
+ this.fileUploadErrorFn = value.file.error;
367
+ this.fileMultiple = value.file.multiple;
368
+ }
359
369
  if (typeof value.label === 'function') {
360
370
  this._labelFn = value.label;
361
371
  this.label = '';
@@ -2850,6 +2860,7 @@ var List = /** @class */ (function (_super) {
2850
2860
  // Empty state
2851
2861
  _this.emptyStateEnabled = false;
2852
2862
  _this.onDestroy$ = new Subject();
2863
+ _this._filtersQuery = new BehaviorSubject(null);
2853
2864
  _this._fromJSON(config);
2854
2865
  _this.initialize(config);
2855
2866
  _this._headerConfig = new StyleConfig(config.header);
@@ -2871,6 +2882,20 @@ var List = /** @class */ (function (_super) {
2871
2882
  enumerable: true,
2872
2883
  configurable: true
2873
2884
  });
2885
+ Object.defineProperty(List.prototype, "filtersQuery", {
2886
+ get: function () {
2887
+ return this._filtersQuery.getValue();
2888
+ },
2889
+ enumerable: true,
2890
+ configurable: true
2891
+ });
2892
+ Object.defineProperty(List.prototype, "filtersQuery$", {
2893
+ get: function () {
2894
+ return this._filtersQuery.asObservable();
2895
+ },
2896
+ enumerable: true,
2897
+ configurable: true
2898
+ });
2874
2899
  List.prototype.fetchRemote = function (query) {
2875
2900
  var options = {
2876
2901
  state: this.dataController.operation,
@@ -3161,7 +3186,7 @@ var List = /** @class */ (function (_super) {
3161
3186
  var _this = this;
3162
3187
  var fetch$ = this.fetch$.asObservable();
3163
3188
  // Should wait until saved filters not loaded
3164
- if (!!this.filters && !!this.savedFilters) {
3189
+ if (!!this.filters) {
3165
3190
  fetch$ = combineLatest([fetch$, this.filtersReady$])
3166
3191
  .pipe(map(function (_a) {
3167
3192
  var _b = __read(_a, 1), params = _b[0];
@@ -3334,7 +3359,7 @@ var List = /** @class */ (function (_super) {
3334
3359
  if (this.filterInitCb) {
3335
3360
  this.filterInitCb(filters);
3336
3361
  }
3337
- this.filtersQuery = filters;
3362
+ this._filtersQuery.next(filters);
3338
3363
  this.checkRestoreFilter();
3339
3364
  };
3340
3365
  /**
@@ -3346,7 +3371,7 @@ var List = /** @class */ (function (_super) {
3346
3371
  if (this.filterChangeCb) {
3347
3372
  this.filterChangeCb(filterQuery, filterSort);
3348
3373
  }
3349
- this.filtersQuery = filterQuery;
3374
+ this._filtersQuery.next(filterQuery);
3350
3375
  this.restoreMode = false;
3351
3376
  // Restore option
3352
3377
  this.checkRestoreFilter();
@@ -3566,6 +3591,7 @@ var ReorderController = /** @class */ (function () {
3566
3591
  this._enabled$ = new BehaviorSubject(false);
3567
3592
  this._manualReorderActivated$ = new BehaviorSubject(false);
3568
3593
  this._reorderDisabled$ = new BehaviorSubject(false);
3594
+ this._numberOfActiveFilters = 0;
3569
3595
  this._destroy$ = new Subject();
3570
3596
  }
3571
3597
  Object.defineProperty(ReorderController.prototype, "enabled", {
@@ -3599,7 +3625,9 @@ var ReorderController = /** @class */ (function () {
3599
3625
  return this._enabled$
3600
3626
  .pipe(map(function (enabled) {
3601
3627
  return enabled && _this.position === ReorderPosition.Left;
3602
- }), distinctUntilChanged(), shareReplay(), takeUntil(this._destroy$));
3628
+ }), map(function (enabled) {
3629
+ return enabled && _this._numberOfActiveFilters === 0;
3630
+ }), distinctUntilChanged(), shareReplay());
3603
3631
  },
3604
3632
  enumerable: true,
3605
3633
  configurable: true
@@ -3610,7 +3638,9 @@ var ReorderController = /** @class */ (function () {
3610
3638
  return this._enabled$
3611
3639
  .pipe(map(function (enabled) {
3612
3640
  return enabled && _this.position === ReorderPosition.Right;
3613
- }), distinctUntilChanged(), shareReplay(), takeUntil(this._destroy$));
3641
+ }), map(function (enabled) {
3642
+ return enabled && _this._numberOfActiveFilters === 0;
3643
+ }), distinctUntilChanged(), shareReplay());
3614
3644
  },
3615
3645
  enumerable: true,
3616
3646
  configurable: true
@@ -3733,6 +3763,10 @@ var ReorderController = /** @class */ (function () {
3733
3763
  this._reorderDisabled$.next(true);
3734
3764
  this._actionsController.updateDisabledState();
3735
3765
  };
3766
+ ReorderController.prototype.setNunberOfActiveFilters = function (activeFilters) {
3767
+ this._numberOfActiveFilters = activeFilters;
3768
+ this.enabled = this.enabled;
3769
+ };
3736
3770
  ReorderController = __decorate([
3737
3771
  Injectable(),
3738
3772
  __metadata("design:paramtypes", [])
@@ -4259,6 +4293,7 @@ var FsListComponent = /** @class */ (function () {
4259
4293
  this._updateCustomizeAction(listConfig.actions);
4260
4294
  this.list = new List(this._el, listConfig, this.fsScroll, this.selectionDialog, this._router, this._route, this._persistance, this._inDialog);
4261
4295
  this._waitFirstLoad();
4296
+ this._listenFiltersQueryChange();
4262
4297
  this.reorderController.initWithConfig(config.reorder, this.list.dataController, this.list.actions);
4263
4298
  if (this.listColumnDirectives) {
4264
4299
  this.list.tranformTemplatesToColumns(this.listColumnDirectives);
@@ -4336,6 +4371,17 @@ var FsListComponent = /** @class */ (function () {
4336
4371
  _this.cdRef.markForCheck();
4337
4372
  });
4338
4373
  };
4374
+ FsListComponent.prototype._listenFiltersQueryChange = function () {
4375
+ var _this = this;
4376
+ this.list.filtersQuery$
4377
+ .pipe(takeUntil(this.list.onDestroy$), takeUntil(this._destroy))
4378
+ .subscribe(function (value) {
4379
+ if (value) {
4380
+ var activeFilters = Object.keys(value).length;
4381
+ _this.reorderController.setNunberOfActiveFilters(activeFilters);
4382
+ }
4383
+ });
4384
+ };
4339
4385
  FsListComponent.prototype._configMergeCustomizer = function (objValue, srcValue) {
4340
4386
  if (Array.isArray(objValue)) {
4341
4387
  return objValue;
@@ -5632,7 +5678,7 @@ var FsRowActionsComponent = /** @class */ (function () {
5632
5678
  FsRowActionsComponent = __decorate([
5633
5679
  Component({
5634
5680
  selector: 'fs-list-row-actions',
5635
- template: "<ng-container *ngIf=\"!restoreMode || (restoreMode && !restoreAction)\">\n <ng-container *ngFor=\"let action of inlineRowActions; trackBy: trackByFn\">\n <fs-list-row-inline-action class=\"row-inline-action row-inline-action-{{action.type}}\"\n [action]=\"action\"\n [ngClass]=\"{'mobile-hide': action.menu === undefined}\"\n (clicked)=\"actionClick(action, row, $event)\">\n </fs-list-row-inline-action>\n </ng-container>\n</ng-container>\n\n<!-- Menu -->\n<fs-menu class=\"row-menu-action\"\n *ngIf=\"menuRowActions.length || (restoreMode && restoreAction)\"\n (click)=\"clickOnTrigger($event)\"\n #menuRef\n>\n <!-- Case when we have usual menu actions -->\n <ng-container *ngIf=\"!restoreMode || (restoreMode && !restoreAction)\">\n <ng-container *ngFor=\"let action of inlineRowActions; trackBy: trackByFn\">\n <ng-template class=\"hidden-mobile-menu-action\"\n fs-menu-item\n [link]=\"action.routerLink?.link\"\n [queryParams]=\"action.routerLink?.queryParams\"\n [target]=\"action.routerLink?.target\"\n [hidden]=\"action.menu !== undefined && !action.isShown\">\n <mat-icon *ngIf=\"action.icon\">{{action.icon}}</mat-icon>\n {{action.label}}\n </ng-template>\n </ng-container>\n\n <ng-container *ngFor=\"let action of menuRowActions; trackBy: trackByFn\">\n <ng-container *ngIf=\"action.isGroup else simpleMenuItem\">\n <fs-menu-group [label]=\"action.label\">\n <ng-container *ngFor=\"let subAction of action.rowActions\">\n <ng-template fs-menu-item\n [link]=\"subAction.routerLink?.link\"\n [queryParams]=\"subAction.routerLink?.queryParams\"\n [target]=\"subAction.routerLink?.target\"\n [hidden]=\"!subAction.isShown\"\n (click)=\"actionClick(subAction, row, $event, menuRef);\">\n <mat-icon *ngIf=\"subAction.icon\">{{subAction.icon}}</mat-icon>\n {{subAction.label}}\n </ng-template>\n </ng-container>\n </fs-menu-group>\n </ng-container>\n <ng-template #simpleMenuItem>\n <ng-template fs-menu-item\n [link]=\"action.routerLink?.link\"\n [queryParams]=\"action.routerLink?.queryParams\"\n [target]=\"action.routerLink?.target\"\n [hidden]=\"!action.isShown\"\n (click)=\"actionClick(action, row, $event, menuRef);\">\n <mat-icon *ngIf=\"action.icon\">{{action.icon}}</mat-icon>\n {{action.label}}\n </ng-template>\n </ng-template>\n </ng-container>\n </ng-container>\n\n <!-- Case when we have restore mode enabled and must hide menu actions -->\n <ng-container *ngIf=\"restoreMode && restoreAction\">\n <ng-template fs-menu-item (click)=\"actionClick(restoreAction, row, $event, menuRef)\">\n <mat-icon *ngIf=\"restoreAction.icon\">{{restoreAction.icon}}</mat-icon>\n {{restoreAction.label}}\n </ng-template>\n </ng-container>\n</fs-menu>\n",
5681
+ template: "<ng-container *ngIf=\"!restoreMode || (restoreMode && !restoreAction)\">\n <ng-container *ngFor=\"let action of inlineRowActions; trackBy: trackByFn\">\n <fs-list-row-inline-action class=\"row-inline-action row-inline-action-{{action.type}}\"\n [action]=\"action\"\n [ngClass]=\"{'mobile-hide': action.menu === undefined}\"\n (clicked)=\"actionClick(action, row, $event)\"\n (fileSelect)=\"action.fileUploadFn($event, row, index)\">\n </fs-list-row-inline-action>\n </ng-container>\n</ng-container>\n\n<!-- Menu -->\n<fs-menu class=\"row-menu-action\"\n *ngIf=\"menuRowActions.length || (restoreMode && restoreAction)\"\n (click)=\"clickOnTrigger($event)\"\n #menuRef\n>\n <!-- Case when we have usual menu actions -->\n <ng-container *ngIf=\"!restoreMode || (restoreMode && !restoreAction)\">\n <ng-container *ngFor=\"let action of inlineRowActions; trackBy: trackByFn\">\n <ng-template class=\"hidden-mobile-menu-action\"\n fs-menu-item\n [link]=\"action.routerLink?.link\"\n [queryParams]=\"action.routerLink?.queryParams\"\n [target]=\"action.routerLink?.target\"\n [hidden]=\"action.menu !== undefined && !action.isShown\">\n <fs-list-row-menu-action\n [icon]=\"action.icon\"\n [label]=\"action.label\"\n [file]=\"!!action.fileUploadFn\"\n [fileMultiple]=\"action.fileMultiple\"\n (fileSelect)=\"action.fileUploadFn($event, row, index)\"\n (fileError)=\"action.fileUploadErrorFn && action.fileUploadErrorFn($event)\">\n </fs-list-row-menu-action>\n </ng-template>\n </ng-container>\n\n <ng-container *ngFor=\"let action of menuRowActions; trackBy: trackByFn\">\n <ng-container *ngIf=\"action.isGroup else simpleMenuItem\">\n <fs-menu-group [label]=\"action.label\">\n <ng-container *ngFor=\"let subAction of action.rowActions\">\n <ng-template fs-menu-item\n [link]=\"subAction.routerLink?.link\"\n [queryParams]=\"subAction.routerLink?.queryParams\"\n [target]=\"subAction.routerLink?.target\"\n [hidden]=\"!subAction.isShown\"\n (click)=\"actionClick(subAction, row, $event, menuRef);\">\n <fs-list-row-menu-action\n [icon]=\"subAction.icon\"\n [label]=\"subAction.label\"\n [file]=\"!!subAction.fileUploadFn\"\n [fileMultiple]=\"subAction.fileMultiple\"\n (fileSelect)=\"subAction.fileUploadFn($event, row, index)\"\n (fileError)=\"subAction.fileUploadErrorFn && subAction.fileUploadErrorFn($event)\">\n </fs-list-row-menu-action>\n </ng-template>\n </ng-container>\n </fs-menu-group>\n </ng-container>\n <ng-template #simpleMenuItem>\n <ng-template fs-menu-item\n [link]=\"action.routerLink?.link\"\n [queryParams]=\"action.routerLink?.queryParams\"\n [target]=\"action.routerLink?.target\"\n [hidden]=\"!action.isShown\"\n (click)=\"actionClick(action, row, $event, menuRef);\">\n <fs-list-row-menu-action\n [icon]=\"action.icon\"\n [label]=\"action.label\"\n [file]=\"!!action.fileUploadFn\"\n [fileMultiple]=\"action.fileMultiple\"\n (fileSelect)=\"action.fileUploadFn($event, row, index)\"\n (fileError)=\"action.fileUploadErrorFn && action.fileUploadErrorFn($event)\">\n </fs-list-row-menu-action>\n </ng-template>\n </ng-template>\n </ng-container>\n </ng-container>\n\n <!-- Case when we have restore mode enabled and must hide menu actions -->\n <ng-container *ngIf=\"restoreMode && restoreAction\">\n <ng-template fs-menu-item (click)=\"actionClick(restoreAction, row, $event, menuRef)\">\n <mat-icon *ngIf=\"restoreAction.icon\">{{restoreAction.icon}}</mat-icon>\n {{restoreAction.label}}\n </ng-template>\n </ng-container>\n</fs-menu>\n",
5636
5682
  changeDetection: ChangeDetectionStrategy.OnPush
5637
5683
  }),
5638
5684
  __metadata("design:paramtypes", [FsPrompt])
@@ -5644,10 +5690,14 @@ var FsRowInlineActionComponent = /** @class */ (function () {
5644
5690
  function FsRowInlineActionComponent(_fsPrompt) {
5645
5691
  this._fsPrompt = _fsPrompt;
5646
5692
  this.clicked = new EventEmitter();
5693
+ this.fileSelect = new EventEmitter();
5647
5694
  }
5648
5695
  FsRowInlineActionComponent.prototype.actionClick = function (event) {
5649
5696
  this.clicked.emit(event);
5650
5697
  };
5698
+ FsRowInlineActionComponent.prototype.fileSelected = function (event) {
5699
+ this.fileSelect.emit(event);
5700
+ };
5651
5701
  FsRowInlineActionComponent.ctorParameters = function () { return [
5652
5702
  { type: FsPrompt }
5653
5703
  ]; };
@@ -5659,10 +5709,14 @@ var FsRowInlineActionComponent = /** @class */ (function () {
5659
5709
  Output(),
5660
5710
  __metadata("design:type", Object)
5661
5711
  ], FsRowInlineActionComponent.prototype, "clicked", void 0);
5712
+ __decorate([
5713
+ Output(),
5714
+ __metadata("design:type", Object)
5715
+ ], FsRowInlineActionComponent.prototype, "fileSelect", void 0);
5662
5716
  FsRowInlineActionComponent = __decorate([
5663
5717
  Component({
5664
5718
  selector: 'fs-list-row-inline-action',
5665
- template: "<ng-container *ngIf=\"action.isShown\" [ngSwitch]=\"action.type\">\n <!-- Basic button -->\n <ng-container *ngSwitchCase=\"'basic'\">\n <ng-container *ngIf=\"!action.routerLink; else link\">\n <button type=\"button\"\n mat-button\n (click)=\"actionClick($event)\"\n [ngClass]=\"action.classArray\"\n >\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </button>\n </ng-container>\n <ng-template #link>\n <a mat-button\n [routerLink]=\"action.routerLink.link\"\n [queryParams]=\"action.routerLink.queryParams\">\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </a>\n </ng-template>\n </ng-container>\n\n <!-- Raised button -->\n <ng-container *ngSwitchCase=\"'raised'\">\n <ng-container *ngIf=\"!action.routerLink; else link\">\n <button type=\"button\"\n mat-raised-button\n (click)=\"actionClick($event)\"\n [ngClass]=\"action.classArray\"\n >\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </button>\n </ng-container>\n <ng-template #link>\n <a mat-raised-button\n [routerLink]=\"action.routerLink.link\"\n [queryParams]=\"action.routerLink.queryParams\">\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </a>\n </ng-template>\n </ng-container>\n\n <!-- Icon button -->\n <ng-container *ngSwitchCase=\"'icon'\">\n <ng-container *ngIf=\"!action.routerLink; else link\">\n <button type=\"button\"\n mat-icon-button\n (click)=\"actionClick($event)\"\n [ngClass]=\"action.classArray\"\n >\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </button>\n </ng-container>\n <ng-template #link>\n <a mat-icon-button\n [routerLink]=\"action.routerLink.link\"\n [queryParams]=\"action.routerLink.queryParams\">\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </a>\n </ng-template>\n </ng-container>\n\n <!-- Fab button -->\n <ng-container *ngSwitchCase=\"'fab'\">\n <ng-container *ngIf=\"!action.routerLink; else link\">\n <button type=\"button\"\n mat-fab\n (click)=\"actionClick($event)\"\n [ngClass]=\"action.classArray\"\n >\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </button>\n </ng-container>\n <ng-template #link>\n <a mat-fab\n [routerLink]=\"action.routerLink.link\"\n [queryParams]=\"action.routerLink.queryParams\">\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </a>\n </ng-template>\n </ng-container>\n\n <!-- Mini Fab button -->\n <ng-container *ngSwitchCase=\"'mini-fab'\">\n <ng-container *ngIf=\"!action.routerLink; else link\">\n <button type=\"button\"\n mat-mini-fab\n (click)=\"actionClick($event)\"\n [ngClass]=\"action.classArray\"\n >\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </button>\n </ng-container>\n <ng-template #link>\n <a mat-mini-fab\n [routerLink]=\"action.routerLink.link\"\n [queryParams]=\"action.routerLink.queryParams\">\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </a>\n </ng-template>\n </ng-container>\n\n <ng-template #buttonContent let-value=\"value\">\n <mat-icon *ngIf=\"action.icon\">{{action.icon}}</mat-icon>\n {{action.label}}\n </ng-template>\n</ng-container>\n",
5719
+ template: "<ng-container *ngIf=\"action.isShown\" [ngSwitch]=\"action.type\">\n <!-- Basic button -->\n <ng-container *ngSwitchCase=\"'basic'\">\n <ng-container *ngIf=\"!action.routerLink; else link\">\n <button type=\"button\"\n mat-button\n (click)=\"actionClick($event)\"\n [ngClass]=\"action.classArray\"\n >\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </button>\n </ng-container>\n <ng-template #link>\n <a mat-button\n [routerLink]=\"action.routerLink.link\"\n [queryParams]=\"action.routerLink.queryParams\">\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </a>\n </ng-template>\n </ng-container>\n\n <!-- Raised button -->\n <ng-container *ngSwitchCase=\"'raised'\">\n <ng-container *ngIf=\"!action.routerLink; else link\">\n <button type=\"button\"\n mat-raised-button\n (click)=\"actionClick($event)\"\n [ngClass]=\"action.classArray\"\n >\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </button>\n </ng-container>\n <ng-template #link>\n <a mat-raised-button\n [routerLink]=\"action.routerLink.link\"\n [queryParams]=\"action.routerLink.queryParams\">\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </a>\n </ng-template>\n </ng-container>\n\n <!-- Icon button -->\n <ng-container *ngSwitchCase=\"'icon'\">\n <ng-container *ngIf=\"!action.routerLink; else link\">\n <button type=\"button\"\n mat-icon-button\n (click)=\"actionClick($event)\"\n [ngClass]=\"action.classArray\"\n >\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </button>\n </ng-container>\n <ng-template #link>\n <a mat-icon-button\n [routerLink]=\"action.routerLink.link\"\n [queryParams]=\"action.routerLink.queryParams\">\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </a>\n </ng-template>\n </ng-container>\n\n <!-- Fab button -->\n <ng-container *ngSwitchCase=\"'fab'\">\n <ng-container *ngIf=\"!action.routerLink; else link\">\n <button type=\"button\"\n mat-fab\n (click)=\"actionClick($event)\"\n [ngClass]=\"action.classArray\"\n >\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </button>\n </ng-container>\n <ng-template #link>\n <a mat-fab\n [routerLink]=\"action.routerLink.link\"\n [queryParams]=\"action.routerLink.queryParams\">\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </a>\n </ng-template>\n </ng-container>\n\n <!-- Mini Fab button -->\n <ng-container *ngSwitchCase=\"'mini-fab'\">\n <ng-container *ngIf=\"!action.routerLink; else link\">\n <button type=\"button\"\n mat-mini-fab\n (click)=\"actionClick($event)\"\n [ngClass]=\"action.classArray\"\n >\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </button>\n </ng-container>\n <ng-template #link>\n <a mat-mini-fab\n [routerLink]=\"action.routerLink.link\"\n [queryParams]=\"action.routerLink.queryParams\">\n <ng-template [ngTemplateOutlet]=\"buttonContent\"></ng-template>\n </a>\n </ng-template>\n </ng-container>\n\n <ng-template #buttonContent>\n <ng-container *ngIf=\"!action.fileUploadFn else uploadFileBtn\">\n <mat-icon *ngIf=\"action.icon\">{{action.icon}}</mat-icon>\n {{action.label}}\n </ng-container>\n\n <ng-template #uploadFileBtn>\n <fs-file\n class=\"action-button\"\n [multiple]=\"action.fileMultiple\"\n (select)=\"fileSelected($event)\"\n (error)=\"action.fileUploadErrorFn && action.fileUploadErrorFn($event)\">\n <mat-icon *ngIf=\"action.icon\">{{action.icon}}</mat-icon>\n {{action.label}}\n </fs-file>\n </ng-template>\n </ng-template>\n</ng-container>\n",
5666
5720
  changeDetection: ChangeDetectionStrategy.OnPush
5667
5721
  }),
5668
5722
  __metadata("design:paramtypes", [FsPrompt])
@@ -5670,6 +5724,45 @@ var FsRowInlineActionComponent = /** @class */ (function () {
5670
5724
  return FsRowInlineActionComponent;
5671
5725
  }());
5672
5726
 
5727
+ var FsRowMenuActionComponent = /** @class */ (function () {
5728
+ function FsRowMenuActionComponent() {
5729
+ this.fileSelect = new EventEmitter();
5730
+ this.fileError = new EventEmitter();
5731
+ }
5732
+ __decorate([
5733
+ Input(),
5734
+ __metadata("design:type", String)
5735
+ ], FsRowMenuActionComponent.prototype, "icon", void 0);
5736
+ __decorate([
5737
+ Input(),
5738
+ __metadata("design:type", String)
5739
+ ], FsRowMenuActionComponent.prototype, "label", void 0);
5740
+ __decorate([
5741
+ Input(),
5742
+ __metadata("design:type", Boolean)
5743
+ ], FsRowMenuActionComponent.prototype, "file", void 0);
5744
+ __decorate([
5745
+ Input(),
5746
+ __metadata("design:type", Boolean)
5747
+ ], FsRowMenuActionComponent.prototype, "fileMultiple", void 0);
5748
+ __decorate([
5749
+ Output(),
5750
+ __metadata("design:type", Object)
5751
+ ], FsRowMenuActionComponent.prototype, "fileSelect", void 0);
5752
+ __decorate([
5753
+ Output(),
5754
+ __metadata("design:type", Object)
5755
+ ], FsRowMenuActionComponent.prototype, "fileError", void 0);
5756
+ FsRowMenuActionComponent = __decorate([
5757
+ Component({
5758
+ selector: 'fs-list-row-menu-action',
5759
+ template: "<ng-container *ngIf=\"!file else withFile\">\n <mat-icon *ngIf=\"icon\">{{icon}}</mat-icon>\n {{label}}\n</ng-container>\n\n<ng-template #withFile>\n <fs-file\n class=\"action-button\"\n [multiple]=\"fileMultiple\"\n (select)=\"fileSelect.emit($event)\"\n (error)=\"fileError.emit($event)\">\n <mat-icon *ngIf=\"icon\">{{icon}}</mat-icon>\n {{label}}\n </fs-file>\n</ng-template>\n",
5760
+ changeDetection: ChangeDetectionStrategy.OnPush
5761
+ })
5762
+ ], FsRowMenuActionComponent);
5763
+ return FsRowMenuActionComponent;
5764
+ }());
5765
+
5673
5766
  var FsListManageSavedFiltersComponent = /** @class */ (function () {
5674
5767
  function FsListManageSavedFiltersComponent(_externalParams) {
5675
5768
  this._externalParams = _externalParams;
@@ -5892,6 +5985,7 @@ var FsListModule = /** @class */ (function () {
5892
5985
  FsPromptModule,
5893
5986
  MatDialogModule,
5894
5987
  MatTooltipModule,
5988
+ FsFileModule,
5895
5989
  ],
5896
5990
  declarations: [
5897
5991
  // Components
@@ -5899,6 +5993,7 @@ var FsListModule = /** @class */ (function () {
5899
5993
  FsRowComponent,
5900
5994
  FsRowActionsComponent,
5901
5995
  FsRowInlineActionComponent,
5996
+ FsRowMenuActionComponent,
5902
5997
  FsCellComponent,
5903
5998
  FsFooterRowComponent,
5904
5999
  FsFooterCellComponent,
@@ -5959,5 +6054,5 @@ function FsListConfigFactory(config) {
5959
6054
  * Generated bundle index. Do not edit.
5960
6055
  */
5961
6056
 
5962
- export { ActionType, Column, FS_LIST_CONFIG, FS_LIST_DEFAULT_CONFIG, FsBodyComponent, FsCellComponent, FsFooterCellComponent, FsFooterComponent, FsFooterRowComponent, FsHeadCellComponent, FsHeadComponent, FsListCellDirective, FsListColumnDirective, FsListComponent, FsListEmptyStateDirective, FsListFooterDirective, FsListHeaderDirective, FsListModule, FsListState, FsPaginationComponent, FsRowComponent, FsStatusComponent, List, PaginationController, PaginationStrategy, ReorderController, ReorderPosition, ReorderStrategy, RowAction, RowType, SelectionChangeType, SelectionController, SortingController, SortingDirection, StyleConfig, FsListConfigFactory as ɵa, GroupExpandNotifierService as ɵb, PersistanceController as ɵc, FsListGroupCellDirective as ɵd, FsListGroupExpandTriggerDirective as ɵe, FsListDraggableListDirective as ɵf, FsRowActionsComponent as ɵg, FsRowInlineActionComponent as ɵh, FsListLoaderComponent as ɵi, FsListSavedFiltersComponent as ɵj, FsListManageSavedFiltersComponent as ɵk, FsListDraggableRowDirective as ɵl, CustomizeColsDialogComponent as ɵm };
6057
+ export { ActionType, Column, FS_LIST_CONFIG, FS_LIST_DEFAULT_CONFIG, FsBodyComponent, FsCellComponent, FsFooterCellComponent, FsFooterComponent, FsFooterRowComponent, FsHeadCellComponent, FsHeadComponent, FsListCellDirective, FsListColumnDirective, FsListComponent, FsListEmptyStateDirective, FsListFooterDirective, FsListHeaderDirective, FsListModule, FsListState, FsPaginationComponent, FsRowComponent, FsStatusComponent, List, PaginationController, PaginationStrategy, ReorderController, ReorderPosition, ReorderStrategy, RowAction, RowType, SelectionChangeType, SelectionController, SortingController, SortingDirection, StyleConfig, FsListConfigFactory as ɵa, GroupExpandNotifierService as ɵb, PersistanceController as ɵc, FsListGroupCellDirective as ɵd, FsListGroupExpandTriggerDirective as ɵe, FsListDraggableListDirective as ɵf, FsRowActionsComponent as ɵg, FsRowInlineActionComponent as ɵh, FsRowMenuActionComponent as ɵi, FsListLoaderComponent as ɵj, FsListSavedFiltersComponent as ɵk, FsListManageSavedFiltersComponent as ɵl, FsListDraggableRowDirective as ɵm, CustomizeColsDialogComponent as ɵn };
5963
6058
  //# sourceMappingURL=firestitch-list.js.map