@memberjunction/ng-explorer-core 6.1.5 → 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/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 +31 -2
- package/dist/lib/shell/shell.component.d.ts.map +1 -1
- package/dist/lib/shell/shell.component.js +75 -4
- 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
|
|
@@ -252,8 +272,17 @@ export declare class ShellComponent extends BaseAngularComponent implements OnIn
|
|
|
252
272
|
*/
|
|
253
273
|
private syncUrlWithWorkspace;
|
|
254
274
|
/**
|
|
255
|
-
* Sync workspace state with the current URL
|
|
256
|
-
*
|
|
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.
|
|
257
286
|
*/
|
|
258
287
|
private syncWorkspaceWithUrl;
|
|
259
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,EAAwB,MAAM,eAAe,CAAC;AAE9J,OAAO,EAAE,cAAc,EAAE,MAAM,EAAiB,MAAM,iBAAiB,CAAC;AAGxE,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,UAAU,EAIV,OAAO,EACR,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAY,UAAU,EAAgN,MAAM,sBAAsB,CAAC;AAE1Q,OAAO,EAAc,iBAAiB,EAAgC,YAAY,EAAE,oBAAoB,EAAE,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAAsF,MAAM,2BAA2B,CAAC;AAChS,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAE9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,8BAA8B,EAAE,MAAM,+CAA+C,CAAC;AAC/F,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAIzE,OAAO,EAAE,wBAAwB,EAAyB,qBAAqB,EAAE,MAAM,kDAAkD,CAAC;AAC1I,OAAO,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AAClF,OAAO,EAAgB,eAAe,EAAE,YAAY,EAA0D,MAAM,cAAc,CAAC;AAEnI,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAGrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;;AAE9E;;;;;;;GAOG;AAEH,qBAMa,cAAe,SAAQ,oBAAqB,YAAW,MAAM,EAAE,SAAS,EAAE,aAAa;
|
|
1
|
+
{"version":3,"file":"shell.component.d.ts","sourceRoot":"","sources":["../../../src/lib/shell/shell.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -710,6 +710,26 @@ export class ShellComponent extends BaseAngularComponent {
|
|
|
710
710
|
}
|
|
711
711
|
/** The record-open style resolved at startup ('records' until resolved) */
|
|
712
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();
|
|
713
733
|
/**
|
|
714
734
|
* Resolve `Shell.RecordOpen.Style` from instance config and push it to the
|
|
715
735
|
* two collaborators that partition tabs by it: the ng-shared style module
|
|
@@ -1156,8 +1176,11 @@ export class ShellComponent extends BaseAngularComponent {
|
|
|
1156
1176
|
}));
|
|
1157
1177
|
// Subscribe to router navigation events (for browser back/forward)
|
|
1158
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();
|
|
1159
1182
|
if (this.initialized) {
|
|
1160
|
-
this.syncWorkspaceWithUrl(event.urlAfterRedirects || event.url);
|
|
1183
|
+
this.syncWorkspaceWithUrl(event.urlAfterRedirects || event.url, this.lastNavigationAt);
|
|
1161
1184
|
}
|
|
1162
1185
|
}));
|
|
1163
1186
|
// Check for deep link parameters on initialization
|
|
@@ -1374,10 +1397,19 @@ export class ShellComponent extends BaseAngularComponent {
|
|
|
1374
1397
|
}
|
|
1375
1398
|
}
|
|
1376
1399
|
/**
|
|
1377
|
-
* Sync workspace state with the current URL
|
|
1378
|
-
*
|
|
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.
|
|
1379
1411
|
*/
|
|
1380
|
-
async syncWorkspaceWithUrl(url) {
|
|
1412
|
+
async syncWorkspaceWithUrl(url, navigatedAt = this.lastNavigationAt) {
|
|
1381
1413
|
const config = this.workspaceManager.GetConfiguration();
|
|
1382
1414
|
if (!config?.tabs?.length) {
|
|
1383
1415
|
return;
|
|
@@ -1385,6 +1417,45 @@ export class ShellComponent extends BaseAngularComponent {
|
|
|
1385
1417
|
// Find the tab that matches this URL
|
|
1386
1418
|
const matchingTab = await this.findTabForUrl(url, config.tabs);
|
|
1387
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
|
+
}
|
|
1388
1459
|
// Activate the matching tab
|
|
1389
1460
|
this.workspaceManager.SetActiveTab(matchingTab.id);
|
|
1390
1461
|
}
|