@memberjunction/ng-entity-viewer 5.9.0 → 5.10.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/dist/lib/entity-data-grid/entity-data-grid.component.d.ts.map +1 -1
- package/dist/lib/entity-data-grid/entity-data-grid.component.js +86 -33
- package/dist/lib/entity-data-grid/entity-data-grid.component.js.map +1 -1
- package/dist/lib/entity-viewer/entity-viewer.component.d.ts +8 -0
- package/dist/lib/entity-viewer/entity-viewer.component.d.ts.map +1 -1
- package/dist/lib/entity-viewer/entity-viewer.component.js +63 -17
- package/dist/lib/entity-viewer/entity-viewer.component.js.map +1 -1
- package/package.json +9 -9
|
@@ -51,6 +51,8 @@ export declare class EntityViewerComponent implements OnInit, OnDestroy {
|
|
|
51
51
|
private _viewEntity;
|
|
52
52
|
private _timelineConfig;
|
|
53
53
|
private _initialized;
|
|
54
|
+
/** Whether a deferred reload has been queued via deferReload() */
|
|
55
|
+
private _reloadDeferred;
|
|
54
56
|
/**
|
|
55
57
|
* The entity to display records for
|
|
56
58
|
*/
|
|
@@ -341,6 +343,12 @@ export declare class EntityViewerComponent implements OnInit, OnDestroy {
|
|
|
341
343
|
*/
|
|
342
344
|
getHiddenMatchFieldName(record: Record<string, unknown>): string;
|
|
343
345
|
ngOnInit(): void;
|
|
346
|
+
/**
|
|
347
|
+
* Defers a data reload to a microtask so that all Angular input bindings
|
|
348
|
+
* (entity, viewEntity, gridState, etc.) complete before we fire a RunView.
|
|
349
|
+
* Multiple calls within the same change detection cycle collapse into one load.
|
|
350
|
+
*/
|
|
351
|
+
private deferReload;
|
|
344
352
|
ngOnDestroy(): void;
|
|
345
353
|
/**
|
|
346
354
|
* Extracts sort state from a view entity, checking ViewSortInfo first then
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-viewer.component.d.ts","sourceRoot":"","sources":["../../../src/lib/entity-viewer/entity-viewer.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAa,MAAM,EAAE,MAAM,eAAe,CAAC;AAGhI,OAAO,EAAE,UAAU,EAAE,eAAe,EAA8B,aAAa,EAA0B,MAAM,sBAAsB,CAAC;AAEtI,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACzH,OAAO,EACL,cAAc,EACd,kBAAkB,EAElB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,yBAAyB,EACzB,YAAY,EACZ,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,qBAAqB,EAErB,mBAAmB,EACnB,aAAa,EACd,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,sBAAsB,EACtB,4BAA4B,EAC5B,kBAAkB,EACnB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;;AAGnH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,qBASa,qBAAsB,YAAW,MAAM,EAAE,SAAS;
|
|
1
|
+
{"version":3,"file":"entity-viewer.component.d.ts","sourceRoot":"","sources":["../../../src/lib/entity-viewer/entity-viewer.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -233,6 +233,8 @@ export class EntityViewerComponent {
|
|
|
233
233
|
_viewEntity = null;
|
|
234
234
|
_timelineConfig = null;
|
|
235
235
|
_initialized = false;
|
|
236
|
+
/** Whether a deferred reload has been queued via deferReload() */
|
|
237
|
+
_reloadDeferred = false;
|
|
236
238
|
/**
|
|
237
239
|
* The entity to display records for
|
|
238
240
|
*/
|
|
@@ -245,19 +247,26 @@ export class EntityViewerComponent {
|
|
|
245
247
|
// Detect date fields for timeline support
|
|
246
248
|
this.detectDateFields();
|
|
247
249
|
if (this._initialized) {
|
|
248
|
-
// If entity changed to a different entity, clear stale
|
|
249
|
-
// that belongs to the old entity (its WhereClause, SortState, etc. reference old fields)
|
|
250
|
+
// If entity changed to a different entity, clear all stale state from the old entity
|
|
250
251
|
if (value && previousEntity && !UUIDsEqual(value.ID, previousEntity.ID)) {
|
|
251
252
|
if (this._viewEntity && !UUIDsEqual(this._viewEntity.EntityID, value.ID)) {
|
|
252
253
|
this._viewEntity = null;
|
|
253
254
|
}
|
|
255
|
+
// Clear sort state — it references fields from the old entity (e.g., FirstName)
|
|
256
|
+
// and would produce invalid ORDER BY on the new entity
|
|
257
|
+
this.internalSortState = null;
|
|
254
258
|
}
|
|
255
259
|
if (value && !this._records) {
|
|
256
260
|
// Reset state for new entity - synchronously clear all data and force change detection
|
|
257
261
|
// before starting the async load to prevent stale data display
|
|
258
262
|
this.resetPaginationState();
|
|
263
|
+
this.internalRecords = [];
|
|
264
|
+
this.totalRecordCount = 0;
|
|
265
|
+
this.filteredRecordCount = 0;
|
|
259
266
|
this.cdr.detectChanges();
|
|
260
|
-
|
|
267
|
+
// Defer the actual load so all input bindings (viewEntity, gridState, etc.)
|
|
268
|
+
// complete before we fire the RunView — prevents duplicate loads with stale state
|
|
269
|
+
this.deferReload();
|
|
261
270
|
}
|
|
262
271
|
else if (!value) {
|
|
263
272
|
this.internalRecords = [];
|
|
@@ -382,10 +391,12 @@ export class EntityViewerComponent {
|
|
|
382
391
|
set viewEntity(value) {
|
|
383
392
|
this._viewEntity = value;
|
|
384
393
|
if (this._initialized && this._entity && !this._records) {
|
|
385
|
-
// Apply view's sort state if available, then
|
|
394
|
+
// Apply view's sort state if available, then defer the reload.
|
|
395
|
+
// Deferring ensures all sibling input bindings (gridState, etc.) are
|
|
396
|
+
// updated before we fire the RunView — prevents duplicate loads.
|
|
386
397
|
this.applySortStateFromView(value);
|
|
387
398
|
this.resetPaginationState();
|
|
388
|
-
this.
|
|
399
|
+
this.deferReload();
|
|
389
400
|
}
|
|
390
401
|
}
|
|
391
402
|
/**
|
|
@@ -882,10 +893,34 @@ export class EntityViewerComponent {
|
|
|
882
893
|
if (this._viewEntity) {
|
|
883
894
|
this.applySortStateFromView(this._viewEntity);
|
|
884
895
|
}
|
|
885
|
-
// If entity was set before initialization, load data now
|
|
896
|
+
// If entity was set before initialization, load data now.
|
|
897
|
+
// Use deferReload so all inputs are settled before the first RunView.
|
|
886
898
|
if (this._entity && !this._records) {
|
|
887
|
-
this.
|
|
899
|
+
this.deferReload();
|
|
900
|
+
}
|
|
901
|
+
}
|
|
902
|
+
/**
|
|
903
|
+
* Defers a data reload to a microtask so that all Angular input bindings
|
|
904
|
+
* (entity, viewEntity, gridState, etc.) complete before we fire a RunView.
|
|
905
|
+
* Multiple calls within the same change detection cycle collapse into one load.
|
|
906
|
+
*/
|
|
907
|
+
deferReload() {
|
|
908
|
+
if (this._reloadDeferred) {
|
|
909
|
+
return; // already queued or in-flight
|
|
888
910
|
}
|
|
911
|
+
this._reloadDeferred = true;
|
|
912
|
+
Promise.resolve().then(async () => {
|
|
913
|
+
try {
|
|
914
|
+
if (this._initialized && this._entity && !this._records) {
|
|
915
|
+
await this.loadData();
|
|
916
|
+
}
|
|
917
|
+
}
|
|
918
|
+
finally {
|
|
919
|
+
// Clear only after loadData fully completes (including the async RunView).
|
|
920
|
+
// This prevents any re-entry via deferReload() during the entire load cycle.
|
|
921
|
+
this._reloadDeferred = false;
|
|
922
|
+
}
|
|
923
|
+
});
|
|
889
924
|
}
|
|
890
925
|
ngOnDestroy() {
|
|
891
926
|
this.destroy$.next();
|
|
@@ -997,7 +1032,7 @@ export class EntityViewerComponent {
|
|
|
997
1032
|
// ========================================
|
|
998
1033
|
// Sequence counter for tracking load requests and detecting stale responses
|
|
999
1034
|
_loadSequence = 0;
|
|
1000
|
-
// Flag
|
|
1035
|
+
// Flag: a reload was requested while a load was already in progress
|
|
1001
1036
|
_pendingReload = false;
|
|
1002
1037
|
/**
|
|
1003
1038
|
* Load data for the current entity with server-side filtering/sorting/pagination
|
|
@@ -1012,8 +1047,9 @@ export class EntityViewerComponent {
|
|
|
1012
1047
|
}
|
|
1013
1048
|
// Increment sequence to track this load request
|
|
1014
1049
|
const loadId = ++this._loadSequence;
|
|
1015
|
-
// If a load is already in progress,
|
|
1016
|
-
//
|
|
1050
|
+
// If a load is already in progress, set a flag so we reload once the current
|
|
1051
|
+
// load completes. We can't use deferReload() here because the microtask would
|
|
1052
|
+
// fire while isLoading is still true, causing an infinite loop.
|
|
1017
1053
|
if (this.isLoading) {
|
|
1018
1054
|
this._pendingReload = true;
|
|
1019
1055
|
return;
|
|
@@ -1029,7 +1065,8 @@ export class EntityViewerComponent {
|
|
|
1029
1065
|
try {
|
|
1030
1066
|
const rv = new RunView();
|
|
1031
1067
|
// Build OrderBy clause
|
|
1032
|
-
// Priority: 1) External sort state
|
|
1068
|
+
// Priority: 1) External/internal sort state 2) View's OrderByClause
|
|
1069
|
+
// 3) GridState.sortSettings (saved user defaults) 4) undefined
|
|
1033
1070
|
let orderBy;
|
|
1034
1071
|
const sortState = this.effectiveSortState;
|
|
1035
1072
|
if (config.serverSideSorting && sortState?.field && sortState.direction) {
|
|
@@ -1038,6 +1075,11 @@ export class EntityViewerComponent {
|
|
|
1038
1075
|
else if (this.viewEntity?.OrderByClause) {
|
|
1039
1076
|
orderBy = this.viewEntity.OrderByClause;
|
|
1040
1077
|
}
|
|
1078
|
+
else if (this.gridState?.sortSettings?.length) {
|
|
1079
|
+
orderBy = this.gridState.sortSettings
|
|
1080
|
+
.map(s => `${s.field} ${(s.dir || 'asc').toUpperCase()}`)
|
|
1081
|
+
.join(', ');
|
|
1082
|
+
}
|
|
1041
1083
|
// Calculate StartRow for pagination
|
|
1042
1084
|
const startRow = this.pagination.currentPage * config.pageSize;
|
|
1043
1085
|
// Build ExtraFilter from view's WhereClause if available
|
|
@@ -1112,12 +1154,12 @@ export class EntityViewerComponent {
|
|
|
1112
1154
|
this.isInitialLoad = false;
|
|
1113
1155
|
this.cdr.detectChanges();
|
|
1114
1156
|
});
|
|
1115
|
-
// If a reload was requested while we were loading, trigger it now
|
|
1157
|
+
// If a reload was requested while we were loading, trigger it now.
|
|
1158
|
+
// isLoading is false at this point so loadData() won't re-enter the pending path.
|
|
1116
1159
|
if (this._pendingReload) {
|
|
1117
1160
|
this._pendingReload = false;
|
|
1118
1161
|
this.resetPaginationState();
|
|
1119
|
-
|
|
1120
|
-
setTimeout(() => this.loadData(), 0);
|
|
1162
|
+
this.loadData();
|
|
1121
1163
|
}
|
|
1122
1164
|
}
|
|
1123
1165
|
}
|
|
@@ -1266,11 +1308,15 @@ export class EntityViewerComponent {
|
|
|
1266
1308
|
: null;
|
|
1267
1309
|
this.internalSortState = newSort;
|
|
1268
1310
|
this.sortChanged.emit({ sort: newSort });
|
|
1269
|
-
// If server-side sorting, reload from page 1
|
|
1270
|
-
//
|
|
1311
|
+
// If server-side sorting, reload from page 1.
|
|
1312
|
+
// Use deferReload() so that if a view-switch reload is already in-flight
|
|
1313
|
+
// (e.g., AG Grid fired an async sortChanged from applySortStateToGrid),
|
|
1314
|
+
// we don't trigger a redundant second RunView.
|
|
1315
|
+
// For normal user-initiated column-header clicks, no deferred reload is
|
|
1316
|
+
// pending so deferReload() fires immediately — no UX difference.
|
|
1271
1317
|
if (this.effectiveConfig.serverSideSorting && !this.records) {
|
|
1272
1318
|
this.resetPaginationState(false);
|
|
1273
|
-
this.
|
|
1319
|
+
this.deferReload();
|
|
1274
1320
|
}
|
|
1275
1321
|
}
|
|
1276
1322
|
/**
|