@firestitch/list 9.11.2 → 9.12.2

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 (34) hide show
  1. package/app/components/body/row/inline-action/inline-action.component.d.ts +3 -0
  2. package/app/components/body/row/menu-action/menu-action.component.d.ts +9 -0
  3. package/app/interfaces/listconfig.interface.d.ts +16 -0
  4. package/app/models/row-action.model.d.ts +2 -1
  5. package/bundles/firestitch-list.umd.js +72 -16
  6. package/bundles/firestitch-list.umd.js.map +1 -1
  7. package/bundles/firestitch-list.umd.min.js +2 -2
  8. package/bundles/firestitch-list.umd.min.js.map +1 -1
  9. package/esm2015/app/classes/reorder-controller.js +5 -5
  10. package/esm2015/app/components/body/row/actions/actions.component.js +2 -2
  11. package/esm2015/app/components/body/row/inline-action/inline-action.component.js +10 -2
  12. package/esm2015/app/components/body/row/menu-action/menu-action.component.js +37 -0
  13. package/esm2015/app/fs-list.module.js +5 -1
  14. package/esm2015/app/interfaces/listconfig.interface.js +1 -1
  15. package/esm2015/app/models/row-action.model.js +12 -2
  16. package/esm2015/firestitch-list.js +7 -6
  17. package/esm2015/public_api.js +1 -1
  18. package/esm5/app/classes/reorder-controller.js +5 -5
  19. package/esm5/app/components/body/row/actions/actions.component.js +2 -2
  20. package/esm5/app/components/body/row/inline-action/inline-action.component.js +10 -2
  21. package/esm5/app/components/body/row/menu-action/menu-action.component.js +38 -0
  22. package/esm5/app/fs-list.module.js +5 -1
  23. package/esm5/app/interfaces/listconfig.interface.js +1 -1
  24. package/esm5/app/models/row-action.model.js +13 -3
  25. package/esm5/firestitch-list.js +7 -6
  26. package/esm5/public_api.js +1 -1
  27. package/fesm2015/firestitch-list.js +63 -8
  28. package/fesm2015/firestitch-list.js.map +1 -1
  29. package/fesm5/firestitch-list.js +64 -8
  30. package/fesm5/firestitch-list.js.map +1 -1
  31. package/firestitch-list.d.ts +7 -6
  32. package/firestitch-list.metadata.json +1 -1
  33. package/package.json +1 -1
  34. package/public_api.d.ts +1 -1
@@ -1,10 +1,13 @@
1
1
  import { EventEmitter } from '@angular/core';
2
2
  import { FsPrompt } from '@firestitch/prompt';
3
+ import { FsFile } from '@firestitch/file';
3
4
  import { RowAction } from '../../../../models/row-action.model';
4
5
  export declare class FsRowInlineActionComponent {
5
6
  private _fsPrompt;
6
7
  action: RowAction;
7
8
  clicked: EventEmitter<any>;
9
+ fileSelect: EventEmitter<FsFile | FsFile[]>;
8
10
  constructor(_fsPrompt: FsPrompt);
9
11
  actionClick(event: any): void;
12
+ fileSelected(event: any): void;
10
13
  }
@@ -0,0 +1,9 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { FsListRowActionFile } from '../../../../interfaces/listconfig.interface';
3
+ export declare class FsRowMenuActionComponent {
4
+ icon: string;
5
+ label: string;
6
+ file: FsListRowActionFile;
7
+ fileSelect: EventEmitter<any>;
8
+ fileError: EventEmitter<any>;
9
+ }
@@ -1,6 +1,7 @@
1
1
  import { Observable } from 'rxjs';
2
2
  import { FsSelectionActionSelected, FsSelectionDialogConfigAction, SelectionRef } from '@firestitch/selection';
3
3
  import { IFilterConfigItem, IFilterConfigDateItem, FsFilterPersistance, IFilterSavedFiltersConfig, FsFilterAction, ChangeFn } from '@firestitch/filter';
4
+ import { FsFile } from '@firestitch/file';
4
5
  import { ActionType } from '../enums/button-type.enum';
5
6
  import { ReorderPosition, ReorderStrategy } from '../classes/reorder-controller';
