@memberjunction/ng-explorer-core 6.1.4 → 6.1.6
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/resource-wrappers/artifact-resource.component.d.ts +16 -1
- package/dist/lib/resource-wrappers/artifact-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/artifact-resource.component.js +27 -4
- package/dist/lib/resource-wrappers/artifact-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/view-resource.component.d.ts +5 -1
- package/dist/lib/resource-wrappers/view-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/view-resource.component.js +15 -5
- package/dist/lib/resource-wrappers/view-resource.component.js.map +1 -1
- package/dist/lib/shell/components/tabs/tab-container.component.d.ts +14 -0
- package/dist/lib/shell/components/tabs/tab-container.component.d.ts.map +1 -1
- package/dist/lib/shell/components/tabs/tab-container.component.js +72 -12
- package/dist/lib/shell/components/tabs/tab-container.component.js.map +1 -1
- package/dist/lib/shell/shell.component.d.ts +33 -2
- package/dist/lib/shell/shell.component.d.ts.map +1 -1
- package/dist/lib/shell/shell.component.js +84 -6
- package/dist/lib/shell/shell.component.js.map +1 -1
- package/package.json +52 -52
|
@@ -140,6 +140,26 @@ export declare class ShellComponent extends BaseAngularComponent implements OnIn
|
|
|
140
140
|
private onChromePolicyChanged;
|
|
141
141
|
/** The record-open style resolved at startup ('records' until resolved) */
|
|
142
142
|
private resolvedRecordOpenStyle;
|
|
143
|
+
/**
|
|
144
|
+
* When the current url became current.
|
|
145
|
+
*
|
|
146
|
+
* It exists so a url sync can tell whether it is reacting to something OLDER than the active tab.
|
|
147
|
+
* Without it the only available answer was Date.now(), which is newer than everything and so can
|
|
148
|
+
* never lose -- the bug this was added for.
|
|
149
|
+
*
|
|
150
|
+
* SEEDED AT CONSTRUCTION, AND UPDATED ON EVERY NavigationEnd THIS COMPONENT SEES — which is not
|
|
151
|
+
* quite every NavigationEnd, and the difference is worth stating because an earlier version of this
|
|
152
|
+
* comment claimed otherwise. On a deep link `ngOnInit` starts `InitializeShell` FROM the first
|
|
153
|
+
* NavigationEnd, and the subscriber that maintains this field is created later, inside that method.
|
|
154
|
+
* So the first navigation is never stamped, and the startup sync at the end of `InitializeShell`
|
|
155
|
+
* compares against construction time instead.
|
|
156
|
+
*
|
|
157
|
+
* That is harmless where it has been looked at: by the time the startup sync runs, the tab the url
|
|
158
|
+
* matches is the active tab, so the guard is not reached. It is recorded rather than fixed because
|
|
159
|
+
* the construction seed and the first navigation are milliseconds apart, and because a reader who
|
|
160
|
+
* trusts the old wording would mis-reason about the startup path.
|
|
161
|
+
*/
|
|
162
|
+
private lastNavigationAt;
|
|
143
163
|
/**
|
|
144
164
|
* Resolve `Shell.RecordOpen.Style` from instance config and push it to the
|
|
145
165
|
* two collaborators that partition tabs by it: the ng-shared style module
|
|
@@ -227,6 +247,8 @@ export declare class ShellComponent extends BaseAngularComponent implements OnIn
|
|
|
227
247
|
* (and their per-app UUIDsEqual checks) out of the per-CD-cycle hot path.
|
|
228
248
|
*/
|
|
229
249
|
private recomputeNavBarApps;
|
|
250
|
+
/** Warms the React runtime (CDN scripts) after login; see initializeShell(). Field-injected so the constructor signature is unchanged. */
|
|
251
|
+
private reactAdapter;
|
|
230
252
|
constructor(appManager: ApplicationManager, workspaceManager: WorkspaceStateManager, layoutManager: GoldenLayoutManager, tabService: TabService, navigationService: NavigationService, route: ActivatedRoute, router: Router, authBase: MJAuthBase, cdr: ChangeDetectorRef, userAvatarService: UserAvatarService, userSharingCenterDialogService: UserSharingCenterDialogService, aboutDialogService: AboutDialogService, profileDialogService: ProfileDialogService, viewContainerRef: ViewContainerRef, titleService: TitleService, developerModeService: DeveloperModeService, startupValidationService: StartupValidationService, commandPaletteService: CommandPaletteService, themeService: ThemeService, homePinService: HomeAppPinService, fileOpenService: FileOpenService, feedbackDialogService: FeedbackDialogService, feedbackService: FeedbackService, activityService: ActivityService);
|
|
231
253
|
ngOnInit(): Promise<void>;
|
|
232
254
|
initializeShell(): Promise<void>;
|
|
@@ -250,8 +272,17 @@ export declare class ShellComponent extends BaseAngularComponent implements OnIn
|
|
|
250
272
|
*/
|
|
251
273
|
private syncUrlWithWorkspace;
|
|
252
274
|
/**
|
|
253
|
-
* Sync workspace state with the current URL
|
|
254
|
-
*
|
|
275
|
+
* Sync workspace state with the current URL: find the tab that matches it and activate that tab.
|
|
276
|
+
*
|
|
277
|
+
* TWO CALLERS, not one. Browser back/forward reaches it through the NavigationEnd subscriber, which
|
|
278
|
+
* passes the time that navigation landed. The end of `InitializeShell` also calls it once, to settle
|
|
279
|
+
* a deep-linked url against the restored workspace, and passes nothing.
|
|
280
|
+
*
|
|
281
|
+
* @param url the url to match a tab against.
|
|
282
|
+
* @param navigatedAt when that url became current, as a `Date.now()` reading. It decides whether this
|
|
283
|
+
* sync is older than the active tab's own activation; see the ordering guard below, which yields
|
|
284
|
+
* when it is. Defaults to {@link lastNavigationAt}, which for the startup call is construction time
|
|
285
|
+
* rather than the first navigation — that field's comment says why.
|
|
255
286
|
*/
|
|
256
287
|
private syncWorkspaceWithUrl;
|
|
257
288
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell.component.d.ts","sourceRoot":"","sources":["../../../src/lib/shell/shell.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,gBAAgB,EAAa,UAAU,
|
|
1
|
+
{"version":3,"file":"shell.component.d.ts","sourceRoot":"","sources":["../../../src/lib/shell/shell.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { Component, ViewChild, HostListener } from '@angular/core';
|
|
1
|
+
import { Component, ViewChild, HostListener, inject } from '@angular/core';
|
|
2
|
+
import { AngularAdapterService } from '@memberjunction/ng-react';
|
|
2
3
|
import { NavigationEnd } from '@angular/router';
|
|
3
4
|
import { combineLatest, Subject } from 'rxjs';
|
|
4
5
|
import { filter, takeUntil } from 'rxjs/operators';
|
|
@@ -709,6 +710,26 @@ export class ShellComponent extends BaseAngularComponent {
|
|
|
709
710
|
}
|
|
710
711
|
/** The record-open style resolved at startup ('records' until resolved) */
|
|
711
712
|
resolvedRecordOpenStyle = 'records';
|
|
713
|
+
/**
|
|
714
|
+
* When the current url became current.
|
|
715
|
+
*
|
|
716
|
+
* It exists so a url sync can tell whether it is reacting to something OLDER than the active tab.
|
|
717
|
+
* Without it the only available answer was Date.now(), which is newer than everything and so can
|
|
718
|
+
* never lose -- the bug this was added for.
|
|
719
|
+
*
|
|
720
|
+
* SEEDED AT CONSTRUCTION, AND UPDATED ON EVERY NavigationEnd THIS COMPONENT SEES — which is not
|
|
721
|
+
* quite every NavigationEnd, and the difference is worth stating because an earlier version of this
|
|
722
|
+
* comment claimed otherwise. On a deep link `ngOnInit` starts `InitializeShell` FROM the first
|
|
723
|
+
* NavigationEnd, and the subscriber that maintains this field is created later, inside that method.
|
|
724
|
+
* So the first navigation is never stamped, and the startup sync at the end of `InitializeShell`
|
|
725
|
+
* compares against construction time instead.
|
|
726
|
+
*
|
|
727
|
+
* That is harmless where it has been looked at: by the time the startup sync runs, the tab the url
|
|
728
|
+
* matches is the active tab, so the guard is not reached. It is recorded rather than fixed because
|
|
729
|
+
* the construction seed and the first navigation are milliseconds apart, and because a reader who
|
|
730
|
+
* trusts the old wording would mis-reason about the startup path.
|
|
731
|
+
*/
|
|
732
|
+
lastNavigationAt = Date.now();
|
|
712
733
|
/**
|
|
713
734
|
* Resolve `Shell.RecordOpen.Style` from instance config and push it to the
|
|
714
735
|
* two collaborators that partition tabs by it: the ng-shared style module
|
|
@@ -879,6 +900,8 @@ export class ShellComponent extends BaseAngularComponent {
|
|
|
879
900
|
this.leftOfUserMenuApps = this.appManager.GetNavBarApps('Left of User Menu')
|
|
880
901
|
.filter(app => !(app.HideNavBarIconWhenActive && UUIDsEqual(app.ID, this.activeApp?.ID)));
|
|
881
902
|
}
|
|
903
|
+
/** Warms the React runtime (CDN scripts) after login; see initializeShell(). Field-injected so the constructor signature is unchanged. */
|
|
904
|
+
reactAdapter = inject(AngularAdapterService);
|
|
882
905
|
constructor(appManager, workspaceManager, layoutManager, tabService, navigationService, route, router, authBase, cdr, userAvatarService, userSharingCenterDialogService, aboutDialogService, profileDialogService, viewContainerRef, titleService, developerModeService, startupValidationService, commandPaletteService, themeService, homePinService, fileOpenService, feedbackDialogService, feedbackService, activityService) {
|
|
883
906
|
super();
|
|
884
907
|
this.appManager = appManager;
|
|
@@ -1153,8 +1176,11 @@ export class ShellComponent extends BaseAngularComponent {
|
|
|
1153
1176
|
}));
|
|
1154
1177
|
// Subscribe to router navigation events (for browser back/forward)
|
|
1155
1178
|
this.subscriptions.push(this.router.events.pipe(filter((event) => event instanceof NavigationEnd)).subscribe(event => {
|
|
1179
|
+
// Record WHEN the url changed, whether or not the shell is ready to act on it: the stamp is
|
|
1180
|
+
// what later tells a sync that it is older than an activation it would otherwise override.
|
|
1181
|
+
this.lastNavigationAt = Date.now();
|
|
1156
1182
|
if (this.initialized) {
|
|
1157
|
-
this.syncWorkspaceWithUrl(event.urlAfterRedirects || event.url);
|
|
1183
|
+
this.syncWorkspaceWithUrl(event.urlAfterRedirects || event.url, this.lastNavigationAt);
|
|
1158
1184
|
}
|
|
1159
1185
|
}));
|
|
1160
1186
|
// Check for deep link parameters on initialization
|
|
@@ -1220,6 +1246,10 @@ export class ShellComponent extends BaseAngularComponent {
|
|
|
1220
1246
|
// state changes (apps loaded, searchableEntities populated, etc.) to prevent
|
|
1221
1247
|
// NG0100 ExpressionChangedAfterItHasBeenCheckedError in dev mode
|
|
1222
1248
|
this.cdr.detectChanges();
|
|
1249
|
+
// Explorer is a host where users routinely open interactive component artifacts, so warm the
|
|
1250
|
+
// React runtime in the background now that the user is signed in. ArtifactsModule no longer
|
|
1251
|
+
// does this on construction (#4802). Non-blocking; preload() logs and retries on demand.
|
|
1252
|
+
this.reactAdapter.preload();
|
|
1223
1253
|
}
|
|
1224
1254
|
/**
|
|
1225
1255
|
* Handle deep links from URL
|
|
@@ -1367,10 +1397,19 @@ export class ShellComponent extends BaseAngularComponent {
|
|
|
1367
1397
|
}
|
|
1368
1398
|
}
|
|
1369
1399
|
/**
|
|
1370
|
-
* Sync workspace state with the current URL
|
|
1371
|
-
*
|
|
1400
|
+
* Sync workspace state with the current URL: find the tab that matches it and activate that tab.
|
|
1401
|
+
*
|
|
1402
|
+
* TWO CALLERS, not one. Browser back/forward reaches it through the NavigationEnd subscriber, which
|
|
1403
|
+
* passes the time that navigation landed. The end of `InitializeShell` also calls it once, to settle
|
|
1404
|
+
* a deep-linked url against the restored workspace, and passes nothing.
|
|
1405
|
+
*
|
|
1406
|
+
* @param url the url to match a tab against.
|
|
1407
|
+
* @param navigatedAt when that url became current, as a `Date.now()` reading. It decides whether this
|
|
1408
|
+
* sync is older than the active tab's own activation; see the ordering guard below, which yields
|
|
1409
|
+
* when it is. Defaults to {@link lastNavigationAt}, which for the startup call is construction time
|
|
1410
|
+
* rather than the first navigation — that field's comment says why.
|
|
1372
1411
|
*/
|
|
1373
|
-
async syncWorkspaceWithUrl(url) {
|
|
1412
|
+
async syncWorkspaceWithUrl(url, navigatedAt = this.lastNavigationAt) {
|
|
1374
1413
|
const config = this.workspaceManager.GetConfiguration();
|
|
1375
1414
|
if (!config?.tabs?.length) {
|
|
1376
1415
|
return;
|
|
@@ -1378,6 +1417,45 @@ export class ShellComponent extends BaseAngularComponent {
|
|
|
1378
1417
|
// Find the tab that matches this URL
|
|
1379
1418
|
const matchingTab = await this.findTabForUrl(url, config.tabs);
|
|
1380
1419
|
if (matchingTab && matchingTab.id !== config.activeTabId) {
|
|
1420
|
+
/**
|
|
1421
|
+
* ORDERING. A url sync must not override an activation that happened AFTER this url was
|
|
1422
|
+
* current, because then the url is the stale fact, not the active tab.
|
|
1423
|
+
*
|
|
1424
|
+
* The case that motivated this: opening a new record activates its tab immediately, and the
|
|
1425
|
+
* record's own url is written a few milliseconds later. A NavigationEnd for the PREVIOUS url
|
|
1426
|
+
* is still in flight; when it resolves, findTabForUrl matches the nav tab, and switching back
|
|
1427
|
+
* to it hides the records region -- with a fully rendered form inside it -- permanently,
|
|
1428
|
+
* because the records region cannot re-activate itself once it stops being shown.
|
|
1429
|
+
*
|
|
1430
|
+
* Measured before this guard: the switch happened on every new-deal open, and whether the
|
|
1431
|
+
* user saw a form at all depended on whether it had finished rendering first. Suppressing
|
|
1432
|
+
* exactly this call took a usable form from 12/18 opens to 18/18 (Fisher p = 0.0095).
|
|
1433
|
+
*
|
|
1434
|
+
* This deliberately compares TIMES rather than tab kinds. Back/forward navigation must still
|
|
1435
|
+
* move the active tab, and it arrives here too -- but there the navigation is newer than the
|
|
1436
|
+
* activation, so it wins, which is correct. A "don't leave a record tab" guard would break it.
|
|
1437
|
+
*/
|
|
1438
|
+
const latest = this.workspaceManager.GetConfiguration();
|
|
1439
|
+
const activeTab = latest?.tabs.find(t => t.id === latest.activeTabId);
|
|
1440
|
+
const activatedAt = activeTab?.lastAccessedAt ? Date.parse(activeTab.lastAccessedAt) : 0;
|
|
1441
|
+
/**
|
|
1442
|
+
* A STAMP FROM THE FUTURE IS NOT EVIDENCE, because it did not come from this clock.
|
|
1443
|
+
*
|
|
1444
|
+
* The workspace configuration — `lastAccessedAt` included — is saved to `MJ: Workspaces` and
|
|
1445
|
+
* restored unchanged on the next load, on any device, and nothing on restore restamps the active
|
|
1446
|
+
* tab. So a tab stamped on a machine whose clock runs ahead keeps an `activatedAt` that beats
|
|
1447
|
+
* every `navigatedAt` here, and the guard would then suppress EVERY url sync until something
|
|
1448
|
+
* called `SetActiveTab` locally: back, forward and the startup deep link would all silently do
|
|
1449
|
+
* nothing until the user clicked a tab.
|
|
1450
|
+
*
|
|
1451
|
+
* Measured in review with the active tab stamped five minutes ahead: no `SetActiveTab` at all,
|
|
1452
|
+
* where `next` switched. Clamping to "not later than now" restores both cases and costs one
|
|
1453
|
+
* condition. An activation cannot legitimately be in this clock's future, so nothing real is
|
|
1454
|
+
* excluded.
|
|
1455
|
+
*/
|
|
1456
|
+
if (Number.isFinite(activatedAt) && activatedAt > navigatedAt && activatedAt <= Date.now()) {
|
|
1457
|
+
return;
|
|
1458
|
+
}
|
|
1381
1459
|
// Activate the matching tab
|
|
1382
1460
|
this.workspaceManager.SetActiveTab(matchingTab.id);
|
|
1383
1461
|
}
|
|
@@ -3791,5 +3869,5 @@ export class ShellComponent extends BaseAngularComponent {
|
|
|
3791
3869
|
type: HostListener,
|
|
3792
3870
|
args: ['document:click']
|
|
3793
3871
|
}] }); })();
|
|
3794
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ShellComponent, { className: "ShellComponent", filePath: "src/lib/shell/shell.component.ts", lineNumber:
|
|
3872
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ShellComponent, { className: "ShellComponent", filePath: "src/lib/shell/shell.component.ts", lineNumber: 59 }); })();
|
|
3795
3873
|
//# sourceMappingURL=shell.component.js.map
|