@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.
- package/esm2020/den4ik92-ng2-smart-table.mjs +5 -0
- package/esm2020/lib/components/cell/cell-edit-mode/custom-edit.component.mjs +50 -0
- package/esm2020/lib/components/cell/cell-edit-mode/default-edit.component.mjs +84 -0
- package/esm2020/lib/components/cell/cell-edit-mode/edit-cell-default.mjs +35 -0
- package/esm2020/lib/components/cell/cell-edit-mode/edit-cell.component.mjs +75 -0
- package/esm2020/lib/components/cell/cell-editors/checkbox-editor.component.mjs +37 -0
- package/esm2020/lib/components/cell/cell-editors/completer-editor.component.mjs +38 -0
- package/esm2020/lib/components/cell/cell-editors/default-editor.mjs +29 -0
- package/esm2020/lib/components/cell/cell-editors/input-editor.component.mjs +33 -0
- package/esm2020/lib/components/cell/cell-editors/select-editor.component.mjs +55 -0
- package/esm2020/lib/components/cell/cell-editors/textarea-editor.component.mjs +35 -0
- package/esm2020/lib/components/cell/cell-view-mode/custom-view.component.mjs +63 -0
- package/esm2020/lib/components/cell/cell-view-mode/view-cell.component.mjs +59 -0
- package/esm2020/lib/components/cell/cell-view-mode/view-cell.mjs +2 -0
- package/esm2020/lib/components/cell/cell.component.mjs +82 -0
- package/esm2020/lib/components/cell/cell.module.mjs +80 -0
- package/esm2020/lib/components/filter/custom-filter.component.mjs +53 -0
- package/esm2020/lib/components/filter/default-filter.component.mjs +100 -0
- package/esm2020/lib/components/filter/filter-default.mjs +35 -0
- package/esm2020/lib/components/filter/filter-types/checkbox-filter.component.mjs +65 -0
- package/esm2020/lib/components/filter/filter-types/completer-filter.component.mjs +52 -0
- package/esm2020/lib/components/filter/filter-types/default-filter.mjs +34 -0
- package/esm2020/lib/components/filter/filter-types/input-filter.component.mjs +51 -0
- package/esm2020/lib/components/filter/filter-types/select-filter.component.mjs +71 -0
- package/esm2020/lib/components/filter/filter.component.mjs +91 -0
- package/esm2020/lib/components/filter/filter.module.mjs +67 -0
- package/esm2020/lib/components/pager/pager.component.mjs +284 -0
- package/esm2020/lib/components/pager/pager.module.mjs +29 -0
- package/esm2020/lib/components/tbody/cells/create-cancel.component.mjs +52 -0
- package/esm2020/lib/components/tbody/cells/custom.component.mjs +56 -0
- package/esm2020/lib/components/tbody/cells/edit-delete.component.mjs +103 -0
- package/esm2020/lib/components/tbody/tbody.component.mjs +206 -0
- package/esm2020/lib/components/tbody/tbody.module.mjs +48 -0
- package/esm2020/lib/components/thead/cells/actions-title.component.mjs +36 -0
- package/esm2020/lib/components/thead/cells/actions.component.mjs +44 -0
- package/esm2020/lib/components/thead/cells/add-button.component.mjs +63 -0
- package/esm2020/lib/components/thead/cells/checkbox-select-all.component.mjs +28 -0
- package/esm2020/lib/components/thead/cells/column-title.component.mjs +37 -0
- package/esm2020/lib/components/thead/cells/title/title.component.mjs +100 -0
- package/esm2020/lib/components/thead/rows/thead-filters-row.component.mjs +105 -0
- package/esm2020/lib/components/thead/rows/thead-form-row.component.mjs +108 -0
- package/esm2020/lib/components/thead/rows/thead-titles-row.component.mjs +103 -0
- package/esm2020/lib/components/thead/thead.component.mjs +76 -0
- package/esm2020/lib/components/thead/thead.module.mjs +76 -0
- package/esm2020/lib/lib/data-set/cell.mjs +41 -0
- package/esm2020/lib/lib/data-set/column.mjs +75 -0
- package/esm2020/lib/lib/data-set/data-set.mjs +98 -0
- package/esm2020/lib/lib/data-set/row.mjs +46 -0
- package/esm2020/lib/lib/data-source/data-source.mjs +101 -0
- package/esm2020/lib/lib/data-source/local/local.data-source.mjs +228 -0
- package/esm2020/lib/lib/data-source/local/local.filter.mjs +13 -0
- package/esm2020/lib/lib/data-source/local/local.pager.mjs +6 -0
- package/esm2020/lib/lib/data-source/local/local.sorter.mjs +19 -0
- package/esm2020/lib/lib/data-source/server/server-source.conf.mjs +20 -0
- package/esm2020/lib/lib/data-source/server/server.data-source.mjs +93 -0
- package/esm2020/lib/lib/grid.mjs +220 -0
- package/esm2020/lib/lib/helpers.mjs +84 -0
- package/esm2020/lib/lib/interfaces/smart-table.models.mjs +2 -0
- package/esm2020/lib/ng2-smart-table.component.mjs +203 -0
- package/esm2020/lib/ng2-smart-table.module.mjs +52 -0
- package/esm2020/public-api.mjs +8 -0
- package/fesm2015/den4ik92-ng2-smart-table.mjs +4329 -0
- package/fesm2015/den4ik92-ng2-smart-table.mjs.map +1 -0
- package/fesm2020/den4ik92-ng2-smart-table.mjs +3949 -0
- package/fesm2020/den4ik92-ng2-smart-table.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components/cell/cell-edit-mode/custom-edit.component.d.ts +13 -0
- package/lib/components/cell/cell-edit-mode/default-edit.component.d.ts +8 -0
- package/lib/components/cell/cell-edit-mode/edit-cell-default.d.ts +13 -0
- package/lib/components/cell/cell-edit-mode/edit-cell.component.d.ts +12 -0
- package/lib/components/cell/cell-editors/checkbox-editor.component.d.ts +8 -0
- package/lib/components/cell/cell-editors/completer-editor.component.d.ts +13 -0
- package/lib/components/cell/cell-editors/default-editor.d.ts +19 -0
- package/lib/components/cell/cell-editors/input-editor.component.d.ts +7 -0
- package/lib/components/cell/cell-editors/select-editor.component.d.ts +7 -0
- package/lib/components/cell/cell-editors/textarea-editor.component.d.ts +7 -0
- package/lib/components/cell/cell-view-mode/custom-view.component.d.ts +19 -0
- package/lib/components/cell/cell-view-mode/view-cell.component.d.ts +7 -0
- package/lib/components/cell/cell-view-mode/view-cell.d.ts +4 -0
- package/lib/components/cell/cell.component.d.ts +20 -0
- package/lib/components/cell/cell.module.d.ts +21 -0
- package/lib/components/filter/custom-filter.component.d.ts +14 -0
- package/lib/components/filter/default-filter.component.d.ts +7 -0
- package/lib/components/filter/filter-default.d.ts +14 -0
- package/lib/components/filter/filter-types/checkbox-filter.component.d.ts +13 -0
- package/lib/components/filter/filter-types/completer-filter.component.d.ts +12 -0
- package/lib/components/filter/filter-types/default-filter.d.ts +24 -0
- package/lib/components/filter/filter-types/input-filter.component.d.ts +12 -0
- package/lib/components/filter/filter-types/select-filter.component.d.ts +11 -0
- package/lib/components/filter/filter.component.d.ts +11 -0
- package/lib/components/filter/filter.module.d.ts +17 -0
- package/lib/components/pager/pager.component.d.ts +35 -0
- package/lib/components/pager/pager.module.d.ts +9 -0
- package/lib/components/tbody/cells/create-cancel.component.d.ts +16 -0
- package/lib/components/tbody/cells/custom.component.d.ts +13 -0
- package/lib/components/tbody/cells/edit-delete.component.d.ts +24 -0
- package/lib/components/tbody/tbody.component.d.ts +37 -0
- package/lib/components/tbody/tbody.module.d.ts +13 -0
- package/lib/components/thead/cells/actions-title.component.d.ts +13 -0
- package/lib/components/thead/cells/actions.component.d.ts +12 -0
- package/lib/components/thead/cells/add-button.component.d.ts +18 -0
- package/lib/components/thead/cells/checkbox-select-all.component.d.ts +9 -0
- package/lib/components/thead/cells/column-title.component.d.ts +11 -0
- package/lib/components/thead/cells/title/title.component.d.ts +17 -0
- package/lib/components/thead/rows/thead-filters-row.component.d.ts +19 -0
- package/lib/components/thead/rows/thead-form-row.component.d.ts +20 -0
- package/lib/components/thead/rows/thead-titles-row.component.d.ts +18 -0
- package/lib/components/thead/thead.component.d.ts +18 -0
- package/lib/components/thead/thead.module.d.ts +20 -0
- package/lib/lib/data-set/cell.d.ts +20 -0
- package/lib/lib/data-set/column.d.ts +44 -0
- package/lib/lib/data-set/data-set.d.ts +37 -0
- package/lib/lib/data-set/row.d.ts +20 -0
- package/lib/lib/data-source/data-source.d.ts +35 -0
- package/lib/lib/data-source/local/local.data-source.d.ts +55 -0
- package/lib/lib/data-source/local/local.filter.d.ts +4 -0
- package/lib/lib/data-source/local/local.pager.d.ts +3 -0
- package/lib/lib/data-source/local/local.sorter.d.ts +4 -0
- package/lib/lib/data-source/server/server-source.conf.d.ts +27 -0
- package/lib/lib/data-source/server/server.data-source.d.ts +30 -0
- package/lib/lib/grid.d.ts +49 -0
- package/lib/lib/helpers.d.ts +18 -0
- package/lib/lib/interfaces/smart-table.models.d.ts +148 -0
- package/lib/ng2-smart-table.component.d.ts +43 -0
- package/lib/ng2-smart-table.module.d.ts +14 -0
- package/package.json +35 -0
- 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=
|