6
7
  import { PaginationStrategy } from '../enums/pagination-strategy.enum';
@@ -150,6 +151,7 @@ export interface FsListRowAction {
150
151
  menu?: boolean;
151
152
  click?: (row: any, event: any, index: any) => void;
152
153
  link?: FsListRowActionLinkFn;
154
+ file?: FsListRowActionFile;
153
155
  show?: (row: any, index: number) => boolean;
154
156
  remove?: {
155
157
  title?: string;
@@ -157,12 +159,26 @@ export interface FsListRowAction {
157
159
  } | boolean;
158
160
  restore?: boolean;
159
161
  }
162
+ export interface FsListRowActionFileFn {
163
+ (selection: FsFile | FsFile[], row: FsListAbstractRow, index: number): void;
164
+ }
160
165
  export interface FsListRowActionLinkFn {
161
166
  (row: FsListAbstractRow): FsListRowActionLink;
162
167
  }
163
168
  export interface FsListRowActionLabelFn {
164
169
  (row: FsListAbstractRow): string;
165
170
  }
171
+ export interface FsListRowActionFile {
172
+ select: FsListRowActionFileFn;
173
+ error?: (error: unknown) => void;
174
+ multiple?: boolean;
175
+ accept?: string;
176
+ minWidth?: number;
177
+ minHeight?: number;
178
+ maxWidth?: number;
179
+ maxHeight?: number;
180
+ imageQuality?: number;
181
+ }
166
182
  export interface FsListRowActionLink {
167
183
  link: any[] | string;
168
184
  queryParams?: Record<string, any>;
@@ -1,6 +1,6 @@
1
1
  import { Model } from 'tsmodels';
2
2
  import { ActionType } from '../enums/button-type.enum';
3
- import { FsListRowActionLink } from '../interfaces';
3
+ import { FsListRowActionFile, FsListRowActionLink } from '../interfaces';
4
4
  export declare class RowAction extends Model {
5
5
  icon: string;
6
6
  menu: boolean;
@@ -18,6 +18,7 @@ export declare class RowAction extends Model {
18
18
  classArray: string[];
19
19
  isShown: boolean;
20
20
  click: Function;
21
+ fileConfig: FsListRowActionFile;
21
22
  private _linkFn;
22
23
  private _labelFn;
23
24
  private readonly _isGroup;
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common'), require('@angular/router'), require('@angular/material/button'), require('@angular/material/checkbox'), require('@angular/material/core'), require('@angular/material/dialog'), require('@angular/material/icon'), require('@angular/material/menu'), require('@angular/material/tooltip'), require('@angular/material/progress-spinner'), require('@angular/flex-layout'), require('@firestitch/filter'), require('@firestitch/scroll'), require('@firestitch/menu'), require('@firestitch/prompt'), require('lodash-es'), require('rxjs'), require('rxjs/operators'), require('@firestitch/selection'), require('@firestitch/common'), require('@firestitch/drawer'), require('tsmodels'), require('@firestitch/store')) :
3
- typeof define === 'function' && define.amd ? define('@firestitch/list', ['exports', '@angular/core', '@angular/common', '@angular/router', '@angular/material/button', '@angular/material/checkbox', '@angular/material/core', '@angular/material/dialog', '@angular/material/icon', '@angular/material/menu', '@angular/material/tooltip', '@angular/material/progress-spinner', '@angular/flex-layout', '@firestitch/filter', '@firestitch/scroll', '@firestitch/menu', '@firestitch/prompt', 'lodash-es', 'rxjs', 'rxjs/operators', '@firestitch/selection', '@firestitch/common', '@firestitch/drawer', 'tsmodels', '@firestitch/store'], factory) :
4
- (global = global || self, factory((global.firestitch = global.firestitch || {}, global.firestitch.list = {}), global.ng.core, global.ng.common, global.ng.router, global.ng.material.button, global.ng.material.checkbox, global.ng.material.core, global.ng.material.dialog, global.ng.material.icon, global.ng.material.menu, global.ng.material.tooltip, global.ng.material.progressSpinner, global.ng.flexLayout, global.filter, global.scroll, global.menu$1, global.prompt, global.lodashEs, global.rxjs, global.rxjs.operators, global.selection, global.common$1, global.drawer, global.tsmodels, global.store));
5
- }(this, (function (exports, core, common, router, button, checkbox, core$1, dialog, icon, menu, tooltip, progressSpinner, flexLayout, filter, scroll, menu$1, prompt, lodashEs, rxjs, operators, selection, common$1, drawer, tsmodels, store) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common'), require('@angular/router'), require('@angular/material/button'), require('@angular/material/checkbox'), require('@angular/material/core'), require('@angular/material/dialog'), require('@angular/material/icon'), require('@angular/material/menu'), require('@angular/material/tooltip'), require('@angular/material/progress-spinner'), require('@angular/flex-layout'), require('@firestitch/filter'), require('@firestitch/scroll'), require('@firestitch/menu'), require('@firestitch/prompt'), require('@firestitch/file'), require('lodash-es'), require('rxjs'), require('rxjs/operators'), require('@firestitch/selection'), require('@firestitch/common'), require('@firestitch/drawer'), require('tsmodels'), require('@firestitch/store')) :
3
+ typeof define === 'function' && define.amd ? define('@firestitch/list', ['exports', '@angular/core', '@angular/common', '@angular/router', '@angular/material/button', '@angular/material/checkbox', '@angular/material/core', '@angular/material/dialog', '@angular/material/icon', '@angular/material/menu', '@angular/material/tooltip', '@angular/material/progress-spinner', '@angular/flex-layout', '@firestitch/filter', '@firestitch/scroll', '@firestitch/menu', '@firestitch/prompt', '@firestitch/file', 'lodash-es', 'rxjs', 'rxjs/operators', '@firestitch/selection', '@firestitch/common', '@firestitch/drawer', 'tsmodels', '@firestitch/store'], factory) :
4
+ (global = global || self, factory((global.firestitch = global.firestitch || {}, global.firestitch.list = {}), global.ng.core, global.ng.common, global.ng.router, global.ng.material.button, global.ng.material.checkbox, global.ng.material.core, global.ng.material.dialog, global.ng.material.icon, global.ng.material.menu, global.ng.material.tooltip, global.ng.material.progressSpinner, global.ng.flexLayout, global.filter, global.scroll, global.menu$1, global.prompt, global.file, global.lodashEs, global.rxjs, global.rxjs.operators, global.selection, global.common$1, global.drawer, global.tsmodels, global.store));
5
+ }(this, (function (exports, core, common, router, button, checkbox, core$1, dialog, icon, menu, tooltip, progressSpinner, flexLayout, filter, scroll, menu$1, prompt, file, lodashEs, rxjs, operators, selection, common$1, drawer, tsmodels, store) { 'use strict';
6
6
 
7
7
  /*! *****************************************************************************
8
8
  Copyright (c) Microsoft Corporation. All rights reserved.
@@ -550,6 +550,15 @@
550
550
  return _this.clickEvent(row, event, index, rowActionsRef, clickFn);
551
551
  };
552
552
  this._linkFn = value.link;
553
+ if (value.file) {
554
+ this.fileConfig = __assign({}, value.file);
555
+ if (this.fileConfig.select) {
556
+ var selectFn_1 = this.fileConfig.select;
557
+ this.fileConfig.select = function (selection, row, index) {
558
+ selectFn_1(selection, row, index);
559
+ };
560
+ }
561
+ }
553
562
  if (typeof value.label === 'function') {
554
563
  this._labelFn = value.label;
555
564
  this.label = '';
@@ -569,7 +578,8 @@
569
578
  this.rowActions.forEach(function (action) {
570
579
  action.checkShowStatus(row, index);
571
580
  });
572
- this.isShown = this.rowActions.some(function (action) { return action.isShown; });
581
+ var groupVisible = !this.show || this.show(row, index);
582
+ this.isShown = groupVisible && this.rowActions.some(function (action) { return action.isShown; });
573
583
  }
574
584
  else if (this.show) {
575
585
  this.isShown = this.show(row, index);
@@ -3809,8 +3819,8 @@
3809
3819
  return this._enabled$
3810
3820
  .pipe(operators.map(function (enabled) {
3811
3821
  return enabled && _this.position === exports.ReorderPosition.Left;
3812
- }), operators.map(function () {
3813
- return _this._numberOfActiveFilters === 0;
3822
+ }), operators.map(function (enabled) {
3823
+ return enabled && _this._numberOfActiveFilters === 0;
3814
3824
  }), operators.distinctUntilChanged(), operators.shareReplay());
3815
3825
  },
3816
3826
  enumerable: true,
@@ -3822,8 +3832,8 @@
3822
3832
  return this._enabled$
3823
3833
  .pipe(operators.map(function (enabled) {
3824
3834
  return enabled && _this.position === exports.ReorderPosition.Right;
3825
- }), operators.map(function () {
3826
- return _this._numberOfActiveFilters === 0;
3835
+ }), operators.map(function (enabled) {
3836
+ return enabled && _this._numberOfActiveFilters === 0;
3827
3837
  }), operators.distinctUntilChanged(), operators.shareReplay());
3828
3838
  },
3829
3839
  enumerable: true,
@@ -5862,7 +5872,7 @@
5862
5872
  FsRowActionsComponent = __decorate([
5863
5873
  core.Component({
5864
5874
  selector: 'fs-list-row-actions',
5865
- 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",
5875
+ 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.fileConfig.select($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.fileConfig\"\n (fileSelect)=\"action.fileConfig.select($event, row, index)\"\n (fileError)=\"action.fileConfig.error && action.fileConfig.error($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.fileConfig\"\n (fileSelect)=\"subAction.fileConfig.select($event, row, index)\"\n (fileError)=\"subAction.fileConfig.error && subAction.fileConfig.error($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.fileConfig\"\n (fileSelect)=\"action.fileConfig.select($event, row, index)\"\n (fileError)=\"action.fileConfig.error && action.fileConfig.error($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",
5866
5876
  changeDetection: core.ChangeDetectionStrategy.OnPush
5867
5877
  }),
5868
5878
  __metadata("design:paramtypes", [prompt.FsPrompt])
@@ -5874,10 +5884,14 @@
5874
5884
  function FsRowInlineActionComponent(_fsPrompt) {
5875
5885
  this._fsPrompt = _fsPrompt;
5876
5886
  this.clicked = new core.EventEmitter();
5887
+ this.fileSelect = new core.EventEmitter();
5877
5888
  }
5878
5889
  FsRowInlineActionComponent.prototype.actionClick = function (event) {
5879
5890
  this.clicked.emit(event);
5880
5891
  };
5892
+ FsRowInlineActionComponent.prototype.fileSelected = function (event) {
5893
+ this.fileSelect.emit(event);
5894
+ };
5881
5895
  FsRowInlineActionComponent.ctorParameters = function () { return [
5882
5896
  { type: prompt.FsPrompt }
5883
5897
  ]; };
@@ -5889,10 +5903,14 @@
5889
5903
  core.Output(),
5890
5904
  __metadata("design:type", Object)
5891
5905
  ], FsRowInlineActionComponent.prototype, "clicked", void 0);
5906
+ __decorate([
5907
+ core.Output(),
5908
+ __metadata("design:type", Object)
5909
+ ], FsRowInlineActionComponent.prototype, "fileSelect", void 0);
5892
5910
  FsRowInlineActionComponent = __decorate([
5893
5911
  core.Component({
5894
5912
  selector: 'fs-list-row-inline-action',
5895
- 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",
5913
+ 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.fileConfig 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 [accept]=\"action.fileConfig.accept || '*'\"\n [multiple]=\"action.fileConfig.multiple\"\n [minWidth]=\"action.fileConfig.minWidth\"\n [minHeight]=\"action.fileConfig.minHeight\"\n [imageWidth]=\"action.fileConfig.maxWidth\"\n [imageHeight]=\"action.fileConfig.maxHeight\"\n (select)=\"fileSelected($event)\"\n (error)=\"action.fileConfig.error && action.fileConfig.error($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",
5896
5914
  changeDetection: core.ChangeDetectionStrategy.OnPush
5897
5915
  }),
5898
5916
  __metadata("design:paramtypes", [prompt.FsPrompt])
@@ -5900,6 +5918,41 @@
5900
5918
  return FsRowInlineActionComponent;
5901
5919
  }());
5902
5920
 
5921
+ var FsRowMenuActionComponent = /** @class */ (function () {
5922
+ function FsRowMenuActionComponent() {
5923
+ this.fileSelect = new core.EventEmitter();
5924
+ this.fileError = new core.EventEmitter();
5925
+ }
5926
+ __decorate([
5927
+ core.Input(),
5928
+ __metadata("design:type", String)
5929
+ ], FsRowMenuActionComponent.prototype, "icon", void 0);
5930
+ __decorate([
5931
+ core.Input(),
5932
+ __metadata("design:type", String)
5933
+ ], FsRowMenuActionComponent.prototype, "label", void 0);
5934
+ __decorate([
5935
+ core.Input(),
5936
+ __metadata("design:type", Object)
5937
+ ], FsRowMenuActionComponent.prototype, "file", void 0);
5938
+ __decorate([
5939
+ core.Output(),
5940
+ __metadata("design:type", Object)
5941
+ ], FsRowMenuActionComponent.prototype, "fileSelect", void 0);
5942
+ __decorate([
5943
+ core.Output(),
5944
+ __metadata("design:type", Object)
5945
+ ], FsRowMenuActionComponent.prototype, "fileError", void 0);
5946
+ FsRowMenuActionComponent = __decorate([
5947
+ core.Component({
5948
+ selector: 'fs-list-row-menu-action',
5949
+ 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 [accept]=\"file.accept || '*'\"\n [multiple]=\"file.multiple\"\n [minWidth]=\"file.minWidth\"\n [minHeight]=\"file.minHeight\"\n [imageWidth]=\"file.maxWidth\"\n [imageHeight]=\"file.maxHeight\"\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",
5950
+ changeDetection: core.ChangeDetectionStrategy.OnPush
5951
+ })
5952
+ ], FsRowMenuActionComponent);
5953
+ return FsRowMenuActionComponent;
5954
+ }());
5955
+
5903
5956
  var FsListManageSavedFiltersComponent = /** @class */ (function () {
5904
5957
  function FsListManageSavedFiltersComponent(_externalParams) {
5905
5958
  this._externalParams = _externalParams;
@@ -6122,6 +6175,7 @@
6122
6175
  prompt.FsPromptModule,
6123
6176
  dialog.MatDialogModule,
6124
6177
  tooltip.MatTooltipModule,
6178
+ file.FsFileModule,
6125
6179
  ],
6126
6180
  declarations: [
6127
6181
  // Components
@@ -6129,6 +6183,7 @@
6129
6183
  FsRowComponent,
6130
6184
  FsRowActionsComponent,
6131
6185
  FsRowInlineActionComponent,
6186
+ FsRowMenuActionComponent,
6132
6187
  FsCellComponent,
6133
6188
  FsFooterRowComponent,
6134
6189
  FsFooterCellComponent,
@@ -6216,11 +6271,12 @@
6216
6271
  exports.ɵf = FsListDraggableListDirective;
6217
6272
  exports.ɵg = FsRowActionsComponent;
6218
6273
  exports.ɵh = FsRowInlineActionComponent;
6219
- exports.ɵi = FsListLoaderComponent;
6220
- exports.ɵj = FsListSavedFiltersComponent;
6221
- exports.ɵk = FsListManageSavedFiltersComponent;
6222
- exports.ɵl = FsListDraggableRowDirective;
6223
- exports.ɵm = CustomizeColsDialogComponent;
6274
+ exports.ɵi = FsRowMenuActionComponent;
6275
+ exports.ɵj = FsListLoaderComponent;
6276
+ exports.ɵk = FsListSavedFiltersComponent;
6277
+ exports.ɵl = FsListManageSavedFiltersComponent;
6278
+ exports.ɵm = FsListDraggableRowDirective;
6279
+ exports.ɵn = CustomizeColsDialogComponent;
6224
6280
 
6225
6281
  Object.defineProperty(exports, '__esModule', { value: true });
6226
6282