@elderbyte/ngx-starter 15.3.5 → 15.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/esm2020/lib/common/data/data-context/data-context-active-page.mjs +2 -2
  2. package/esm2020/lib/common/data/data-context/data-context-base.mjs +46 -27
  3. package/esm2020/lib/common/data/data-context/data-context-builder.mjs +9 -8
  4. package/esm2020/lib/common/data/data-context/data-context-continuable-paged.mjs +7 -8
  5. package/esm2020/lib/common/data/data-context/data-context-continuable-token.mjs +2 -2
  6. package/esm2020/lib/common/data/data-context/data-context-life-cycle-binding.mjs +4 -2
  7. package/esm2020/lib/common/data/data-context/data-context-source-event-binding.mjs +46 -0
  8. package/esm2020/lib/common/data/data-context/data-context.mjs +1 -1
  9. package/esm2020/lib/common/data/data-context/indexed-entities.mjs +143 -0
  10. package/esm2020/lib/common/data/data-context/public_api.mjs +3 -2
  11. package/esm2020/lib/common/data/datasource/data-source-base.mjs +38 -0
  12. package/esm2020/lib/common/data/datasource/data-source-change-event.mjs +24 -0
  13. package/esm2020/lib/common/data/datasource/data-source.mjs +1 -1
  14. package/esm2020/lib/common/data/datasource/local/local-list-data-source.mjs +11 -19
  15. package/esm2020/lib/common/data/datasource/local/local-paged-data-source.mjs +8 -8
  16. package/esm2020/lib/common/data/datasource/public_api.mjs +3 -1
  17. package/esm2020/lib/common/data/datasource/rest/rest-client.mjs +23 -38
  18. package/fesm2015/elderbyte-ngx-starter.mjs +408 -179
  19. package/fesm2015/elderbyte-ngx-starter.mjs.map +1 -1
  20. package/fesm2020/elderbyte-ngx-starter.mjs +407 -179
  21. package/fesm2020/elderbyte-ngx-starter.mjs.map +1 -1
  22. package/lib/common/data/data-context/data-context-base.d.ts +12 -3
  23. package/lib/common/data/data-context/data-context-builder.d.ts +2 -1
  24. package/lib/common/data/data-context/data-context-source-event-binding.d.ts +31 -0
  25. package/lib/common/data/data-context/data-context.d.ts +14 -2
  26. package/lib/common/data/data-context/indexed-entities.d.ts +72 -0
  27. package/lib/common/data/data-context/public_api.d.ts +2 -1
  28. package/lib/common/data/datasource/data-source-base.d.ts +38 -0
  29. package/lib/common/data/datasource/data-source-change-event.d.ts +13 -0
  30. package/lib/common/data/datasource/data-source.d.ts +2 -1
  31. package/lib/common/data/datasource/local/local-list-data-source.d.ts +3 -7
  32. package/lib/common/data/datasource/local/local-paged-data-source.d.ts +5 -3
  33. package/lib/common/data/datasource/public_api.d.ts +2 -0
  34. package/lib/common/data/datasource/rest/rest-client.d.ts +10 -18
  35. package/package.json +1 -1
  36. package/esm2020/lib/common/data/data-context/data-context-source-auto-reloader.mjs +0 -12
  37. package/lib/common/data/data-context/data-context-source-auto-reloader.d.ts +0 -8
@@ -3034,6 +3034,221 @@ class TokenChunkRequest {
3034
3034
  }
3035
3035
  }
3036
3036
 
3037
+ class SortContext {
3038
+ constructor() {
3039
+ /***************************************************************************
3040
+ * *
3041
+ * Fields *
3042
+ * *
3043
+ **************************************************************************/
3044
+ this._sorts = new BehaviorSubject([]);
3045
+ /***************************************************************************
3046
+ * *
3047
+ * Private methods *
3048
+ * *
3049
+ **************************************************************************/
3050
+ }
3051
+ /***************************************************************************
3052
+ * *
3053
+ * Read API *
3054
+ * *
3055
+ **************************************************************************/
3056
+ get sorts() {
3057
+ return this._sorts.asObservable();
3058
+ }
3059
+ get sortsSnapshot() {
3060
+ return this._sorts.getValue();
3061
+ }
3062
+ findSortDirection(prop) {
3063
+ const f = this.findSort(prop);
3064
+ return f ? f.dir : undefined;
3065
+ }
3066
+ findSort(prop) {
3067
+ return this.sortsSnapshot
3068
+ .filter(f => f.prop === prop)
3069
+ .find(first => true);
3070
+ }
3071
+ /***************************************************************************
3072
+ * *
3073
+ * Public API *
3074
+ * *
3075
+ **************************************************************************/
3076
+ /**
3077
+ * This method updatees / adds the given sort, leaving
3078
+ * existing ones untouched.
3079
+ * @param updatedSort
3080
+ */
3081
+ updateSort(updatedSort) {
3082
+ if (updatedSort) {
3083
+ this.updateSorts([updatedSort]);
3084
+ }
3085
+ }
3086
+ /**
3087
+ * This method updates / adds the given filters, leaving
3088
+ * existing ones untouched.
3089
+ * @param updatedSorts
3090
+ */
3091
+ updateSorts(updatedSorts) {
3092
+ if (updatedSorts && updatedSorts.length > 0) {
3093
+ const sortMap = new Map();
3094
+ this.sortsSnapshot.forEach(s => sortMap.set(s.prop, s));
3095
+ updatedSorts.forEach(s => sortMap.set(s.prop, s));
3096
+ this.replaceSorts(Array.from(updatedSorts.values()));
3097
+ }
3098
+ }
3099
+ /**
3100
+ * Replace all existing filters with the given new ones.
3101
+ * @param newSorts
3102
+ */
3103
+ replaceSorts(newSorts) {
3104
+ this._sorts.next(newSorts || []);
3105
+ }
3106
+ clear() {
3107
+ this.replaceSorts([]);
3108
+ }
3109
+ }
3110
+
3111
+ class IndexedEntities {
3112
+ /***************************************************************************
3113
+ * *
3114
+ * Constructor *
3115
+ * *
3116
+ **************************************************************************/
3117
+ constructor(idFn, localSortFn, sortContext = new SortContext()) {
3118
+ this.idFn = idFn;
3119
+ this.localSortFn = localSortFn;
3120
+ this.sortContext = sortContext;
3121
+ /***************************************************************************
3122
+ * *
3123
+ * Fields *
3124
+ * *
3125
+ **************************************************************************/
3126
+ this.log = LoggerFactory.getLogger('IndexedEntities');
3127
+ this._entities$ = new BehaviorSubject([]);
3128
+ this._idToArrayIndex = new Map();
3129
+ }
3130
+ /***************************************************************************
3131
+ * *
3132
+ * Properties *
3133
+ * *
3134
+ **************************************************************************/
3135
+ get entities$() {
3136
+ return this._entities$.asObservable();
3137
+ }
3138
+ get entitiesSnapshot() {
3139
+ return this._entities$.getValue();
3140
+ }
3141
+ /***************************************************************************
3142
+ * *
3143
+ * Public API *
3144
+ * *
3145
+ **************************************************************************/
3146
+ /**
3147
+ * Replaces all existing entities with the new ones.
3148
+ * The index is rebuilt. O(n)
3149
+ */
3150
+ replaceAll(newEntities = []) {
3151
+ if (this.localSortFn) {
3152
+ newEntities = this.localSortFn(newEntities, this.sortContext.sortsSnapshot);
3153
+ }
3154
+ this.rebuildIndex(newEntities);
3155
+ this.setEntities(newEntities);
3156
+ }
3157
+ /**
3158
+ * Keeps all existing entities, but replaces those which are updated with the new data.
3159
+ * Provided updated entities which are currently not in this index are ignored.
3160
+ * @param updated
3161
+ */
3162
+ updateSome(updated) {
3163
+ const newData = [...this.entitiesSnapshot];
3164
+ updated.forEach(update => {
3165
+ const id = this.getItemId(update);
3166
+ const index = this.indexById(id);
3167
+ if (index != -1) {
3168
+ newData[index] = update;
3169
+ }
3170
+ });
3171
+ this.setEntities(newData);
3172
+ }
3173
+ append(append) {
3174
+ this.insert(append, this.entitiesSnapshot.length);
3175
+ }
3176
+ /**
3177
+ * Appends the given entities to this index.
3178
+ * The new appended entities are included in the index.
3179
+ * O(n) where n = number of appended entities
3180
+ * @param inserted
3181
+ * @param offset
3182
+ */
3183
+ insert(inserted, offset) {
3184
+ if (inserted && inserted.length > 0) {
3185
+ const entities = this.entitiesSnapshot;
3186
+ const newData = [...entities];
3187
+ for (let i = 0; i < inserted.length; i++) {
3188
+ newData[i + offset] = inserted[i];
3189
+ }
3190
+ if (this.localSortFn) {
3191
+ // local sort can re-order all items
3192
+ this.replaceAll(newData);
3193
+ }
3194
+ else {
3195
+ // Without a sort, we can optimize indexing
3196
+ this.reIndexFrom(newData, offset);
3197
+ this.setEntities(newData);
3198
+ }
3199
+ }
3200
+ }
3201
+ /**
3202
+ * Lookup an entity by its id.
3203
+ * This will use an index O(1)
3204
+ * @param id
3205
+ */
3206
+ getById(id) {
3207
+ const entities = this.entitiesSnapshot;
3208
+ const index = this.indexById(id);
3209
+ if (index != -1) {
3210
+ return entities[index];
3211
+ }
3212
+ }
3213
+ notify() {
3214
+ this._entities$.next(this._entities$.getValue());
3215
+ }
3216
+ destroy() {
3217
+ this._entities$.complete();
3218
+ this._idToArrayIndex.clear();
3219
+ }
3220
+ /***************************************************************************
3221
+ * *
3222
+ * Private methods *
3223
+ * *
3224
+ **************************************************************************/
3225
+ rebuildIndex(entities) {
3226
+ this._idToArrayIndex.clear();
3227
+ this.reIndexFrom(entities, 0);
3228
+ }
3229
+ reIndexFrom(entities, startIndex) {
3230
+ for (let i = startIndex; i < entities.length; i++) {
3231
+ const entity = entities[i];
3232
+ if (entity) {
3233
+ this._idToArrayIndex.set(this.getItemId(entity), i);
3234
+ }
3235
+ }
3236
+ }
3237
+ indexById(id) {
3238
+ var _a;
3239
+ return (_a = this._idToArrayIndex.get(id)) !== null && _a !== void 0 ? _a : -1;
3240
+ }
3241
+ getItemId(item) {
3242
+ return this.idFn(item);
3243
+ }
3244
+ setEntities(entities) {
3245
+ if (!(this.entitiesSnapshot.length === 0 && entities.length === 0)) {
3246
+ this.log.debug('Entities changed: ' + entities.length, entities);
3247
+ this._entities$.next(entities);
3248
+ }
3249
+ }
3250
+ }
3251
+
3037
3252
  /**
3038
3253
  * Represents the status of a data-context
3039
3254
  */
