@solidev/data 0.0.1-alpha.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/README.md +7 -0
- package/esm2020/lib/auth/auth-interceptor.service.mjs +90 -0
- package/esm2020/lib/auth/auth.service.mjs +125 -0
- package/esm2020/lib/auth/jwt.mjs +21 -0
- package/esm2020/lib/data/data-backend.mjs +106 -0
- package/esm2020/lib/data/data-collection.mjs +109 -0
- package/esm2020/lib/data/data-collection.mock.mjs +39 -0
- package/esm2020/lib/data/data-model.mjs +287 -0
- package/esm2020/lib/data/data-parameters.mjs +34 -0
- package/esm2020/lib/data/data-query.mjs +147 -0
- package/esm2020/lib/data/data-query.mock.mjs +46 -0
- package/esm2020/lib/data/fields/base.mjs +142 -0
- package/esm2020/lib/data/fields/boolean.mjs +38 -0
- package/esm2020/lib/data/fields/datetime.mjs +124 -0
- package/esm2020/lib/data/fields/index.mjs +7 -0
- package/esm2020/lib/data/fields/numbers.mjs +38 -0
- package/esm2020/lib/data/fields/primaryfield.mjs +9 -0
- package/esm2020/lib/data/fields/relations.mjs +53 -0
- package/esm2020/lib/data/fields/stringfields.mjs +71 -0
- package/esm2020/lib/dispedit/choice.pipe.mjs +39 -0
- package/esm2020/lib/dispedit/dispedit/dispedit.component.mjs +475 -0
- package/esm2020/lib/dispedit/dispedit/dispedit.constants.mjs +2 -0
- package/esm2020/lib/dispedit/factor.pipe.mjs +48 -0
- package/esm2020/lib/dispedit/factorc.pipe.mjs +50 -0
- package/esm2020/lib/dispedit/fkselect/fkselect.component.mjs +142 -0
- package/esm2020/lib/dispedit/flags/flags.component.mjs +140 -0
- package/esm2020/lib/dispedit/m2mselect/m2mselect.component.mjs +318 -0
- package/esm2020/lib/dispedit/richedit/richedit.component.mjs +94 -0
- package/esm2020/lib/dispedit/sdelete/sdelete.component.mjs +46 -0
- package/esm2020/lib/messages/message-zone/message-zone.component.mjs +57 -0
- package/esm2020/lib/messages/message.service.mjs +151 -0
- package/esm2020/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.mjs +34 -0
- package/esm2020/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.mjs +63 -0
- package/esm2020/lib/modellist/model-list-fields/model-list-fields.mjs +225 -0
- package/esm2020/lib/modellist/model-list-filters/filters/filtertypes.mjs +3 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.mjs +108 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.mjs +28 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.mjs +24 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.mjs +9 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.component.mjs +40 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.mjs +14 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.mjs +40 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.mjs +14 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.mjs +21 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetimerange-filter.mjs +14 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.mjs +21 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.mjs +14 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/adapters/ban.mjs +24 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.mjs +63 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.mjs +16 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.mjs +46 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.mjs +49 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.mjs +57 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.mjs +35 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.mjs +49 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.mjs +15 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.mjs +40 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.mjs +14 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.mjs +21 -0
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.mjs +14 -0
- package/esm2020/lib/modellist/model-list-filters/model-list-filter.mjs +145 -0
- package/esm2020/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.mjs +50 -0
- package/esm2020/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.mjs +30 -0
- package/esm2020/lib/modellist/model-list-filters/model-list-filters.mjs +80 -0
- package/esm2020/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.mjs +70 -0
- package/esm2020/lib/modellist/model-list-paginator/model-list-paginator.mjs +47 -0
- package/esm2020/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.mjs +49 -0
- package/esm2020/lib/modellist/model-list-sorter/model-list-sorter.mjs +116 -0
- package/esm2020/lib/modellist/model-list.service.mjs +135 -0
- package/esm2020/lib/routing/breadcrumb/breadcrumb.component.mjs +142 -0
- package/esm2020/lib/routing/routing.mjs +57 -0
- package/esm2020/lib/uploader/index.mjs +6 -0
- package/esm2020/lib/uploader/interfaces.mjs +8 -0
- package/esm2020/lib/uploader/ng-file-drop.directive.mjs +81 -0
- package/esm2020/lib/uploader/ng-file-select.directive.mjs +51 -0
- package/esm2020/lib/uploader/ngx-uploader.class.mjs +308 -0
- package/esm2020/lib/uploader/ngx-uploader.module.mjs +17 -0
- package/esm2020/lib/utils/slugify.mjs +16 -0
- package/esm2020/lib/utils/tab-memory.service.mjs +71 -0
- package/esm2020/public-api.mjs +51 -0
- package/esm2020/solidev-data.mjs +5 -0
- package/fesm2015/solidev-data.mjs +5411 -0
- package/fesm2015/solidev-data.mjs.map +1 -0
- package/fesm2020/solidev-data.mjs +5358 -0
- package/fesm2020/solidev-data.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/auth/auth-interceptor.service.d.ts +17 -0
- package/lib/auth/auth.service.d.ts +43 -0
- package/lib/auth/jwt.d.ts +22 -0
- package/lib/data/data-backend.d.ts +47 -0
- package/lib/data/data-collection.d.ts +87 -0
- package/lib/data/data-collection.mock.d.ts +19 -0
- package/lib/data/data-model.d.ts +93 -0
- package/lib/data/data-parameters.d.ts +26 -0
- package/lib/data/data-query.d.ts +101 -0
- package/lib/data/data-query.mock.d.ts +25 -0
- package/lib/data/fields/base.d.ts +116 -0
- package/lib/data/fields/boolean.d.ts +9 -0
- package/lib/data/fields/datetime.d.ts +39 -0
- package/lib/data/fields/index.d.ts +6 -0
- package/lib/data/fields/numbers.d.ts +35 -0
- package/lib/data/fields/primaryfield.d.ts +8 -0
- package/lib/data/fields/relations.d.ts +45 -0
- package/lib/data/fields/stringfields.d.ts +50 -0
- package/lib/dispedit/choice.pipe.d.ts +8 -0
- package/lib/dispedit/dispedit/dispedit.component.d.ts +182 -0
- package/lib/dispedit/dispedit/dispedit.constants.d.ts +6 -0
- package/lib/dispedit/factor.pipe.d.ts +12 -0
- package/lib/dispedit/factorc.pipe.d.ts +11 -0
- package/lib/dispedit/fkselect/fkselect.component.d.ts +43 -0
- package/lib/dispedit/flags/flags.component.d.ts +40 -0
- package/lib/dispedit/m2mselect/m2mselect.component.d.ts +120 -0
- package/lib/dispedit/richedit/richedit.component.d.ts +31 -0
- package/lib/dispedit/sdelete/sdelete.component.d.ts +27 -0
- package/lib/messages/message-zone/message-zone.component.d.ts +14 -0
- package/lib/messages/message.service.d.ts +59 -0
- package/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.d.ts +15 -0
- package/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.d.ts +19 -0
- package/lib/modellist/model-list-fields/model-list-fields.d.ts +67 -0
- package/lib/modellist/model-list-filters/filters/filtertypes.d.ts +1 -0
- package/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.d.ts +30 -0
- package/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.d.ts +22 -0
- package/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.d.ts +10 -0
- package/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.d.ts +8 -0
- package/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.component.d.ts +15 -0
- package/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.d.ts +4 -0
- package/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.d.ts +15 -0
- package/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.d.ts +4 -0
- package/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.d.ts +11 -0
- package/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetimerange-filter.d.ts +4 -0
- package/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.d.ts +11 -0
- package/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.d.ts +4 -0
- package/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/adapters/ban.d.ts +35 -0
- package/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.d.ts +25 -0
- package/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.d.ts +18 -0
- package/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.d.ts +17 -0
- package/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.d.ts +19 -0
- package/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.d.ts +17 -0
- package/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.d.ts +16 -0
- package/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.d.ts +17 -0
- package/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.d.ts +6 -0
- package/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.d.ts +16 -0
- package/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.d.ts +4 -0
- package/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.d.ts +11 -0
- package/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.d.ts +4 -0
- package/lib/modellist/model-list-filters/model-list-filter.d.ts +52 -0
- package/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.d.ts +9 -0
- package/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.d.ts +13 -0
- package/lib/modellist/model-list-filters/model-list-filters.d.ts +15 -0
- package/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.d.ts +23 -0
- package/lib/modellist/model-list-paginator/model-list-paginator.d.ts +16 -0
- package/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.d.ts +22 -0
- package/lib/modellist/model-list-sorter/model-list-sorter.d.ts +61 -0
- package/lib/modellist/model-list.service.d.ts +83 -0
- package/lib/routing/breadcrumb/breadcrumb.component.d.ts +42 -0
- package/lib/routing/routing.d.ts +64 -0
- package/lib/uploader/index.d.ts +5 -0
- package/lib/uploader/interfaces.d.ts +67 -0
- package/lib/uploader/ng-file-drop.directive.d.ts +22 -0
- package/lib/uploader/ng-file-select.directive.d.ts +19 -0
- package/lib/uploader/ngx-uploader.class.d.ts +35 -0
- package/lib/uploader/ngx-uploader.module.d.ts +8 -0
- package/lib/utils/slugify.d.ts +1 -0
- package/lib/utils/tab-memory.service.d.ts +29 -0
- package/package.json +35 -0
- package/public-api.d.ts +47 -0
- package/src/lib/data/README.md +35 -0
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
import { PROPERTY_METADATA_KEY, } from './fields/base';
|
|
2
|
+
import { FormControl, FormGroup } from '@angular/forms';
|
|
3
|
+
import { throwError } from 'rxjs';
|
|
4
|
+
import { tap } from 'rxjs/operators';
|
|
5
|
+
/**
|
|
6
|
+
* Base class for data model.
|
|
7
|
+
*
|
|
8
|
+
* Each class must have a static __name
|
|
9
|
+
* primary field is given with id field.
|
|
10
|
+
*
|
|
11
|
+
* Some methods are provided to be used with a collection, mostly for CRUD operations.
|
|
12
|
+
*
|
|
13
|
+
*/
|
|
14
|
+
export class DataModel {
|
|
15
|
+
/**
|
|
16
|
+
* Constructor for data model instance.
|
|
17
|
+
* A matching collection can be provided.
|
|
18
|
+
* ___fields readonly property is also populated from Reflected metadata
|
|
19
|
+
*
|
|
20
|
+
* @param _coll collection used for CRUD, etc..
|
|
21
|
+
*/
|
|
22
|
+
constructor(_coll) {
|
|
23
|
+
this._coll = _coll;
|
|
24
|
+
const md = Reflect.getMetadata(PROPERTY_METADATA_KEY, this);
|
|
25
|
+
// istanbul ignore if
|
|
26
|
+
if (!md) {
|
|
27
|
+
// This should never occur as all datamodel have at least id field
|
|
28
|
+
throw new Error('No property metadata found for this object; is there a property in current collection ?');
|
|
29
|
+
}
|
|
30
|
+
// Get all fields from current class and its parents
|
|
31
|
+
const fields = new Map();
|
|
32
|
+
let parent = Object.getPrototypeOf(this);
|
|
33
|
+
while (parent.constructor.name !== 'Object') {
|
|
34
|
+
for (const f of md.keys()) {
|
|
35
|
+
const fieldName = f.split('__')[1];
|
|
36
|
+
if (fields.has(fieldName)) {
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
if (f.indexOf(parent.constructor.__name + '__') === 0) {
|
|
40
|
+
fields.set(fieldName, md.get(f));
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
parent = Object.getPrototypeOf(parent);
|
|
44
|
+
}
|
|
45
|
+
this._F = Object.freeze(fields);
|
|
46
|
+
}
|
|
47
|
+
get _collection() {
|
|
48
|
+
return this._coll;
|
|
49
|
+
}
|
|
50
|
+
set _collection(coll) {
|
|
51
|
+
this._coll = coll;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* HashMap of fields metadata (type, name, manager, etc...)
|
|
55
|
+
*/
|
|
56
|
+
get F() {
|
|
57
|
+
// istanbul ignore if
|
|
58
|
+
if (!this._F) {
|
|
59
|
+
throw new Error('Invalid data model, fields metadata is missing');
|
|
60
|
+
}
|
|
61
|
+
return this._F;
|
|
62
|
+
}
|
|
63
|
+
// Return field names iterator
|
|
64
|
+
get FN() {
|
|
65
|
+
return this.F.keys();
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Loads model data from json.
|
|
69
|
+
* If partial is true, only fields with matching data keys will be loaded
|
|
70
|
+
* @param data
|
|
71
|
+
* @param options
|
|
72
|
+
*/
|
|
73
|
+
fromJson(data, { partial, check } = {
|
|
74
|
+
partial: false,
|
|
75
|
+
check: false,
|
|
76
|
+
}) {
|
|
77
|
+
const errors = {};
|
|
78
|
+
let haveError = false;
|
|
79
|
+
for (const f of this.FN) {
|
|
80
|
+
if (!partial || (partial && Object.keys(data).indexOf(f) !== -1)) {
|
|
81
|
+
const ferr = this.setFV(f, this.FM(f).fromJson(data[f]), check);
|
|
82
|
+
if (ferr !== null) {
|
|
83
|
+
errors[f] = ferr;
|
|
84
|
+
haveError = true;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return haveError ? errors : null;
|
|
89
|
+
}
|
|
90
|
+
toJson(fields) {
|
|
91
|
+
if (fields && !Array.isArray(fields)) {
|
|
92
|
+
fields = [fields];
|
|
93
|
+
}
|
|
94
|
+
const out = {};
|
|
95
|
+
const fl = this.F;
|
|
96
|
+
for (const f of this.FN) {
|
|
97
|
+
const mgr = this.FM(f);
|
|
98
|
+
if (!fields || fields.length === 0) {
|
|
99
|
+
if (mgr.readonly) {
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
out[f] = fl.get(f).manager.toJson(this.FV(f));
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
if (fields.indexOf(f) !== -1) {
|
|
106
|
+
out[f] = fl.get(f).manager.toJson(this.FV(f));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return out;
|
|
111
|
+
}
|
|
112
|
+
action(method, name, { body = undefined, update = false, updatePartial = true, updateCheck = false,
|
|
113
|
+
// updateRaise = false,
|
|
114
|
+
params = {}, headers = {}, } = {}) {
|
|
115
|
+
if (this._coll === undefined) {
|
|
116
|
+
return throwError(() => new Error('Missing collection'));
|
|
117
|
+
}
|
|
118
|
+
return this._coll
|
|
119
|
+
.action(this, method, name, {
|
|
120
|
+
body,
|
|
121
|
+
params,
|
|
122
|
+
headers,
|
|
123
|
+
})
|
|
124
|
+
.pipe(tap((result) => {
|
|
125
|
+
if (update) {
|
|
126
|
+
this.fromJson(result, {
|
|
127
|
+
partial: updatePartial,
|
|
128
|
+
check: updateCheck,
|
|
129
|
+
});
|
|
130
|
+
return this;
|
|
131
|
+
}
|
|
132
|
+
return result;
|
|
133
|
+
}));
|
|
134
|
+
}
|
|
135
|
+
// Called on model, returns the manager for a field.
|
|
136
|
+
FM(field) {
|
|
137
|
+
if (this.F.has(field)) {
|
|
138
|
+
return this.F.get(field).manager;
|
|
139
|
+
}
|
|
140
|
+
throw new Error(`${field} not found in ${Object.keys(this.F).join(',')} model ${this}`);
|
|
141
|
+
}
|
|
142
|
+
// Return field value, without typing
|
|
143
|
+
FV(field) {
|
|
144
|
+
return this[field];
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Set field value. If check is true, only set value if all validators pass.
|
|
148
|
+
*
|
|
149
|
+
* The validation result is returned.
|
|
150
|
+
*
|
|
151
|
+
* @param field field name
|
|
152
|
+
* @param value field valued
|
|
153
|
+
* @param check default false
|
|
154
|
+
* @return null or ValidationError
|
|
155
|
+
*/
|
|
156
|
+
setFV(field, value, check = false) {
|
|
157
|
+
if (check) {
|
|
158
|
+
const fc = new FormControl(value);
|
|
159
|
+
for (const v of this.FM(field).validators) {
|
|
160
|
+
const val = v(fc);
|
|
161
|
+
if (val !== null) {
|
|
162
|
+
console.error(val);
|
|
163
|
+
return val;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
this[field] = value;
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
FC(field) {
|
|
171
|
+
if (field === undefined) {
|
|
172
|
+
field = Array.from(this.FN).filter((n) => !this.FM(n).readonly);
|
|
173
|
+
}
|
|
174
|
+
if (Array.isArray(field)) {
|
|
175
|
+
const fg = {};
|
|
176
|
+
for (const f of field) {
|
|
177
|
+
fg[f] = this.FC(f);
|
|
178
|
+
}
|
|
179
|
+
return new FormGroup(fg);
|
|
180
|
+
}
|
|
181
|
+
return this.FM(field).formControl(this);
|
|
182
|
+
}
|
|
183
|
+
save({ updateModel = true } = {
|
|
184
|
+
updateModel: true,
|
|
185
|
+
}) {
|
|
186
|
+
if (this._coll) {
|
|
187
|
+
return this._coll.save(this, { updateModel });
|
|
188
|
+
}
|
|
189
|
+
return throwError(() => new Error('Missing collection'));
|
|
190
|
+
}
|
|
191
|
+
update(fields = [], { updateModel = true } = {
|
|
192
|
+
updateModel: true,
|
|
193
|
+
}) {
|
|
194
|
+
if (this._coll) {
|
|
195
|
+
return this._coll.update(this, fields, { updateModel });
|
|
196
|
+
}
|
|
197
|
+
return throwError(() => new Error('Missing collection'));
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* data model name
|
|
202
|
+
* this need to be given because class name is not fully available because of minification.
|
|
203
|
+
*/
|
|
204
|
+
DataModel.__name = '';
|
|
205
|
+
//
|
|
206
|
+
// export class TreeDataModel extends DataModel {
|
|
207
|
+
// static override __name = 'TreeDataModel';
|
|
208
|
+
// @detailsField({
|
|
209
|
+
// model: this,
|
|
210
|
+
// many: true,
|
|
211
|
+
// description: 'Parents',
|
|
212
|
+
// })
|
|
213
|
+
// public parents_details?: this[];
|
|
214
|
+
//
|
|
215
|
+
// @foreignKeyField({
|
|
216
|
+
// required: false,
|
|
217
|
+
// description: 'Structure parente',
|
|
218
|
+
// related: 'Structure',
|
|
219
|
+
// })
|
|
220
|
+
// public parent?: number;
|
|
221
|
+
//
|
|
222
|
+
// @integerField({
|
|
223
|
+
// required: false,
|
|
224
|
+
// readonly: true,
|
|
225
|
+
// description: 'ID Tree',
|
|
226
|
+
// })
|
|
227
|
+
// public tree_id!: number;
|
|
228
|
+
//
|
|
229
|
+
// @integerField({
|
|
230
|
+
// required: false,
|
|
231
|
+
// readonly: true,
|
|
232
|
+
// description: 'MPTT left',
|
|
233
|
+
// })
|
|
234
|
+
// public lft!: number;
|
|
235
|
+
//
|
|
236
|
+
// @integerField({
|
|
237
|
+
// required: false,
|
|
238
|
+
// readonly: true,
|
|
239
|
+
// description: 'MPTT right',
|
|
240
|
+
// })
|
|
241
|
+
// public rght!: number;
|
|
242
|
+
//
|
|
243
|
+
// @integerField({
|
|
244
|
+
// required: false,
|
|
245
|
+
// readonly: true,
|
|
246
|
+
// description: 'Niveau hiérarchique',
|
|
247
|
+
// })
|
|
248
|
+
// public level!: number;
|
|
249
|
+
//
|
|
250
|
+
// public get parent_details(): this | null {
|
|
251
|
+
// if (this.parents_details) {
|
|
252
|
+
// const out = this.parents_details[this.parents_details.length - 1];
|
|
253
|
+
// out.parents_details = this.parents_details.slice(
|
|
254
|
+
// 0,
|
|
255
|
+
// this.parents_details.length - 1
|
|
256
|
+
// );
|
|
257
|
+
// return out;
|
|
258
|
+
// }
|
|
259
|
+
// return null;
|
|
260
|
+
// }
|
|
261
|
+
//
|
|
262
|
+
// public set parent_details(d: this | null) {
|
|
263
|
+
// console.log(d);
|
|
264
|
+
// this.parents_details = d?.parents_details;
|
|
265
|
+
// }
|
|
266
|
+
//
|
|
267
|
+
// public _display(): string {
|
|
268
|
+
// const out: string[] = [];
|
|
269
|
+
// if (this.parents_details) {
|
|
270
|
+
// for (const p of this.parents_details) {
|
|
271
|
+
// if ((p as any).code) {
|
|
272
|
+
// out.push(`[${(p as any).code}] ${(p as any).name}`);
|
|
273
|
+
// } else {
|
|
274
|
+
// out.push((p as any).name);
|
|
275
|
+
// }
|
|
276
|
+
// }
|
|
277
|
+
// }
|
|
278
|
+
// if ((this as any).code) {
|
|
279
|
+
// out.push(`[${(this as any).code}] ${(this as any).name}`);
|
|
280
|
+
// } else {
|
|
281
|
+
// out.push((this as any).name);
|
|
282
|
+
// }
|
|
283
|
+
//
|
|
284
|
+
// return out.join(' : ');
|
|
285
|
+
// }
|
|
286
|
+
// }
|
|
287
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEvc3JjL2xpYi9kYXRhL2RhdGEtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLHFCQUFxQixHQUN0QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBb0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRSxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlyQzs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sT0FBTyxTQUFTO0lBaUJwQjs7Ozs7O09BTUc7SUFDSCxZQUFzQixLQUF1QjtRQUF2QixVQUFLLEdBQUwsS0FBSyxDQUFrQjtRQUMzQyxNQUFNLEVBQUUsR0FDTixPQUFPLENBQUMsV0FBVyxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25ELHFCQUFxQjtRQUNyQixJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ1Asa0VBQWtFO1lBQ2xFLE1BQU0sSUFBSSxLQUFLLENBQ2IseUZBQXlGLENBQzFGLENBQUM7U0FDSDtRQUNELG9EQUFvRDtRQUNwRCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBcUMsQ0FBQztRQUM1RCxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQzNDLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUN6QixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuQyxJQUFJLE1BQU0sQ0FBQyxH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WCxvQkFBb0I7QUFDcEIsUUFBUTtBQUNSLG1CQUFtQjtBQUNuQixNQUFNO0FBQ04sRUFBRTtBQUNGLGdEQUFnRDtBQUNoRCxzQkFBc0I7QUFDdEIsaURBQWlEO0FBQ2pELE1BQU07QUFDTixFQUFFO0FBQ0YsZ0NBQWdDO0FBQ2hDLGdDQUFnQztBQUNoQyxrQ0FBa0M7QUFDbEMsZ0RBQWdEO0FBQ2hELGlDQUFpQztBQUNqQyxpRUFBaUU7QUFDakUsbUJBQW1CO0FBQ25CLHVDQUF1QztBQUN2QyxZQUFZO0FBQ1osVUFBVTtBQUNWLFFBQVE7QUFDUixnQ0FBZ0M7QUFDaEMsbUVBQW1FO0FBQ25FLGVBQWU7QUFDZixzQ0FBc0M7QUFDdEMsUUFBUTtBQUNSLEVBQUU7QUFDRiw4QkFBOEI7QUFDOUIsTUFBTTtBQUNOLElBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCYXNlRmllbGRNYW5hZ2VyLFxuICBJRmllbGRTdG9yZWRNZXRhZGF0YSxcbiAgUFJPUEVSVFlfTUVUQURBVEFfS0VZLFxufSBmcm9tICcuL2ZpZWxkcy9iYXNlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uIH0gZnJvbSAnLi9kYXRhLWNvbGxlY3Rpb24nO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgdHlwZSBEYXRhTW9kZWxGaWVsZHMgPSBSZWFkb25seTxNYXA8c3RyaW5nLCBJRmllbGRTdG9yZWRNZXRhZGF0YTxhbnk+Pj47XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgZGF0YSBtb2RlbC5cbiAqXG4gKiBFYWNoIGNsYXNzIG11c3QgaGF2ZSBhIHN0YXRpYyBfX25hbWVcbiAqIHByaW1hcnkgZmllbGQgaXMgZ2l2ZW4gd2l0aCBpZCBmaWVsZC5cbiAqXG4gKiBTb21lIG1ldGhvZHMgYXJlIHByb3ZpZGVkIHRvIGJlIHVzZWQgd2l0aCBhIGNvbGxlY3Rpb24sIG1vc3RseSBmb3IgQ1JVRCBvcGVyYXRpb25zLlxuICpcbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFNb2RlbCB7XG4gIC8qKlxuICAgKiBkYXRhIG1vZGVsIG5hbWVcbiAgICogdGhpcyBuZWVkIHRvIGJlIGdpdmVuIGJlY2F1c2UgY2xhc3MgbmFtZSBpcyBub3QgZnVsbHkgYXZhaWxhYmxlIGJlY2F1c2Ugb2YgbWluaWZpY2F0aW9uLlxuICAgKi9cbiAgcHJvdGVjdGVkIHN0YXRpYyByZWFkb25seSBfX25hbWU6IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBQcmltYXJ5IGZpZWxkOyByZWFkb25seTsgbXVzdCBiZSBjcmVhdGVkIGFuZCBhdXRvIGluY3JlbWVudGVkIG9uIGRiIHNpZGUuXG4gICAqL1xuICAvLyBAcHJpbWFyeUZpZWxkKHtcbiAgLy8gICBkZXNjcmlwdGlvbjogJ0lEJyxcbiAgLy8gICBoZWxwOiAnSWRlbnRpZmlhbnQgcHJpbWFpcmUnLFxuICAvLyB9KVxuICBwdWJsaWMgaWQhOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX0Y6IERhdGFNb2RlbEZpZWxkcztcblxuICAvKipcbiAgICogQ29uc3RydWN0b3IgZm9yIGRhdGEgbW9kZWwgaW5zdGFuY2UuXG4gICAqIEEgbWF0Y2hpbmcgY29sbGVjdGlvbiBjYW4gYmUgcHJvdmlkZWQuXG4gICAqIF9fX2ZpZWxkcyByZWFkb25seSBwcm9wZXJ0eSBpcyBhbHNvIHBvcHVsYXRlZCBmcm9tIFJlZmxlY3RlZCBtZXRhZGF0YVxuICAgKlxuICAgKiBAcGFyYW0gX2NvbGwgY29sbGVjdGlvbiB1c2VkIGZvciBDUlVELCBldGMuLlxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9jb2xsPzogQ29sbGVjdGlvbjxhbnk+KSB7XG4gICAgY29uc3QgbWQ6IE1hcDxzdHJpbmcsIElGaWVsZFN0b3JlZE1ldGFkYXRhPGFueT4+IHwgdW5kZWZpbmVkID1cbiAgICAgIFJlZmxlY3QuZ2V0TWV0YWRhdGEoUFJPUEVSVFlfTUVUQURBVEFfS0VZLCB0aGlzKTtcbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgaWZcbiAgICBpZiAoIW1kKSB7XG4gICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBvY2N1ciBhcyBhbGwgZGF0YW1vZGVsIGhhdmUgYXQgbGVhc3QgaWQgZmllbGRcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ05vIHByb3BlcnR5IG1ldGFkYXRhIGZvdW5kIGZvciB0aGlzIG9iamVjdDsgaXMgdGhlcmUgYSBwcm9wZXJ0eSBpbiBjdXJyZW50IGNvbGxlY3Rpb24gPydcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIEdldCBhbGwgZmllbGRzIGZyb20gY3VycmVudCBjbGFzcyBhbmQgaXRzIHBhcmVudHNcbiAgICBjb25zdCBmaWVsZHMgPSBuZXcgTWFwPHN0cmluZywgSUZpZWxkU3RvcmVkTWV0YWRhdGE8YW55Pj4oKTtcbiAgICBsZXQgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpO1xuICAgIHdoaWxlIChwYXJlbnQuY29uc3RydWN0b3IubmFtZSAhPT0gJ09iamVjdCcpIHtcbiAgICAgIGZvciAoY29uc3QgZiBvZiBtZC5rZXlzKCkpIHtcbiAgICAgICAgY29uc3QgZmllbGROYW1lID0gZi5zcGxpdCgnX18nKVsxXTtcbiAgICAgICAgaWYgKGZpZWxkcy5oYXMoZmllbGROYW1lKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmLmluZGV4T2YocGFyZW50LmNvbnN0cnVjdG9yLl9fbmFtZSArICdfXycpID09PSAwKSB7XG4gICAgICAgICAgZmllbGRzLnNldChmaWVsZE5hbWUsIG1kLmdldChmKSEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocGFyZW50KTtcbiAgICB9XG4gICAgdGhpcy5fRiA9IE9iamVjdC5mcmVlemUoZmllbGRzKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgX2NvbGxlY3Rpb24oKTogQ29sbGVjdGlvbjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fY29sbCBhcyBDb2xsZWN0aW9uPGFueT47XG4gIH1cblxuICBwdWJsaWMgc2V0IF9jb2xsZWN0aW9uKGNvbGw6IENvbGxlY3Rpb248YW55Pikge1xuICAgIHRoaXMuX2NvbGwgPSBjb2xsO1xuICB9XG5cbiAgLyoqXG4gICAqICBIYXNoTWFwIG9mIGZpZWxkcyBtZXRhZGF0YSAodHlwZSwgbmFtZSwgbWFuYWdlciwgZXRjLi4uKVxuICAgKi9cbiAgcHVibGljIGdldCBGKCk6IERhdGFNb2RlbEZpZWxkcyB7XG4gICAgLy8gaXN0YW5idWwgaWdub3JlIGlmXG4gICAgaWYgKCF0aGlzLl9GKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZGF0YSBtb2RlbCwgZmllbGRzIG1ldGFkYXRhIGlzIG1pc3NpbmcnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX0Y7XG4gIH1cblxuICAvLyBSZXR1cm4gZmllbGQgbmFtZXMgaXRlcmF0b3JcbiAgcHVibGljIGdldCBGTigpOiBJdGVyYWJsZUl0ZXJhdG9yPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLkYua2V5cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIG1vZGVsIGRhdGEgZnJvbSBqc29uLlxuICAgKiBJZiBwYXJ0aWFsIGlzIHRydWUsIG9ubHkgZmllbGRzIHdpdGggbWF0Y2hpbmcgZGF0YSBrZXlzIHdpbGwgYmUgbG9hZGVkXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqL1xuICBwdWJsaWMgZnJvbUpzb24oXG4gICAgZGF0YTogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9LFxuICAgIHsgcGFydGlhbCwgY2hlY2sgfTogeyBwYXJ0aWFsPzogYm9vbGVhbjsgY2hlY2s/OiBib29sZWFuIH0gPSB7XG4gICAgICBwYXJ0aWFsOiBmYWxzZSxcbiAgICAgIGNoZWNrOiBmYWxzZSxcbiAgICB9XG4gICk6IG51bGwgfCBWYWxpZGF0aW9uRXJyb3JzIHtcbiAgICBjb25zdCBlcnJvcnM6IHsgW2luZGV4OiBzdHJpbmddOiBudWxsIHwgVmFsaWRhdGlvbkVycm9ycyB9ID0ge307XG4gICAgbGV0IGhhdmVFcnJvciA9IGZhbHNlO1xuICAgIGZvciAoY29uc3QgZiBvZiB0aGlzLkZOKSB7XG4gICAgICBpZiAoIXBhcnRpYWwgfHwgKHBhcnRpYWwgJiYgT2JqZWN0LmtleXMoZGF0YSkuaW5kZXhPZihmKSAhPT0gLTEpKSB7XG4gICAgICAgIGNvbnN0IGZlcnIgPSB0aGlzLnNldEZWKGYsIHRoaXMuRk0oZikuZnJvbUpzb24oZGF0YVtmXSksIGNoZWNrKTtcbiAgICAgICAgaWYgKGZlcnIgIT09IG51bGwpIHtcbiAgICAgICAgICBlcnJvcnNbZl0gPSBmZXJyO1xuICAgICAgICAgIGhhdmVFcnJvciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGhhdmVFcnJvciA/IGVycm9ycyA6IG51bGw7XG4gIH1cblxuICBwdWJsaWMgdG9Kc29uKGZpZWxkcz86IHN0cmluZyB8IHN0cmluZ1tdKTogYW55IHtcbiAgICBpZiAoZmllbGRzICYmICFBcnJheS5pc0FycmF5KGZpZWxkcykpIHtcbiAgICAgIGZpZWxkcyA9IFtmaWVsZHNdO1xuICAgIH1cbiAgICBjb25zdCBvdXQ6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIGNvbnN0IGZsID0gdGhpcy5GO1xuICAgIGZvciAoY29uc3QgZiBvZiB0aGlzLkZOKSB7XG4gICAgICBjb25zdCBtZ3IgPSB0aGlzLkZNKGYpO1xuICAgICAgaWYgKCFmaWVsZHMgfHwgZmllbGRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAobWdyLnJlYWRvbmx5KSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgb3V0W2ZdID0gZmwuZ2V0KGYpIS5tYW5hZ2VyLnRvSnNvbih0aGlzLkZWKGYpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmaWVsZHMuaW5kZXhPZihmKSAhPT0gLTEpIHtcbiAgICAgICAgICBvdXRbZl0gPSBmbC5nZXQoZikhLm1hbmFnZXIudG9Kc29uKHRoaXMuRlYoZikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBwdWJsaWMgYWN0aW9uPFQsIFJUIGV4dGVuZHMgeyBbaW5kZXg6IHN0cmluZ106IGFueSB9PihcbiAgICBtZXRob2Q6ICdQT1NUJyB8ICdQQVRDSCcgfCAnR0VUJyB8ICdERUxFVEUnIHwgJ1BVVCcsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHtcbiAgICAgIGJvZHkgPSB1bmRlZmluZWQsXG4gICAgICB1cGRhdGUgPSBmYWxzZSxcbiAgICAgIHVwZGF0ZVBhcnRpYWwgPSB0cnVlLFxuICAgICAgdXBkYXRlQ2hlY2sgPSBmYWxzZSxcbiAgICAgIC8vIHVwZGF0ZVJhaXNlID0gZmFsc2UsXG4gICAgICBwYXJhbXMgPSB7fSxcbiAgICAgIGhlYWRlcnMgPSB7fSxcbiAgICB9OiB7XG4gICAgICBib2R5PzogeyBbX2luZGV4OiBzdHJpbmddOiBhbnkgfTtcbiAgICAgIHVwZGF0ZT86IGJvb2xlYW47XG4gICAgICB1cGRhdGVQYXJ0aWFsPzogYm9vbGVhbjtcbiAgICAgIHVwZGF0ZUNoZWNrPzogYm9vbGVhbjtcbiAgICAgIC8vIHVwZGF0ZVJhaXNlPzogYm9vbGVhbjtcbiAgICAgIHBhcmFtcz86IHsgW19pbmRleDogc3RyaW5nXTogc3RyaW5nIH07XG4gICAgICBoZWFkZXJzPzogeyBbX2luZGV4OiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgICB9ID0ge31cbiAgKTogT2JzZXJ2YWJsZTxSVD4ge1xuICAgIGlmICh0aGlzLl9jb2xsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcignTWlzc2luZyBjb2xsZWN0aW9uJykpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY29sbFxuICAgICAgLmFjdGlvbjxSVD4odGhpcywgbWV0aG9kLCBuYW1lLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChyZXN1bHQpID0+IHtcbiAgICAgICAgICBpZiAodXBkYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmZyb21Kc29uKHJlc3VsdCwge1xuICAgICAgICAgICAgICBwYXJ0aWFsOiB1cGRhdGVQYXJ0aWFsLFxuICAgICAgICAgICAgICBjaGVjazogdXBkYXRlQ2hlY2ssXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8vIENhbGxlZCBvbiBtb2RlbCwgcmV0dXJucyB0aGUgbWFuYWdlciBmb3IgYSBmaWVsZC5cbiAgcHVibGljIEZNPEZUPihmaWVsZDogc3RyaW5nKTogQmFzZUZpZWxkTWFuYWdlcjxGVD4ge1xuICAgIGlmICh0aGlzLkYuaGFzKGZpZWxkKSkge1xuICAgICAgcmV0dXJuIHRoaXMuRi5nZXQoZmllbGQpIS5tYW5hZ2VyO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgJHtmaWVsZH0gbm90IGZvdW5kIGluICR7T2JqZWN0LmtleXModGhpcy5GKS5qb2luKCcsJyl9IG1vZGVsICR7dGhpc31gXG4gICAgKTtcbiAgfVxuXG4gIC8vIFJldHVybiBmaWVsZCB2YWx1ZSwgd2l0aG91dCB0eXBpbmdcbiAgcHVibGljIEZWPEZUPihmaWVsZDogc3RyaW5nKTogRlQge1xuICAgIHJldHVybiAodGhpcyBhcyBhbnkpW2ZpZWxkXSBhcyBGVDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZmllbGQgdmFsdWUuIElmIGNoZWNrIGlzIHRydWUsIG9ubHkgc2V0IHZhbHVlIGlmIGFsbCB2YWxpZGF0b3JzIHBhc3MuXG4gICAqXG4gICAqIFRoZSB2YWxpZGF0aW9uIHJlc3VsdCBpcyByZXR1cm5lZC5cbiAgICpcbiAgICogQHBhcmFtIGZpZWxkIGZpZWxkIG5hbWVcbiAgICogQHBhcmFtIHZhbHVlIGZpZWxkIHZhbHVlZFxuICAgKiBAcGFyYW0gY2hlY2sgZGVmYXVsdCBmYWxzZVxuICAgKiBAcmV0dXJuIG51bGwgb3IgVmFsaWRhdGlvbkVycm9yXG4gICAqL1xuICBwdWJsaWMgc2V0RlY8RlQ+KFxuICAgIGZpZWxkOiBzdHJpbmcsXG4gICAgdmFsdWU6IEZULFxuICAgIGNoZWNrOiBib29sZWFuID0gZmFsc2VcbiAgKTogbnVsbCB8IFZhbGlkYXRpb25FcnJvcnMge1xuICAgIGlmIChjaGVjaykge1xuICAgICAgY29uc3QgZmMgPSBuZXcgRm9ybUNvbnRyb2wodmFsdWUpO1xuXG4gICAgICBmb3IgKGNvbnN0IHYgb2YgdGhpcy5GTShmaWVsZCkudmFsaWRhdG9ycykge1xuICAgICAgICBjb25zdCB2YWwgPSB2KGZjKTtcbiAgICAgICAgaWYgKHZhbCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IodmFsKTtcbiAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgICh0aGlzIGFzIGFueSlbZmllbGRdID0gdmFsdWU7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBDYWxsZWQgb24gbW9kZWwgd2l0aCBhIGxpc3Qgb2YgZmllbGRzLCByZXR1cm5zIGEgRm9ybUdyb3VwIHdpdGhcbiAgLy8gdGhlc2UgZmllbGRzLCBvciBvbmx5IHRoZSBmb3JtIGNvbnRyb2wgZm9yIG9uZSBmaWVsZC5cbiAgcHVibGljIEZDKCk6IEZvcm1Hcm91cDtcbiAgcHVibGljIEZDKGZpZWxkOiBzdHJpbmcpOiBGb3JtQ29udHJvbDtcbiAgcHVibGljIEZDKGZpZWxkOiBzdHJpbmdbXSk6IEZvcm1Hcm91cDtcbiAgcHVibGljIEZDKGZpZWxkPzogc3RyaW5nIHwgc3RyaW5nW10pOiBGb3JtQ29udHJvbCB8IEZvcm1Hcm91cCB7XG4gICAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZpZWxkID0gQXJyYXkuZnJvbSh0aGlzLkZOKS5maWx0ZXIoKG4pID0+ICF0aGlzLkZNKG4pLnJlYWRvbmx5KTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZmllbGQpKSB7XG4gICAgICBjb25zdCBmZzogeyBbaW5kZXg6IHN0cmluZ106IEZvcm1Db250cm9sIH0gPSB7fTtcbiAgICAgIGZvciAoY29uc3QgZiBvZiBmaWVsZCkge1xuICAgICAgICBmZ1tmXSA9IHRoaXMuRkMoZikgYXMgRm9ybUNvbnRyb2w7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IEZvcm1Hcm91cChmZyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLkZNKGZpZWxkKS5mb3JtQ29udHJvbCh0aGlzKTtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlKFxuICAgIHsgdXBkYXRlTW9kZWwgPSB0cnVlIH06IHsgdXBkYXRlTW9kZWw/OiBib29sZWFuIH0gPSB7XG4gICAgICB1cGRhdGVNb2RlbDogdHJ1ZSxcbiAgICB9XG4gICk6IE9ic2VydmFibGU8dGhpcz4ge1xuICAgIGlmICh0aGlzLl9jb2xsKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY29sbC5zYXZlKHRoaXMsIHsgdXBkYXRlTW9kZWwgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcignTWlzc2luZyBjb2xsZWN0aW9uJykpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZShcbiAgICBmaWVsZHM6IHN0cmluZ1tdID0gW10sXG4gICAgeyB1cGRhdGVNb2RlbCA9IHRydWUgfTogeyB1cGRhdGVNb2RlbD86IGJvb2xlYW4gfSA9IHtcbiAgICAgIHVwZGF0ZU1vZGVsOiB0cnVlLFxuICAgIH1cbiAgKTogT2JzZXJ2YWJsZTx0aGlzPiB7XG4gICAgaWYgKHRoaXMuX2NvbGwpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jb2xsLnVwZGF0ZSh0aGlzLCBmaWVsZHMsIHsgdXBkYXRlTW9kZWwgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcignTWlzc2luZyBjb2xsZWN0aW9uJykpO1xuICB9XG59XG5cbi8vXG4vLyBleHBvcnQgY2xhc3MgVHJlZURhdGFNb2RlbCBleHRlbmRzIERhdGFNb2RlbCB7XG4vLyAgIHN0YXRpYyBvdmVycmlkZSBfX25hbWUgPSAnVHJlZURhdGFNb2RlbCc7XG4vLyAgIEBkZXRhaWxzRmllbGQoe1xuLy8gICAgIG1vZGVsOiB0aGlzLFxuLy8gICAgIG1hbnk6IHRydWUsXG4vLyAgICAgZGVzY3JpcHRpb246ICdQYXJlbnRzJyxcbi8vICAgfSlcbi8vICAgcHVibGljIHBhcmVudHNfZGV0YWlscz86IHRoaXNbXTtcbi8vXG4vLyAgIEBmb3JlaWduS2V5RmllbGQoe1xuLy8gICAgIHJlcXVpcmVkOiBmYWxzZSxcbi8vICAgICBkZXNjcmlwdGlvbjogJ1N0cnVjdHVyZSBwYXJlbnRlJyxcbi8vICAgICByZWxhdGVkOiAnU3RydWN0dXJlJyxcbi8vICAgfSlcbi8vICAgcHVibGljIHBhcmVudD86IG51bWJlcjtcbi8vXG4vLyAgIEBpbnRlZ2VyRmllbGQoe1xuLy8gICAgIHJlcXVpcmVkOiBmYWxzZSxcbi8vICAgICByZWFkb25seTogdHJ1ZSxcbi8vICAgICBkZXNjcmlwdGlvbjogJ0lEIFRyZWUnLFxuLy8gICB9KVxuLy8gICBwdWJsaWMgdHJlZV9pZCE6IG51bWJlcjtcbi8vXG4vLyAgIEBpbnRlZ2VyRmllbGQoe1xuLy8gICAgIHJlcXVpcmVkOiBmYWxzZSxcbi8vICAgICByZWFkb25seTogdHJ1ZSxcbi8vICAgICBkZXNjcmlwdGlvbjogJ01QVFQgbGVmdCcsXG4vLyAgIH0pXG4vLyAgIHB1YmxpYyBsZnQhOiBudW1iZXI7XG4vL1xuLy8gICBAaW50ZWdlckZpZWxkKHtcbi8vICAgICByZXF1aXJlZDogZmFsc2UsXG4vLyAgICAgcmVhZG9ubHk6IHRydWUsXG4vLyAgICAgZGVzY3JpcHRpb246ICdNUFRUIHJpZ2h0Jyxcbi8vICAgfSlcbi8vICAgcHVibGljIHJnaHQhOiBudW1iZXI7XG4vL1xuLy8gICBAaW50ZWdlckZpZWxkKHtcbi8vICAgICByZXF1aXJlZDogZmFsc2UsXG4vLyAgICAgcmVhZG9ubHk6IHRydWUsXG4vLyAgICAgZGVzY3JpcHRpb246ICdOaXZlYXUgaGnDqXJhcmNoaXF1ZScsXG4vLyAgIH0pXG4vLyAgIHB1YmxpYyBsZXZlbCE6IG51bWJlcjtcbi8vXG4vLyAgIHB1YmxpYyBnZXQgcGFyZW50X2RldGFpbHMoKTogdGhpcyB8IG51bGwge1xuLy8gICAgIGlmICh0aGlzLnBhcmVudHNfZGV0YWlscykge1xuLy8gICAgICAgY29uc3Qgb3V0ID0gdGhpcy5wYXJlbnRzX2RldGFpbHNbdGhpcy5wYXJlbnRzX2RldGFpbHMubGVuZ3RoIC0gMV07XG4vLyAgICAgICBvdXQucGFyZW50c19kZXRhaWxzID0gdGhpcy5wYXJlbnRzX2RldGFpbHMuc2xpY2UoXG4vLyAgICAgICAgIDAsXG4vLyAgICAgICAgIHRoaXMucGFyZW50c19kZXRhaWxzLmxlbmd0aCAtIDFcbi8vICAgICAgICk7XG4vLyAgICAgICByZXR1cm4gb3V0O1xuLy8gICAgIH1cbi8vICAgICByZXR1cm4gbnVsbDtcbi8vICAgfVxuLy9cbi8vICAgcHVibGljIHNldCBwYXJlbnRfZGV0YWlscyhkOiB0aGlzIHwgbnVsbCkge1xuLy8gICAgIGNvbnNvbGUubG9nKGQpO1xuLy8gICAgIHRoaXMucGFyZW50c19kZXRhaWxzID0gZD8ucGFyZW50c19kZXRhaWxzO1xuLy8gICB9XG4vL1xuLy8gICBwdWJsaWMgX2Rpc3BsYXkoKTogc3RyaW5nIHtcbi8vICAgICBjb25zdCBvdXQ6IHN0cmluZ1tdID0gW107XG4vLyAgICAgaWYgKHRoaXMucGFyZW50c19kZXRhaWxzKSB7XG4vLyAgICAgICBmb3IgKGNvbnN0IHAgb2YgdGhpcy5wYXJlbnRzX2RldGFpbHMpIHtcbi8vICAgICAgICAgaWYgKChwIGFzIGFueSkuY29kZSkge1xuLy8gICAgICAgICAgIG91dC5wdXNoKGBbJHsocCBhcyBhbnkpLmNvZGV9XSAkeyhwIGFzIGFueSkubmFtZX1gKTtcbi8vICAgICAgICAgfSBlbHNlIHtcbi8vICAgICAgICAgICBvdXQucHVzaCgocCBhcyBhbnkpLm5hbWUpO1xuLy8gICAgICAgICB9XG4vLyAgICAgICB9XG4vLyAgICAgfVxuLy8gICAgIGlmICgodGhpcyBhcyBhbnkpLmNvZGUpIHtcbi8vICAgICAgIG91dC5wdXNoKGBbJHsodGhpcyBhcyBhbnkpLmNvZGV9XSAkeyh0aGlzIGFzIGFueSkubmFtZX1gKTtcbi8vICAgICB9IGVsc2Uge1xuLy8gICAgICAgb3V0LnB1c2goKHRoaXMgYXMgYW55KS5uYW1lKTtcbi8vICAgICB9XG4vL1xuLy8gICAgIHJldHVybiBvdXQuam9pbignIDogJyk7XG4vLyAgIH1cbi8vIH1cbiJdfQ==
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { InjectionToken } from "@angular/core";
|
|
2
|
+
/**
|
|
3
|
+
* DATA_API_URL: stores data api base url
|
|
4
|
+
*/
|
|
5
|
+
export const DATA_API_URL = new InjectionToken("data.api.url");
|
|
6
|
+
/**
|
|
7
|
+
* DATA_MAX_TRANSFERSTATE_TIME: max duration to use transferstate time
|
|
8
|
+
* If DATA_MAX_TRANSFERSTATE_TIME is zero, TransferState is not used
|
|
9
|
+
*/
|
|
10
|
+
export const DATA_MAX_TRANSFERSTATE_TIME = new InjectionToken("data.max.transfer.state");
|
|
11
|
+
export const BootstrapDataDisplayConfig = {
|
|
12
|
+
dispEdit: {
|
|
13
|
+
defaultMode: "dd",
|
|
14
|
+
inputClasses: {
|
|
15
|
+
"input.text": "form-control",
|
|
16
|
+
"input.email": "form-control",
|
|
17
|
+
"input.datetime": "form-control",
|
|
18
|
+
"input.date": "form-control",
|
|
19
|
+
"input.number": "form-control",
|
|
20
|
+
"input.decimal": "form-control",
|
|
21
|
+
"input.checkbox": "form-control",
|
|
22
|
+
"input.password": "form-control",
|
|
23
|
+
"textarea": "form-control",
|
|
24
|
+
"quill": "",
|
|
25
|
+
"fkselect": "form-control",
|
|
26
|
+
"select": "form-select"
|
|
27
|
+
},
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* DATA_DISPLAY_CONFIG: display config & default classes injection token
|
|
32
|
+
*/
|
|
33
|
+
export const DATA_DISPLAY_CONFIG = new InjectionToken("data.display.config");
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1wYXJhbWV0ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS9zcmMvbGliL2RhdGEvZGF0YS1wYXJhbWV0ZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFN0M7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxjQUFjLENBQVMsY0FBYyxDQUFDLENBQUM7QUFDdkU7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsSUFBSSxjQUFjLENBQVMseUJBQXlCLENBQUMsQ0FBQztBQVlqRyxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBc0I7SUFDM0QsUUFBUSxFQUFFO1FBQ1IsV0FBVyxFQUFFLElBQUk7UUFDakIsWUFBWSxFQUFFO1lBQ1osWUFBWSxFQUFFLGNBQWM7WUFDNUIsYUFBYSxFQUFFLGNBQWM7WUFDN0IsZ0JBQWdCLEVBQUUsY0FBYztZQUNoQyxZQUFZLEVBQUUsY0FBYztZQUM1QixjQUFjLEVBQUUsY0FBYztZQUM5QixlQUFlLEVBQUUsY0FBYztZQUMvQixnQkFBZ0IsRUFBRSxjQUFjO1lBQ2hDLGdCQUFnQixFQUFDLGNBQWM7WUFDL0IsVUFBVSxFQUFFLGNBQWM7WUFDMUIsT0FBTyxFQUFFLEVBQUU7WUFDWCxVQUFVLEVBQUUsY0FBYztZQUMxQixRQUFRLEVBQUUsYUFBYTtTQUN4QjtLQUNGO0NBQ0YsQ0FBQztBQUdGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxjQUFjLENBQW9CLHFCQUFxQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGlvblRva2VufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG4vKipcbiAqIERBVEFfQVBJX1VSTDogc3RvcmVzIGRhdGEgYXBpIGJhc2UgdXJsXG4gKi9cbmV4cG9ydCBjb25zdCBEQVRBX0FQSV9VUkwgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPihcImRhdGEuYXBpLnVybFwiKTtcbi8qKlxuICogREFUQV9NQVhfVFJBTlNGRVJTVEFURV9USU1FOiBtYXggZHVyYXRpb24gdG8gdXNlIHRyYW5zZmVyc3RhdGUgdGltZVxuICogSWYgREFUQV9NQVhfVFJBTlNGRVJTVEFURV9USU1FIGlzIHplcm8sIFRyYW5zZmVyU3RhdGUgaXMgbm90IHVzZWRcbiAqL1xuZXhwb3J0IGNvbnN0IERBVEFfTUFYX1RSQU5TRkVSU1RBVEVfVElNRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxudW1iZXI+KFwiZGF0YS5tYXgudHJhbnNmZXIuc3RhdGVcIik7XG5cbi8qKlxuICogRGF0YURpc3BsYXlDb25maWcgaW50ZXJmYWNlIHByb3ZpZGVzIGRlZmF1bHQgdmFsdWVzIGZvciBkaXNwbGF5IGNsYXNzZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhRGlzcGxheUNvbmZpZyB7XG4gIGRpc3BFZGl0OiB7XG4gICAgZGVmYXVsdE1vZGU6IFwiaW5saW5lXCIgfCBcImRkXCI7XG4gICAgaW5wdXRDbGFzc2VzOiB7W2luZGV4OiBzdHJpbmddOiBzdHJpbmd9O1xuICB9O1xufVxuXG5leHBvcnQgY29uc3QgQm9vdHN0cmFwRGF0YURpc3BsYXlDb25maWc6IERhdGFEaXNwbGF5Q29uZmlnID0ge1xuICBkaXNwRWRpdDoge1xuICAgIGRlZmF1bHRNb2RlOiBcImRkXCIsXG4gICAgaW5wdXRDbGFzc2VzOiB7XG4gICAgICBcImlucHV0LnRleHRcIjogXCJmb3JtLWNvbnRyb2xcIixcbiAgICAgIFwiaW5wdXQuZW1haWxcIjogXCJmb3JtLWNvbnRyb2xcIixcbiAgICAgIFwiaW5wdXQuZGF0ZXRpbWVcIjogXCJmb3JtLWNvbnRyb2xcIixcbiAgICAgIFwiaW5wdXQuZGF0ZVwiOiBcImZvcm0tY29udHJvbFwiLFxuICAgICAgXCJpbnB1dC5udW1iZXJcIjogXCJmb3JtLWNvbnRyb2xcIixcbiAgICAgIFwiaW5wdXQuZGVjaW1hbFwiOiBcImZvcm0tY29udHJvbFwiLFxuICAgICAgXCJpbnB1dC5jaGVja2JveFwiOiBcImZvcm0tY29udHJvbFwiLFxuICAgICAgXCJpbnB1dC5wYXNzd29yZFwiOlwiZm9ybS1jb250cm9sXCIsXG4gICAgICBcInRleHRhcmVhXCI6IFwiZm9ybS1jb250cm9sXCIsXG4gICAgICBcInF1aWxsXCI6IFwiXCIsXG4gICAgICBcImZrc2VsZWN0XCI6IFwiZm9ybS1jb250cm9sXCIsXG4gICAgICBcInNlbGVjdFwiOiBcImZvcm0tc2VsZWN0XCJcbiAgICB9LFxuICB9XG59O1xuXG5cbi8qKlxuICogREFUQV9ESVNQTEFZX0NPTkZJRzogZGlzcGxheSBjb25maWcgJiBkZWZhdWx0IGNsYXNzZXMgaW5qZWN0aW9uIHRva2VuXG4gKi9cbmV4cG9ydCBjb25zdCBEQVRBX0RJU1BMQVlfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPERhdGFEaXNwbGF5Q29uZmlnPihcImRhdGEuZGlzcGxheS5jb25maWdcIik7XG4iXX0=
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { combineLatest, ReplaySubject, share, } from 'rxjs';
|
|
2
|
+
import { switchMap } from 'rxjs/operators';
|
|
3
|
+
export class Queryset {
|
|
4
|
+
constructor(_coll, options = {}) {
|
|
5
|
+
this._coll = _coll;
|
|
6
|
+
/** Current filter data */
|
|
7
|
+
this.filterData = {};
|
|
8
|
+
/** Current sorter data */
|
|
9
|
+
this.sortData = [];
|
|
10
|
+
/** Current fields */
|
|
11
|
+
this.fields = [];
|
|
12
|
+
/** Current page size */
|
|
13
|
+
this.pageSize = 500;
|
|
14
|
+
/** Current page number */
|
|
15
|
+
this.page = 1;
|
|
16
|
+
this._pristine = true;
|
|
17
|
+
this._loading = new ReplaySubject(1);
|
|
18
|
+
this._meta = new ReplaySubject(1);
|
|
19
|
+
this._results = new ReplaySubject(1);
|
|
20
|
+
/** Default options */
|
|
21
|
+
this.options = { emitFields: true };
|
|
22
|
+
Object.assign(this.options, options);
|
|
23
|
+
}
|
|
24
|
+
/** Pristine status (true if it has not collected results yet) */
|
|
25
|
+
get pristine() {
|
|
26
|
+
return this._pristine;
|
|
27
|
+
}
|
|
28
|
+
/** Loading status (true if currently fetching data) */
|
|
29
|
+
get loading() {
|
|
30
|
+
return this._loading.asObservable();
|
|
31
|
+
}
|
|
32
|
+
/** Results meta part observable */
|
|
33
|
+
get meta() {
|
|
34
|
+
return this._meta.asObservable();
|
|
35
|
+
}
|
|
36
|
+
/** Results data part observable */
|
|
37
|
+
get results() {
|
|
38
|
+
return this._results.asObservable();
|
|
39
|
+
}
|
|
40
|
+
/** Full results observable (results, loading, meta) */
|
|
41
|
+
get full() {
|
|
42
|
+
if (!this._full) {
|
|
43
|
+
this._full = combineLatest([this.results, this.loading, this.meta]);
|
|
44
|
+
}
|
|
45
|
+
return this._full.pipe(share());
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Update current filter data. Null or undefined values are removed from filter data.
|
|
49
|
+
* @param params filter data
|
|
50
|
+
* @param update boolean to update filter data instead of recreating it from scratch
|
|
51
|
+
*/
|
|
52
|
+
filter(params = {}, update = false) {
|
|
53
|
+
if (!update) {
|
|
54
|
+
this.filterData = {};
|
|
55
|
+
}
|
|
56
|
+
for (const k of Object.keys(params)) {
|
|
57
|
+
if (params[k] === undefined || params[k] === null) {
|
|
58
|
+
delete this.filterData[k];
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
this.filterData[k] = params[k];
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return this;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Update sorting parameters, list of strings giving sort parameters e.g. sort("+name", "-id").
|
|
68
|
+
* @param sorting strings of sort parameters
|
|
69
|
+
*/
|
|
70
|
+
sort(...sorting) {
|
|
71
|
+
this.sortData = sorting;
|
|
72
|
+
return this;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Update page size.
|
|
76
|
+
* @param pageSize required page size
|
|
77
|
+
*/
|
|
78
|
+
paginateBy(pageSize = 20) {
|
|
79
|
+
this.pageSize = pageSize;
|
|
80
|
+
return this;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Update current page number.
|
|
84
|
+
* @param page required pqge
|
|
85
|
+
* @param fragment TODO: fragment usage for router usage
|
|
86
|
+
*/
|
|
87
|
+
setPage(page = 1, fragment) {
|
|
88
|
+
if (page !== this.page) {
|
|
89
|
+
this.page = page;
|
|
90
|
+
// if (this.options.router) {
|
|
91
|
+
// // TODO: check and fix usage of fragment/query params
|
|
92
|
+
// const frag = fragment
|
|
93
|
+
// ? fragment
|
|
94
|
+
// : this.options.hash || this.options.name;
|
|
95
|
+
// const _ = this.options.router.navigate([], {
|
|
96
|
+
// queryParams: { page: page.toString() },
|
|
97
|
+
// fragment: frag,
|
|
98
|
+
// queryParamsHandling: 'merge',
|
|
99
|
+
// });
|
|
100
|
+
// }
|
|
101
|
+
}
|
|
102
|
+
return this;
|
|
103
|
+
}
|
|
104
|
+
setFields(fields) {
|
|
105
|
+
this.fields = fields;
|
|
106
|
+
return this;
|
|
107
|
+
}
|
|
108
|
+
getQueryParams() {
|
|
109
|
+
const f = {};
|
|
110
|
+
Object.assign(f, this.filterData);
|
|
111
|
+
if (this.sortData.length) {
|
|
112
|
+
f['ordering'] = this.sortData.join(',');
|
|
113
|
+
}
|
|
114
|
+
f['page_size'] = this.pageSize;
|
|
115
|
+
f['page'] = this.page;
|
|
116
|
+
if (this.options.emitFields && this.fields.length) {
|
|
117
|
+
f['fields'] = this.fields.join(',');
|
|
118
|
+
}
|
|
119
|
+
return f;
|
|
120
|
+
}
|
|
121
|
+
get(refresh = true) {
|
|
122
|
+
console.log('queryset:get', this, refresh);
|
|
123
|
+
if (!refresh && !this._pristine) {
|
|
124
|
+
return this.results;
|
|
125
|
+
}
|
|
126
|
+
this._loading.next(true);
|
|
127
|
+
return this._coll
|
|
128
|
+
.raw({
|
|
129
|
+
method: 'GET',
|
|
130
|
+
params: this.getQueryParams(),
|
|
131
|
+
})
|
|
132
|
+
.pipe(switchMap((result) => {
|
|
133
|
+
// Process results
|
|
134
|
+
this._meta.next({ nav: result.nav, parameters: result.parameters });
|
|
135
|
+
const out = [];
|
|
136
|
+
for (const r of result.results) {
|
|
137
|
+
const m = this._coll.fromJson(r);
|
|
138
|
+
out.push(m);
|
|
139
|
+
}
|
|
140
|
+
this._pristine = false;
|
|
141
|
+
this._loading.next(false);
|
|
142
|
+
this._results.next(out);
|
|
143
|
+
return this.results;
|
|
144
|
+
}));
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1xdWVyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEvc3JjL2xpYi9kYXRhL2RhdGEtcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUNMLGFBQWEsRUFHYixhQUFhLEVBQ2IsS0FBSyxHQUNOLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFTLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBcURsRCxNQUFNLE9BQU8sUUFBUTtJQWFuQixZQUFzQixLQUFvQixFQUFFLFVBQTRCLEVBQUU7UUFBcEQsVUFBSyxHQUFMLEtBQUssQ0FBZTtRQVoxQywwQkFBMEI7UUFDbkIsZUFBVSxHQUFlLEVBQUUsQ0FBQztRQUNuQywwQkFBMEI7UUFDbkIsYUFBUSxHQUFlLEVBQUUsQ0FBQztRQUNqQyxxQkFBcUI7UUFDZCxXQUFNLEdBQWEsRUFBRSxDQUFDO1FBQzdCLHdCQUF3QjtRQUNqQixhQUFRLEdBQUcsR0FBRyxDQUFDO1FBQ3RCLDBCQUEwQjtRQUNuQixTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBU1IsY0FBUyxHQUFHLElBQUksQ0FBQztRQU1qQixhQUFRLEdBQUcsSUFBSSxhQUFhLENBQVUsQ0FBQyxDQUFDLENBQUM7UUFNekMsVUFBSyxHQUFHLElBQUksYUFBYSxDQUFhLENBQUMsQ0FBQyxDQUFDO1FBTXpDLGFBQVEsR0FBRyxJQUFJLGFBQWEsQ0FBTSxDQUFDLENBQUMsQ0FBQztRQXZCM0Msc0JBQXNCO1FBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDcEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFHRCxpRUFBaUU7SUFDakUsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lB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LElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNiO1lBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2xsZWN0aW9uIH0gZnJvbSAnLi9kYXRhLWNvbGxlY3Rpb24nO1xuaW1wb3J0IHsgRGF0YU1vZGVsIH0gZnJvbSAnLi9kYXRhLW1vZGVsJztcbmltcG9ydCB7XG4gIGNvbWJpbmVMYXRlc3QsXG4gIGZpcnN0VmFsdWVGcm9tLFxuICBPYnNlcnZhYmxlLFxuICBSZXBsYXlTdWJqZWN0LFxuICBzaGFyZSxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaXJzdCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyRGF0YSB7XG4gIFtpbmRleDogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHVuZGVmaW5lZCB8IG51bGw7XG59XG5cbmV4cG9ydCB0eXBlIFNvcnREYXRhID0gc3RyaW5nO1xuXG4vKipcbiAqIFF1ZXJ5c2V0IHBhcmFtZXRlcnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUXVlcnlzZXRPcHRpb25zIHtcbiAgLyoqIEVtaXQgZmllbGRzIGxpc3QgKi9cbiAgZW1pdEZpZWxkcz86IGJvb2xlYW47XG4gIC8qKiBRdWVyeXNldCBuYW1lICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBUT0RPOiBzZWUgdXNhZ2UgKi9cbiAgcm91dGU/OiBBY3RpdmF0ZWRSb3V0ZTtcbiAgLyoqIFRPRE86IHNlZSB1c2FnZSAqL1xuICByb3V0ZXI/OiBSb3V0ZXI7XG4gIC8qKiBUT0RPOiBzZWUgdXNhZ2UgKi9cbiAgaGFzaD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUXVlcnlOYXYge1xuICBwYWdlOiBudW1iZXI7XG4gIHBhZ2Vfc2l6ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElRdWVyeU1ldGFOYXYge1xuICBjb3VudDogbnVtYmVyO1xuICBuZXh0OiBudW1iZXIgfCBudWxsO1xuICBwYWdlOiBudW1iZXI7XG4gIHBhZ2VzOiBudW1iZXI7XG4gIHByZXY6IG51bWJlciB8IG51bGw7XG4gIHNpemU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUXVlcnlNZXRhTmF2UGFyYW1zIHtcbiAgcGFnZTogc3RyaW5nO1xuICBwYWdlX3NpemU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUXVlcnlNZXRhIHtcbiAgbmF2OiBJUXVlcnlNZXRhTmF2O1xuICBwYXJhbWV0ZXJzOiBJUXVlcnlNZXRhTmF2UGFyYW1zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElRdWVyeUZ1bGxSZXNwb25zZTxUPiBleHRlbmRzIElRdWVyeU1ldGEge1xuICByZXN1bHRzOiBUW107XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVyeXNldDxUIGV4dGVuZHMgRGF0YU1vZGVsPiB7XG4gIC8qKiBDdXJyZW50IGZpbHRlciBkYXRhICovXG4gIHB1YmxpYyBmaWx0ZXJEYXRhOiBGaWx0ZXJEYXRhID0ge307XG4gIC8qKiBDdXJyZW50IHNvcnRlciBkYXRhICovXG4gIHB1YmxpYyBzb3J0RGF0YTogU29ydERhdGFbXSA9IFtdO1xuICAvKiogQ3VycmVudCBmaWVsZHMgKi9cbiAgcHVibGljIGZpZWxkczogc3RyaW5nW10gPSBbXTtcbiAgLyoqIEN1cnJlbnQgcGFnZSBzaXplICovXG4gIHB1YmxpYyBwYWdlU2l6ZSA9IDUwMDtcbiAgLyoqIEN1cnJlbnQgcGFnZSBudW1iZXIgKi9cbiAgcHVibGljIHBhZ2UgPSAxO1xuXG4gIHB1YmxpYyBvcHRpb25zOiBJUXVlcnlzZXRPcHRpb25zO1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2NvbGw6IENvbGxlY3Rpb248VD4sIG9wdGlvbnM6IElRdWVyeXNldE9wdGlvbnMgPSB7fSkge1xuICAgIC8qKiBEZWZhdWx0IG9wdGlvbnMgKi9cbiAgICB0aGlzLm9wdGlvbnMgPSB7IGVtaXRGaWVsZHM6IHRydWUgfTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgb3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIF9wcmlzdGluZSA9IHRydWU7XG4gIC8qKiBQcmlzdGluZSBzdGF0dXMgKHRydWUgaWYgaXQgaGFzIG5vdCBjb2xsZWN0ZWQgcmVzdWx0cyB5ZXQpICovXG4gIHB1YmxpYyBnZXQgcHJpc3RpbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3ByaXN0aW5lO1xuICB9XG5cbiAgcHJpdmF0ZSBfbG9hZGluZyA9IG5ldyBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+KDEpO1xuICAvKiogTG9hZGluZyBzdGF0dXMgKHRydWUgaWYgY3VycmVudGx5IGZldGNoaW5nIGRhdGEpICovXG4gIHB1YmxpYyBnZXQgbG9hZGluZygpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fbG9hZGluZy5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX21ldGEgPSBuZXcgUmVwbGF5U3ViamVjdDxJUXVlcnlNZXRhPigxKTtcbiAgLyoqIFJlc3VsdHMgbWV0YSBwYXJ0IG9ic2VydmFibGUgKi9cbiAgcHVibGljIGdldCBtZXRhKCk6IE9ic2VydmFibGU8SVF1ZXJ5TWV0YT4ge1xuICAgIHJldHVybiB0aGlzLl9tZXRhLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVzdWx0cyA9IG5ldyBSZXBsYXlTdWJqZWN0PFRbXT4oMSk7XG4gIC8qKiBSZXN1bHRzIGRhdGEgcGFydCBvYnNlcnZhYmxlICovXG4gIHB1YmxpYyBnZXQgcmVzdWx0cygpOiBPYnNlcnZhYmxlPFRbXT4ge1xuICAgIHJldHVybiB0aGlzLl9yZXN1bHRzLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZnVsbD86IE9ic2VydmFibGU8W1RbXSwgYm9vbGVhbiwgSVF1ZXJ5TWV0YV0+O1xuICAvKiogRnVsbCByZXN1bHRzIG9ic2VydmFibGUgKHJlc3VsdHMsIGxvYWRpbmcsIG1ldGEpICovXG4gIHB1YmxpYyBnZXQgZnVsbCgpOiBPYnNlcnZhYmxlPFtUW10sIGJvb2xlYW4sIElRdWVyeU1ldGFdPiB7XG4gICAgaWYgKCF0aGlzLl9mdWxsKSB7XG4gICAgICB0aGlzLl9mdWxsID0gY29tYmluZUxhdGVzdChbdGhpcy5yZXN1bHRzLCB0aGlzLmxvYWRpbmcsIHRoaXMubWV0YV0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZnVsbC5waXBlKHNoYXJlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBjdXJyZW50IGZpbHRlciBkYXRhLiBOdWxsIG9yIHVuZGVmaW5lZCB2YWx1ZXMgYXJlIHJlbW92ZWQgZnJvbSBmaWx0ZXIgZGF0YS5cbiAgICogQHBhcmFtIHBhcmFtcyBmaWx0ZXIgZGF0YVxuICAgKiBAcGFyYW0gdXBkYXRlIGJvb2xlYW4gdG8gdXBkYXRlIGZpbHRlciBkYXRhIGluc3RlYWQgb2YgcmVjcmVhdGluZyBpdCBmcm9tIHNjcmF0Y2hcbiAgICovXG4gIHB1YmxpYyBmaWx0ZXIocGFyYW1zOiBGaWx0ZXJEYXRhID0ge30sIHVwZGF0ZTogYm9vbGVhbiA9IGZhbHNlKTogUXVlcnlzZXQ8VD4ge1xuICAgIGlmICghdXBkYXRlKSB7XG4gICAgICB0aGlzLmZpbHRlckRhdGEgPSB7fTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKHBhcmFtcykpIHtcbiAgICAgIGlmIChwYXJhbXNba10gPT09IHVuZGVmaW5lZCB8fCBwYXJhbXNba10gPT09IG51bGwpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuZmlsdGVyRGF0YVtrXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmlsdGVyRGF0YVtrXSA9IHBhcmFtc1trXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHNvcnRpbmcgcGFyYW1ldGVycywgbGlzdCBvZiBzdHJpbmdzIGdpdmluZyBzb3J0IHBhcmFtZXRlcnMgZS5nLiBzb3J0KFwiK25hbWVcIiwgXCItaWRcIikuXG4gICAqIEBwYXJhbSBzb3J0aW5nIHN0cmluZ3Mgb2Ygc29ydCBwYXJhbWV0ZXJzXG4gICAqL1xuICBwdWJsaWMgc29ydCguLi5zb3J0aW5nOiBzdHJpbmdbXSk6IFF1ZXJ5c2V0PFQ+IHtcbiAgICB0aGlzLnNvcnREYXRhID0gc29ydGluZztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgcGFnZSBzaXplLlxuICAgKiBAcGFyYW0gcGFnZVNpemUgcmVxdWlyZWQgcGFnZSBzaXplXG4gICAqL1xuICBwdWJsaWMgcGFnaW5hdGVCeShwYWdlU2l6ZTogbnVtYmVyID0gMjApOiBRdWVyeXNldDxUPiB7XG4gICAgdGhpcy5wYWdlU2l6ZSA9IHBhZ2VTaXplO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBjdXJyZW50IHBhZ2UgbnVtYmVyLlxuICAgKiBAcGFyYW0gcGFnZSByZXF1aXJlZCBwcWdlXG4gICAqIEBwYXJhbSBmcmFnbWVudCBUT0RPOiBmcmFnbWVudCB1c2FnZSBmb3Igcm91dGVyIHVzYWdlXG4gICAqL1xuICBwdWJsaWMgc2V0UGFnZShwYWdlOiBudW1iZXIgPSAxLCBmcmFnbWVudD86IHN0cmluZyk6IFF1ZXJ5c2V0PFQ+IHtcbiAgICBpZiAocGFnZSAhPT0gdGhpcy5wYWdlKSB7XG4gICAgICB0aGlzLnBhZ2UgPSBwYWdlO1xuICAgICAgLy8gaWYgKHRoaXMub3B0aW9ucy5yb3V0ZXIpIHtcbiAgICAgIC8vICAgLy8gVE9ETzogY2hlY2sgYW5kIGZpeCB1c2FnZSBvZiBmcmFnbWVudC9xdWVyeSBwYXJhbXNcbiAgICAgIC8vICAgY29uc3QgZnJhZyA9IGZyYWdtZW50XG4gICAgICAvLyAgICAgPyBmcmFnbWVudFxuICAgICAgLy8gICAgIDogdGhpcy5vcHRpb25zLmhhc2ggfHwgdGhpcy5vcHRpb25zLm5hbWU7XG4gICAgICAvLyAgIGNvbnN0IF8gPSB0aGlzLm9wdGlvbnMucm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAvLyAgICAgcXVlcnlQYXJhbXM6IHsgcGFnZTogcGFnZS50b1N0cmluZygpIH0sXG4gICAgICAvLyAgICAgZnJhZ21lbnQ6IGZyYWcsXG4gICAgICAvLyAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcbiAgICAgIC8vICAgfSk7XG4gICAgICAvLyB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIHNldEZpZWxkcyhmaWVsZHM6IHN0cmluZ1tdKTogUXVlcnlzZXQ8VD4ge1xuICAgIHRoaXMuZmllbGRzID0gZmllbGRzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGdldFF1ZXJ5UGFyYW1zKCk6IEZpbHRlckRhdGEge1xuICAgIGNvbnN0IGY6IEZpbHRlckRhdGEgPSB7fTtcbiAgICBPYmplY3QuYXNzaWduKGYsIHRoaXMuZmlsdGVyRGF0YSk7XG4gICAgaWYgKHRoaXMuc29ydERhdGEubGVuZ3RoKSB7XG4gICAgICBmWydvcmRlcmluZyddID0gdGhpcy5zb3J0RGF0YS5qb2luKCcsJyk7XG4gICAgfVxuICAgIGZbJ3BhZ2Vfc2l6ZSddID0gdGhpcy5wYWdlU2l6ZTtcbiAgICBmWydwYWdlJ10gPSB0aGlzLnBhZ2U7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lbWl0RmllbGRzICYmIHRoaXMuZmllbGRzLmxlbmd0aCkge1xuICAgICAgZlsnZmllbGRzJ10gPSB0aGlzLmZpZWxkcy5qb2luKCcsJyk7XG4gICAgfVxuICAgIHJldHVybiBmO1xuICB9XG5cbiAgcHVibGljIGdldChyZWZyZXNoOiBib29sZWFuID0gdHJ1ZSk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgY29uc29sZS5sb2coJ3F1ZXJ5c2V0OmdldCcsIHRoaXMsIHJlZnJlc2gpO1xuICAgIGlmICghcmVmcmVzaCAmJiAhdGhpcy5fcHJpc3RpbmUpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc3VsdHM7XG4gICAgfVxuICAgIHRoaXMuX2xvYWRpbmcubmV4dCh0cnVlKTtcbiAgICByZXR1cm4gdGhpcy5fY29sbFxuICAgICAgLnJhdzxJUXVlcnlGdWxsUmVzcG9uc2U8VD4+KHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgcGFyYW1zOiB0aGlzLmdldFF1ZXJ5UGFyYW1zKCkgYXMgYW55LFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgIC8vIFByb2Nlc3MgcmVzdWx0c1xuICAgICAgICAgIHRoaXMuX21ldGEubmV4dCh7IG5hdjogcmVzdWx0Lm5hdiwgcGFyYW1ldGVyczogcmVzdWx0LnBhcmFtZXRlcnMgfSk7XG4gICAgICAgICAgY29uc3Qgb3V0OiBUW10gPSBbXTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHIgb2YgcmVzdWx0LnJlc3VsdHMpIHtcbiAgICAgICAgICAgIGNvbnN0IG0gPSB0aGlzLl9jb2xsLmZyb21Kc29uKHIpO1xuICAgICAgICAgICAgb3V0LnB1c2gobSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX3ByaXN0aW5lID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fbG9hZGluZy5uZXh0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLl9yZXN1bHRzLm5leHQob3V0KTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHRzO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { combineLatest, of } from "rxjs";
|
|
2
|
+
export class QuerysetMock {
|
|
3
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
4
|
+
constructor(_coll, options = {}) {
|
|
5
|
+
this._coll = _coll;
|
|
6
|
+
this.options = options;
|
|
7
|
+
this.mockData = [];
|
|
8
|
+
this.filterData = {};
|
|
9
|
+
this.sortData = [];
|
|
10
|
+
this.pageSize = 100;
|
|
11
|
+
this.page = 1;
|
|
12
|
+
this.pristine = true;
|
|
13
|
+
this.loading = of(false);
|
|
14
|
+
}
|
|
15
|
+
get results() {
|
|
16
|
+
return of(this.mockData || this._coll.mockValues);
|
|
17
|
+
}
|
|
18
|
+
get meta() {
|
|
19
|
+
return of({
|
|
20
|
+
nav: { count: 100, next: 1, page: 1, pages: 10, prev: null, size: 10 },
|
|
21
|
+
parameters: { page: "page", page_size: "page_size" }
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
get full() {
|
|
25
|
+
return combineLatest([this.results, this.loading, this.meta]);
|
|
26
|
+
}
|
|
27
|
+
filter(params = {}) {
|
|
28
|
+
return this;
|
|
29
|
+
}
|
|
30
|
+
sort(...sorting) {
|
|
31
|
+
return this;
|
|
32
|
+
}
|
|
33
|
+
paginateBy(pageSize = 20) {
|
|
34
|
+
return this;
|
|
35
|
+
}
|
|
36
|
+
setPage(page) {
|
|
37
|
+
return this;
|
|
38
|
+
}
|
|
39
|
+
getQueryParams() {
|
|
40
|
+
return {};
|
|
41
|
+
}
|
|
42
|
+
get() {
|
|
43
|
+
return of(this.mockData || this._coll.mockValues);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1xdWVyeS5tb2NrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS9zcmMvbGliL2RhdGEvZGF0YS1xdWVyeS5tb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBQyxhQUFhLEVBQWMsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRW5ELE1BQU0sT0FBTyxZQUFZO0lBV3pCLGdFQUFnRTtJQUM5RCxZQUFzQixLQUF3QixFQUFTLFVBQTRCLEVBQUU7UUFBL0QsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFBUyxZQUFPLEdBQVAsT0FBTyxDQUF1QjtRQVg5RSxhQUFRLEdBQVEsRUFBRSxDQUFDO1FBRW5CLGVBQVUsR0FBZSxFQUFFLENBQUM7UUFDNUIsYUFBUSxHQUFlLEVBQUUsQ0FBQztRQUMxQixhQUFRLEdBQUcsR0FBRyxDQUFDO1FBQ2YsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUVULGFBQVEsR0FBRyxJQUFJLENBQUM7UUFDaEIsWUFBTyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUszQixDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsSUFBVyxJQUFJO1FBQ2IsT0FBTyxFQUFFLENBQUM7WUFDUixHQUFHLEVBQUUsRUFBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBQztZQUNwRSxVQUFVLEVBQUUsRUFBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUM7U0FDbkQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQVcsSUFBSTtRQUNiLE9BQU8sYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFTSxNQUFNLENBQUMsU0FBcUIsRUFBRTtRQUNuQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxJQUFJLENBQUMsR0FBRyxPQUFpQjtRQUM5QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxVQUFVLENBQUMsV0FBbUIsRUFBRTtRQUNyQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxPQUFPLENBQUMsSUFBWTtRQUN6QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxjQUFjO1FBQ25CLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVNLEdBQUc7UUFDUixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEYXRhTW9kZWx9IGZyb20gXCIuL2RhdGEtbW9kZWxcIjtcbmltcG9ydCB7Q29sbGVjdGlvbk1vY2t9IGZyb20gXCIuL2RhdGEtY29sbGVjdGlvbi5tb2NrXCI7XG5pbXBvcnQge0ZpbHRlckRhdGEsIElRdWVyeU1ldGEsIElRdWVyeXNldE9wdGlvbnMsIFNvcnREYXRhfSBmcm9tIFwiLi9kYXRhLXF1ZXJ5XCI7XG5pbXBvcnQge2NvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIG9mfSBmcm9tIFwicnhqc1wiO1xuXG5leHBvcnQgY2xhc3MgUXVlcnlzZXRNb2NrPFQgZXh0ZW5kcyBEYXRhTW9kZWw+IHtcbiAgcHVibGljIG1vY2tEYXRhOiBUW10gPSBbXTtcblxuICBwdWJsaWMgZmlsdGVyRGF0YTogRmlsdGVyRGF0YSA9IHt9O1xuICBwdWJsaWMgc29ydERhdGE6IFNvcnREYXRhW10gPSBbXTtcbiAgcHVibGljIHBhZ2VTaXplID0gMTAwO1xuICBwdWJsaWMgcGFnZSA9IDE7XG5cbiAgcHVibGljIHByaXN0aW5lID0gdHJ1ZTtcbiAgcHVibGljIGxvYWRpbmcgPSBvZihmYWxzZSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9jb2xsOiBDb2xsZWN0aW9uTW9jazxUPiwgcHVibGljIG9wdGlvbnM6IElRdWVyeXNldE9wdGlvbnMgPSB7fSkge1xuXG4gIH1cblxuICBwdWJsaWMgZ2V0IHJlc3VsdHMoKTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICByZXR1cm4gb2YodGhpcy5tb2NrRGF0YSB8fCB0aGlzLl9jb2xsLm1vY2tWYWx1ZXMpO1xuICB9XG5cbiAgcHVibGljIGdldCBtZXRhKCk6IE9ic2VydmFibGU8SVF1ZXJ5TWV0YT4ge1xuICAgIHJldHVybiBvZih7XG4gICAgICBuYXY6IHtjb3VudDogMTAwLCBuZXh0OiAxLCBwYWdlOiAxLCBwYWdlczogMTAsIHByZXY6IG51bGwsIHNpemU6IDEwfSxcbiAgICAgIHBhcmFtZXRlcnM6IHtwYWdlOiBcInBhZ2VcIiwgcGFnZV9zaXplOiBcInBhZ2Vfc2l6ZVwifVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldCBmdWxsKCk6IE9ic2VydmFibGU8W1RbXSwgYm9vbGVhbiwgSVF1ZXJ5TWV0YV0+IHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5yZXN1bHRzLCB0aGlzLmxvYWRpbmcsIHRoaXMubWV0YV0pO1xuICB9XG5cbiAgcHVibGljIGZpbHRlcihwYXJhbXM6IEZpbHRlckRhdGEgPSB7fSk6IFF1ZXJ5c2V0TW9jazxUPiB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgc29ydCguLi5zb3J0aW5nOiBzdHJpbmdbXSk6IFF1ZXJ5c2V0TW9jazxUPiB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgcGFnaW5hdGVCeShwYWdlU2l6ZTogbnVtYmVyID0gMjApOiBRdWVyeXNldE1vY2s8VD4ge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIHNldFBhZ2UocGFnZTogbnVtYmVyKTogUXVlcnlzZXRNb2NrPFQ+IHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBnZXRRdWVyeVBhcmFtcygpOiBGaWx0ZXJEYXRhIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBwdWJsaWMgZ2V0KCk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgcmV0dXJuIG9mKHRoaXMubW9ja0RhdGEgfHwgdGhpcy5fY29sbC5tb2NrVmFsdWVzKTtcbiAgfVxufVxuIl19
|