@trudb/tru-common-lib 0.0.506 → 0.0.511
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/classes/tru-data-change-parser.mjs +33 -26
- package/esm2020/lib/services/tru-app-environment.mjs +8 -1
- package/esm2020/lib/services/tru-breeze-context-factory.mjs +5 -2
- package/esm2020/lib/services/tru-connection-hub.mjs +2 -2
- package/esm2020/lib/services/tru-entity-accessor.mjs +39 -1
- package/fesm2015/trudb-tru-common-lib.mjs +82 -27
- package/fesm2015/trudb-tru-common-lib.mjs.map +1 -1
- package/fesm2020/trudb-tru-common-lib.mjs +82 -27
- package/fesm2020/trudb-tru-common-lib.mjs.map +1 -1
- package/lib/classes/tru-data-change-parser.d.ts +2 -2
- package/lib/services/tru-app-environment.d.ts +4 -0
- package/lib/services/tru-breeze-context-factory.d.ts +2 -1
- package/lib/services/tru-entity-accessor.d.ts +2 -0
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { Directive, Input, Injectable, Component, Inject, HostListener, NgModule, EventEmitter, ViewEncapsulation, Output, APP_INITIALIZER, InjectionToken } from '@angular/core';
|
|
3
|
-
import { EntityAspect, MetadataStore, EntityManager, DataService, EntityQuery, FetchStrategy, EntityState, BinaryPredicate, AndOrPredicate, breeze } from 'breeze-client';
|
|
3
|
+
import { EntityAspect, MetadataStore, EntityManager, DataService, EntityQuery, Predicate, FetchStrategy, EntityState, BinaryPredicate, AndOrPredicate, breeze } from 'breeze-client';
|
|
4
4
|
import { BehaviorSubject, defer, from, of, Observable, Subject, skip, forkJoin, throwError } from 'rxjs';
|
|
5
5
|
import * as _ from 'underscore';
|
|
6
6
|
import * as i1$2 from '@angular/common/http';
|
|
@@ -275,6 +275,7 @@ class TruAppEnvironment {
|
|
|
275
275
|
this._saveComplete = new BehaviorSubject(null);
|
|
276
276
|
this._revertComplete = new BehaviorSubject(null);
|
|
277
277
|
this._deleteComplete = new BehaviorSubject(null);
|
|
278
|
+
this._globalDataContext = null;
|
|
278
279
|
this.onSavingChanged$ = this._isSaving.asObservable();
|
|
279
280
|
this.onSaveComplete$ = this._saveComplete.asObservable();
|
|
280
281
|
this.onRevertComplete$ = this._revertComplete.asObservable();
|
|
@@ -337,6 +338,12 @@ class TruAppEnvironment {
|
|
|
337
338
|
set maxRecordCount(maxRecordCount) {
|
|
338
339
|
this._maxRecordCount = maxRecordCount;
|
|
339
340
|
}
|
|
341
|
+
get globalDataContext() {
|
|
342
|
+
return this._globalDataContext;
|
|
343
|
+
}
|
|
344
|
+
set globalDataContext(context) {
|
|
345
|
+
this._globalDataContext = context;
|
|
346
|
+
}
|
|
340
347
|
get isMac() {
|
|
341
348
|
return navigator.platform.toUpperCase().indexOf('MAC') >= 0;
|
|
342
349
|
}
|
|
@@ -412,6 +419,9 @@ class TruBreezeContext {
|
|
|
412
419
|
return (x) => { return new EntityQuery(x); };
|
|
413
420
|
}
|
|
414
421
|
;
|
|
422
|
+
get createPredicate() {
|
|
423
|
+
return (...args) => { return new Predicate(args); };
|
|
424
|
+
}
|
|
415
425
|
get entityManager() {
|
|
416
426
|
return this._entityManager;
|
|
417
427
|
}
|
|
@@ -700,6 +710,44 @@ class TruEntityAccessor {
|
|
|
700
710
|
return result;
|
|
701
711
|
return null;
|
|
702
712
|
};
|
|
713
|
+
this.searchByRefArrayCacheOnly = (entity, setupQuery = null, refs, includeDeleted = false) => {
|
|
714
|
+
if (!includeDeleted)
|
|
715
|
+
includeDeleted = false;
|
|
716
|
+
var queryOptions = this._entityManager.queryOptions.using({
|
|
717
|
+
includeDeleted: includeDeleted,
|
|
718
|
+
fetchStrategy: FetchStrategy.FromLocalCache
|
|
719
|
+
});
|
|
720
|
+
var query = this._breezeContext.createQuery(this.getQueryServiceName(entity)).using(queryOptions);
|
|
721
|
+
if (setupQuery)
|
|
722
|
+
query = setupQuery(query);
|
|
723
|
+
if (query === null) //setupQuery() returned null to select no rows
|
|
724
|
+
return [];
|
|
725
|
+
if (refs.length > 0) {
|
|
726
|
+
const pkeyName = entity.name + 'Ref';
|
|
727
|
+
var predicate = this._breezeContext.createPredicate(pkeyName, '==', refs[0]);
|
|
728
|
+
_.rest(refs, 1).forEach(function (ref) {
|
|
729
|
+
predicate = predicate.or(pkeyName, '==', ref);
|
|
730
|
+
});
|
|
731
|
+
query = query.where(predicate);
|
|
732
|
+
}
|
|
733
|
+
var results = this._entityManager.executeQueryLocally(query);
|
|
734
|
+
if (results && results.length)
|
|
735
|
+
return results;
|
|
736
|
+
return null;
|
|
737
|
+
};
|
|
738
|
+
this.searchByRefWithQuery = (entity, setupQuery, ref) => {
|
|
739
|
+
var query = this._breezeContext.createQuery(this.getQueryServiceName(entity));
|
|
740
|
+
query = setupQuery(query);
|
|
741
|
+
const pkeyName = entity.name + 'Ref';
|
|
742
|
+
var predicate = this._breezeContext.createPredicate(pkeyName, '==', ref);
|
|
743
|
+
query = query.where(predicate);
|
|
744
|
+
var localResults = this._entityManager.executeQueryLocally(query);
|
|
745
|
+
if (localResults.length)
|
|
746
|
+
return of(localResults);
|
|
747
|
+
return defer(() => from(this._entityManager.executeQuery(query).then((queryData) => {
|
|
748
|
+
return queryData.results;
|
|
749
|
+
})));
|
|
750
|
+
};
|
|
703
751
|
this.export = (entity, gridSpec, setupQuery, entityRefs, options) => {
|
|
704
752
|
options = options || {};
|
|
705
753
|
var args = {
|
|
@@ -2011,16 +2059,16 @@ class TruDataChangeParser {
|
|
|
2011
2059
|
dataChanged(change) {
|
|
2012
2060
|
this.dataChanged$.next(change);
|
|
2013
2061
|
}
|
|
2014
|
-
constructor(connection, dataContext, entity, tableName, getLatestResults, getLatestQuery, contextFilters, expandPaths, isLoaded, modelPropertyLookup) {
|
|
2062
|
+
constructor(connection, dataContext, globalDataContext, entity, tableName, getLatestResults, getLatestQuery, contextFilters, expandPaths, isLoaded, modelPropertyLookup) {
|
|
2015
2063
|
this.waitingEntities = [];
|
|
2016
2064
|
this.dataChanged$ = new Subject();
|
|
2017
2065
|
this.findEntityInCache = (change) => {
|
|
2018
|
-
var entityAccessor = this.dataContext.entityAccess(
|
|
2066
|
+
var entityAccessor = this.dataContext.entityAccess();
|
|
2019
2067
|
return entityAccessor.searchByRefCacheOnly(this.entity, parseInt(change.tableRef, 10), true);
|
|
2020
2068
|
};
|
|
2021
2069
|
this.findEntityInGlobalCache = (change) => {
|
|
2022
|
-
var entityAccessor = this.globalDataContext.entityAccess(
|
|
2023
|
-
return entityAccessor.
|
|
2070
|
+
var entityAccessor = this.globalDataContext.entityAccess();
|
|
2071
|
+
return entityAccessor.searchByRefCacheOnly(this.entity, parseInt(change.tableRef, 10), true);
|
|
2024
2072
|
};
|
|
2025
2073
|
this.checkIfDateTime = (newValue, currentValue, typeName) => {
|
|
2026
2074
|
if (typeName === 'date-time' || typeName === 'date') {
|
|
@@ -2100,17 +2148,17 @@ class TruDataChangeParser {
|
|
|
2100
2148
|
});
|
|
2101
2149
|
};
|
|
2102
2150
|
this.entityFoundByQuery = (change) => {
|
|
2103
|
-
var entityAccessor = this.dataContext.entityAccess(
|
|
2104
|
-
var entities = entityAccessor.
|
|
2105
|
-
if (!entities.length) {
|
|
2106
|
-
var entityAccessor = this.globalDataContext.entityAccess(
|
|
2107
|
-
entities = entityAccessor.
|
|
2151
|
+
var entityAccessor = this.dataContext.entityAccess();
|
|
2152
|
+
var entities = entityAccessor.searchByRefArrayCacheOnly(this.entity, this.getLatestQuery(), [change.tableRef]);
|
|
2153
|
+
if (entities !== null && !entities.length) {
|
|
2154
|
+
var entityAccessor = this.globalDataContext.entityAccess();
|
|
2155
|
+
entities = entityAccessor.searchByRefArrayCacheOnly(this.entity, this.getLatestQuery(), [change.tableRef]);
|
|
2108
2156
|
}
|
|
2109
|
-
return entities.length;
|
|
2157
|
+
return entities === null ? 0 : entities.length;
|
|
2110
2158
|
};
|
|
2111
2159
|
this.getEntityFromServer = (change) => {
|
|
2112
|
-
var entityAccessor = this.dataContext.entityAccess(
|
|
2113
|
-
var entitiy = entityAccessor.
|
|
2160
|
+
var entityAccessor = this.dataContext.entityAccess();
|
|
2161
|
+
var entitiy = entityAccessor.searchByRefWithQuery(this.entity, this.getLatestQuery(), change.tableRef);
|
|
2114
2162
|
return entitiy;
|
|
2115
2163
|
};
|
|
2116
2164
|
this.getEntityFromResults = (results, change) => {
|
|
@@ -2172,8 +2220,9 @@ class TruDataChangeParser {
|
|
|
2172
2220
|
var entityAlreadyInResults = this.getEntityFromResults(results, change);
|
|
2173
2221
|
if (this.entityFoundByQuery(change) && !entityAlreadyInResults.length && this.isLoaded()) {
|
|
2174
2222
|
if (!localEntity) {
|
|
2175
|
-
var newEntity = this.dataContext.entityAccess(
|
|
2176
|
-
|
|
2223
|
+
var newEntity = this.dataContext.entityAccess().add(this.entity, this.contextFilters);
|
|
2224
|
+
const pkeyName = change.tableName + 'Ref';
|
|
2225
|
+
newEntity[pkeyName] = change.tableRef;
|
|
2177
2226
|
this.applyPropertyChanges(change, newEntity);
|
|
2178
2227
|
if (this.isLoaded()) {
|
|
2179
2228
|
var results = this.getLatestResults();
|
|
@@ -2197,8 +2246,9 @@ class TruDataChangeParser {
|
|
|
2197
2246
|
}
|
|
2198
2247
|
}
|
|
2199
2248
|
else if (!globalEntity) {
|
|
2200
|
-
var newEntity = this.globalDataContext.entityAccess(
|
|
2201
|
-
|
|
2249
|
+
var newEntity = this.globalDataContext.entityAccess().add(this.entity, this.contextFilters);
|
|
2250
|
+
const pkeyName = change.tableName + 'Ref';
|
|
2251
|
+
newEntity[pkeyName] = change.tableRef;
|
|
2202
2252
|
this.applyPropertyChanges(change, newEntity);
|
|
2203
2253
|
reloadResults = true;
|
|
2204
2254
|
}
|
|
@@ -2213,7 +2263,7 @@ class TruDataChangeParser {
|
|
|
2213
2263
|
});
|
|
2214
2264
|
}
|
|
2215
2265
|
else if (change.changeOperation === 'U' && change.tableName === this.tableName) {
|
|
2216
|
-
await this.getEntityFromServer(change).
|
|
2266
|
+
await this.getEntityFromServer(change).subscribe((entity) => {
|
|
2217
2267
|
if (entity) {
|
|
2218
2268
|
this.applyPropertyChanges(change, entity);
|
|
2219
2269
|
var results = this.getLatestResults();
|
|
@@ -2226,11 +2276,13 @@ class TruDataChangeParser {
|
|
|
2226
2276
|
}
|
|
2227
2277
|
else {
|
|
2228
2278
|
if (change.changeOperation === 'I' && change.tableName === this.tableName) {
|
|
2229
|
-
var newEntity = this.globalDataContext.entityAccess(
|
|
2230
|
-
|
|
2279
|
+
var newEntity = this.globalDataContext.entityAccess().add(this.entity, this.contextFilters);
|
|
2280
|
+
const pkeyName1 = change.tableName + 'Ref';
|
|
2281
|
+
newEntity[pkeyName1] = change.tableRef;
|
|
2231
2282
|
this.applyPropertyChanges(change, newEntity);
|
|
2232
|
-
newEntity = this.dataContext.entityAccess(
|
|
2233
|
-
|
|
2283
|
+
newEntity = this.dataContext.entityAccess().add(this.entity, this.contextFilters);
|
|
2284
|
+
const pkeyName2 = change.tableName + 'Ref';
|
|
2285
|
+
newEntity[pkeyName2] = change.tableRef;
|
|
2234
2286
|
this.applyPropertyChanges(change, newEntity);
|
|
2235
2287
|
if (this.entityFoundByQuery(change) && this.isLoaded()) {
|
|
2236
2288
|
var results = this.getLatestResults();
|
|
@@ -2239,11 +2291,13 @@ class TruDataChangeParser {
|
|
|
2239
2291
|
}
|
|
2240
2292
|
}
|
|
2241
2293
|
else if (change.changeOperation === 'I') {
|
|
2242
|
-
var newEntity = this.globalDataContext.entityAccess(
|
|
2243
|
-
|
|
2294
|
+
var newEntity = this.globalDataContext.entityAccess().add(this.entity, this.contextFilters);
|
|
2295
|
+
const pkeyName1 = change.tableName + 'Ref';
|
|
2296
|
+
newEntity[pkeyName1] = change.tableRef;
|
|
2244
2297
|
this.applyPropertyChanges(change, newEntity);
|
|
2245
|
-
newEntity = this.dataContext.entityAccess(
|
|
2246
|
-
|
|
2298
|
+
newEntity = this.dataContext.entityAccess().add(this.entity, this.contextFilters);
|
|
2299
|
+
const pkeyName2 = change.tableName + 'Ref';
|
|
2300
|
+
newEntity[pkeyName2] = change.tableRef;
|
|
2247
2301
|
this.applyPropertyChanges(change, newEntity);
|
|
2248
2302
|
}
|
|
2249
2303
|
}
|
|
@@ -2256,6 +2310,7 @@ class TruDataChangeParser {
|
|
|
2256
2310
|
this.dataChanged(dataChangeArgs);
|
|
2257
2311
|
};
|
|
2258
2312
|
this.dataContext = dataContext;
|
|
2313
|
+
this.globalDataContext = globalDataContext;
|
|
2259
2314
|
this.entity = entity;
|
|
2260
2315
|
this.tableName = tableName;
|
|
2261
2316
|
this.getLatestResults = getLatestResults;
|
|
@@ -2312,7 +2367,7 @@ class TruConnectionHub {
|
|
|
2312
2367
|
}
|
|
2313
2368
|
};
|
|
2314
2369
|
this.subscribe = (dataContext, entity, tableName, getLatestResults, getLatestQuery, contextFilters, expandPaths, isLoaded) => {
|
|
2315
|
-
return new TruDataChangeParser(this.connection, dataContext, entity, tableName, getLatestResults, getLatestQuery, contextFilters, expandPaths, isLoaded, this.modelPropertyLookup).onDataChanged();
|
|
2370
|
+
return new TruDataChangeParser(this.connection, dataContext, this.appEnvironment.globalDataContext, entity, tableName, getLatestResults, getLatestQuery, contextFilters, expandPaths, isLoaded, this.modelPropertyLookup).onDataChanged();
|
|
2316
2371
|
};
|
|
2317
2372
|
this.connection = new signalR.HubConnectionBuilder()
|
|
2318
2373
|
.withUrl(`${this.appEnvironment.appUri}/notificationhub`, {
|