@den4ik92/ng2-smart-table 1.0.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 (127) hide show
  1. package/esm2020/den4ik92-ng2-smart-table.mjs +5 -0
  2. package/esm2020/lib/components/cell/cell-edit-mode/custom-edit.component.mjs +50 -0
  3. package/esm2020/lib/components/cell/cell-edit-mode/default-edit.component.mjs +84 -0
  4. package/esm2020/lib/components/cell/cell-edit-mode/edit-cell-default.mjs +35 -0
  5. package/esm2020/lib/components/cell/cell-edit-mode/edit-cell.component.mjs +75 -0
  6. package/esm2020/lib/components/cell/cell-editors/checkbox-editor.component.mjs +37 -0
  7. package/esm2020/lib/components/cell/cell-editors/completer-editor.component.mjs +38 -0
  8. package/esm2020/lib/components/cell/cell-editors/default-editor.mjs +29 -0
  9. package/esm2020/lib/components/cell/cell-editors/input-editor.component.mjs +33 -0
  10. package/esm2020/lib/components/cell/cell-editors/select-editor.component.mjs +55 -0
  11. package/esm2020/lib/components/cell/cell-editors/textarea-editor.component.mjs +35 -0
  12. package/esm2020/lib/components/cell/cell-view-mode/custom-view.component.mjs +63 -0
  13. package/esm2020/lib/components/cell/cell-view-mode/view-cell.component.mjs +59 -0
  14. package/esm2020/lib/components/cell/cell-view-mode/view-cell.mjs +2 -0
  15. package/esm2020/lib/components/cell/cell.component.mjs +82 -0
  16. package/esm2020/lib/components/cell/cell.module.mjs +80 -0
  17. package/esm2020/lib/components/filter/custom-filter.component.mjs +53 -0
  18. package/esm2020/lib/components/filter/default-filter.component.mjs +100 -0
  19. package/esm2020/lib/components/filter/filter-default.mjs +35 -0
  20. package/esm2020/lib/components/filter/filter-types/checkbox-filter.component.mjs +65 -0
  21. package/esm2020/lib/components/filter/filter-types/completer-filter.component.mjs +52 -0
  22. package/esm2020/lib/components/filter/filter-types/default-filter.mjs +34 -0
  23. package/esm2020/lib/components/filter/filter-types/input-filter.component.mjs +51 -0
  24. package/esm2020/lib/components/filter/filter-types/select-filter.component.mjs +71 -0
  25. package/esm2020/lib/components/filter/filter.component.mjs +91 -0
  26. package/esm2020/lib/components/filter/filter.module.mjs +67 -0
  27. package/esm2020/lib/components/pager/pager.component.mjs +284 -0
  28. package/esm2020/lib/components/pager/pager.module.mjs +29 -0
  29. package/esm2020/lib/components/tbody/cells/create-cancel.component.mjs +52 -0
  30. package/esm2020/lib/components/tbody/cells/custom.component.mjs +56 -0
  31. package/esm2020/lib/components/tbody/cells/edit-delete.component.mjs +103 -0
  32. package/esm2020/lib/components/tbody/tbody.component.mjs +206 -0
  33. package/esm2020/lib/components/tbody/tbody.module.mjs +48 -0
  34. package/esm2020/lib/components/thead/cells/actions-title.component.mjs +36 -0
  35. package/esm2020/lib/components/thead/cells/actions.component.mjs +44 -0
  36. package/esm2020/lib/components/thead/cells/add-button.component.mjs +63 -0
  37. package/esm2020/lib/components/thead/cells/checkbox-select-all.component.mjs +28 -0
  38. package/esm2020/lib/components/thead/cells/column-title.component.mjs +37 -0
  39. package/esm2020/lib/components/thead/cells/title/title.component.mjs +100 -0
  40. package/esm2020/lib/components/thead/rows/thead-filters-row.component.mjs +105 -0
  41. package/esm2020/lib/components/thead/rows/thead-form-row.component.mjs +108 -0
  42. package/esm2020/lib/components/thead/rows/thead-titles-row.component.mjs +103 -0
  43. package/esm2020/lib/components/thead/thead.component.mjs +76 -0
  44. package/esm2020/lib/components/thead/thead.module.mjs +76 -0
  45. package/esm2020/lib/lib/data-set/cell.mjs +41 -0
  46. package/esm2020/lib/lib/data-set/column.mjs +75 -0
  47. package/esm2020/lib/lib/data-set/data-set.mjs +98 -0
  48. package/esm2020/lib/lib/data-set/row.mjs +46 -0
  49. package/esm2020/lib/lib/data-source/data-source.mjs +101 -0
  50. package/esm2020/lib/lib/data-source/local/local.data-source.mjs +228 -0
  51. package/esm2020/lib/lib/data-source/local/local.filter.mjs +13 -0
  52. package/esm2020/lib/lib/data-source/local/local.pager.mjs +6 -0
  53. package/esm2020/lib/lib/data-source/local/local.sorter.mjs +19 -0
  54. package/esm2020/lib/lib/data-source/server/server-source.conf.mjs +20 -0
  55. package/esm2020/lib/lib/data-source/server/server.data-source.mjs +93 -0
  56. package/esm2020/lib/lib/grid.mjs +220 -0
  57. package/esm2020/lib/lib/helpers.mjs +84 -0
  58. package/esm2020/lib/lib/interfaces/smart-table.models.mjs +2 -0
  59. package/esm2020/lib/ng2-smart-table.component.mjs +203 -0
  60. package/esm2020/lib/ng2-smart-table.module.mjs +52 -0
  61. package/esm2020/public-api.mjs +8 -0
  62. package/fesm2015/den4ik92-ng2-smart-table.mjs +4329 -0
  63. package/fesm2015/den4ik92-ng2-smart-table.mjs.map +1 -0
  64. package/fesm2020/den4ik92-ng2-smart-table.mjs +3949 -0
  65. package/fesm2020/den4ik92-ng2-smart-table.mjs.map +1 -0
  66. package/index.d.ts +5 -0
  67. package/lib/components/cell/cell-edit-mode/custom-edit.component.d.ts +13 -0
  68. package/lib/components/cell/cell-edit-mode/default-edit.component.d.ts +8 -0
  69. package/lib/components/cell/cell-edit-mode/edit-cell-default.d.ts +13 -0
  70. package/lib/components/cell/cell-edit-mode/edit-cell.component.d.ts +12 -0
  71. package/lib/components/cell/cell-editors/checkbox-editor.component.d.ts +8 -0
  72. package/lib/components/cell/cell-editors/completer-editor.component.d.ts +13 -0
  73. package/lib/components/cell/cell-editors/default-editor.d.ts +19 -0
  74. package/lib/components/cell/cell-editors/input-editor.component.d.ts +7 -0
  75. package/lib/components/cell/cell-editors/select-editor.component.d.ts +7 -0
  76. package/lib/components/cell/cell-editors/textarea-editor.component.d.ts +7 -0
  77. package/lib/components/cell/cell-view-mode/custom-view.component.d.ts +19 -0
  78. package/lib/components/cell/cell-view-mode/view-cell.component.d.ts +7 -0
  79. package/lib/components/cell/cell-view-mode/view-cell.d.ts +4 -0
  80. package/lib/components/cell/cell.component.d.ts +20 -0
  81. package/lib/components/cell/cell.module.d.ts +21 -0
  82. package/lib/components/filter/custom-filter.component.d.ts +14 -0
  83. package/lib/components/filter/default-filter.component.d.ts +7 -0
  84. package/lib/components/filter/filter-default.d.ts +14 -0
  85. package/lib/components/filter/filter-types/checkbox-filter.component.d.ts +13 -0
  86. package/lib/components/filter/filter-types/completer-filter.component.d.ts +12 -0
  87. package/lib/components/filter/filter-types/default-filter.d.ts +24 -0
  88. package/lib/components/filter/filter-types/input-filter.component.d.ts +12 -0
  89. package/lib/components/filter/filter-types/select-filter.component.d.ts +11 -0
  90. package/lib/components/filter/filter.component.d.ts +11 -0
  91. package/lib/components/filter/filter.module.d.ts +17 -0
  92. package/lib/components/pager/pager.component.d.ts +35 -0
  93. package/lib/components/pager/pager.module.d.ts +9 -0
  94. package/lib/components/tbody/cells/create-cancel.component.d.ts +16 -0
  95. package/lib/components/tbody/cells/custom.component.d.ts +13 -0
  96. package/lib/components/tbody/cells/edit-delete.component.d.ts +24 -0
  97. package/lib/components/tbody/tbody.component.d.ts +37 -0
  98. package/lib/components/tbody/tbody.module.d.ts +13 -0
  99. package/lib/components/thead/cells/actions-title.component.d.ts +13 -0
  100. package/lib/components/thead/cells/actions.component.d.ts +12 -0
  101. package/lib/components/thead/cells/add-button.component.d.ts +18 -0
  102. package/lib/components/thead/cells/checkbox-select-all.component.d.ts +9 -0
  103. package/lib/components/thead/cells/column-title.component.d.ts +11 -0
  104. package/lib/components/thead/cells/title/title.component.d.ts +17 -0
  105. package/lib/components/thead/rows/thead-filters-row.component.d.ts +19 -0
  106. package/lib/components/thead/rows/thead-form-row.component.d.ts +20 -0
  107. package/lib/components/thead/rows/thead-titles-row.component.d.ts +18 -0
  108. package/lib/components/thead/thead.component.d.ts +18 -0
  109. package/lib/components/thead/thead.module.d.ts +20 -0
  110. package/lib/lib/data-set/cell.d.ts +20 -0
  111. package/lib/lib/data-set/column.d.ts +44 -0
  112. package/lib/lib/data-set/data-set.d.ts +37 -0
  113. package/lib/lib/data-set/row.d.ts +20 -0
  114. package/lib/lib/data-source/data-source.d.ts +35 -0
  115. package/lib/lib/data-source/local/local.data-source.d.ts +55 -0
  116. package/lib/lib/data-source/local/local.filter.d.ts +4 -0
  117. package/lib/lib/data-source/local/local.pager.d.ts +3 -0
  118. package/lib/lib/data-source/local/local.sorter.d.ts +4 -0
  119. package/lib/lib/data-source/server/server-source.conf.d.ts +27 -0
  120. package/lib/lib/data-source/server/server.data-source.d.ts +30 -0
  121. package/lib/lib/grid.d.ts +49 -0
  122. package/lib/lib/helpers.d.ts +18 -0
  123. package/lib/lib/interfaces/smart-table.models.d.ts +148 -0
  124. package/lib/ng2-smart-table.component.d.ts +43 -0
  125. package/lib/ng2-smart-table.module.d.ts +14 -0
  126. package/package.json +35 -0
  127. package/public-api.d.ts +8 -0
