@memberjunction/ng-explorer-core 6.1.0-edge.2 → 6.1.0-edge.3
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/LICENSE +180 -4
- package/README.md +1 -1
- package/dist/app-routing.module.d.ts.map +1 -1
- package/dist/app-routing.module.js +23 -7
- package/dist/app-routing.module.js.map +1 -1
- package/dist/lib/resource-wrappers/record-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/record-resource.component.js +4 -1
- package/dist/lib/resource-wrappers/record-resource.component.js.map +1 -1
- package/dist/lib/shell/shell.component.d.ts +7 -0
- package/dist/lib/shell/shell.component.d.ts.map +1 -1
- package/dist/lib/shell/shell.component.js +60 -42
- package/dist/lib/shell/shell.component.js.map +1 -1
- package/package.json +53 -53
|
@@ -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,EAAgB,MAAM,eAAe,CAAC;AACtJ,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,
|
|
1
|
+
{"version":3,"file":"shell.component.d.ts","sourceRoot":"","sources":["../../../src/lib/shell/shell.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { Component, ViewChild, HostListener } from '@angular/core';
|
|
|
2
2
|
import { NavigationEnd } from '@angular/router';
|
|
3
3
|
import { combineLatest, Subject } from 'rxjs';
|
|
4
4
|
import { filter, takeUntil } from 'rxjs/operators';
|
|
5
|
-
import { LogStatus, LogError, StartupManager, CompositeKey } from '@memberjunction/core';
|
|
5
|
+
import { LogStatus, LogError, StartupManager, CompositeKey, EncodeNewRecordValuesForURL, IsNewEntityRecordUrlId, NEW_ENTITY_RECORD_URL_ID, NEW_RECORD_VALUES_QUERY_PARAM, RecordUrlMatchesTab, ResourceUrlsEquivalent } from '@memberjunction/core';
|
|
6
6
|
import { MJEventType, MJGlobal, uuidv4, UUIDsEqual } from '@memberjunction/global';
|
|
7
7
|
import { EventCodes, SharedService, SYSTEM_APP_ID, SetRecordOpenStyle, IsRecordsRegionTab, IsRecordsTabConfiguration } from '@memberjunction/ng-shared';
|
|
8
8
|
import { MJNotificationService } from '@memberjunction/ng-notifications';
|
|
@@ -1292,8 +1292,11 @@ export class ShellComponent extends BaseAngularComponent {
|
|
|
1292
1292
|
// Compare full URLs including query params to detect changes
|
|
1293
1293
|
const currentUrl = this.router.url;
|
|
1294
1294
|
const newUrl = resourceUrl;
|
|
1295
|
-
//
|
|
1296
|
-
|
|
1295
|
+
// Decode before compare. encodeURIComponent writes `%3A` for the
|
|
1296
|
+
// colon in `MJ_BizApps_Orders: Order Headers`; Angular's serializer
|
|
1297
|
+
// leaves `:`. A raw !== is permanently true and reloads the route
|
|
1298
|
+
// until the tab dies (Person → Orders → New).
|
|
1299
|
+
if (!ResourceUrlsEquivalent(currentUrl, newUrl)) {
|
|
1297
1300
|
// Suppress ResourceResolver for this navigation - we're just syncing the URL
|
|
1298
1301
|
// to reflect the current active tab, not requesting a new tab to be opened
|
|
1299
1302
|
this.tabService.SuppressNextResolve();
|
|
@@ -1380,12 +1383,7 @@ export class ShellComponent extends BaseAngularComponent {
|
|
|
1380
1383
|
if (appRecordMatch) {
|
|
1381
1384
|
const entityName = decodeURIComponent(appRecordMatch[2]);
|
|
1382
1385
|
const recordId = decodeURIComponent(appRecordMatch[3]);
|
|
1383
|
-
|
|
1384
|
-
compositeKey.SimpleLoadFromURLSegment(recordId);
|
|
1385
|
-
// Recreating a closed tab from browser history — the user's CURRENT
|
|
1386
|
-
// page is not where this record came from, so don't stamp it as the
|
|
1387
|
-
// origin (recordSource 'none' = no crumb rather than a false one).
|
|
1388
|
-
this.navigationService.OpenEntityRecord(entityName, compositeKey, { recordSource: 'none' });
|
|
1386
|
+
this.openRecordFromUrl(entityName, recordId, queryParams);
|
|
1389
1387
|
return;
|
|
1390
1388
|
}
|
|
1391
1389
|
// Check for app-scoped view URL: /app/:appName/view/:viewId
|
|
@@ -1488,11 +1486,7 @@ export class ShellComponent extends BaseAngularComponent {
|
|
|
1488
1486
|
if (legacyRecordMatch) {
|
|
1489
1487
|
const entityName = decodeURIComponent(legacyRecordMatch[1]);
|
|
1490
1488
|
const recordId = decodeURIComponent(legacyRecordMatch[2]);
|
|
1491
|
-
|
|
1492
|
-
compositeKey.SimpleLoadFromURLSegment(recordId);
|
|
1493
|
-
// Same as the app-scoped branch above: history recreation has no
|
|
1494
|
-
// truthful origin — suppress the crumb instead of inventing one.
|
|
1495
|
-
this.navigationService.OpenEntityRecord(entityName, compositeKey, { recordSource: 'none' });
|
|
1489
|
+
this.openRecordFromUrl(entityName, recordId, queryParams);
|
|
1496
1490
|
return;
|
|
1497
1491
|
}
|
|
1498
1492
|
// Check for legacy view URL: /resource/view/:viewId
|
|
@@ -1514,6 +1508,30 @@ export class ShellComponent extends BaseAngularComponent {
|
|
|
1514
1508
|
this.urlBasedNavigation = false;
|
|
1515
1509
|
}
|
|
1516
1510
|
}
|
|
1511
|
+
/**
|
|
1512
|
+
* Recreate a record tab from a URL. `/new` is OpenNewEntityRecord — feeding
|
|
1513
|
+
* the sentinel through OpenEntityRecord produced an empty CompositeKey and
|
|
1514
|
+
* another forced tab, which is the loop that killed the browser.
|
|
1515
|
+
*/
|
|
1516
|
+
openRecordFromUrl(entityName, recordId, queryParams) {
|
|
1517
|
+
if (IsNewEntityRecordUrlId(recordId)) {
|
|
1518
|
+
const nrv = queryParams.get(NEW_RECORD_VALUES_QUERY_PARAM) ?? undefined;
|
|
1519
|
+
this.navigationService.OpenNewEntityRecord(entityName, {
|
|
1520
|
+
newRecordValues: nrv,
|
|
1521
|
+
recordSource: 'none',
|
|
1522
|
+
});
|
|
1523
|
+
return;
|
|
1524
|
+
}
|
|
1525
|
+
const compositeKey = new CompositeKey();
|
|
1526
|
+
compositeKey.SimpleLoadFromURLSegment(recordId);
|
|
1527
|
+
this.navigationService.OpenEntityRecord(entityName, compositeKey, { recordSource: 'none' });
|
|
1528
|
+
}
|
|
1529
|
+
recordTabMatchesUrl(tab, entityName, recordId) {
|
|
1530
|
+
const tabConfig = tab.configuration || {};
|
|
1531
|
+
const tabEntity = (tabConfig['Entity'] || tabConfig['entity']);
|
|
1532
|
+
const tabRecordId = (tabConfig['recordId'] ?? tab.resourceRecordId);
|
|
1533
|
+
return RecordUrlMatchesTab(entityName, recordId, tabEntity, tabRecordId);
|
|
1534
|
+
}
|
|
1517
1535
|
/**
|
|
1518
1536
|
* Find the tab that matches a given URL
|
|
1519
1537
|
*/
|
|
@@ -1582,13 +1600,7 @@ export class ShellComponent extends BaseAngularComponent {
|
|
|
1582
1600
|
if (appRecordMatch) {
|
|
1583
1601
|
const entityName = decodeURIComponent(appRecordMatch[2]);
|
|
1584
1602
|
const recordId = decodeURIComponent(appRecordMatch[3]);
|
|
1585
|
-
return tabs.find(tab =>
|
|
1586
|
-
const tabConfig = tab.configuration || {};
|
|
1587
|
-
const tabEntity = (tabConfig['Entity'] || tabConfig['entity']);
|
|
1588
|
-
const tabRecordId = (tabConfig['recordId'] || tab.resourceRecordId);
|
|
1589
|
-
return tabEntity?.toLowerCase() === entityName.toLowerCase() &&
|
|
1590
|
-
tabRecordId === recordId;
|
|
1591
|
-
}) || null;
|
|
1603
|
+
return tabs.find(tab => this.recordTabMatchesUrl(tab, entityName, recordId)) || null;
|
|
1592
1604
|
}
|
|
1593
1605
|
// Dynamic view: /app/:appName/view/dynamic/:entityName
|
|
1594
1606
|
const appDynamicViewMatch = urlPath.match(/^\/app\/([^\/]+)\/view\/dynamic\/(.+)$/);
|
|
@@ -1652,13 +1664,7 @@ export class ShellComponent extends BaseAngularComponent {
|
|
|
1652
1664
|
if (recordMatch) {
|
|
1653
1665
|
const entityName = decodeURIComponent(recordMatch[1]);
|
|
1654
1666
|
const recordId = decodeURIComponent(recordMatch[2]);
|
|
1655
|
-
return tabs.find(tab =>
|
|
1656
|
-
const tabConfig = tab.configuration || {};
|
|
1657
|
-
const tabEntity = (tabConfig['Entity'] || tabConfig['entity']);
|
|
1658
|
-
const tabRecordId = (tabConfig['recordId'] || tab.resourceRecordId);
|
|
1659
|
-
return tabEntity?.toLowerCase() === entityName.toLowerCase() &&
|
|
1660
|
-
tabRecordId === recordId;
|
|
1661
|
-
}) || null;
|
|
1667
|
+
return tabs.find(tab => this.recordTabMatchesUrl(tab, entityName, recordId)) || null;
|
|
1662
1668
|
}
|
|
1663
1669
|
// Check for view URL: /resource/view/:viewId
|
|
1664
1670
|
const viewMatch = urlPath.match(/^\/resource\/view\/([^\/]+)$/);
|
|
@@ -1725,11 +1731,12 @@ export class ShellComponent extends BaseAngularComponent {
|
|
|
1725
1731
|
const isAppDefault = config['isAppDefault'];
|
|
1726
1732
|
const tabAppId = tab.applicationId;
|
|
1727
1733
|
// Helper to append query params to a URL, preserving any existing params
|
|
1728
|
-
const appendQP = (url) => {
|
|
1729
|
-
|
|
1734
|
+
const appendQP = (url, extra) => {
|
|
1735
|
+
const all = { ...(queryParams ?? {}), ...(extra ?? {}) };
|
|
1736
|
+
if (Object.keys(all).length === 0)
|
|
1730
1737
|
return url;
|
|
1731
1738
|
const separator = url.includes('?') ? '&' : '?';
|
|
1732
|
-
const params = new URLSearchParams(
|
|
1739
|
+
const params = new URLSearchParams(all);
|
|
1733
1740
|
return `${url}${separator}${params.toString()}`;
|
|
1734
1741
|
};
|
|
1735
1742
|
// Helper function to get app path for URL
|
|
@@ -1832,13 +1839,19 @@ export class ShellComponent extends BaseAngularComponent {
|
|
|
1832
1839
|
switch (resourceType) {
|
|
1833
1840
|
case 'records':
|
|
1834
1841
|
// /app/:appName/record/:entityName/:recordId
|
|
1835
|
-
|
|
1836
|
-
|
|
1837
|
-
|
|
1838
|
-
|
|
1839
|
-
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
+
// Unsaved records use the `new` sentinel so they can deeplink with NewRecordValues.
|
|
1843
|
+
if (entityName) {
|
|
1844
|
+
const isNewRecord = config['isNew'] === true || IsNewEntityRecordUrlId(recordId);
|
|
1845
|
+
const idSeg = isNewRecord ? NEW_ENTITY_RECORD_URL_ID : recordId;
|
|
1846
|
+
if (idSeg) {
|
|
1847
|
+
// recordId is a CompositeKey URL segment ("ID|<value>") — the '|' MUST be encoded.
|
|
1848
|
+
// Angular's UrlSerializer percent-encodes '|' to %7C in router.url, so if we embed it raw
|
|
1849
|
+
// here, `syncUrlWithWorkspace`'s `currentUrl !== newUrl` check is permanently true and can
|
|
1850
|
+
// drive a re-navigation loop (with onSameUrlNavigation:'reload'). The read side already
|
|
1851
|
+
// decodeURIComponent()s this segment, so encoding here keeps both sides consistent.
|
|
1852
|
+
const nrv = isNewRecord ? EncodeNewRecordValuesForURL(config['NewRecordValues']) : undefined;
|
|
1853
|
+
return appendQP(`/app/${encodeURIComponent(appPath)}/record/${encodeURIComponent(entityName)}/${encodeURIComponent(idSeg)}`, nrv ? { [NEW_RECORD_VALUES_QUERY_PARAM]: nrv } : undefined);
|
|
1854
|
+
}
|
|
1842
1855
|
}
|
|
1843
1856
|
break;
|
|
1844
1857
|
case 'user views':
|
|
@@ -1903,10 +1916,15 @@ export class ShellComponent extends BaseAngularComponent {
|
|
|
1903
1916
|
// Fallback to legacy routes (for backward compatibility during transition)
|
|
1904
1917
|
switch (resourceType) {
|
|
1905
1918
|
case 'records':
|
|
1906
|
-
if (entityName
|
|
1907
|
-
|
|
1908
|
-
|
|
1909
|
-
|
|
1919
|
+
if (entityName) {
|
|
1920
|
+
const isNewRecord = config['isNew'] === true || IsNewEntityRecordUrlId(recordId);
|
|
1921
|
+
const idSeg = isNewRecord ? NEW_ENTITY_RECORD_URL_ID : recordId;
|
|
1922
|
+
if (idSeg) {
|
|
1923
|
+
// Encode the CompositeKey segment ('|' → %7C) to match Angular's serialized router.url and
|
|
1924
|
+
// the decodeURIComponent() on the read side — see the app-scoped 'records' case above.
|
|
1925
|
+
const nrv = isNewRecord ? EncodeNewRecordValuesForURL(config['NewRecordValues']) : undefined;
|
|
1926
|
+
return appendQP(`/resource/record/${encodeURIComponent(entityName)}/${encodeURIComponent(idSeg)}`, nrv ? { [NEW_RECORD_VALUES_QUERY_PARAM]: nrv } : undefined);
|
|
1927
|
+
}
|
|
1910
1928
|
}
|
|
1911
1929
|
break;
|
|
1912
1930
|
case 'user views':
|