@@ -3110,80 +3325,6 @@ function isActivePagedDataContext(object) {
3110
3325
  return object.setActivePage !== undefined;
3111
3326
  }
3112
3327
 
3113
- class SortContext {
3114
- constructor() {
3115
- /***************************************************************************
3116
- * *
3117
- * Fields *
3118
- * *
3119
- **************************************************************************/
3120
- this._sorts = new BehaviorSubject([]);
3121
- /***************************************************************************
3122
- * *
3123
- * Private methods *
3124
- * *
3125
- **************************************************************************/
3126
- }
3127
- /***************************************************************************
3128
- * *
3129
- * Read API *
3130
- * *
3131
- **************************************************************************/
3132
- get sorts() {
3133
- return this._sorts.asObservable();
3134
- }
3135
- get sortsSnapshot() {
3136
- return this._sorts.getValue();
3137
- }
3138
- findSortDirection(prop) {
3139
- const f = this.findSort(prop);
3140
- return f ? f.dir : undefined;
3141
- }
3142
- findSort(prop) {
3143
- return this.sortsSnapshot
3144
- .filter(f => f.prop === prop)
3145
- .find(first => true);
3146
- }
3147
- /***************************************************************************
3148
- * *
3149
- * Public API *
3150
- * *
3151
- **************************************************************************/
3152
- /**
3153
- * This method updatees / adds the given sort, leaving
3154
- * existing ones untouched.
3155
- * @param updatedSort
3156
- */
3157
- updateSort(updatedSort) {
3158
- if (updatedSort) {
3159
- this.updateSorts([updatedSort]);
3160
- }
3161
- }
3162
- /**
3163
- * This method updates / adds the given filters, leaving
3164
- * existing ones untouched.
3165
- * @param updatedSorts
3166
- */
3167
- updateSorts(updatedSorts) {
3168
- if (updatedSorts && updatedSorts.length > 0) {
3169
- const sortMap = new Map();
3170
- this.sortsSnapshot.forEach(s => sortMap.set(s.prop, s));
3171
- updatedSorts.forEach(s => sortMap.set(s.prop, s));
3172
- this.replaceSorts(Array.from(updatedSorts.values()));
3173
- }
3174
- }
3175
- /**
3176
- * Replace all existing filters with the given new ones.
3177
- * @param newSorts
3178
- */
3179
- replaceSorts(newSorts) {
3180
- this._sorts.next(newSorts || []);
3181
- }
3182
- clear() {
3183
- this.replaceSorts([]);
3184
- }
3185
- }
3186
-
3187
3328
  class DataContextBase extends DataSource {
3188
3329
  /***************************************************************************
3189
3330
  * *
@@ -3203,15 +3344,15 @@ class DataContextBase extends DataSource {
3203
3344
  this.baselog = LoggerFactory.getLogger('DataContextBase');
3204
3345
  this._filter = new FilterContext();
3205
3346
  this._sort = new SortContext();
3206
- this._data = new BehaviorSubject([]);
3207
3347
  this._total = new BehaviorSubject(undefined);
3208
3348
  this._status = new BehaviorSubject(DataContextStatus.idle());
3209
3349
  this._started = new BehaviorSubject(false);
3210
3350
  this._closed = new BehaviorSubject(false);
3211
- this._primaryIndex = new Map();
3351
+ this._customIndex = new Map();
3212
3352
  this._reloadQueue = new Subject();
3213
3353
  this.unsubscribe$ = new Subject();
3214
3354
  this._dataSource = dataSource;
3355
+ this._data = new IndexedEntities(e => dataSource.getId(e), _localSort);
3215
3356
  this._loading = this._status.pipe(map(status => status.loading));
3216
3357
  this._filter.filters.pipe(filter(() => this.started), takeUntil(this.unsubscribe$)).subscribe(filters => this.onFiltersChanged(filters));
3217
3358
  this._sort.sorts.pipe(filter(() => this.started), takeUntil(this.unsubscribe$)).subscribe(sorts => this.onSortsChanged(sorts));
@@ -3263,10 +3404,10 @@ class DataContextBase extends DataSource {
3263
3404
  return (_a = this.statusSnapshot) === null || _a === void 0 ? void 0 : _a.loading;
3264
3405
  }
3265
3406
  get data() {
3266
- return this._data.asObservable();
3407
+ return this._data.entities$;
3267
3408
  }
3268
3409
  get dataSnapshot() {
3269
- return this._data.getValue();
3410
+ return this._data.entitiesSnapshot;
3270
3411
  }
3271
3412
  get status() {
3272
3413
  return this._status;
@@ -3309,13 +3450,17 @@ class DataContextBase extends DataSource {
3309
3450
  return this.reloadNow();
3310
3451
  }
3311
3452
  reload() {
3453
+ this.baselog.debug('Requesting a reload of the DataContext from the DataSource.');
3312
3454
  this._reloadQueue.next();
3313
3455
  }
3314
3456
  findByIndex(key) {
3315
3457
  if (!this._indexFn) {
3316
3458
  throw new Error('findByIndex requires you to pass a index function!');
3317
3459
  }
3318
- return this._primaryIndex.get(key);
3460
+ return this._customIndex.get(key);
3461
+ }
3462
+ findById(id) {
3463
+ return this._data.getById(id);
3319
3464
  }
3320
3465
  /**
3321
3466
  * Closes this DataContext and cleans up all used resources.
@@ -3325,15 +3470,17 @@ class DataContextBase extends DataSource {
3325
3470
  this.unsubscribe$.next();
3326
3471
  this.unsubscribe$.complete();
3327
3472
  this._closed.next(true);
3328
- this._data.complete();
3473
+ this._data.destroy();
3329
3474
  this._total.complete();
3330
3475
  this._status.complete();
3331
3476
  this.clearAll();
3332
3477
  this.baselog.debug('DataContext has been closed and resources cleaned up!');
3333
3478
  }
3334
3479
  refresh() {
3335
- const current = this._data.getValue();
3336
- this._data.next(current);
3480
+ this._data.notify();
3481
+ }
3482
+ update(entities) {
3483
+ this._data.updateSome(entities);
3337
3484
  }
3338
3485
  /***************************************************************************
3339
3486
  * *
@@ -3344,14 +3491,20 @@ class DataContextBase extends DataSource {
3344
3491
  return this.reloadInternal(); // TODO This should actually return the real (http) request
3345
3492
  }
3346
3493
  /**
3347
- * Append the given rows to to existing ones.
3494
+ * Append the given rows to the existing ones.
3348
3495
  */
3349
3496
  appendData(additionalData) {
3350
- // We had previous chunks so append to current data.
3351
- const newData = [...this.dataSnapshot];
3352
- newData.push(...additionalData);
3497
+ additionalData = this.localApply(additionalData);
3498
+ this.indexAll(additionalData);
3499
+ this._data.append(additionalData);
3500
+ }
3501
+ /**
3502
+ * Insert the given rows at the given location.
3503
+ */
3504
+ insertData(additionalData, offset) {
3505
+ additionalData = this.localApply(additionalData);
3353
3506
  this.indexAll(additionalData);
3354
- this.setData(newData, true);
3507
+ this._data.insert(additionalData, offset);
3355
3508
  }
3356
3509
  /**
3357
3510
  * Replaces the existing data with the new set.
@@ -3359,19 +3512,22 @@ class DataContextBase extends DataSource {
3359
3512
  * @param alreadyIndexed The rows will be indexed unless they already have been.
3360
3513
  */
3361
3514
  setData(newData, alreadyIndexed = false) {
3362
- if (this._localApply) {
3363
- newData = this._localApply(newData);
3364
- }
3365
- if (this._localSort) {
3366
- newData = this._localSort(newData, this._sort.sortsSnapshot);
3367
- }
3515
+ newData = this.localApply(newData);
3368
3516
  if (!alreadyIndexed) {
3517
+ this.clearIndex();
3369
3518
  this.indexAll(newData);
3370
3519
  }
3371
- const current = this.dataSnapshot;
3372
- if (!(current.length === 0 && newData.length === 0)) {
3373
- this.baselog.debug('Data has changed: ' + newData.length);
3374
- this._data.next(newData);
3520
+ this._data.replaceAll(newData);
3521
+ }
3522
+ clearData() {
3523
+ this.setData([]);
3524
+ }
3525
+ localApply(data) {
3526
+ if (this._localApply) {
3527
+ return this._localApply(data);
3528
+ }
3529
+ else {
3530
+ return data;
3375
3531
  }
3376
3532
  }
3377
3533
  setTotal(total) {
@@ -3385,7 +3541,7 @@ class DataContextBase extends DataSource {
3385
3541
  this.clearIndex();
3386
3542
  if (!silent) {
3387
3543
  this.setTotal(0);
3388
- this.setData([]);
3544
+ this.clearData();
3389
3545
  }
3390
3546
  this.onIdle();
3391
3547
  }
@@ -3399,7 +3555,7 @@ class DataContextBase extends DataSource {
3399
3555
  indexItem(item) {
3400
3556
  const key = this.getItemKey(item);
3401
3557
  if (key) {
3402
- this._primaryIndex.set(key, item);
3558
+ this._customIndex.set(key, item);
3403
3559
  }
3404
3560
  }
3405
3561
  /**
@@ -3416,6 +3572,9 @@ class DataContextBase extends DataSource {
3416
3572
  }
3417
3573
  return null;
3418
3574
  }
3575
+ getItemId(item) {
3576
+ return this.dataSource.getId(item);
3577
+ }
3419
3578
  /***************************************************************************
3420
3579
  * *
3421
3580
  * Event handler *
@@ -3456,7 +3615,7 @@ class DataContextBase extends DataSource {
3456
3615
  * *
3457
3616
  **************************************************************************/
3458
3617
  clearIndex() {
3459
- this._primaryIndex.clear();
3618
+ this._customIndex.clear();
3460
3619
  }
3461
3620
  }
3462
3621
 
@@ -3690,7 +3849,7 @@ class DataContextContinuablePaged extends DataContextContinuableBase {
3690
3849
  this.onIdle();
3691
3850
  }, err => {
3692
3851
  this.onError(err);
3693
- this.setData([]);
3852
+ this.clearData();
3694
3853
  this.setTotal(0);
3695
3854
  this.logger.error('Failed to query data', err);
3696
3855
  subject.error(err);
@@ -3705,13 +3864,12 @@ class DataContextContinuablePaged extends DataContextContinuableBase {
3705
3864
  try {
3706
3865
  this.setTotal(page.totalElements);
3707
3866
  const start = page.number * page.size;
3708
- const newData = clear ? [] : [...this.dataSnapshot];
3709
- for (let i = 0; i < page.content.length; i++) {
3710
- const item = page.content[i];
3711
- newData[i + start] = item;
3712
- this.indexItem(item);
3867
+ if (clear) {
3868
+ this.setData(page.content);
3869
+ }
3870
+ else {
3871
+ this.insertData(page.content, start);
3713
3872
  }
3714
- this.setData(newData, true);
3715
3873
  }
3716
3874
  catch (err) {
3717
3875
  this.onError(err);
@@ -3810,7 +3968,7 @@ class DataContextContinuableToken extends DataContextContinuableBase {
3810
3968
  }, err => {
3811
3969
  this.onError(err);
3812
3970
  this.logger.error('Failed to query data', err);
3813
- this.setData([]);
3971
+ this.clearData();
3814
3972
  this.setTotal(0);
3815
3973
  subject.error(err);
3816
3974
  });
@@ -3946,7 +4104,7 @@ class DataContextActivePage extends DataContextBase {
3946
4104
  subject.next(success);
3947
4105
  this.onIdle();
3948
4106
  }, err => {
3949
- this.setData([]);
4107
+ this.clearData();
3950
4108
  this.actlogger.error('Failed to query data', err);
3951
4109
  subject.error(err);
3952
4110
  this.onError(err);
@@ -4124,7 +4282,9 @@ class DataContextLifeCycleBinding {
4124
4282
  if (_dataContext == null) {
4125
4283
  throw new Error('dataContext must not be null!');
4126
4284
  }
4127
- this._dataContext.data.subscribe(changed => { }, err => { }, () => this.unsubscribe());
4285
+ this._dataContext.data.subscribe({
4286
+ complete: () => this.unsubscribe()
4287
+ });
4128
4288
  }
4129
4289
  /***************************************************************************
4130
4290
  * *
@@ -4277,14 +4437,72 @@ class DataContextAutoStarter extends DataContextLifeCycleBinding {
4277
4437
  }
4278
4438
  }
4279
4439
 
4280
- class DataContextSourceAutoReloader extends DataContextLifeCycleBinding {
4281
- constructor(dataContext, dataApi) {
4440
+ class DataContextSourceEventBinding extends DataContextLifeCycleBinding {
4441
+ /***************************************************************************
4442
+ * *
4443
+ * Fields *
4444
+ * *
4445
+ **************************************************************************/
4446
+ /***************************************************************************
4447
+ * *
4448
+ * Constructor *
4449
+ * *
4450
+ **************************************************************************/
4451
+ constructor(dataContext, dataApi, reloadOnChanges) {
4282
4452
  super(dataContext);
4283
4453
  this.dataApi = dataApi;
4454
+ this.reloadOnChanges = reloadOnChanges;
4284
4455
  this.subscribe();
4285
4456
  }
4457
+ /***************************************************************************
4458
+ * *
4459
+ * Internal Impl *
4460
+ * *
4461
+ **************************************************************************/
4286
4462
  subscribe() {
4287
- this._subscription = this.dataApi.dataChanged.subscribe(() => this._dataContext.reload());
4463
+ this._subscription = this.dataApi.dataChanged.subscribe(event => this.handleDataChangeEvent(event));
4464
+ }
4465
+ /***************************************************************************
4466
+ * *
4467
+ * Private methods *
4468
+ * *
4469
+ **************************************************************************/
4470
+ handleDataChangeEvent(event) {
4471
+ if (this.reloadOnChanges && this.isReloadDesirable(event)) {
4472
+ this._dataContext.reload();
4473
+ return;
4474
+ }
4475
+ // We might also be able to perform deletions locally, and avoid reload data
4476
+ if (event.modified) {
4477
+ this._dataContext.update(event.modified);
4478
+ }
4479
+ }
4480
+ isReloadDesirable(event) {
4481
+ return event.unknownChanges || event.created || event.deletedIds;
4482
+ }
4483
+ }
4484
+
4485
+ var DataSourceChangeType;
4486
+ (function (DataSourceChangeType) {
4487
+ })(DataSourceChangeType || (DataSourceChangeType = {}));
4488
+ class DataSourceChangeEvent {
4489
+ constructor(deletedIds, modified, created) {
4490
+ this.deletedIds = deletedIds;
4491
+ this.modified = modified;
4492
+ this.created = created;
4493
+ this.unknownChanges = !deletedIds && !modified && !created;
4494
+ }
4495
+ static unknownChanges() {
4496
+ return new DataSourceChangeEvent(null, null, null);
4497
+ }
4498
+ static deleted(ids) {
4499
+ return new DataSourceChangeEvent(ids, null, null);
4500
+ }
4501
+ static modified(modified) {
4502
+ return new DataSourceChangeEvent(null, modified, null);
4503
+ }
4504
+ static created(created) {
4505
+ return new DataSourceChangeEvent(null, null, created);
4288
4506
  }
4289
4507
  }
4290
4508
 
@@ -4299,13 +4517,50 @@ class EntityIdUtil {
4299
4517
  }
4300
4518
  }
4301
4519
 
4302
- class LocalListDataSource {
4520
+ class DataSourceBase {
4521
+ /***************************************************************************
4522
+ * *
4523
+ * Constructor *
4524
+ * *
4525
+ **************************************************************************/
4526
+ constructor(idProperty) {
4527
+ this.idProperty = idProperty;
4528
+ /***************************************************************************
4529
+ * *
4530
+ * Fields *
4531
+ * *
4532
+ **************************************************************************/
4533
+ this.dataChangeEvents$ = new Subject();
4534
+ }
4535
+ /***************************************************************************
4536
+ * *
4537
+ * Properties *
4538
+ * *
4539
+ **************************************************************************/
4540
+ get dataChanged() {
4541
+ return this.dataChangeEvents$.asObservable();
4542
+ }
4543
+ /***************************************************************************
4544
+ * *
4545
+ * Public API *
4546
+ * *
4547
+ **************************************************************************/
4548
+ publishChangeEvent(e) {
4549
+ this.dataChangeEvents$.next(e);
4550
+ }
4551
+ getId(entity) {
4552
+ return EntityIdUtil.getId(entity, this.idProperty);
4553
+ }
4554
+ }
4555
+
4556
+ class LocalListDataSource extends DataSourceBase {
4303
4557
  /***************************************************************************
4304
4558
  * *
4305
4559
  * Constructor *
4306
4560
  * *
4307
4561
  **************************************************************************/
4308
4562
  constructor(localData, localSort, localFilter, idProperty) {
4563
+ super(idProperty || LocalListDataSource.guessIdProperty(localData));
4309
4564
  /***************************************************************************
4310
4565
  * *
4311
4566
  * Fields *
@@ -4313,13 +4568,11 @@ class LocalListDataSource {
4313
4568
  **************************************************************************/
4314
4569
  this.logger = LoggerFactory.getLogger(this.constructor.name);
4315
4570
  this.data$ = new BehaviorSubject([]);
4316
- this.dataChange$ = new Subject();
4317
4571
  if (!localData) {
4318
4572
  throw new Error('localData must not be null!');
4319
4573
  }
4320
4574
  this.localSort = localSort || ((data, sort) => data);
4321
4575
  this.localFilter = localFilter || ((data, sort) => data);
4322
- this.idProperty = idProperty || this.guessIdProperty(localData);
4323
4576
  this.data = localData;
4324
4577
  }
4325
4578
  /***************************************************************************
@@ -4345,9 +4598,6 @@ class LocalListDataSource {
4345
4598
  * IDataSource API *
4346
4599
  * *
4347
4600
  **************************************************************************/
4348
- get dataChanged() {
4349
- return this.dataChange$.asObservable();
4350
- }
4351
4601
  findById(id) {
4352
4602
  return of(this.data.find(d => this.getId(d) === id));
4353
4603
  }
@@ -4357,9 +4607,6 @@ class LocalListDataSource {
4357
4607
  findAllFiltered(filters, sorts) {
4358
4608
  return of(this.data).pipe(map(data => this.localFilter(data, filters)), map(data => this.localSort(data, sorts)));
4359
4609
  }
4360
- getId(entity) {
4361
- return EntityIdUtil.getId(entity, this.idProperty);
4362
- }
4363
4610
  /***************************************************************************
4364
4611
  * *
4365
4612
  * Public API *
@@ -4367,7 +4614,7 @@ class LocalListDataSource {
4367
4614
  **************************************************************************/
4368
4615
  set data(data) {
4369
4616
  this.data$.next(data);
4370
- this.onLocalDataChanges(data);
4617
+ this.publishChangeEvent(DataSourceChangeEvent.unknownChanges());
4371
4618
  }
4372
4619
  get data() {
4373
4620
  return this.data$.getValue();
@@ -4377,19 +4624,17 @@ class LocalListDataSource {
4377
4624
  * Private methods *
4378
4625
  * *
4379
4626
  **************************************************************************/
4380
- onLocalDataChanges(data) {
4381
- this.dataChange$.next(data);
4382
- }
4383
- guessIdProperty(localData) {
4627
+ static guessIdProperty(localData) {
4628
+ const log = LoggerFactory.getLogger('LocalListDataSource');
4384
4629
  if (localData && localData.length > 0) {
4385
4630
  const sample = localData[0];
4386
4631
  if (typeof sample === 'object') {
4387
4632
  if (sample.hasOwnProperty('id')) {
4388
- this.logger.warn('DataSource without defined id-property => autodetected property id-property as "id"');
4633
+ log.warn('DataSource without defined id-property => autodetected property id-property as "id"');
4389
4634
  return 'id'; // Use id
4390
4635
  }
4391
4636
  else {
4392
- this.logger.warn('Local DataSource created without defined id-property and objects. Using object equality!');
4637
+ log.warn('Local DataSource created without defined id-property and objects. Using object equality!');
4393
4638
  }
4394
4639
  }
4395
4640
  }
@@ -4403,11 +4648,11 @@ class LocalPagedDataSource {
4403
4648
  * Constructor *
4404
4649
  * *
4405
4650
  **************************************************************************/
4406
- constructor(localData, idProperty, localSort, localFilter) {
4407
- if (!localData) {
4408
- throw new Error('localData must not be null!');
4651
+ constructor(listDataSource) {
4652
+ if (!listDataSource) {
4653
+ throw new Error('listDataSource must not be null!');
4409
4654
  }
4410
- this.localListFetcher = new LocalListDataSource(localData, localSort, localFilter, idProperty);
4655
+ this.localListFetcher = listDataSource;
4411
4656
  }
4412
4657
  /***************************************************************************
4413
4658
  * *
@@ -4422,10 +4667,10 @@ class LocalPagedDataSource {
4422
4667
  * @param localFilter
4423
4668
  */
4424
4669
  static empty(idProperty, localSort, localFilter) {
4425
- return LocalPagedDataSource.from([], idProperty, localSort, localFilter);
4670
+ return LocalPagedDataSource.of(LocalListDataSource.empty(idProperty, localSort, localFilter));
4426
4671
  }
4427
- static from(localData, idProperty, localSort, localFilter) {
4428
- return new LocalPagedDataSource(localData, idProperty, localSort, localFilter);
4672
+ static of(listDataSource) {
4673
+ return new LocalPagedDataSource(listDataSource);
4429
4674
  }
4430
4675
  /***************************************************************************
4431
4676
  * *
@@ -4820,12 +5065,15 @@ class DataContextBuilder {
4820
5065
  * *
4821
5066
  **************************************************************************/
4822
5067
  buildLocal(items, idProperty) {
4823
- return this.build(LocalListDataSource.from(items, idProperty, this._localSort, FilterUtil.filterData));
5068
+ return this.build(this.localListSource(items, idProperty));
4824
5069
  }
4825
- buildLocalActivePaged(data, idProperty) {
5070
+ buildLocalActivePaged(items, idProperty) {
4826
5071
  this._skipLocalSort = true;
4827
5072
  this.activePaged();
4828
- return this.build(LocalPagedDataSource.from(data, idProperty, this._localSort, FilterUtil.filterData));
5073
+ return this.build(LocalPagedDataSource.of(this.localListSource(items, idProperty)));
5074
+ }
5075
+ localListSource(items, idProperty) {
5076
+ return LocalListDataSource.from(items, idProperty, this._localSort, FilterUtil.filterData);
4829
5077
  }
4830
5078
  /***************************************************************************
4831
5079
  * *
@@ -4914,9 +5162,7 @@ class DataContextBuilder {
4914
5162
  return new DataContextActivePage(pageSource, this._pageSize, this._indexFn, this._localApply, this._skipLocalSort ? null : this._localSort);
4915
5163
  }
4916
5164
  setupDataContextAutoReload(dc, dataSource) {
4917
- if (this._reloadOnLocalChanges) {
4918
- const binding = new DataContextSourceAutoReloader(dc, dataSource);
4919
- }
5165
+ const binding = new DataContextSourceEventBinding(dc, dataSource, this._reloadOnLocalChanges);
4920
5166
  return dc;
4921
5167
  }
4922
5168
  setupDataContextAutoStart(dc, autoStartSpec) {
@@ -5226,13 +5472,14 @@ class InternalRestClientConfig {
5226
5472
  */
5227
5473
  class RestClientConfig {
5228
5474
  }
5229
- class RestClient {
5475
+ class RestClient extends DataSourceBase {
5230
5476
  /***************************************************************************
5231
5477
  * *
5232
5478
  * Constructor *
5233
5479
  * *
5234
5480
  **************************************************************************/
5235
5481
  constructor(restEndpoint, http, config) {
5482
+ super(config.idField);
5236
5483
  this.restEndpoint = restEndpoint;
5237
5484
  this.http = http;
5238
5485
  /***************************************************************************
@@ -5241,22 +5488,7 @@ class RestClient {
5241
5488
  * *
5242
5489
  **************************************************************************/
5243
5490
  this._logger = LoggerFactory.getLogger(this.constructor.name);
5244
- this.localChangeSubject = new Subject();
5245
- this.config = new InternalRestClientConfig(config);
5246
- }
5247
- /***************************************************************************
5248
- * *
5249
- * Properties *
5250
- * *
5251
- **************************************************************************/
5252
- get dataChanged() {
5253
- return this.localChangeSubject.asObservable();
5254
- }
5255
- /**
5256
- * @deprecated Use dataChanged
5257
- */
5258
- get localChanged() {
5259
- return this.dataChanged;
5491
+ this.config = config;
5260
5492
  }
5261
5493
  /***************************************************************************
5262
5494
  * *
@@ -5281,26 +5513,24 @@ class RestClient {
5281
5513
  create(newEntity, params) {
5282
5514
  return this.http.post(this.restEndpoint, newEntity, {
5283
5515
  params: params
5284
- })
5285
- .pipe(tap(e => this.onLocalChanged(e)));
5516
+ }).pipe(tap(e => this.publishChangeEvent(DataSourceChangeEvent.created([e]))));
5286
5517
  }
5287
- update(updatedEntity, params) {
5288
- return this.http.put(this.getEntityUrlBy(updatedEntity), updatedEntity, {
5518
+ update(update, params) {
5519
+ return this.http.put(this.getEntityUrlBy(update), update, {
5289
5520
  params: params
5290
- })
5291
- .pipe(tap(e => this.onLocalChanged(e)));
5521
+ }).pipe(tap(e => this.publishChangeEvent(DataSourceChangeEvent.modified([e]))));
5292
5522
  }
5293
5523
  updateAll(updatedEntities, params) {
5294
5524
  return this.http.put(this.restEndpoint, updatedEntities, {
5295
5525
  params: params
5296
5526
  })
5297
- .pipe(tap(e => this.onLocalChanged()));
5527
+ .pipe(tap(entities => this.publishChangeEvent(DataSourceChangeEvent.modified(entities))));
5298
5528
  }
5299
5529
  delete(entity, params) {
5300
5530
  return this.http.delete(this.getEntityUrlBy(entity), {
5301
5531
  responseType: 'text',
5302
5532
  params: params
5303
- }).pipe(tap(() => this.onLocalChanged(entity)));
5533
+ }).pipe(tap(() => this.publishChangeEvent(DataSourceChangeEvent.deleted([this.getId(entity)]))));
5304
5534
  }
5305
5535
  deleteAll(entities, params) {
5306
5536
  const ids = entities.map(e => String(this.getId(e)));
@@ -5309,9 +5539,6 @@ class RestClient {
5309
5539
  this._logger.debug('Deleting ' + entities.length + ' in ' + deleteRequests.length + ' batches: ', deleteRequests);
5310
5540
  return forkJoin(deleteRequests);
5311
5541
  }
5312
- getId(entity) {
5313
- return EntityIdUtil.getId(entity, this.config.idField);
5314
- }
5315
5542
  /***************************************************************************
5316
5543
  * *
5317
5544
  * Sub Resource Builder *
@@ -5334,15 +5561,18 @@ class RestClient {
5334
5561
  patchInternal(id, entityPatch, params) {
5335
5562
  return this.http.patch(this.getEntityUrl(id), entityPatch, {
5336
5563
  params: params
5337
- }).pipe(tap(e => this.onLocalChanged()));
5564
+ }).pipe(tap(e => this.publishChangeEvent(DataSourceChangeEvent.modified([e]))));
5338
5565
  }
5339
5566
  patchAllInternal(entityPatches, params) {
5340
5567
  return this.http.patch(this.restEndpoint, entityPatches, {
5341
5568
  params: params
5342
- }).pipe(tap(e => this.onLocalChanged()));
5569
+ }).pipe(tap(e => this.publishChangeEvent(DataSourceChangeEvent.modified(e))));
5343
5570
  }
5571
+ /**
5572
+ * @deprecated Switch to publishChangeEvent
5573
+ */
5344
5574
  onLocalChanged(entity) {
5345
- this.localChangeSubject.next(entity);
5575
+ this.publishChangeEvent(DataSourceChangeEvent.unknownChanges());
5346
5576
  }
5347
5577
  getEntityUrlBy(entity) {
5348
5578
  return this.getEntityUrl(this.getId(entity));
@@ -5369,7 +5599,7 @@ class RestClient {
5369
5599
  params: builder.build(),
5370
5600
  responseType: 'text'
5371
5601
  })
5372
- .pipe(tap(() => this.onLocalChanged()));
5602
+ .pipe(tap(() => DataSourceChangeEvent.deleted(ids)));
5373
5603
  }
5374
5604
  }
5375
5605
  class RestClientList extends RestClient {
@@ -5379,7 +5609,7 @@ class RestClientList extends RestClient {
5379
5609
  * *
5380
5610
  **************************************************************************/
5381
5611
  constructor(restEndpoint, http, config) {
5382
- super(restEndpoint, http, config);
5612
+ super(restEndpoint, http, new InternalRestClientConfig(config));
5383
5613
  }
5384
5614
  /***************************************************************************
5385
5615
  * *
@@ -5413,7 +5643,7 @@ class RestClientPaged extends RestClient {
5413
5643
  * *
5414
5644
  **************************************************************************/
5415
5645
  constructor(restEndpoint, http, config) {
5416
- super(restEndpoint, http, config);
5646
+ super(restEndpoint, http, new InternalRestClientConfig(config));
5417
5647
  }
5418
5648
  /***************************************************************************
5419
5649
  * *
@@ -5458,7 +5688,7 @@ class RestClientContinuable extends RestClient {
5458
5688
  * *
5459
5689
  **************************************************************************/
5460
5690
  constructor(restEndpoint, http, config) {
5461
- super(restEndpoint, http, config);
5691
+ super(restEndpoint, http, new InternalRestClientConfig(config));
5462
5692
  }
5463
5693
  /***************************************************************************
5464
5694
  * *
@@ -28671,6 +28901,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImpor
28671
28901
  * Generated bundle index. Do not edit.
28672
28902
  */
28673
28903
 
28674
- export { AuditedEntity, AutoStartSpec, BlobUrl, BytesFormat, BytesPerSecondFormat, BytesPipe, CardDropEvent, CardOrganizerData, CardStack, CollectionUtil, ComparatorBuilder, ConfirmDialogConfig, ContinuableListing, CsvColumnSpec, CsvSerializer, CsvSpec, CsvStreamExporter, CsvStreamExporterBuilder, CsvStreamExporterBuilderService, Currency, CurrencyCode, CurrencyUnit, CurrencyUnitRegistry, CustomDateAdapter, DataContextActivePage, DataContextAutoStarter, DataContextBase, DataContextBuilder, DataContextContinuableBase, DataContextContinuablePaged, DataContextContinuableToken, DataContextLifeCycleBinding, DataContextSelectionDirective, DataContextSimple, DataContextSnapshot, DataContextSourceAutoReloader, DataContextStateIndicatorComponent, DataContextStatus, DataSourceAdapter, DataSourceProcessor, DataTransferFactory, DataTransferProgress, DataTransferProgressAggregate, DataTransferState, DataTransferStatus, DataViewIframeAdapterDirective, DataViewIframeComponent, DataViewMessage, DataViewOptionsProviderBinding, DataViewSelection, DataViewSelectionInit, DateUtil, DelegateContinuableDataSource, DelegateDataSource, DelegateListDataSource, DelegatePagedDataSource, Dimensions, DrawerOutletBinding, DurationBucket, DurationFormat, ELDER_DATA_VIEW, ELDER_SELECT_BASE, ElderAccessDeniedComponent, ElderAccessDeniedModule, ElderAppHeaderComponent, ElderAuditModule, ElderAuditedEntityComponent, ElderAutoSelectFirstDirective, ElderAutocompleteComponent, ElderAutocompleteDirective, ElderAutocompleteManyDirective, ElderAutocompleteModule, ElderBlobViewerComponent, ElderBreadCrumbsComponent, ElderBreadCrumbsModule, ElderButtonGroupComponent, ElderButtonGroupModule, ElderCardComponent, ElderCardContentDirective, ElderCardHeaderActionsDirective, ElderCardHeaderComponent, ElderCardModule, ElderCardOrganizerComponent, ElderCardOrganizerModule, ElderCardPanelComponent, ElderCardStackComponent, ElderCardSubtitleDirective, ElderCardTitleDirective, ElderCheckboxState, ElderChipLabelDirective, ElderChipListSelectComponent, ElderChipListSelectModule, ElderChipsModule, ElderClearSelectDirective, ElderClipboardPutDirective, ElderClipboardService, ElderConfirmDialogComponent, ElderConnectivityModule, ElderConnectivityService, ElderContainersModule, ElderCsvExportBtnComponent, ElderCsvModule, ElderCurrencyModule, ElderCurrencyPipe, ElderDataCommonModule, ElderDataToolbarComponent, ElderDataTransferModule, ElderDataTransferService, ElderDataViewBaseComponent, ElderDataViewOptions, ElderDataViewOptionsProvider, ElderDateSwitcherComponent, ElderDateTimeInputComponent, ElderDatesModule, ElderDelayedFocusDirective, ElderDialogConfig, ElderDialogModule, ElderDialogPanelComponent, ElderDialogService, ElderDimensionsInputComponent, ElderDurationInputComponent, ElderEntityValueAccessorUtil, ElderEnumTranslationService, ElderErrorModule, ElderEventSourceService, ElderExceptionDetailComponent, ElderExpandToggleButtonComponent, ElderExpandToggleButtonModule, ElderFileDropZoneDirective, ElderFileModule, ElderFileSelectComponent, ElderFileSelectDirective, ElderFileUploadComponent, ElderFormFieldControlBase, ElderFormFieldDenseDirective, ElderFormFieldLabelDirective, ElderFormFieldNoHintDirective, ElderFormFieldNoSpinnerDirective, ElderFormsDirectivesModule, ElderFormsModule, ElderFromFieldBase, ElderFromFieldEntityBase, ElderFromFieldMultiEntityBase, ElderGlobalSearchComponent, ElderGlobalSearchModule, ElderGlobalSearchService, ElderGridComponent, ElderGridModule, ElderGridTileDirective, ElderGridToolbarDirective, ElderHeaderComponent, ElderHeaderModule, ElderHttpClient, ElderI18nEntitiesModule, ElderIFrameModule, ElderInfiniteAutocompleteDirective, ElderInfiniteScrollDirective, ElderInfiniteScrollLegacyDirective, ElderInfiniteScrollModule, ElderInputPatternDirective, ElderIntervalInputComponent, ElderKeyEventDirective, ElderLabelInputComponent, ElderLabelsModule, ElderLanguageConfig, ElderLanguageInterceptor, ElderLanguageModule, ElderLanguageService, ElderLanguageSwitcherComponent, ElderLocalDateInputComponent, ElderLocalTimeInputComponent, ElderLocalesDeChModule, ElderLocalizedInputComponent, ElderLocalizedInputDialogComponent, ElderLocalizedInputDialogService, ElderLocalizedInputTableComponent, ElderLocalizedTextColumnDirective, ElderLocalizedTextsDirective, ElderMaxValidator, ElderMeasuresModule, ElderMinValidator, ElderMultiEntityValueAccessorUtil, ElderMultiSelectBase, ElderMultiSelectChipsComponent, ElderMultiSelectFormField, ElderMultipleOfUtil, ElderMultipleOfValidator, ElderNavGroupComponent, ElderNavLinkComponent, ElderNavListComponent, ElderNavModule, ElderNextFocusableDirective, ElderNumberCellDirective, ElderOfflineIndicatorComponent, ElderOverlayComponent, ElderOverlayModule, ElderOverlayOriginDirective, ElderOverlayTriggerDirective, ElderPaddingDirective, ElderPanelComponent, ElderPanelModule, ElderPeriodInputComponent, ElderPipesModule, ElderPlugParentFormDirective, ElderProgressBarComponent, ElderProgressBarModule, ElderQuantityFormFieldComponent, ElderQuantityInputControlComponent, ElderQuantityModule, ElderQuantityPipe, ElderQuantityRangeValidator, ElderQuantityService, ElderQuantityTransformPipe, ElderQuestionDialogComponent, ElderRepeatPipe, ElderRepeatPipeLegacy, ElderRequiredDimensionsValidator, ElderRequiredIgnoreZeroValidator, ElderRequiredQuantityValidator, ElderRoundPipe, ElderRouteOutletDrawerService, ElderRouterOutletService, ElderRouterService, ElderSafeUrlPipe, ElderScrollContainerComponent, ElderSearchBoxComponent, ElderSearchContextDirective, ElderSearchInputDirective, ElderSearchModule, ElderSearchPanelComponent, ElderSelectBase, ElderSelectChipAvatarDirective, ElderSelectChipDirective, ElderSelectComponent, ElderSelectComponentState, ElderSelectCustomInputDirective, ElderSelectFormField, ElderSelectModule, ElderSelectOnTabDirective, ElderSelectValueDirective, ElderSelectionDialogComponent, ElderSelectionDialogDirective, ElderSelectionMasterCheckboxComponent, ElderSelectionPopupTriggerAdapterDirective, ElderShellCenterDirective, ElderShellComponent, ElderShellModule, ElderShellNavigationToggleComponent, ElderShellService, ElderShellSideLeftDirective, ElderShellSideRightDirective, ElderShellSlotDirective, ElderSimpleSelectionViewComponent, ElderSimpleSelectionViewModule, ElderSingleSortComponent, ElderStackCardDirective, ElderStopEventPropagationDirective, ElderSvgViewerComponent, ElderTabDirective, ElderTabFocusTrapDirective, ElderTabGroupRoutingDirective, ElderTabModule, ElderTableActivationDirective, ElderTableComponent, ElderTableExtensionDirective, ElderTableGroup, ElderTableModel, ElderTableModelCdkTableBinding, ElderTableModelQueryGroup, ElderTableModule, ElderTableProviders, ElderTableRootDirective, ElderTableSortDirective, ElderTableToolbarDirective, ElderThemeApplierDirective, ElderThemeDirective, ElderThemeModule, ElderThemePreferenceService, ElderThemeService, ElderThemeToggleComponent, ElderTimeModule, ElderToastModule, ElderToastService, ElderTogglePanelComponent, ElderTogglePanelPrimaryDirective, ElderTogglePanelSecondaryDirective, ElderTogglePanelTriggerDirective, ElderToolbarColumnDirective, ElderToolbarComponent, ElderToolbarContentDirective, ElderToolbarModule, ElderToolbarService, ElderToolbarTitleComponent, ElderToolbarTitleService, ElderTouchedDirective, ElderTrimPipe, ElderTripleStateCheckboxDirective, ElderTruncatePipe, ElderUnitSelectDirective, ElderUnitService, ElderUrlFragment, ElderUrlFragmentModule, ElderUrlFragmentParamsService, ElderUrlFragmentSwitcherComponent, ElderValidationErrorDirective, ElderViewersModule, EntitySetPatch, ErrorUtil, ExceptionDetailCtx, FileUploadClient, Filter, FilterContext, FilterUtil, FormFieldBaseComponent, HttpClientBuilder, HttpClientPristine, HttpDataTransfer, HttpDataTransferAggregateComponent, HttpDataTransferComponent, HttpDataTransferIndicatorComponent, HttpDataTransferOverviewComponent, HttpParamsBuilder, I18nBase, I18nPickAsyncPipe, I18nPickPipe, I18nText, IFrameState, IframeCloseDirective, IframeDialogComponent, IframeHostComponent, IframeService, IframeSideContentComponent, InternalRestClientConfig, Interval, IsoDurationPipe, IsoIntervalParsePipe, IsoIntervalPipe, JsonMapUtil, KafentConfig, KafentEvent, KafentEventService, KafentEventStream, KafentEventStreamDisabled, KafentEventStreamSse, KafentEventTransport, KafentModule, KafentSseEventChannel, KafentTokenProvider, KafentTokenProviderSessionStorage, KafentTopicSse, KnownElderThemes, KnownLocaleType, LocalListDataSource, LocalPagedDataSource, LocalisationPickerService, MasterSelectionState, MatTableDataContextBinding, MatTableDataContextBindingBuilder, MultiModelBaseComponent, NextNumberUtil, Objects, OnlineStatus, Page, PageRequest, Pageable, ParseUtil, Path, PathNode, PeriodBucket, PeriodDuration, PeriodFormat, ProcessIterationContext, ProcessState, PropertyPathUtil, Quantity, QueryListBinding, QuestionDialogConfig, ReactiveEventSource, ReactiveMap, RefreshingEntity, RestClient, RestClientConfig, RestClientContinuable, RestClientList, RestClientPaged, SearchQuery, SelectionModel, SelectionModelPopupDirective, Sets, SimpleLocalisationPicker, Sort, SortOption, SortUtil, SubBar, SuggestionProvider, TemplateCompositeControl, TemplatedSelectionDialogComponent, ThemeSpec, TimeAgoPipe, TimeDurationPipe, TimeUtil, ToastType, TokenChunkRequest, ToolbarHeader, TranslatedEnumValue, TypedEventMessage, Unit, UnitDimension, UnitDimensionInfo, UnitInfo, UnitRegistry, UrlBuilder, UrlQueryParams, UuidUtil, ValueAccessorBase, ValueWrapper, ViewProviders, WeightPipe, alphaNumStringComparator, buildFormIntegrationProviders, createDataOptionsProvider, createSelectionModel, existingOrNewElderTableModel, isActivePagedDataContext, isContinuableDataContext, isContinuableDataSource, isDataContext, isDataSource, isElderEntityValueAccessor, isElderMultiEntityValueAccessor, isListDataSource, isPagedDataSource, naturalValueComparator, newElderTableModel, proxyControlContainer, registerLocale, runInZone, themeInit };
28675
- //# sourceMappingURL=elderbyte-ngx-starter.mjs.map
28904
+ export { AuditedEntity, AutoStartSpec, BlobUrl, BytesFormat, BytesPerSecondFormat, BytesPipe, CardDropEvent, CardOrganizerData, CardStack, CollectionUtil, ComparatorBuilder, ConfirmDialogConfig, ContinuableListing, CsvColumnSpec, CsvSerializer, CsvSpec, CsvStreamExporter, CsvStreamExporterBuilder, CsvStreamExporterBuilderService, Currency, CurrencyCode, CurrencyUnit, CurrencyUnitRegistry, CustomDateAdapter, DataContextActivePage, DataContextAutoStarter, DataContextBase, DataContextBuilder, DataContextContinuableBase, DataContextContinuablePaged, DataContextContinuableToken, DataContextLifeCycleBinding, DataContextSelectionDirective, DataContextSimple, DataContextSnapshot, DataContextSourceEventBinding, DataContextStateIndicatorComponent, DataContextStatus, DataSourceAdapter, DataSourceBase, DataSourceChangeEvent, DataSourceChangeType, DataSourceProcessor, DataTransferFactory, DataTransferProgress, DataTransferProgressAggregate, DataTransferState, DataTransferStatus, DataViewIframeAdapterDirective, DataViewIframeComponent, DataViewMessage, DataViewOptionsProviderBinding, DataViewSelection, DataViewSelectionInit, DateUtil, DelegateContinuableDataSource, DelegateDataSource, DelegateListDataSource, DelegatePagedDataSource, Dimensions, DrawerOutletBinding, DurationBucket, DurationFormat, ELDER_DATA_VIEW, ELDER_SELECT_BASE, ElderAccessDeniedComponent, ElderAccessDeniedModule, ElderAppHeaderComponent, ElderAuditModule, ElderAuditedEntityComponent, ElderAutoSelectFirstDirective, ElderAutocompleteComponent, ElderAutocompleteDirective, ElderAutocompleteManyDirective, ElderAutocompleteModule, ElderBlobViewerComponent, ElderBreadCrumbsComponent, ElderBreadCrumbsModule, ElderButtonGroupComponent, ElderButtonGroupModule, ElderCardComponent, ElderCardContentDirective, ElderCardHeaderActionsDirective, ElderCardHeaderComponent, ElderCardModule, ElderCardOrganizerComponent, ElderCardOrganizerModule, ElderCardPanelComponent, ElderCardStackComponent, ElderCardSubtitleDirective, ElderCardTitleDirective, ElderCheckboxState, ElderChipLabelDirective, ElderChipListSelectComponent, ElderChipListSelectModule, ElderChipsModule, ElderClearSelectDirective, ElderClipboardPutDirective, ElderClipboardService, ElderConfirmDialogComponent, ElderConnectivityModule, ElderConnectivityService, ElderContainersModule, ElderCsvExportBtnComponent, ElderCsvModule, ElderCurrencyModule, ElderCurrencyPipe, ElderDataCommonModule, ElderDataToolbarComponent, ElderDataTransferModule, ElderDataTransferService, ElderDataViewBaseComponent, ElderDataViewOptions, ElderDataViewOptionsProvider, ElderDateSwitcherComponent, ElderDateTimeInputComponent, ElderDatesModule, ElderDelayedFocusDirective, ElderDialogConfig, ElderDialogModule, ElderDialogPanelComponent, ElderDialogService, ElderDimensionsInputComponent, ElderDurationInputComponent, ElderEntityValueAccessorUtil, ElderEnumTranslationService, ElderErrorModule, ElderEventSourceService, ElderExceptionDetailComponent, ElderExpandToggleButtonComponent, ElderExpandToggleButtonModule, ElderFileDropZoneDirective, ElderFileModule, ElderFileSelectComponent, ElderFileSelectDirective, ElderFileUploadComponent, ElderFormFieldControlBase, ElderFormFieldDenseDirective, ElderFormFieldLabelDirective, ElderFormFieldNoHintDirective, ElderFormFieldNoSpinnerDirective, ElderFormsDirectivesModule, ElderFormsModule, ElderFromFieldBase, ElderFromFieldEntityBase, ElderFromFieldMultiEntityBase, ElderGlobalSearchComponent, ElderGlobalSearchModule, ElderGlobalSearchService, ElderGridComponent, ElderGridModule, ElderGridTileDirective, ElderGridToolbarDirective, ElderHeaderComponent, ElderHeaderModule, ElderHttpClient, ElderI18nEntitiesModule, ElderIFrameModule, ElderInfiniteAutocompleteDirective, ElderInfiniteScrollDirective, ElderInfiniteScrollLegacyDirective, ElderInfiniteScrollModule, ElderInputPatternDirective, ElderIntervalInputComponent, ElderKeyEventDirective, ElderLabelInputComponent, ElderLabelsModule, ElderLanguageConfig, ElderLanguageInterceptor, ElderLanguageModule, ElderLanguageService, ElderLanguageSwitcherComponent, ElderLocalDateInputComponent, ElderLocalTimeInputComponent, ElderLocalesDeChModule, ElderLocalizedInputComponent, ElderLocalizedInputDialogComponent, ElderLocalizedInputDialogService, ElderLocalizedInputTableComponent, ElderLocalizedTextColumnDirective, ElderLocalizedTextsDirective, ElderMaxValidator, ElderMeasuresModule, ElderMinValidator, ElderMultiEntityValueAccessorUtil, ElderMultiSelectBase, ElderMultiSelectChipsComponent, ElderMultiSelectFormField, ElderMultipleOfUtil, ElderMultipleOfValidator, ElderNavGroupComponent, ElderNavLinkComponent, ElderNavListComponent, ElderNavModule, ElderNextFocusableDirective, ElderNumberCellDirective, ElderOfflineIndicatorComponent, ElderOverlayComponent, ElderOverlayModule, ElderOverlayOriginDirective, ElderOverlayTriggerDirective, ElderPaddingDirective, ElderPanelComponent, ElderPanelModule, ElderPeriodInputComponent, ElderPipesModule, ElderPlugParentFormDirective, ElderProgressBarComponent, ElderProgressBarModule, ElderQuantityFormFieldComponent, ElderQuantityInputControlComponent, ElderQuantityModule, ElderQuantityPipe, ElderQuantityRangeValidator, ElderQuantityService, ElderQuantityTransformPipe, ElderQuestionDialogComponent, ElderRepeatPipe, ElderRepeatPipeLegacy, ElderRequiredDimensionsValidator, ElderRequiredIgnoreZeroValidator, ElderRequiredQuantityValidator, ElderRoundPipe, ElderRouteOutletDrawerService, ElderRouterOutletService, ElderRouterService, ElderSafeUrlPipe, ElderScrollContainerComponent, ElderSearchBoxComponent, ElderSearchContextDirective, ElderSearchInputDirective, ElderSearchModule, ElderSearchPanelComponent, ElderSelectBase, ElderSelectChipAvatarDirective, ElderSelectChipDirective, ElderSelectComponent, ElderSelectComponentState, ElderSelectCustomInputDirective, ElderSelectFormField, ElderSelectModule, ElderSelectOnTabDirective, ElderSelectValueDirective, ElderSelectionDialogComponent, ElderSelectionDialogDirective, ElderSelectionMasterCheckboxComponent, ElderSelectionPopupTriggerAdapterDirective, ElderShellCenterDirective, ElderShellComponent, ElderShellModule, ElderShellNavigationToggleComponent, ElderShellService, ElderShellSideLeftDirective, ElderShellSideRightDirective, ElderShellSlotDirective, ElderSimpleSelectionViewComponent, ElderSimpleSelectionViewModule, ElderSingleSortComponent, ElderStackCardDirective, ElderStopEventPropagationDirective, ElderSvgViewerComponent, ElderTabDirective, ElderTabFocusTrapDirective, ElderTabGroupRoutingDirective, ElderTabModule, ElderTableActivationDirective, ElderTableComponent, ElderTableExtensionDirective, ElderTableGroup, ElderTableModel, ElderTableModelCdkTableBinding, ElderTableModelQueryGroup, ElderTableModule, ElderTableProviders, ElderTableRootDirective, ElderTableSortDirective, ElderTableToolbarDirective, ElderThemeApplierDirective, ElderThemeDirective, ElderThemeModule, ElderThemePreferenceService, ElderThemeService, ElderThemeToggleComponent, ElderTimeModule, ElderToastModule, ElderToastService, ElderTogglePanelComponent, ElderTogglePanelPrimaryDirective, ElderTogglePanelSecondaryDirective, ElderTogglePanelTriggerDirective, ElderToolbarColumnDirective, ElderToolbarComponent, ElderToolbarContentDirective, ElderToolbarModule, ElderToolbarService, ElderToolbarTitleComponent, ElderToolbarTitleService, ElderTouchedDirective, ElderTrimPipe, ElderTripleStateCheckboxDirective, ElderTruncatePipe, ElderUnitSelectDirective, ElderUnitService, ElderUrlFragment, ElderUrlFragmentModule, ElderUrlFragmentParamsService, ElderUrlFragmentSwitcherComponent, ElderValidationErrorDirective, ElderViewersModule, EntitySetPatch, ErrorUtil, ExceptionDetailCtx, FileUploadClient, Filter, FilterContext, FilterUtil, FormFieldBaseComponent, HttpClientBuilder, HttpClientPristine, HttpDataTransfer, HttpDataTransferAggregateComponent, HttpDataTransferComponent, HttpDataTransferIndicatorComponent, HttpDataTransferOverviewComponent, HttpParamsBuilder, I18nBase, I18nPickAsyncPipe, I18nPickPipe, I18nText, IFrameState, IframeCloseDirective, IframeDialogComponent, IframeHostComponent, IframeService, IframeSideContentComponent, IndexedEntities, InternalRestClientConfig, Interval, IsoDurationPipe, IsoIntervalParsePipe, IsoIntervalPipe, JsonMapUtil, KafentConfig, KafentEvent, KafentEventService, KafentEventStream, KafentEventStreamDisabled, KafentEventStreamSse, KafentEventTransport, KafentModule, KafentSseEventChannel, KafentTokenProvider, KafentTokenProviderSessionStorage, KafentTopicSse, KnownElderThemes, KnownLocaleType, LocalListDataSource, LocalPagedDataSource, LocalisationPickerService, MasterSelectionState, MatTableDataContextBinding, MatTableDataContextBindingBuilder, MultiModelBaseComponent, NextNumberUtil, Objects, OnlineStatus, Page, PageRequest, Pageable, ParseUtil, Path, PathNode, PeriodBucket, PeriodDuration, PeriodFormat, ProcessIterationContext, ProcessState, PropertyPathUtil, Quantity, QueryListBinding, QuestionDialogConfig, ReactiveEventSource, ReactiveMap, RefreshingEntity, RestClient, RestClientConfig, RestClientContinuable, RestClientList, RestClientPaged, SearchQuery, SelectionModel, SelectionModelPopupDirective, Sets, SimpleLocalisationPicker, Sort, SortOption, SortUtil, SubBar, SuggestionProvider, TemplateCompositeControl, TemplatedSelectionDialogComponent, ThemeSpec, TimeAgoPipe, TimeDurationPipe, TimeUtil, ToastType, TokenChunkRequest, ToolbarHeader, TranslatedEnumValue, TypedEventMessage, Unit, UnitDimension, UnitDimensionInfo, UnitInfo, UnitRegistry, UrlBuilder, UrlQueryParams, UuidUtil, ValueAccessorBase, ValueWrapper, ViewProviders, WeightPipe, alphaNumStringComparator, buildFormIntegrationProviders, createDataOptionsProvider, createSelectionModel, existingOrNewElderTableModel, isActivePagedDataContext, isContinuableDataContext, isContinuableDataSource, isDataContext, isDataSource, isElderEntityValueAccessor, isElderMultiEntityValueAccessor, isListDataSource, isPagedDataSource, naturalValueComparator, newElderTableModel, proxyControlContainer, registerLocale, runInZone, themeInit };
28676
28905
  //# sourceMappingURL=elderbyte-ngx-starter.mjs.map