@universis/ngx-tables 0.6.21 → 0.7.1

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 (35) hide show
  1. package/bundles/universis-ngx-tables.umd.js +246 -10
  2. package/bundles/universis-ngx-tables.umd.js.map +1 -1
  3. package/bundles/universis-ngx-tables.umd.min.js +1 -1
  4. package/bundles/universis-ngx-tables.umd.min.js.map +1 -1
  5. package/esm2015/lib/actions/table.actions.js +28 -0
  6. package/esm2015/lib/components/advanced-table/advanced-table-search.component.js +8 -2
  7. package/esm2015/lib/components/advanced-table/advanced-table.component.js +31 -3
  8. package/esm2015/lib/directives/advance-search-state.directive.js +88 -0
  9. package/esm2015/lib/directives/advance-table-state.directive.js +59 -0
  10. package/esm2015/lib/reducers/index.js +31 -0
  11. package/esm2015/lib/tables.module.js +13 -4
  12. package/esm2015/public_api.js +1 -1
  13. package/esm2015/universis-ngx-tables.js +4 -1
  14. package/esm5/lib/actions/table.actions.js +34 -0
  15. package/esm5/lib/components/advanced-table/advanced-table-search.component.js +8 -2
  16. package/esm5/lib/components/advanced-table/advanced-table.component.js +31 -3
  17. package/esm5/lib/directives/advance-search-state.directive.js +96 -0
  18. package/esm5/lib/directives/advance-table-state.directive.js +62 -0
  19. package/esm5/lib/reducers/index.js +33 -0
  20. package/esm5/lib/tables.module.js +13 -4
  21. package/esm5/public_api.js +1 -1
  22. package/esm5/universis-ngx-tables.js +4 -1
  23. package/fesm2015/universis-ngx-tables.js +229 -12
  24. package/fesm2015/universis-ngx-tables.js.map +1 -1
  25. package/fesm5/universis-ngx-tables.js +240 -13
  26. package/fesm5/universis-ngx-tables.js.map +1 -1
  27. package/lib/actions/table.actions.d.ts +24 -0
  28. package/lib/components/advanced-table/advanced-table-search.component.d.ts +4 -0
  29. package/lib/components/advanced-table/advanced-table.component.d.ts +4 -0
  30. package/lib/directives/advance-search-state.directive.d.ts +16 -0
  31. package/lib/directives/advance-table-state.directive.d.ts +11 -0
  32. package/lib/reducers/index.d.ts +23 -0
  33. package/package.json +4 -1
  34. package/universis-ngx-tables.d.ts +3 -0
  35. package/universis-ngx-tables.metadata.json +1 -1
@@ -8,8 +8,6 @@ import { HttpClient } from '@angular/common/http';
8
8
  import { ClientDataQueryable, ResponseError, TextUtils } from '@themost/client';
9
9
  import { BehaviorSubject } from 'rxjs';
10
10
  import { AngularDataContext } from '@themost/angular';
11
- import { __awaiter, __generator, __extends, __values, __assign, __spread } from 'tslib';
12
- import { Injectable, Pipe, Component, ElementRef, Input, ViewChild, ViewEncapsulation, EventEmitter, Output, NgModule, CUSTOM_ELEMENTS_SCHEMA, defineInjectable, inject, Directive, HostListener, ChangeDetectorRef, InjectionToken, Inject, Injector, ChangeDetectionStrategy } from '@angular/core';
13
11
  import { DatePipe, CommonModule } from '@angular/common';
14
12
  import { TranslateService, TranslatePipe, TranslateModule } from '@ngx-translate/core';