@@ -0,0 +1,101 @@
1
+ import { Subject } from 'rxjs';
2
+ export class DataSource {
3
+ constructor() {
4
+ this.onChangedSource = new Subject();
5
+ this.onAddedSource = new Subject();
6
+ this.onUpdatedSource = new Subject();
7
+ this.onRemovedSource = new Subject();
8
+ }
9
+ refresh() {
10
+ this.emitOnChanged('refresh');
11
+ }
12
+ load(data) {
13
+ this.emitOnChanged('load');
14
+ return Promise.resolve();
15
+ }
16
+ onChanged() {
17
+ return this.onChangedSource.asObservable();
18
+ }
19
+ onAdded() {
20
+ return this.onAddedSource.asObservable();
21
+ }
22
+ onUpdated() {
23
+ return this.onUpdatedSource.asObservable();
24
+ }
25
+ onRemoved() {
26
+ return this.onRemovedSource.asObservable();
27
+ }
28
+ prepend(element) {
29
+ this.emitOnAdded(element);
30
+ this.emitOnChanged('prepend');
31
+ return Promise.resolve();
32
+ }
33
+ append(element) {
34
+ this.emitOnAdded(element);
35
+ this.emitOnChanged('append');
36
+ return Promise.resolve();
37
+ }
38
+ add(element) {
39
+ this.emitOnAdded(element);
40
+ this.emitOnChanged('add');
41
+ return Promise.resolve();
42
+ }
43
+ remove(element) {
44
+ this.emitOnRemoved(element);
45
+ this.emitOnChanged('remove');
46
+ return Promise.resolve();
47
+ }
48
+ update(element, values) {
49
+ this.emitOnUpdated(element);
50
+ this.emitOnChanged('update');
51
+ return Promise.resolve();
52
+ }
53
+ empty() {
54
+ this.emitOnChanged('empty');
55
+ return Promise.resolve();
56
+ }
57
+ setSort(conf, doEmit) {
58
+ if (doEmit) {
59
+ this.emitOnChanged('sort');
60
+ }
61
+ }
62
+ setFilter(conf, andOperator, doEmit) {
63
+ if (doEmit) {
64
+ this.emitOnChanged('filter');
65
+ }
66
+ }
67
+ addFilter(fieldConf, andOperator, doEmit) {
68
+ if (doEmit) {
69
+ this.emitOnChanged('filter');
70
+ }
71
+ }
72
+ setPaging(page, perPage, doEmit) {
73
+ if (doEmit) {
74
+ this.emitOnChanged('paging');
75
+ }
76
+ }
77
+ setPage(page, doEmit) {
78
+ if (doEmit) {
79
+ this.emitOnChanged('page');
80
+ }
81
+ }
82
+ emitOnRemoved(element) {
83
+ this.onRemovedSource.next(element);
84
+ }
85
+ emitOnUpdated(element) {
86
+ this.onUpdatedSource.next(element);
87
+ }
88
+ emitOnAdded(element) {
89
+ this.onAddedSource.next(element);
90
+ }
91
+ emitOnChanged(action) {
92
+ this.getElements().then((elements) => this.onChangedSource.next({
93
+ action: action,
94
+ elements: elements,
95
+ paging: this.getPaging(),
96
+ filter: this.getFilter(),
97
+ sort: this.getSort(),
98
+ }));
99
+ }
100
+ }
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZzItc21hcnQtdGFibGUvc3JjL2xpYi9saWIvZGF0YS1zb3VyY2UvZGF0YS1zb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUcvQixNQUFNLE9BQWdCLFVBQVU7SUFBaEM7UUFFWSxvQkFBZSxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7UUFDckMsa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO1FBQ25DLG9CQUFlLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztRQUNyQyxvQkFBZSxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7SUF3SGpELENBQUM7SUEvR0MsT0FBTztRQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQUksQ0FBQyxJQUFnQjtRQUNuQixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFRCxPQUFPLENBQUMsT0FBWTtRQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFC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Q3hCLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ3hCLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFO1NBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGF0YVNvdXJjZSB7XG5cbiAgcHJvdGVjdGVkIG9uQ2hhbmdlZFNvdXJjZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgcHJvdGVjdGVkIG9uQWRkZWRTb3VyY2UgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gIHByb3RlY3RlZCBvblVwZGF0ZWRTb3VyY2UgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gIHByb3RlY3RlZCBvblJlbW92ZWRTb3VyY2UgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbiAgYWJzdHJhY3QgZ2V0QWxsKCk6IFByb21pc2U8YW55PjtcbiAgYWJzdHJhY3QgZ2V0RWxlbWVudHMoKTogUHJvbWlzZTxhbnk+O1xuICBhYnN0cmFjdCBnZXRTb3J0KCk6IGFueTtcbiAgYWJzdHJhY3QgZ2V0RmlsdGVyKCk6IGFueTtcbiAgYWJzdHJhY3QgZ2V0UGFnaW5nKCk6IGFueTtcbiAgYWJzdHJhY3QgY291bnQoKTogbnVtYmVyO1xuXG4gIHJlZnJlc2goKSB7XG4gICAgdGhpcy5lbWl0T25DaGFuZ2VkKCdyZWZyZXNoJyk7XG4gIH1cblxuICBsb2FkKGRhdGE6IEFycmF5PGFueT4pOiBQcm9taXNlPGFueT4ge1xuICAgIHRoaXMuZW1pdE9uQ2hhbmdlZCgnbG9hZCcpO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIG9uQ2hhbmdlZCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLm9uQ2hhbmdlZFNvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIG9uQWRkZWQoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5vbkFkZGVkU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgb25VcGRhdGVkKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMub25VcGRhdGVkU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgb25SZW1vdmVkKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMub25SZW1vdmVkU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHJlcGVuZChlbGVtZW50OiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIHRoaXMuZW1pdE9uQWRkZWQoZWxlbWVudCk7XG4gICAgdGhpcy5lbWl0T25DaGFuZ2VkKCdwcmVwZW5kJyk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgYXBwZW5kKGVsZW1lbnQ6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgdGhpcy5lbWl0T25BZGRlZChlbGVtZW50KTtcbiAgICB0aGlzLmVtaXRPbkNoYW5nZWQoJ2FwcGVuZCcpO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIGFkZChlbGVtZW50OiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIHRoaXMuZW1pdE9uQWRkZWQoZWxlbWVudCk7XG4gICAgdGhpcy5lbWl0T25DaGFuZ2VkKCdhZGQnKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICByZW1vdmUoZWxlbWVudDogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICB0aGlzLmVtaXRPblJlbW92ZWQoZWxlbWVudCk7XG4gICAgdGhpcy5lbWl0T25DaGFuZ2VkKCdyZW1vdmUnKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICB1cGRhdGUoZWxlbWVudDogYW55LCB2YWx1ZXM6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgdGhpcy5lbWl0T25VcGRhdGVkKGVsZW1lbnQpO1xuICAgIHRoaXMuZW1pdE9uQ2hhbmdlZCgndXBkYXRlJyk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgZW1wdHkoKTogUHJvbWlzZTxhbnk+IHtcbiAgICB0aGlzLmVtaXRPbkNoYW5nZWQoJ2VtcHR5Jyk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgc2V0U29ydChjb25mOiBBcnJheTxhbnk+LCBkb0VtaXQ/OiBib29sZWFuKSB7XG4gICAgaWYgKGRvRW1pdCkge1xuICAgICAgdGhpcy5lbWl0T25DaGFuZ2VkKCdzb3J0Jyk7XG4gICAgfVxuICB9XG5cbiAgc2V0RmlsdGVyKGNvbmY6IEFycmF5PGFueT4sIGFuZE9wZXJhdG9yPzogYm9vbGVhbiwgZG9FbWl0PzogYm9vbGVhbikge1xuICAgIGlmIChkb0VtaXQpIHtcbiAgICAgIHRoaXMuZW1pdE9uQ2hhbmdlZCgnZmlsdGVyJyk7XG4gICAgfVxuICB9XG5cbiAgYWRkRmlsdGVyKGZpZWxkQ29uZjoge30sIGFuZE9wZXJhdG9yPzogYm9vbGVhbiwgZG9FbWl0PzogYm9vbGVhbikge1xuICAgIGlmIChkb0VtaXQpIHtcbiAgICAgIHRoaXMuZW1pdE9uQ2hhbmdlZCgnZmlsdGVyJyk7XG4gICAgfVxuICB9XG5cbiAgc2V0UGFnaW5nKHBhZ2U6IG51bWJlciwgcGVyUGFnZTogbnVtYmVyLCBkb0VtaXQ/OiBib29sZWFuKSB7XG4gICAgaWYgKGRvRW1pdCkge1xuICAgICAgdGhpcy5lbWl0T25DaGFuZ2VkKCdwYWdpbmcnKTtcbiAgICB9XG4gIH1cblxuICBzZXRQYWdlKHBhZ2U6IG51bWJlciwgZG9FbWl0PzogYm9vbGVhbikge1xuICAgIGlmIChkb0VtaXQpIHtcbiAgICAgIHRoaXMuZW1pdE9uQ2hhbmdlZCgncGFnZScpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBlbWl0T25SZW1vdmVkKGVsZW1lbnQ6IGFueSkge1xuICAgIHRoaXMub25SZW1vdmVkU291cmNlLm5leHQoZWxlbWVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZW1pdE9uVXBkYXRlZChlbGVtZW50OiBhbnkpIHtcbiAgICB0aGlzLm9uVXBkYXRlZFNvdXJjZS5uZXh0KGVsZW1lbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGVtaXRPbkFkZGVkKGVsZW1lbnQ6IGFueSkge1xuICAgIHRoaXMub25BZGRlZFNvdXJjZS5uZXh0KGVsZW1lbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGVtaXRPbkNoYW5nZWQoYWN0aW9uOiBzdHJpbmcpIHtcbiAgICB0aGlzLmdldEVsZW1lbnRzKCkudGhlbigoZWxlbWVudHMpID0+IHRoaXMub25DaGFuZ2VkU291cmNlLm5leHQoe1xuICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICBlbGVtZW50czogZWxlbWVudHMsXG4gICAgICBwYWdpbmc6IHRoaXMuZ2V0UGFnaW5nKCksXG4gICAgICBmaWx0ZXI6IHRoaXMuZ2V0RmlsdGVyKCksXG4gICAgICBzb3J0OiB0aGlzLmdldFNvcnQoKSxcbiAgICB9KSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,228 @@
1
+ import { LocalSorter } from './local.sorter';
2
+ import { LocalFilter } from './local.filter';
3
+ import { LocalPager } from './local.pager';
4
+ import { DataSource } from '../data-source';
5
+ import { deepExtend } from '../../helpers';
6
+ export class LocalDataSource extends DataSource {
7
+ constructor(data = []) {
8
+ super();
9
+ this.data = [];
10
+ this.filteredAndSorted = [];
11
+ this.sortConf = [];
12
+ this.filterConf = {
13
+ filters: [],
14
+ andOperator: true,
15
+ };
16
+ this.pagingConf = {};
17
+ this.data = data;
18
+ }
19
+ load(data) {
20
+ this.data = data;
21
+ return super.load(data);
22
+ }
23
+ prepend(element) {
24
+ this.reset(true);
25
+ this.data.unshift(element);
26
+ return super.prepend(element);
27
+ }
28
+ append(element) {
29
+ this.reset(true);
30
+ this.data.push(element);
31
+ return super.append(element);
32
+ }
33
+ add(element) {
34
+ this.data.push(element);
35
+ return super.add(element);
36
+ }
37
+ remove(element) {
38
+ this.data = this.data.filter(el => el !== element);
39
+ return super.remove(element);
40
+ }
41
+ update(element, values) {
42
+ return new Promise((resolve, reject) => {
43
+ this.find(element).then((found) => {
44
+ found = deepExtend(found, values);
45
+ super.update(found, values).then(resolve).catch(reject);
46
+ }).catch(reject);
47
+ });
48
+ }
49
+ find(element) {
50
+ const found = this.data.find(el => el === element);
51
+ if (found) {
52
+ return Promise.resolve(found);
53
+ }
54
+ return Promise.reject(new Error('Element was not found in the dataset'));
55
+ }
56
+ getElements() {
57
+ const data = this.data.slice(0);
58
+ return Promise.resolve(this.prepareData(data));
59
+ }
60
+ getFilteredAndSorted() {
61
+ let data = this.data.slice(0);
62
+ this.prepareData(data);
63
+ return Promise.resolve(this.filteredAndSorted);
64
+ }
65
+ getAll() {
66
+ const data = this.data.slice(0);
67
+ return Promise.resolve(data);
68
+ }
69
+ reset(silent = false) {
70
+ if (silent) {
71
+ this.filterConf = {
72
+ filters: [],
73
+ andOperator: true,
74
+ };
75
+ this.sortConf = [];
76
+ this.pagingConf['page'] = 1;
77
+ }
78
+ else {
79
+ this.setFilter([], true, false);
80
+ this.setSort([], false);
81
+ this.setPage(1);
82
+ }
83
+ }
84
+ empty() {
85
+ this.data = [];
86
+ return super.empty();
87
+ }
88
+ count() {
89
+ return this.filteredAndSorted.length;
90
+ }
91
+ /**
92
+ *
93
+ * Array of conf objects
94
+ * [
95
+ * {field: string, direction: asc|desc|null, compare: Function|null},
96
+ * ]
97
+ * @param conf
98
+ * @param doEmit
99
+ * @returns {LocalDataSource}
100
+ */
101
+ setSort(conf, doEmit = true) {
102
+ if (conf !== null) {
103
+ conf.forEach((fieldConf) => {
104
+ if (!fieldConf['field'] || typeof fieldConf['direction'] === 'undefined') {
105
+ throw new Error('Sort configuration object is not valid');
106
+ }
107
+ });
108
+ this.sortConf = conf;
109
+ }
110
+ super.setSort(conf, doEmit);
111
+ return this;
112
+ }
113
+ /**
114
+ *
115
+ * Array of conf objects
116
+ * [
117
+ * {field: string, search: string, filter: Function|null},
118
+ * ]
119
+ * @param conf
120
+ * @param andOperator
121
+ * @param doEmit
122
+ * @returns {LocalDataSource}
123
+ */
124
+ setFilter(conf, andOperator = true, doEmit = true) {
125
+ if (conf && conf.length > 0) {
126
+ conf.forEach((fieldConf) => {
127
+ this.addFilter(fieldConf, andOperator, false);
128
+ });
129
+ }
130
+ else {
131
+ this.filterConf = {
132
+ filters: [],
133
+ andOperator: true,
134
+ };
135
+ }
136
+ this.filterConf.andOperator = andOperator;
137
+ this.pagingConf['page'] = 1;
138
+ super.setFilter(conf, andOperator, doEmit);
139
+ return this;
140
+ }
141
+ addFilter(fieldConf, andOperator = true, doEmit = true) {
142
+ if (!fieldConf['field'] || typeof fieldConf['search'] === 'undefined') {
143
+ throw new Error('Filter configuration object is not valid');
144
+ }
145
+ let found = false;
146
+ this.filterConf.filters.forEach((currentFieldConf, index) => {
147
+ if (currentFieldConf['field'] === fieldConf['field']) {
148
+ this.filterConf.filters[index] = fieldConf;
149
+ found = true;
150
+ }
151
+ });
152
+ if (!found) {
153
+ this.filterConf.filters.push(fieldConf);
154
+ }
155
+ this.filterConf.andOperator = andOperator;
156
+ super.addFilter(fieldConf, andOperator, doEmit);
157
+ return this;
158
+ }
159
+ setPaging(page, perPage, doEmit = true) {
160
+ this.pagingConf['page'] = page;
161
+ this.pagingConf['perPage'] = perPage;
162
+ super.setPaging(page, perPage, doEmit);
163
+ return this;
164
+ }
165
+ setPage(page, doEmit = true) {
166
+ this.pagingConf['page'] = page;
167
+ super.setPage(page, doEmit);
168
+ return this;
169
+ }
170
+ getSort() {
171
+ return this.sortConf;
172
+ }
173
+ getFilter() {
174
+ return this.filterConf;
175
+ }
176
+ getPaging() {
177
+ return this.pagingConf;
178
+ }
179
+ prepareData(data) {
180
+ data = this.filter(data);
181
+ data = this.sort(data);
182
+ this.filteredAndSorted = data.slice(0);
183
+ return this.paginate(data);
184
+ }
185
+ sort(data) {
186
+ if (this.sortConf) {
187
+ this.sortConf.forEach((fieldConf) => {
188
+ data = LocalSorter
189
+ .sort(data, fieldConf['field'], fieldConf['direction'], fieldConf['compare']);
190
+ });
191
+ }
192
+ return data;
193
+ }
194
+ // TODO: refactor?
195
+ filter(data) {
196
+ if (this.filterConf.filters) {
197
+ if (this.filterConf.andOperator) {
198
+ this.filterConf.filters.forEach((fieldConf) => {
199
+ if (fieldConf['search'].length > 0) {
200
+ data = LocalFilter
201
+ .filter(data, fieldConf['field'], fieldConf['search'], fieldConf['filter']);
202
+ }
203
+ });
204
+ }
205
+ else {
206
+ let mergedData = [];
207
+ this.filterConf.filters.forEach((fieldConf) => {
208
+ if (fieldConf['search'].length > 0) {
209
+ mergedData = mergedData.concat(LocalFilter
210
+ .filter(data, fieldConf['field'], fieldConf['search'], fieldConf['filter']));
211
+ }
212
+ });
213
+ // remove non unique items
214
+ data = mergedData.filter((elem, pos, arr) => {
215
+ return arr.indexOf(elem) === pos;
216
+ });
217
+ }
218
+ }
219
+ return data;
220
+ }
221
+ paginate(data) {
222
+ if (this.pagingConf && this.pagingConf['page'] && this.pagingConf['perPage']) {
223
+ data = LocalPager.paginate(data, this.pagingConf['page'], this.pagingConf['perPage']);
224
+ }
225
+ return data;
226
+ }
227
+ }
228
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwuZGF0YS1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZzItc21hcnQtdGFibGUvc3JjL2xpYi9saWIvZGF0YS1zb3VyY2UvbG9jYWwvbG9jYWwuZGF0YS1zb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE1BQU0sT0FBTyxlQUFnQixTQUFRLFVBQVU7SUFXN0MsWUFBWSxPQUFtQixFQUFFO1FBQy9CLEtBQUssRUFBRSxDQUFDO1FBVkEsU0FBSSxHQUFlLEVBQUUsQ0FBQztRQUN0QixzQkFBaUIsR0FBZSxFQUFFLENBQUM7UUFDbkMsYUFBUSxHQUFlLEVBQUUsQ0FBQztRQUMxQixlQUFVLEdBQVE7WUFDMUIsT0FBTyxFQUFFLEVBQUU7WUFDWCxXQUFXLEVBQUUsSUFBSTtTQUNsQixDQUFDO1FBQ1EsZUFBVSxHQUFRLEVBQUUsQ0FBQztRQUs3QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxDQUFDLElBQWdCO1FBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRWpCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsT0FBTyxDQUFDLE9BQVk7UUFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsSUFBSSxDQUFDLE9B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QUFVLEdBQVEsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFjLEVBQUUsRUFBRTtvQkFDakQsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDbEMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsV0FBVzs2QkFDdkMsTUFBTSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ2hGO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUNILDBCQUEwQjtnQkFDMUIsSUFBSSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFTLEVBQUUsR0FBUSxFQUFFLEdBQVEsRUFBRSxFQUFFO29CQUN6RCxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDO2dCQUNuQyxDQUFDLENBQUMsQ0FBQzthQUNKO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFUyxRQUFRLENBQUMsSUFBZ0I7UUFDakMsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUM1RSxJQUFJLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDdkY7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2FsU29ydGVyIH0gZnJvbSAnLi9sb2NhbC5zb3J0ZXInO1xuaW1wb3J0IHsgTG9jYWxGaWx0ZXIgfSBmcm9tICcuL2xvY2FsLmZpbHRlcic7XG5pbXBvcnQgeyBMb2NhbFBhZ2VyIH0gZnJvbSAnLi9sb2NhbC5wYWdlcic7XG5pbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSAnLi4vZGF0YS1zb3VyY2UnO1xuaW1wb3J0IHsgZGVlcEV4dGVuZCB9IGZyb20gJy4uLy4uL2hlbHBlcnMnO1xuXG5leHBvcnQgY2xhc3MgTG9jYWxEYXRhU291cmNlIGV4dGVuZHMgRGF0YVNvdXJjZSB7XG5cbiAgcHJvdGVjdGVkIGRhdGE6IEFycmF5PGFueT4gPSBbXTtcbiAgcHJvdGVjdGVkIGZpbHRlcmVkQW5kU29ydGVkOiBBcnJheTxhbnk+ID0gW107XG4gIHByb3RlY3RlZCBzb3J0Q29uZjogQXJyYXk8YW55PiA9IFtdO1xuICBwcm90ZWN0ZWQgZmlsdGVyQ29uZjogYW55ID0ge1xuICAgIGZpbHRlcnM6IFtdLFxuICAgIGFuZE9wZXJhdG9yOiB0cnVlLFxuICB9O1xuICBwcm90ZWN0ZWQgcGFnaW5nQ29uZjogYW55ID0ge307XG5cbiAgY29uc3RydWN0b3IoZGF0YTogQXJyYXk8YW55PiA9IFtdKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gIH1cblxuICBsb2FkKGRhdGE6IEFycmF5PGFueT4pOiBQcm9taXNlPGFueT4ge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG5cbiAgICByZXR1cm4gc3VwZXIubG9hZChkYXRhKTtcbiAgfVxuXG4gIHByZXBlbmQoZWxlbWVudDogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICB0aGlzLnJlc2V0KHRydWUpO1xuXG4gICAgdGhpcy5kYXRhLnVuc2hpZnQoZWxlbWVudCk7XG4gICAgcmV0dXJuIHN1cGVyLnByZXBlbmQoZWxlbWVudCk7XG4gIH1cblxuICBhcHBlbmQoZWxlbWVudDogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICB0aGlzLnJlc2V0KHRydWUpO1xuXG4gICAgdGhpcy5kYXRhLnB1c2goZWxlbWVudCk7XG4gICAgcmV0dXJuIHN1cGVyLmFwcGVuZChlbGVtZW50KTtcbiAgfVxuXG4gIGFkZChlbGVtZW50OiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIHRoaXMuZGF0YS5wdXNoKGVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIHN1cGVyLmFkZChlbGVtZW50KTtcbiAgfVxuXG4gIHJlbW92ZShlbGVtZW50OiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5maWx0ZXIoZWwgPT4gZWwgIT09IGVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIHN1cGVyLnJlbW92ZShlbGVtZW50KTtcbiAgfVxuXG4gIHVwZGF0ZShlbGVtZW50OiBhbnksIHZhbHVlczogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5maW5kKGVsZW1lbnQpLnRoZW4oKGZvdW5kKSA9PiB7XG4gICAgICAgIGZvdW5kID0gZGVlcEV4dGVuZChmb3VuZCwgdmFsdWVzKTtcbiAgICAgICAgc3VwZXIudXBkYXRlKGZvdW5kLCB2YWx1ZXMpLnRoZW4ocmVzb2x2ZSkuY2F0Y2gocmVqZWN0KTtcbiAgICAgIH0pLmNhdGNoKHJlamVjdCk7XG4gICAgfSk7XG4gIH1cblxuICBmaW5kKGVsZW1lbnQ6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgZm91bmQgPSB0aGlzLmRhdGEuZmluZChlbCA9PiBlbCA9PT0gZWxlbWVudCk7XG4gICAgaWYgKGZvdW5kKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZvdW5kKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdFbGVtZW50IHdhcyBub3QgZm91bmQgaW4gdGhlIGRhdGFzZXQnKSk7XG4gIH1cblxuICBnZXRFbGVtZW50cygpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGEuc2xpY2UoMCk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLnByZXBhcmVEYXRhKGRhdGEpKTtcbiAgfVxuXG4gIGdldEZpbHRlcmVkQW5kU29ydGVkKCk6IFByb21pc2U8YW55PiB7XG4gICAgbGV0IGRhdGEgPSB0aGlzLmRhdGEuc2xpY2UoMCk7XG4gICAgdGhpcy5wcmVwYXJlRGF0YShkYXRhKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuZmlsdGVyZWRBbmRTb3J0ZWQpO1xuICB9XG5cbiAgZ2V0QWxsKCk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YS5zbGljZSgwKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGRhdGEpO1xuICB9XG5cbiAgcmVzZXQoc2lsZW50ID0gZmFsc2UpIHtcbiAgICBpZiAoc2lsZW50KSB7XG4gICAgICB0aGlzLmZpbHRlckNvbmYgPSB7XG4gICAgICAgIGZpbHRlcnM6IFtdLFxuICAgICAgICBhbmRPcGVyYXRvcjogdHJ1ZSxcbiAgICAgIH07XG4gICAgICB0aGlzLnNvcnRDb25mID0gW107XG4gICAgICB0aGlzLnBhZ2luZ0NvbmZbJ3BhZ2UnXSA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0RmlsdGVyKFtdLCB0cnVlLCBmYWxzZSk7XG4gICAgICB0aGlzLnNldFNvcnQoW10sIGZhbHNlKTtcbiAgICAgIHRoaXMuc2V0UGFnZSgxKTtcbiAgICB9XG4gIH1cblxuICBlbXB0eSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHRoaXMuZGF0YSA9IFtdO1xuXG4gICAgcmV0dXJuIHN1cGVyLmVtcHR5KCk7XG4gIH1cblxuICBjb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkQW5kU29ydGVkLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBBcnJheSBvZiBjb25mIG9iamVjdHNcbiAgICogW1xuICAgKiAge2ZpZWxkOiBzdHJpbmcsIGRpcmVjdGlvbjogYXNjfGRlc2N8bnVsbCwgY29tcGFyZTogRnVuY3Rpb258bnVsbH0sXG4gICAqIF1cbiAgICogQHBhcmFtIGNvbmZcbiAgICogQHBhcmFtIGRvRW1pdFxuICAgKiBAcmV0dXJucyB7TG9jYWxEYXRhU291cmNlfVxuICAgKi9cbiAgc2V0U29ydChjb25mOiBBcnJheTxhbnk+LCBkb0VtaXQgPSB0cnVlKTogTG9jYWxEYXRhU291cmNlIHtcbiAgICBpZiAoY29uZiAhPT0gbnVsbCkge1xuXG4gICAgICBjb25mLmZvckVhY2goKGZpZWxkQ29uZikgPT4ge1xuICAgICAgICBpZiAoIWZpZWxkQ29uZlsnZmllbGQnXSB8fCB0eXBlb2YgZmllbGRDb25mWydkaXJlY3Rpb24nXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NvcnQgY29uZmlndXJhdGlvbiBvYmplY3QgaXMgbm90IHZhbGlkJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5zb3J0Q29uZiA9IGNvbmY7XG4gICAgfVxuXG4gICAgc3VwZXIuc2V0U29ydChjb25mLCBkb0VtaXQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEFycmF5IG9mIGNvbmYgb2JqZWN0c1xuICAgKiBbXG4gICAqICB7ZmllbGQ6IHN0cmluZywgc2VhcmNoOiBzdHJpbmcsIGZpbHRlcjogRnVuY3Rpb258bnVsbH0sXG4gICAqIF1cbiAgICogQHBhcmFtIGNvbmZcbiAgICogQHBhcmFtIGFuZE9wZXJhdG9yXG4gICAqIEBwYXJhbSBkb0VtaXRcbiAgICogQHJldHVybnMge0xvY2FsRGF0YVNvdXJjZX1cbiAgICovXG4gIHNldEZpbHRlcihjb25mOiBBcnJheTxhbnk+LCBhbmRPcGVyYXRvciA9IHRydWUsIGRvRW1pdCA9IHRydWUpOiBMb2NhbERhdGFTb3VyY2Uge1xuICAgIGlmIChjb25mICYmIGNvbmYubGVuZ3RoID4gMCkge1xuICAgICAgY29uZi5mb3JFYWNoKChmaWVsZENvbmYpID0+IHtcbiAgICAgICAgdGhpcy5hZGRGaWx0ZXIoZmllbGRDb25mLCBhbmRPcGVyYXRvciwgZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyQ29uZiA9IHtcbiAgICAgICAgZmlsdGVyczogW10sXG4gICAgICAgIGFuZE9wZXJhdG9yOiB0cnVlLFxuICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJDb25mLmFuZE9wZXJhdG9yID0gYW5kT3BlcmF0b3I7XG4gICAgdGhpcy5wYWdpbmdDb25mWydwYWdlJ10gPSAxO1xuXG4gICAgc3VwZXIuc2V0RmlsdGVyKGNvbmYsIGFuZE9wZXJhdG9yLCBkb0VtaXQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWRkRmlsdGVyKGZpZWxkQ29uZjogYW55LCBhbmRPcGVyYXRvciA9IHRydWUsIGRvRW1pdDogYm9vbGVhbiA9IHRydWUpOiBMb2NhbERhdGFTb3VyY2Uge1xuICAgIGlmICghZmllbGRDb25mWydmaWVsZCddIHx8IHR5cGVvZiBmaWVsZENvbmZbJ3NlYXJjaCddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGaWx0ZXIgY29uZmlndXJhdGlvbiBvYmplY3QgaXMgbm90IHZhbGlkJyk7XG4gICAgfVxuXG4gICAgbGV0IGZvdW5kID0gZmFsc2U7XG4gICAgdGhpcy5maWx0ZXJDb25mLmZpbHRlcnMuZm9yRWFjaCgoY3VycmVudEZpZWxkQ29uZjogYW55LCBpbmRleDogYW55KSA9PiB7XG4gICAgICBpZiAoY3VycmVudEZpZWxkQ29uZlsnZmllbGQnXSA9PT0gZmllbGRDb25mWydmaWVsZCddKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyQ29uZi5maWx0ZXJzW2luZGV4XSA9IGZpZWxkQ29uZjtcbiAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghZm91bmQpIHtcbiAgICAgIHRoaXMuZmlsdGVyQ29uZi5maWx0ZXJzLnB1c2goZmllbGRDb25mKTtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJDb25mLmFuZE9wZXJhdG9yID0gYW5kT3BlcmF0b3I7XG4gICAgc3VwZXIuYWRkRmlsdGVyKGZpZWxkQ29uZiwgYW5kT3BlcmF0b3IsIGRvRW1pdCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXRQYWdpbmcocGFnZTogbnVtYmVyLCBwZXJQYWdlOiBudW1iZXIsIGRvRW1pdDogYm9vbGVhbiA9IHRydWUpOiBMb2NhbERhdGFTb3VyY2Uge1xuICAgIHRoaXMucGFnaW5nQ29uZlsncGFnZSddID0gcGFnZTtcbiAgICB0aGlzLnBhZ2luZ0NvbmZbJ3BlclBhZ2UnXSA9IHBlclBhZ2U7XG5cbiAgICBzdXBlci5zZXRQYWdpbmcocGFnZSwgcGVyUGFnZSwgZG9FbWl0KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldFBhZ2UocGFnZTogbnVtYmVyLCBkb0VtaXQ6IGJvb2xlYW4gPSB0cnVlKTogTG9jYWxEYXRhU291cmNlIHtcbiAgICB0aGlzLnBhZ2luZ0NvbmZbJ3BhZ2UnXSA9IHBhZ2U7XG4gICAgc3VwZXIuc2V0UGFnZShwYWdlLCBkb0VtaXQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0U29ydCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnNvcnRDb25mO1xuICB9XG5cbiAgZ2V0RmlsdGVyKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyQ29uZjtcbiAgfVxuXG4gIGdldFBhZ2luZygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnBhZ2luZ0NvbmY7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJlcGFyZURhdGEoZGF0YTogQXJyYXk8YW55Pik6IEFycmF5PGFueT4ge1xuICAgIGRhdGEgPSB0aGlzLmZpbHRlcihkYXRhKTtcbiAgICBkYXRhID0gdGhpcy5zb3J0KGRhdGEpO1xuICAgIHRoaXMuZmlsdGVyZWRBbmRTb3J0ZWQgPSBkYXRhLnNsaWNlKDApO1xuXG4gICAgcmV0dXJuIHRoaXMucGFnaW5hdGUoZGF0YSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc29ydChkYXRhOiBBcnJheTxhbnk+KTogQXJyYXk8YW55PiB7XG4gICAgaWYgKHRoaXMuc29ydENvbmYpIHtcbiAgICAgIHRoaXMuc29ydENvbmYuZm9yRWFjaCgoZmllbGRDb25mKSA9PiB7XG4gICAgICAgIGRhdGEgPSBMb2NhbFNvcnRlclxuICAgICAgICAgIC5zb3J0KGRhdGEsIGZpZWxkQ29uZlsnZmllbGQnXSwgZmllbGRDb25mWydkaXJlY3Rpb24nXSwgZmllbGRDb25mWydjb21wYXJlJ10pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgLy8gVE9ETzogcmVmYWN0b3I/XG4gIHByb3RlY3RlZCBmaWx0ZXIoZGF0YTogQXJyYXk8YW55Pik6IEFycmF5PGFueT4ge1xuICAgIGlmICh0aGlzLmZpbHRlckNvbmYuZmlsdGVycykge1xuICAgICAgaWYgKHRoaXMuZmlsdGVyQ29uZi5hbmRPcGVyYXRvcikge1xuICAgICAgICB0aGlzLmZpbHRlckNvbmYuZmlsdGVycy5mb3JFYWNoKChmaWVsZENvbmY6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChmaWVsZENvbmZbJ3NlYXJjaCddLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGRhdGEgPSBMb2NhbEZpbHRlclxuICAgICAgICAgICAgICAuZmlsdGVyKGRhdGEsIGZpZWxkQ29uZlsnZmllbGQnXSwgZmllbGRDb25mWydzZWFyY2gnXSwgZmllbGRDb25mWydmaWx0ZXInXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBtZXJnZWREYXRhOiBhbnkgPSBbXTtcbiAgICAgICAgdGhpcy5maWx0ZXJDb25mLmZpbHRlcnMuZm9yRWFjaCgoZmllbGRDb25mOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoZmllbGRDb25mWydzZWFyY2gnXS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBtZXJnZWREYXRhID0gbWVyZ2VkRGF0YS5jb25jYXQoTG9jYWxGaWx0ZXJcbiAgICAgICAgICAgICAgLmZpbHRlcihkYXRhLCBmaWVsZENvbmZbJ2ZpZWxkJ10sIGZpZWxkQ29uZlsnc2VhcmNoJ10sIGZpZWxkQ29uZlsnZmlsdGVyJ10pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyByZW1vdmUgbm9uIHVuaXF1ZSBpdGVtc1xuICAgICAgICBkYXRhID0gbWVyZ2VkRGF0YS5maWx0ZXIoKGVsZW06IGFueSwgcG9zOiBhbnksIGFycjogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGFyci5pbmRleE9mKGVsZW0pID09PSBwb3M7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYWdpbmF0ZShkYXRhOiBBcnJheTxhbnk+KTogQXJyYXk8YW55PiB7XG4gICAgaWYgKHRoaXMucGFnaW5nQ29uZiAmJiB0aGlzLnBhZ2luZ0NvbmZbJ3BhZ2UnXSAmJiB0aGlzLnBhZ2luZ0NvbmZbJ3BlclBhZ2UnXSkge1xuICAgICAgZGF0YSA9IExvY2FsUGFnZXIucGFnaW5hdGUoZGF0YSwgdGhpcy5wYWdpbmdDb25mWydwYWdlJ10sIHRoaXMucGFnaW5nQ29uZlsncGVyUGFnZSddKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,13 @@
1
+ export function filterValues(value, search) {
2
+ return value.toString().toLowerCase().includes(search.toString().toLowerCase());
3
+ }
4
+ export class LocalFilter {
5
+ static filter(data, field, search, customFilter) {
6
+ const filter = customFilter ? customFilter : filterValues;
7
+ return data.filter((el) => {
8
+ const value = typeof el[field] === 'undefined' || el[field] === null ? '' : el[field];
9
+ return filter.call(null, value, search);
10
+ });
11
+ }
12
+ }
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwuZmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmcyLXNtYXJ0LXRhYmxlL3NyYy9saWIvbGliL2RhdGEtc291cmNlL2xvY2FsL2xvY2FsLmZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsWUFBWSxDQUFDLEtBQWEsRUFBRSxNQUFjO0lBQ3hELE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUNsRixDQUFDO0FBRUQsTUFBTSxPQUFPLFdBQVc7SUFFdEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFnQixFQUFFLEtBQWEsRUFBRSxNQUFjLEVBQUUsWUFBdUI7UUFDcEYsTUFBTSxNQUFNLEdBQWEsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUVwRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUN4QixNQUFNLEtBQUssR0FBRyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxXQUFXLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEYsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZmlsdGVyVmFsdWVzKHZhbHVlOiBzdHJpbmcsIHNlYXJjaDogc3RyaW5nKSB7XG4gIHJldHVybiB2YWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSk7XG59XG5cbmV4cG9ydCBjbGFzcyBMb2NhbEZpbHRlciB7XG5cbiAgc3RhdGljIGZpbHRlcihkYXRhOiBBcnJheTxhbnk+LCBmaWVsZDogc3RyaW5nLCBzZWFyY2g6IHN0cmluZywgY3VzdG9tRmlsdGVyPzogRnVuY3Rpb24pOiBBcnJheTxhbnk+IHtcbiAgICBjb25zdCBmaWx0ZXI6IEZ1bmN0aW9uID0gY3VzdG9tRmlsdGVyID8gY3VzdG9tRmlsdGVyIDogZmlsdGVyVmFsdWVzO1xuXG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKChlbCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgZWxbZmllbGRdID09PSAndW5kZWZpbmVkJyB8fCBlbFtmaWVsZF0gPT09IG51bGwgPyAnJyA6IGVsW2ZpZWxkXTtcbiAgICAgIHJldHVybiBmaWx0ZXIuY2FsbChudWxsLCB2YWx1ZSwgc2VhcmNoKTtcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,6 @@
1
+ export class LocalPager {
2
+ static paginate(data, page, perPage) {
3
+ return data.slice(perPage * (page - 1), perPage * page);
4
+ }
5
+ }
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwucGFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZzItc21hcnQtdGFibGUvc3JjL2xpYi9saWIvZGF0YS1zb3VyY2UvbG9jYWwvbG9jYWwucGFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLFVBQVU7SUFFckIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFnQixFQUFFLElBQVksRUFBRSxPQUFlO1FBQzdELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQzFELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBMb2NhbFBhZ2VyIHtcblxuICBzdGF0aWMgcGFnaW5hdGUoZGF0YTogQXJyYXk8YW55PiwgcGFnZTogbnVtYmVyLCBwZXJQYWdlOiBudW1iZXIpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gZGF0YS5zbGljZShwZXJQYWdlICogKHBhZ2UgLSAxKSwgcGVyUGFnZSAqIHBhZ2UpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,19 @@
1
+ export function compareValues(direction, a, b) {
2
+ if (a < b) {
3
+ return -1 * direction;
4
+ }
5
+ if (a > b) {
6
+ return direction;
7
+ }
8
+ return 0;
9
+ }
10
+ export class LocalSorter {
11
+ static sort(data, field, direction, customCompare) {
12
+ const dir = (direction === 'asc') ? 1 : -1;
13
+ const compare = customCompare ? customCompare : compareValues;
14
+ return data.sort((a, b) => {
15
+ return compare.call(null, dir, a[field], b[field]);
16
+ });
17
+ }
18
+ }
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwuc29ydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmcyLXNtYXJ0LXRhYmxlL3NyYy9saWIvbGliL2RhdGEtc291cmNlL2xvY2FsL2xvY2FsLnNvcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsYUFBYSxDQUFDLFNBQWMsRUFBRSxDQUFNLEVBQUUsQ0FBTTtJQUMxRCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDVCxPQUFPLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztLQUN2QjtJQUNELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNULE9BQU8sU0FBUyxDQUFDO0tBQ2xCO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBRUQsTUFBTSxPQUFPLFdBQVc7SUFFdEIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFnQixFQUFFLEtBQWEsRUFBRSxTQUFpQixFQUFFLGFBQXdCO1FBRXRGLE1BQU0sR0FBRyxHQUFXLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sT0FBTyxHQUFhLGFBQWEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7UUFFeEUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hCLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBjb21wYXJlVmFsdWVzKGRpcmVjdGlvbjogYW55LCBhOiBhbnksIGI6IGFueSkge1xuICBpZiAoYSA8IGIpIHtcbiAgICByZXR1cm4gLTEgKiBkaXJlY3Rpb247XG4gIH1cbiAgaWYgKGEgPiBiKSB7XG4gICAgcmV0dXJuIGRpcmVjdGlvbjtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuZXhwb3J0IGNsYXNzIExvY2FsU29ydGVyIHtcblxuICBzdGF0aWMgc29ydChkYXRhOiBBcnJheTxhbnk+LCBmaWVsZDogc3RyaW5nLCBkaXJlY3Rpb246IHN0cmluZywgY3VzdG9tQ29tcGFyZT86IEZ1bmN0aW9uKTogQXJyYXk8YW55PiB7XG5cbiAgICBjb25zdCBkaXI6IG51bWJlciA9IChkaXJlY3Rpb24gPT09ICdhc2MnKSA/IDEgOiAtMTtcbiAgICBjb25zdCBjb21wYXJlOiBGdW5jdGlvbiA9IGN1c3RvbUNvbXBhcmUgPyBjdXN0b21Db21wYXJlIDogY29tcGFyZVZhbHVlcztcblxuICAgIHJldHVybiBkYXRhLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIHJldHVybiBjb21wYXJlLmNhbGwobnVsbCwgZGlyLCBhW2ZpZWxkXSwgYltmaWVsZF0pO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,20 @@
1
+ export class ServerSourceConf {
2
+ constructor({ endPoint = '', sortFieldKey = '', sortDirKey = '', pagerPageKey = '', pagerLimitKey = '', filterFieldKey = '', totalKey = '', dataKey = '' } = {}) {
3
+ this.endPoint = endPoint ? endPoint : '';
4
+ this.sortFieldKey = sortFieldKey ? sortFieldKey : ServerSourceConf.SORT_FIELD_KEY;
5
+ this.sortDirKey = sortDirKey ? sortDirKey : ServerSourceConf.SORT_DIR_KEY;
6
+ this.pagerPageKey = pagerPageKey ? pagerPageKey : ServerSourceConf.PAGER_PAGE_KEY;
7
+ this.pagerLimitKey = pagerLimitKey ? pagerLimitKey : ServerSourceConf.PAGER_LIMIT_KEY;
8
+ this.filterFieldKey = filterFieldKey ? filterFieldKey : ServerSourceConf.FILTER_FIELD_KEY;
9
+ this.totalKey = totalKey ? totalKey : ServerSourceConf.TOTAL_KEY;
10
+ this.dataKey = dataKey ? dataKey : ServerSourceConf.DATA_KEY;
11
+ }
12
+ }
13
+ ServerSourceConf.SORT_FIELD_KEY = '_sort';
14
+ ServerSourceConf.SORT_DIR_KEY = '_order';
15
+ ServerSourceConf.PAGER_PAGE_KEY = '_page';
16
+ ServerSourceConf.PAGER_LIMIT_KEY = '_limit';
17
+ ServerSourceConf.FILTER_FIELD_KEY = '#field#_like';
18
+ ServerSourceConf.TOTAL_KEY = 'x-total-count';
19
+ ServerSourceConf.DATA_KEY = '';
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLXNvdXJjZS5jb25mLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmcyLXNtYXJ0LXRhYmxlL3NyYy9saWIvbGliL2RhdGEtc291cmNlL3NlcnZlci9zZXJ2ZXItc291cmNlLmNvbmYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLGdCQUFnQjtJQW9CM0IsWUFDRSxFQUFFLFFBQVEsR0FBRyxFQUFFLEVBQUUsWUFBWSxHQUFHLEVBQUUsRUFBRSxVQUFVLEdBQUcsRUFBRSxFQUNqRCxZQUFZLEdBQUcsRUFBRSxFQUFFLGFBQWEsR0FBRyxFQUFFLEVBQUUsY0FBYyxHQUFHLEVBQUUsRUFBRSxRQUFRLEdBQUcsRUFBRSxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFO1FBRWhHLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUV6QyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUM7UUFDbEYsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDO1FBQzFFLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQztRQUNsRixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUM7UUFDdEYsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUM7UUFDMUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztJQUMvRCxDQUFDOztBQS9CeUIsK0JBQWMsR0FBRyxPQUFPLENBQUM7QUFDekIsNkJBQVksR0FBRyxRQUFRLENBQUM7QUFDeEIsK0JBQWMsR0FBRyxPQUFPLENBQUM7QUFDekIsZ0NBQWUsR0FBRyxRQUFRLENBQUM7QUFDM0IsaUNBQWdCLEdBQUcsY0FBYyxDQUFDO0FBQ2xDLDBCQUFTLEdBQUcsZUFBZSxDQUFDO0FBQzVCLHlCQUFRLEdBQUcsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFNlcnZlclNvdXJjZUNvbmYge1xuXG4gIHByb3RlY3RlZCBzdGF0aWMgcmVhZG9ubHkgU09SVF9GSUVMRF9LRVkgPSAnX3NvcnQnO1xuICBwcm90ZWN0ZWQgc3RhdGljIHJlYWRvbmx5IFNPUlRfRElSX0tFWSA9ICdfb3JkZXInO1xuICBwcm90ZWN0ZWQgc3RhdGljIHJlYWRvbmx5IFBBR0VSX1BBR0VfS0VZID0gJ19wYWdlJztcbiAgcHJvdGVjdGVkIHN0YXRpYyByZWFkb25seSBQQUdFUl9MSU1JVF9LRVkgPSAnX2xpbWl0JztcbiAgcHJvdGVjdGVkIHN0YXRpYyByZWFkb25seSBGSUxURVJfRklFTERfS0VZID0gJyNmaWVsZCNfbGlrZSc7XG4gIHByb3RlY3RlZCBzdGF0aWMgcmVhZG9ubHkgVE9UQUxfS0VZID0gJ3gtdG90YWwtY291bnQnO1xuICBwcm90ZWN0ZWQgc3RhdGljIHJlYWRvbmx5IERBVEFfS0VZID0gJyc7XG5cbiAgZW5kUG9pbnQ6IHN0cmluZztcblxuICBzb3J0RmllbGRLZXk6IHN0cmluZztcbiAgc29ydERpcktleTogc3RyaW5nO1xuICBwYWdlclBhZ2VLZXk6IHN0cmluZztcbiAgcGFnZXJMaW1pdEtleTogc3RyaW5nO1xuICBmaWx0ZXJGaWVsZEtleTogc3RyaW5nO1xuICB0b3RhbEtleTogc3RyaW5nO1xuICBkYXRhS2V5OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgeyBlbmRQb2ludCA9ICcnLCBzb3J0RmllbGRLZXkgPSAnJywgc29ydERpcktleSA9ICcnLFxuICAgICAgcGFnZXJQYWdlS2V5ID0gJycsIHBhZ2VyTGltaXRLZXkgPSAnJywgZmlsdGVyRmllbGRLZXkgPSAnJywgdG90YWxLZXkgPSAnJywgZGF0YUtleSA9ICcnIH0gPSB7fSkge1xuXG4gICAgdGhpcy5lbmRQb2ludCA9IGVuZFBvaW50ID8gZW5kUG9pbnQgOiAnJztcblxuICAgIHRoaXMuc29ydEZpZWxkS2V5ID0gc29ydEZpZWxkS2V5ID8gc29ydEZpZWxkS2V5IDogU2VydmVyU291cmNlQ29uZi5TT1JUX0ZJRUxEX0tFWTtcbiAgICB0aGlzLnNvcnREaXJLZXkgPSBzb3J0RGlyS2V5ID8gc29ydERpcktleSA6IFNlcnZlclNvdXJjZUNvbmYuU09SVF9ESVJfS0VZO1xuICAgIHRoaXMucGFnZXJQYWdlS2V5ID0gcGFnZXJQYWdlS2V5ID8gcGFnZXJQYWdlS2V5IDogU2VydmVyU291cmNlQ29uZi5QQUdFUl9QQUdFX0tFWTtcbiAgICB0aGlzLnBhZ2VyTGltaXRLZXkgPSBwYWdlckxpbWl0S2V5ID8gcGFnZXJMaW1pdEtleSA6IFNlcnZlclNvdXJjZUNvbmYuUEFHRVJfTElNSVRfS0VZO1xuICAgIHRoaXMuZmlsdGVyRmllbGRLZXkgPSBmaWx0ZXJGaWVsZEtleSA/IGZpbHRlckZpZWxkS2V5IDogU2VydmVyU291cmNlQ29uZi5GSUxURVJfRklFTERfS0VZO1xuICAgIHRoaXMudG90YWxLZXkgPSB0b3RhbEtleSA/IHRvdGFsS2V5IDogU2VydmVyU291cmNlQ29uZi5UT1RBTF9LRVk7XG4gICAgdGhpcy5kYXRhS2V5ID0gZGF0YUtleSA/IGRhdGFLZXkgOiBTZXJ2ZXJTb3VyY2VDb25mLkRBVEFfS0VZO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,93 @@
1
+ import { HttpParams } from '@angular/common/http';
2
+ import { LocalDataSource } from '../local/local.data-source';
3
+ import { ServerSourceConf } from './server-source.conf';
4
+ import { getDeepFromObject } from '../../helpers';
5
+ import { map } from 'rxjs/operators';
6
+ export class ServerDataSource extends LocalDataSource {
7
+ constructor(http, conf = {}) {
8
+ super();
9
+ this.http = http;
10
+ this.lastRequestCount = 0;
11
+ this.conf = new ServerSourceConf(conf);
12
+ if (!this.conf.endPoint) {
13
+ throw new Error('At least endPoint must be specified as a configuration of the server data source.');
14
+ }
15
+ }
16
+ count() {
17
+ return this.lastRequestCount;
18
+ }
19
+ getElements() {
20
+ return this.requestElements()
21
+ .pipe(map(res => {
22
+ this.lastRequestCount = this.extractTotalFromResponse(res);
23
+ this.data = this.extractDataFromResponse(res);
24
+ return this.data;
25
+ })).toPromise();
26
+ }
27
+ /**
28
+ * Extracts array of data from server response
29
+ * @param res
30
+ * @returns {any}
31
+ */
32
+ extractDataFromResponse(res) {
33
+ const rawData = res.body;
34
+ const data = !!this.conf.dataKey ? getDeepFromObject(rawData, this.conf.dataKey, []) : rawData;
35
+ if (data instanceof Array) {
36
+ return data;
37
+ }
38
+ throw new Error(`Data must be an array.
39
+ Please check that data extracted from the server response by the key '${this.conf.dataKey}' exists and is array.`);
40
+ }
41
+ /**
42
+ * Extracts total rows count from the server response
43
+ * Looks for the count in the heders first, then in the response body
44
+ * @param res
45
+ * @returns {any}
46
+ */
47
+ extractTotalFromResponse(res) {
48
+ if (res.headers.has(this.conf.totalKey)) {
49
+ return +res.headers.get(this.conf.totalKey);
50
+ }
51
+ else {
52
+ const rawData = res.body;
53
+ return getDeepFromObject(rawData, this.conf.totalKey, 0);
54
+ }
55
+ }
56
+ requestElements() {
57
+ let httpParams = this.createRequesParams();
58
+ return this.http.get(this.conf.endPoint, { params: httpParams, observe: 'response' });
59
+ }
60
+ createRequesParams() {
61
+ let httpParams = new HttpParams();
62
+ httpParams = this.addSortRequestParams(httpParams);
63
+ httpParams = this.addFilterRequestParams(httpParams);
64
+ return this.addPagerRequestParams(httpParams);
65
+ }
66
+ addSortRequestParams(httpParams) {
67
+ if (this.sortConf) {
68
+ this.sortConf.forEach((fieldConf) => {
69
+ httpParams = httpParams.set(this.conf.sortFieldKey, fieldConf.field);
70
+ httpParams = httpParams.set(this.conf.sortDirKey, fieldConf.direction.toUpperCase());
71
+ });
72
+ }
73
+ return httpParams;
74
+ }
75
+ addFilterRequestParams(httpParams) {
76
+ if (this.filterConf.filters) {
77
+ this.filterConf.filters.forEach((fieldConf) => {
78
+ if (fieldConf['search']) {
79
+ httpParams = httpParams.set(this.conf.filterFieldKey.replace('#field#', fieldConf['field']), fieldConf['search']);
80
+ }
81
+ });
82
+ }
83
+ return httpParams;
84
+ }
85
+ addPagerRequestParams(httpParams) {
86
+ if (this.pagingConf && this.pagingConf['page'] && this.pagingConf['perPage']) {
87
+ httpParams = httpParams.set(this.conf.pagerPageKey, this.pagingConf['page']);
88
+ httpParams = httpParams.set(this.conf.pagerLimitKey, this.pagingConf['perPage']);
89
+ }
90
+ return httpParams;
91
+ }
92
+ }
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmRhdGEtc291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmcyLXNtYXJ0LXRhYmxlL3NyYy9saWIvbGliL2RhdGEtc291cmNlL3NlcnZlci9zZXJ2ZXIuZGF0YS1zb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxlQUFlO0lBTW5ELFlBQXNCLElBQWdCLEVBQUUsT0FBOEIsRUFBRTtRQUN0RSxLQUFLLEVBQUUsQ0FBQztRQURZLFNBQUksR0FBSixJQUFJLENBQVk7UUFGNUIscUJBQWdCLEdBQVcsQ0FBQyxDQUFDO1FBS3JDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV2QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtRkFBbUYsQ0FBQyxDQUFDO1NBQ3RHO0lBQ0gsQ0FBQztJQUVELEtBQUs7UUFDSCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLGVBQWUsRUFBRTthQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxH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Q0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDdkIsVUFBVSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztpQkFDbkg7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVTLHFCQUFxQixDQUFDLFVBQXNCO1FBRXBELElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDNUUsVUFBVSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQzdFLFVBQVUsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztTQUNsRjtRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IExvY2FsRGF0YVNvdXJjZSB9IGZyb20gJy4uL2xvY2FsL2xvY2FsLmRhdGEtc291cmNlJztcbmltcG9ydCB7IFNlcnZlclNvdXJjZUNvbmYgfSBmcm9tICcuL3NlcnZlci1zb3VyY2UuY29uZic7XG5pbXBvcnQgeyBnZXREZWVwRnJvbU9iamVjdCB9IGZyb20gJy4uLy4uL2hlbHBlcnMnO1xuXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBjbGFzcyBTZXJ2ZXJEYXRhU291cmNlIGV4dGVuZHMgTG9jYWxEYXRhU291cmNlIHtcblxuICBwcm90ZWN0ZWQgY29uZjogU2VydmVyU291cmNlQ29uZjtcblxuICBwcm90ZWN0ZWQgbGFzdFJlcXVlc3RDb3VudDogbnVtYmVyID0gMDtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCwgY29uZjogU2VydmVyU291cmNlQ29uZiB8IHt9ID0ge30pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5jb25mID0gbmV3IFNlcnZlclNvdXJjZUNvbmYoY29uZik7XG5cbiAgICBpZiAoIXRoaXMuY29uZi5lbmRQb2ludCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdCBsZWFzdCBlbmRQb2ludCBtdXN0IGJlIHNwZWNpZmllZCBhcyBhIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHNlcnZlciBkYXRhIHNvdXJjZS4nKTtcbiAgICB9XG4gIH1cblxuICBjb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmxhc3RSZXF1ZXN0Q291bnQ7XG4gIH1cblxuICBnZXRFbGVtZW50cygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RFbGVtZW50cygpXG4gICAgICAucGlwZShtYXAocmVzID0+IHtcbiAgICAgICAgdGhpcy5sYXN0UmVxdWVzdENvdW50ID0gdGhpcy5leHRyYWN0VG90YWxGcm9tUmVzcG9uc2UocmVzKTtcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5leHRyYWN0RGF0YUZyb21SZXNwb25zZShyZXMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGE7XG4gICAgICB9KSkudG9Qcm9taXNlKCk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgYXJyYXkgb2YgZGF0YSBmcm9tIHNlcnZlciByZXNwb25zZVxuICAgKiBAcGFyYW0gcmVzXG4gICAqIEByZXR1cm5zIHthbnl9XG4gICAqL1xuICBwcm90ZWN0ZWQgZXh0cmFjdERhdGFGcm9tUmVzcG9uc2UocmVzOiBhbnkpOiBBcnJheTxhbnk+IHtcbiAgICBjb25zdCByYXdEYXRhID0gcmVzLmJvZHk7XG4gICAgY29uc3QgZGF0YSA9ICEhdGhpcy5jb25mLmRhdGFLZXkgPyBnZXREZWVwRnJvbU9iamVjdChyYXdEYXRhLCB0aGlzLmNvbmYuZGF0YUtleSwgW10pIDogcmF3RGF0YTtcblxuICAgIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgRGF0YSBtdXN0IGJlIGFuIGFycmF5LlxuICAgIFBsZWFzZSBjaGVjayB0aGF0IGRhdGEgZXh0cmFjdGVkIGZyb20gdGhlIHNlcnZlciByZXNwb25zZSBieSB0aGUga2V5ICcke3RoaXMuY29uZi5kYXRhS2V5fScgZXhpc3RzIGFuZCBpcyBhcnJheS5gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyB0b3RhbCByb3dzIGNvdW50IGZyb20gdGhlIHNlcnZlciByZXNwb25zZVxuICAgKiBMb29rcyBmb3IgdGhlIGNvdW50IGluIHRoZSBoZWRlcnMgZmlyc3QsIHRoZW4gaW4gdGhlIHJlc3BvbnNlIGJvZHlcbiAgICogQHBhcmFtIHJlc1xuICAgKiBAcmV0dXJucyB7YW55fVxuICAgKi9cbiAgcHJvdGVjdGVkIGV4dHJhY3RUb3RhbEZyb21SZXNwb25zZShyZXM6IGFueSk6IG51bWJlciB7XG4gICAgaWYgKHJlcy5oZWFkZXJzLmhhcyh0aGlzLmNvbmYudG90YWxLZXkpKSB7XG4gICAgICByZXR1cm4gK3Jlcy5oZWFkZXJzLmdldCh0aGlzLmNvbmYudG90YWxLZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByYXdEYXRhID0gcmVzLmJvZHk7XG4gICAgICByZXR1cm4gZ2V0RGVlcEZyb21PYmplY3QocmF3RGF0YSwgdGhpcy5jb25mLnRvdGFsS2V5LCAwKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVxdWVzdEVsZW1lbnRzKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IGh0dHBQYXJhbXMgPSB0aGlzLmNyZWF0ZVJlcXVlc1BhcmFtcygpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuY29uZi5lbmRQb2ludCwgeyBwYXJhbXM6IGh0dHBQYXJhbXMsIG9ic2VydmU6ICdyZXNwb25zZScgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlUmVxdWVzUGFyYW1zKCk6IEh0dHBQYXJhbXMge1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcblxuICAgIGh0dHBQYXJhbXMgPSB0aGlzLmFkZFNvcnRSZXF1ZXN0UGFyYW1zKGh0dHBQYXJhbXMpO1xuICAgIGh0dHBQYXJhbXMgPSB0aGlzLmFkZEZpbHRlclJlcXVlc3RQYXJhbXMoaHR0cFBhcmFtcyk7XG4gICAgcmV0dXJuIHRoaXMuYWRkUGFnZXJSZXF1ZXN0UGFyYW1zKGh0dHBQYXJhbXMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFkZFNvcnRSZXF1ZXN0UGFyYW1zKGh0dHBQYXJhbXM6IEh0dHBQYXJhbXMpOiBIdHRwUGFyYW1zIHtcbiAgICBpZiAodGhpcy5zb3J0Q29uZikge1xuICAgICAgdGhpcy5zb3J0Q29uZi5mb3JFYWNoKChmaWVsZENvbmYpID0+IHtcbiAgICAgICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuc2V0KHRoaXMuY29uZi5zb3J0RmllbGRLZXksIGZpZWxkQ29uZi5maWVsZCk7XG4gICAgICAgIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zLnNldCh0aGlzLmNvbmYuc29ydERpcktleSwgZmllbGRDb25mLmRpcmVjdGlvbi50b1VwcGVyQ2FzZSgpKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBodHRwUGFyYW1zO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFkZEZpbHRlclJlcXVlc3RQYXJhbXMoaHR0cFBhcmFtczogSHR0cFBhcmFtcyk6IEh0dHBQYXJhbXMge1xuXG4gICAgaWYgKHRoaXMuZmlsdGVyQ29uZi5maWx0ZXJzKSB7XG4gICAgICB0aGlzLmZpbHRlckNvbmYuZmlsdGVycy5mb3JFYWNoKChmaWVsZENvbmY6IGFueSkgPT4ge1xuICAgICAgICBpZiAoZmllbGRDb25mWydzZWFyY2gnXSkge1xuICAgICAgICAgIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zLnNldCh0aGlzLmNvbmYuZmlsdGVyRmllbGRLZXkucmVwbGFjZSgnI2ZpZWxkIycsIGZpZWxkQ29uZlsnZmllbGQnXSksIGZpZWxkQ29uZlsnc2VhcmNoJ10pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaHR0cFBhcmFtcztcbiAgfVxuXG4gIHByb3RlY3RlZCBhZGRQYWdlclJlcXVlc3RQYXJhbXMoaHR0cFBhcmFtczogSHR0cFBhcmFtcyk6IEh0dHBQYXJhbXMge1xuXG4gICAgaWYgKHRoaXMucGFnaW5nQ29uZiAmJiB0aGlzLnBhZ2luZ0NvbmZbJ3BhZ2UnXSAmJiB0aGlzLnBhZ2luZ0NvbmZbJ3BlclBhZ2UnXSkge1xuICAgICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuc2V0KHRoaXMuY29uZi5wYWdlclBhZ2VLZXksIHRoaXMucGFnaW5nQ29uZlsncGFnZSddKTtcbiAgICAgIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zLnNldCh0aGlzLmNvbmYucGFnZXJMaW1pdEtleSwgdGhpcy5wYWdpbmdDb25mWydwZXJQYWdlJ10pO1xuICAgIH1cblxuICAgIHJldHVybiBodHRwUGFyYW1zO1xuICB9XG59XG4iXX0=