15
13
  import { FormArray, FormBuilder, FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
@@ -21,6 +19,10 @@ import { ActivatedRoute, Router, NavigationStart, RouterModule } from '@angular/
21
19
  import { BsModalRef, BsModalService, ModalModule } from 'ngx-bootstrap/modal';
22
20
  import { ProgressbarModule } from 'ngx-bootstrap/progressbar';
23
21
  import { GroupByPipe, NgPipesModule } from 'ngx-pipes';
22
+ import { __extends, __assign, __awaiter, __generator, __values, __spread } from 'tslib';
23
+ import { Injectable, Directive, Optional, Input, Pipe, Component, ElementRef, ViewChild, ViewEncapsulation, EventEmitter, Output, NgModule, CUSTOM_ELEMENTS_SCHEMA, defineInjectable, inject, HostListener, ChangeDetectorRef, InjectionToken, Inject, Injector, ChangeDetectionStrategy } from '@angular/core';
24
+ import { createFeatureSelector, createSelector, select, Store, StoreModule } from '@ngrx/store';
25
+ import { first } from 'rxjs/operators';
24
26
 
25
27
  var AdvancedColumnFormatter = /** @class */ (function () {
26
28
  function AdvancedColumnFormatter() {
@@ -602,6 +604,7 @@ var AdvancedTableComponent = /** @class */ (function () {
602
604
  this.select = new EventEmitter();
603
605
  this.draw = new EventEmitter();
604
606
  this.page = new EventEmitter();
607
+ this.order = new EventEmitter();
605
608
  this.scroll = new EventEmitter();
606
609
  this.selectedItems = new EventEmitter();
607
610
  this.scrollable = true;
@@ -609,6 +612,7 @@ var AdvancedTableComponent = /** @class */ (function () {
609
612
  this.lengthMenu = [50, 100, 200, 500];
610
613
  this.paging = true;
611
614
  this.pageLength = 25;
615
+ this.stateSave = false;
612
616
  this.scrollY = 800;
613
617
  this.scrollX = true;
614
618
  /**
@@ -1127,7 +1131,14 @@ var AdvancedTableComponent = /** @class */ (function () {
1127
1131
  }, 0);
1128
1132
  }
1129
1133
  });
1130
- tableElement_1.on('draw.dt', function (event) {
1134
+ tableElement_1.on('order.dt', function (event) {
1135
+ if (_this.dataTable) {
1136
+ var order = _this.dataTable.order();
1137
+ if (order && order.length) {
1138
+ _this.order.emit(order);
1139
+ }
1140
+ }
1141
+ }).on('draw.dt', function (event) {
1131
1142
  _this.draw.emit();
1132
1143
  if (_this.dataTable) {
1133
1144
  var info = _this.dataTable.page.info();
@@ -1286,7 +1297,7 @@ var AdvancedTableComponent = /** @class */ (function () {
1286
1297
  q.setParam('$orderby', orderByStr);
1287
1298
  }
1288
1299
  // configure $select parameter
1289
- var select = self.config.columns.filter(function (column) {
1300
+ var select$$1 = self.config.columns.filter(function (column) {
1290
1301
  if (column.virtual === true) {
1291
1302
  return false;
1292
1303
  }
@@ -1299,7 +1310,7 @@ var AdvancedTableComponent = /** @class */ (function () {
1299
1310
  return column.name;
1300
1311
  }
1301
1312
  });
1302
- q.select.apply(q, select);
1313
+ q.select.apply(q, select$$1);
1303
1314
  // configure $filter
1304
1315
  if (queryParams.$filter && queryParams.$filter.length) {
1305
1316
  // set route filter
@@ -1376,6 +1387,20 @@ var AdvancedTableComponent = /** @class */ (function () {
1376
1387
  },
1377
1388
  language: Object.assign({}, self.translator.transform('Tables.DataTable'), { emptyTable: ' ' }),
1378
1389
  };
1390
+ var stateSettings = {
1391
+ stateSave: this.stateSave
1392
+ };
1393
+ if (this.stateLoadCallback) {
1394
+ Object.assign(stateSettings, {
1395
+ stateLoadCallback: this.stateLoadCallback
1396
+ });
1397
+ }
1398
+ if (this.stateSaveCallback) {
1399
+ Object.assign(stateSettings, {
1400
+ stateSaveCallback: this.stateSaveCallback
1401
+ });
1402
+ }
1403
+ Object.assign(settings, stateSettings);
1379
1404
  if (this.scrollable) {
1380
1405
  // set continuous scrolling
1381
1406
  Object.assign(settings, {
@@ -1410,8 +1435,8 @@ var AdvancedTableComponent = /** @class */ (function () {
1410
1435
  });
1411
1436
  }
1412
1437
  });
1413
- _this.init.emit();
1414
1438
  }).DataTable(settings);
1439
+ this.init.emit();
1415
1440
  // show or hide header
1416
1441
  if (!this.showHeader) {
1417
1442
  this._element.nativeElement
@@ -1672,6 +1697,7 @@ var AdvancedTableComponent = /** @class */ (function () {
1672
1697
  select: [{ type: Output, args: ['select',] }],
1673
1698
  draw: [{ type: Output, args: ['draw',] }],
1674
1699
  page: [{ type: Output, args: ['page',] }],
1700
+ order: [{ type: Output, args: ['order',] }],
1675
1701
  scroll: [{ type: Output, args: ['scroll',] }],
1676
1702
  selectedItems: [{ type: Output, args: ['selectedItems',] }],
1677
1703
  scrollable: [{ type: Input }],
@@ -1679,6 +1705,9 @@ var AdvancedTableComponent = /** @class */ (function () {
1679
1705
  lengthMenu: [{ type: Input }],
1680
1706
  paging: [{ type: Input }],
1681
1707
  pageLength: [{ type: Input }],
1708
+ stateSave: [{ type: Input }],
1709
+ stateLoadCallback: [{ type: Input }],
1710
+ stateSaveCallback: [{ type: Input }],
1682
1711
  scrollY: [{ type: Input }],
1683
1712
  scrollX: [{ type: Input }],
1684
1713
  selectable: [{ type: Input }],
@@ -2776,6 +2805,7 @@ var AdvancedTableSearchComponent = /** @class */ (function (_super) {
2776
2805
  _this.showMore = true;
2777
2806
  _this.mergeQueryParams = false;
2778
2807
  _this.viewChange = new EventEmitter();
2808
+ _this.listChange = new EventEmitter();
2779
2809
  _this.userSearchList = [];
2780
2810
  _this.selectedList = null;
2781
2811
  return _this;
@@ -2930,6 +2960,9 @@ var AdvancedTableSearchComponent = /** @class */ (function (_super) {
2930
2960
  queryParamsHandling: 'merge',
2931
2961
  });
2932
2962
  }
2963
+ this.filterChange.emit({
2964
+ q: searchText
2965
+ });
2933
2966
  // otherwise do search
2934
2967
  this.table.search(searchText);
2935
2968
  return false;
@@ -3148,6 +3181,7 @@ var AdvancedTableSearchComponent = /** @class */ (function (_super) {
3148
3181
  else {
3149
3182
  this.table.query = query;
3150
3183
  }
3184
+ this.filterChange.emit(this.filter);
3151
3185
  this.table.fetch();
3152
3186
  _a.label = 2;
3153
3187
  case 2: return [2 /*return*/];
@@ -3294,7 +3328,8 @@ var AdvancedTableSearchComponent = /** @class */ (function (_super) {
3294
3328
  showMore: [{ type: Input }],
3295
3329
  mergeQueryParams: [{ type: Input }],
3296
3330
  searchText: [{ type: ViewChild, args: ['searchText',] }],
3297
- viewChange: [{ type: Output, args: ['viewChange',] }]
3331
+ viewChange: [{ type: Output, args: ['viewChange',] }],
3332
+ listChange: [{ type: Output, args: ['listChange',] }]
3298
3333
  };
3299
3334
  return AdvancedTableSearchComponent;
3300
3335
  }(AdvancedTableSearchBaseComponent));
@@ -3642,9 +3677,9 @@ var BtnExpDirective = /** @class */ (function () {
3642
3677
  var _this = this;
3643
3678
  var selectQuery = query.getParams().$select;
3644
3679
  var selectQueryArray = selectQuery.split(',');
3645
- selectQueryArray = selectQueryArray.map(function (select) {
3680
+ selectQueryArray = selectQueryArray.map(function (select$$1) {
3646
3681
  var e_1, _a, e_2, _b;
3647
- var words = select.split(' ');
3682
+ var words = select$$1.split(' ');
3648
3683
  if (words.length === 3) {
3649
3684
  if (tableConfig && tableConfig.columns) {
3650
3685
  try {
@@ -4570,6 +4605,193 @@ var TABLES_EN = {
4570
4605
  }
4571
4606
  };
4572
4607
 
4608
+ var TableActionTypes;
4609
+ (function (TableActionTypes) {
4610
+ TableActionTypes["LoadFilter"] = "[Table] Load Filter";
4611
+ TableActionTypes["AppendFilter"] = "[Table] Append Filter";
4612
+ TableActionTypes["AppendState"] = "[Table] Append State";
4613
+ })(TableActionTypes || (TableActionTypes = {}));
4614
+ var AppendFilter = /** @class */ (function () {
4615
+ function AppendFilter(id, filter) {
4616
+ this.id = id;
4617
+ this.filter = filter;
4618
+ this.type = TableActionTypes.AppendFilter;
4619
+ }
4620
+ return AppendFilter;
4621
+ }());
4622
+ var AppendState = /** @class */ (function () {
4623
+ function AppendState(id, data) {
4624
+ this.id = id;
4625
+ this.data = data;
4626
+ this.type = TableActionTypes.AppendState;
4627
+ }
4628
+ return AppendState;
4629
+ }());
4630
+
4631
+ var initialState = {};
4632
+ function tableReducer(state, action) {
4633
+ if (state === void 0) { state = initialState; }
4634
+ switch (action.type) {
4635
+ case TableActionTypes.LoadFilter:
4636
+ return state[action.id];
4637
+ case TableActionTypes.AppendFilter:
4638
+ state[action.id] = __assign({}, state[action.id], { filter: action.filter });
4639
+ return state;
4640
+ case TableActionTypes.AppendState:
4641
+ state[action.id] = __assign({}, state[action.id], { table: action.data });
4642
+ return state;
4643
+ default:
4644
+ return state;
4645
+ }
4646
+ }
4647
+ var tableReducers = {
4648
+ tables: tableReducer,
4649
+ };
4650
+ var featureName = 'tables';
4651
+ var getTablesState = createFeatureSelector(featureName);
4652
+ var selectTable = createSelector(getTablesState, function (state, props) {
4653
+ return state.tables[props.id];
4654
+ });
4655
+
4656
+ var AdvancedTableState = /** @class */ (function () {
4657
+ function AdvancedTableState(table, store) {
4658
+ this.table = table;
4659
+ this.store = store;
4660
+ }
4661
+ AdvancedTableState.prototype.ngOnInit = function () {
4662
+ var _this = this;
4663
+ if (this.store == null) {
4664
+ return;
4665
+ }
4666
+ this.table.stateSave = true;
4667
+ this.table.stateLoadCallback = function (settings, callback) {
4668
+ _this.store.pipe(select(selectTable, { id: _this.tableState }), first()).subscribe(function (state) {
4669
+ return callback(state && state.table);
4670
+ });
4671
+ };
4672
+ var firstDraw = true;
4673
+ this.table.draw.subscribe(function () {
4674
+ if (firstDraw === false) {
4675
+ return;
4676
+ }
4677
+ if (_this.table.dataTable == null) {
4678
+ return;
4679
+ }
4680
+ firstDraw = false;
4681
+ var loadeStateSettings = _this.table.dataTable.settings()[0];
4682
+ var scrollerSettings = loadeStateSettings.oSavedState &&
4683
+ loadeStateSettings.oSavedState.scroller;
4684
+ if (scrollerSettings && scrollerSettings.topRow) {
4685
+ var scroller = _this.table.dataTable.scroller();
4686
+ scroller.scrollToRow(scrollerSettings.topRow, true);
4687
+ }
4688
+ });
4689
+ this.table.stateSaveCallback = function (settings, data) {
4690
+ _this.store.dispatch(new AppendState(_this.tableState, data));
4691
+ };
4692
+ };
4693
+ AdvancedTableState.decorators = [
4694
+ { type: Directive, args: [{
4695
+ // tslint:disable-next-line: directive-selector
4696
+ selector: '[tableState]',
4697
+ },] }
4698
+ ];
4699
+ /** @nocollapse */
4700
+ AdvancedTableState.ctorParameters = function () { return [
4701
+ { type: AdvancedTableComponent },
4702
+ { type: Store, decorators: [{ type: Optional }] }
4703
+ ]; };
4704
+ AdvancedTableState.propDecorators = {
4705
+ tableState: [{ type: Input }]
4706
+ };
4707
+ return AdvancedTableState;
4708
+ }());
4709
+
4710
+ var AdvancedTableSearchComponentNotNull = /** @class */ (function (_super) {
4711
+ __extends(AdvancedTableSearchComponentNotNull, _super);
4712
+ function AdvancedTableSearchComponentNotNull() {
4713
+ return _super.call(this, 'Advanced table search component cannot be empty at this context.') || this;
4714
+ }
4715
+ return AdvancedTableSearchComponentNotNull;
4716
+ }(Error));
4717
+ var AdvancedSearchState = /** @class */ (function () {
4718
+ function AdvancedSearchState(search, store) {
4719
+ this.search = search;
4720
+ this.store = store;
4721
+ }
4722
+ AdvancedSearchState.prototype.ngOnInit = function () {
4723
+ var _this = this;
4724
+ if (this.store == null) {
4725
+ return;
4726
+ }
4727
+ if (this.search == null) {
4728
+ throw new AdvancedTableSearchComponentNotNull();
4729
+ }
4730
+ if (this.search.table) {
4731
+ // set auto load to false
4732
+ this.search.table.autoLoad = false;
4733
+ // handle filtering
4734
+ this.search.filterChange.subscribe(function (filter) {
4735
+ _this.onSearchFilter(filter);
4736
+ });
4737
+ // handle table state (via directive)
4738
+ var tableState = new AdvancedTableState(this.search.table, this.store);
4739
+ tableState.tableState = this.searchState;
4740
+ tableState.ngOnInit();
4741
+ // handle table init
4742
+ this.search.table.init.subscribe(function () {
4743
+ return _this.onTableInit();
4744
+ });
4745
+ }
4746
+ };
4747
+ AdvancedSearchState.prototype.onTableInit = function () {
4748
+ var _this = this;
4749
+ this.store.pipe(select(selectTable, { id: this.searchState }), first()).subscribe(function (state) {
4750
+ // use order
4751
+ if (state) {
4752
+ if (state.order && state.order.length) {
4753
+ _this.search.table.dataTable.order(state.order);
4754
+ }
4755
+ // use text search
4756
+ if (state.filter && state.filter.q) {
4757
+ _this.search.text = state.filter.q;
4758
+ _this.search.collapsed = true;
4759
+ return _this.search.table.search(_this.search.text);
4760
+ }
4761
+ // use predefined search
4762
+ if (state.filter && state.filter.s) {
4763
+ _this.search.selectedList = _this.search.userSearchList.find(function (item) {
4764
+ return item.name === state.filter.s;
4765
+ });
4766
+ return _this.search.search();
4767
+ }
4768
+ if (state.filter) {
4769
+ _this.search.filter = state.filter;
4770
+ }
4771
+ return _this.search.search();
4772
+ }
4773
+ });
4774
+ };
4775
+ AdvancedSearchState.prototype.onSearchFilter = function (filter) {
4776
+ this.store.dispatch(new AppendFilter(this.searchState, filter));
4777
+ };
4778
+ AdvancedSearchState.decorators = [
4779
+ { type: Directive, args: [{
4780
+ // tslint:disable-next-line: directive-selector
4781
+ selector: '[searchState]',
4782
+ },] }
4783
+ ];
4784
+ /** @nocollapse */
4785
+ AdvancedSearchState.ctorParameters = function () { return [
4786
+ { type: AdvancedTableSearchComponent },
4787
+ { type: Store, decorators: [{ type: Optional }] }
4788
+ ]; };
4789
+ AdvancedSearchState.propDecorators = {
4790
+ searchState: [{ type: Input }]
4791
+ };
4792
+ return AdvancedSearchState;
4793
+ }());
4794
+
4573
4795
  var ɵ0 = FORMATTERS;
4574
4796
  var TablesModule = /** @class */ (function () {
4575
4797
  function TablesModule(_translateService) {
@@ -4603,7 +4825,8 @@ var TablesModule = /** @class */ (function () {
4603
4825
  SharedModule,
4604
4826
  ModalModule,
4605
4827
  ProgressbarModule,
4606
- NgPipesModule
4828
+ NgPipesModule,
4829
+ StoreModule.forFeature(featureName, tableReducers)
4607
4830
  ],
4608
4831
  providers: [DatePipe, TemplatePipe,
4609
4832
  {
@@ -4633,7 +4856,9 @@ var TablesModule = /** @class */ (function () {
4633
4856
  AdvancedAggregatorListComponent,
4634
4857
  AdvancedAggregatorPipe,
4635
4858
  ParseTitlePipe,
4636
- AddItemsComponent
4859
+ AddItemsComponent,
4860
+ AdvancedSearchState,
4861
+ AdvancedTableState
4637
4862
  ],
4638
4863
  exports: [
4639
4864
  AdvancedTableComponent,
@@ -4649,7 +4874,9 @@ var TablesModule = /** @class */ (function () {
4649
4874
  AdvancedTableEditorDirective,
4650
4875
  AdvancedAggregatorComponent,
4651
4876
  AdvancedAggregatorListComponent,
4652
- AddItemsComponent
4877
+ AddItemsComponent,
4878
+ AdvancedSearchState,
4879
+ AdvancedTableState
4653
4880
  ],
4654
4881
  entryComponents: [
4655
4882
  AdvancedTableModalBaseComponent,
@@ -4676,6 +4903,6 @@ var TablesModule = /** @class */ (function () {
4676
4903
  * Generated bundle index. Do not edit.
4677
4904
  */
4678
4905
 
4679
- export { AdvancedListComponent, AdvancedRowActionComponent, AdvancedSearchFormComponent, AdvancedSelectComponent, AdvancedSelectService, AdvancedTableConfigurationResolver, AdvancedSearchConfigurationResolver, AdvancedColumnFormatter, NestedPropertyFormatter, ButtonFormatter, LinkFormatter, ActionLinkFormatter, ActionButtonFormatter, ActionSplitButtonFormatter, SelectRowFormatter, TemplateFormatter, TrueFalseFormatter, TranslationFormatter, DateTimeFormatter, NgClassFormatter, LanguageFormatter, COLUMN_FORMATTERS, AdvancedTableConfiguration, AdvancedTableComponent, AdvancedTableSettingsComponent, AdvancedTableSearchBaseComponent, AdvancedTableSearchComponent, FORMATTERS, AdvancedFilterValueProvider, AdvancedTableModalBaseTemplate, AdvancedTableModalBaseComponent, SimpleHeaderToolsComponent, TableSimpleHeaderComponent, AdvancedTableNotNullError, AdvancedTableEditorDirective, BtnExpDirective, AdvancedAggregatorComponent, AdvancedAggregatorListComponent, AddItemsComponent, AdvancedAggregatorPipe, ParseTitlePipe, AdvancedAggregatorService, TablesModule, ɵ0, ActivatedTableService };
4906
+ export { AdvancedSearchState as ɵe, AdvancedTableState as ɵf, featureName as ɵd, tableReducer as ɵa, tableReducers as ɵc, AdvancedListComponent, AdvancedRowActionComponent, AdvancedSearchFormComponent, AdvancedSelectComponent, AdvancedSelectService, AdvancedTableConfigurationResolver, AdvancedSearchConfigurationResolver, AdvancedColumnFormatter, NestedPropertyFormatter, ButtonFormatter, LinkFormatter, ActionLinkFormatter, ActionButtonFormatter, ActionSplitButtonFormatter, SelectRowFormatter, TemplateFormatter, TrueFalseFormatter, TranslationFormatter, DateTimeFormatter, NgClassFormatter, LanguageFormatter, COLUMN_FORMATTERS, AdvancedTableConfiguration, AdvancedTableComponent, AdvancedTableSettingsComponent, AdvancedTableSearchBaseComponent, AdvancedTableSearchComponent, FORMATTERS, AdvancedFilterValueProvider, AdvancedTableModalBaseTemplate, AdvancedTableModalBaseComponent, SimpleHeaderToolsComponent, TableSimpleHeaderComponent, AdvancedTableNotNullError, AdvancedTableEditorDirective, BtnExpDirective, AdvancedAggregatorComponent, AdvancedAggregatorListComponent, AddItemsComponent, AdvancedAggregatorPipe, ParseTitlePipe, AdvancedAggregatorService, TablesModule, ɵ0, ActivatedTableService };
4680
4907
 
4681
4908
  //# sourceMappingURL=universis-ngx-tables.js.map