@acorex-platform/framework-client 2.0.0-next.0 → 2.0.0-next.10
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/fesm2022/acorex-platform-framework-client-auth.mjs +113 -45
- package/fesm2022/acorex-platform-framework-client-auth.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-common.mjs +320 -166
- package/fesm2022/acorex-platform-framework-client-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-core.mjs +7 -2
- package/fesm2022/acorex-platform-framework-client-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-components.mjs +109 -15
- package/fesm2022/acorex-platform-framework-client-layout-components.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-DToXUL54.mjs → acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-Dj1zqE3r.mjs} +456 -169
- package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-Dj1zqE3r.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-DqssRhIG.mjs → acorex-platform-framework-client-layout-entity-attachments-page.component-Dv0qPsuq.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-DqssRhIG.mjs.map → acorex-platform-framework-client-layout-entity-attachments-page.component-Dv0qPsuq.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-Deq-a9MQ.mjs → acorex-platform-framework-client-layout-entity-bulk-entity.command-D774EAiQ.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-Deq-a9MQ.mjs.map → acorex-platform-framework-client-layout-entity-bulk-entity.command-D774EAiQ.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-file-list-popup.component-J30yrJMo.mjs → acorex-platform-framework-client-layout-entity-file-list-popup.component-BwTpQIWl.mjs} +4 -4
- package/fesm2022/{acorex-platform-framework-client-layout-entity-file-list-popup.component-J30yrJMo.mjs.map → acorex-platform-framework-client-layout-entity-file-list-popup.component-BwTpQIWl.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-BqqxD8cX.mjs → acorex-platform-framework-client-layout-entity-gallery-page.component-Be6RD2-p.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-BqqxD8cX.mjs.map → acorex-platform-framework-client-layout-entity-gallery-page.component-Be6RD2-p.mjs.map} +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-entity.mjs +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-views.mjs +12 -0
- package/fesm2022/acorex-platform-framework-client-layout-views.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs +98 -13
- package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-Drmmu4HQ.mjs → acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-BNdFv1ii.mjs} +310 -54
- package/fesm2022/acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-BNdFv1ii.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-BiuahYd8.mjs → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-CgSd-ix-.mjs} +3 -3
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-BiuahYd8.mjs.map → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-CgSd-ix-.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-CU_5b_te.mjs → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-DyW8ti20.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-CU_5b_te.mjs.map → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-DyW8ti20.mjs.map} +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs +1 -1
- package/fesm2022/acorex-platform-framework-client-themes-default.mjs +27 -14
- package/fesm2022/acorex-platform-framework-client-themes-default.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-themes-shared.mjs +1 -1
- package/fesm2022/acorex-platform-framework-client-themes-shared.mjs.map +1 -1
- package/layout/widget-core/README.md +1 -1
- package/layout/widgets/README.md +2 -2
- package/package.json +2 -2
- package/types/acorex-platform-framework-client-auth.d.ts +15 -1
- package/types/acorex-platform-framework-client-common.d.ts +35 -4
- package/types/acorex-platform-framework-client-layout-components.d.ts +26 -1
- package/types/acorex-platform-framework-client-layout-entity.d.ts +52 -29
- package/types/acorex-platform-framework-client-layout-widget-core.d.ts +26 -2
- package/types/acorex-platform-framework-client-layout-widgets.d.ts +9 -7
- package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-DToXUL54.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-Drmmu4HQ.mjs.map +0 -1
|
@@ -584,24 +584,64 @@ const AXP_SETTING_DEFINITION_PROVIDER = new InjectionToken('AXP_SETTING_DEFINITI
|
|
|
584
584
|
class AXPSettingDefinitionProviderService {
|
|
585
585
|
constructor() {
|
|
586
586
|
this.providers = inject(AXP_SETTING_DEFINITION_PROVIDER, { optional: true });
|
|
587
|
+
this.sessionService = inject(AXPSessionService);
|
|
587
588
|
this.cache = null;
|
|
589
|
+
/**
|
|
590
|
+
* Tenant, application, and enabled edition features.
|
|
591
|
+
* Providers such as Telegram gate sections on `isModuleEnabled` at build time,
|
|
592
|
+
* so a catalog built before login must be rebuilt once features arrive.
|
|
593
|
+
*/
|
|
594
|
+
this.cacheAvailabilityKey = null;
|
|
588
595
|
this.loadPromise = null;
|
|
589
596
|
}
|
|
597
|
+
/** Same identity permissions use when deciding the definition cache is still valid. */
|
|
598
|
+
getAvailabilityKey() {
|
|
599
|
+
return this.buildAvailabilityKey();
|
|
600
|
+
}
|
|
601
|
+
buildAvailabilityKey() {
|
|
602
|
+
const enabled = this.sessionService.features
|
|
603
|
+
.filter((feature) => feature.value === true && !!feature.name)
|
|
604
|
+
.map((feature) => feature.name)
|
|
605
|
+
.sort();
|
|
606
|
+
const applicationId = this.sessionService.application?.id ?? '';
|
|
607
|
+
const tenantId = this.sessionService.tenant?.id ?? '';
|
|
608
|
+
return `${tenantId}|${applicationId}|${enabled.join(',')}`;
|
|
609
|
+
}
|
|
590
610
|
async load() {
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
611
|
+
while (true) {
|
|
612
|
+
const availabilityKey = this.buildAvailabilityKey();
|
|
613
|
+
if (this.cache && this.cacheAvailabilityKey === availabilityKey) {
|
|
614
|
+
return;
|
|
615
|
+
}
|
|
616
|
+
if (this.loadPromise) {
|
|
617
|
+
await this.loadPromise;
|
|
618
|
+
continue;
|
|
619
|
+
}
|
|
620
|
+
const keyAtStart = availabilityKey;
|
|
621
|
+
this.cache = null;
|
|
622
|
+
this.cacheAvailabilityKey = null;
|
|
623
|
+
let resolveLoad;
|
|
624
|
+
this.loadPromise = new Promise((resolve) => {
|
|
625
|
+
resolveLoad = resolve;
|
|
597
626
|
});
|
|
627
|
+
try {
|
|
628
|
+
await this.loadDefinitions();
|
|
629
|
+
if (this.buildAvailabilityKey() === keyAtStart) {
|
|
630
|
+
this.cacheAvailabilityKey = keyAtStart;
|
|
631
|
+
}
|
|
632
|
+
else {
|
|
633
|
+
// Features changed while providers ran. Drop the catalog and rebuild.
|
|
634
|
+
this.cache = null;
|
|
635
|
+
this.cacheAvailabilityKey = null;
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
finally {
|
|
639
|
+
this.loadPromise = null;
|
|
640
|
+
resolveLoad();
|
|
641
|
+
}
|
|
598
642
|
}
|
|
599
|
-
await this.loadPromise;
|
|
600
643
|
}
|
|
601
644
|
async loadDefinitions() {
|
|
602
|
-
if (this.cache) {
|
|
603
|
-
return;
|
|
604
|
-
}
|
|
605
645
|
const context = new AXPSettingDefinitionProviderContext();
|
|
606
646
|
// Load providers from DI tokens — isolate failures so one provider cannot block bootstrap.
|
|
607
647
|
const providerList = this.normalizeProviders(this.providers);
|
|
@@ -629,6 +669,12 @@ class AXPSettingDefinitionProviderService {
|
|
|
629
669
|
}
|
|
630
670
|
async reload() {
|
|
631
671
|
this.cache = null;
|
|
672
|
+
this.cacheAvailabilityKey = null;
|
|
673
|
+
if (this.loadPromise) {
|
|
674
|
+
await this.loadPromise;
|
|
675
|
+
this.cache = null;
|
|
676
|
+
this.cacheAvailabilityKey = null;
|
|
677
|
+
}
|
|
632
678
|
await this.load();
|
|
633
679
|
}
|
|
634
680
|
async getListAsync(scope) {
|
|
@@ -3442,6 +3488,213 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
3442
3488
|
}]
|
|
3443
3489
|
}], ctorParameters: () => [] });
|
|
3444
3490
|
|
|
3491
|
+
//#endregion
|
|
3492
|
+
//#region ---- App Path Navigation ----
|
|
3493
|
+
/**
|
|
3494
|
+
* Splits an absolute app path (`/app/m/module/e/Entity/id/view`) into router command segments.
|
|
3495
|
+
* Prefer this over `navigate([fullPath])` or ambiguous single-segment navigation so browser history stays correct.
|
|
3496
|
+
*/
|
|
3497
|
+
function axpParseAppPath(path) {
|
|
3498
|
+
const trimmed = path.trim();
|
|
3499
|
+
const withoutLeadingSlash = trimmed.startsWith('/') ? trimmed.slice(1) : trimmed;
|
|
3500
|
+
const [pathAndFragment, queryString] = withoutLeadingSlash.split('?');
|
|
3501
|
+
const [pathPart, fragment] = pathAndFragment.split('#');
|
|
3502
|
+
const segments = pathPart.split('/').filter(Boolean);
|
|
3503
|
+
const queryParams = queryString
|
|
3504
|
+
? queryString.split('&').reduce((params, pair) => {
|
|
3505
|
+
const [key, value = ''] = pair.split('=');
|
|
3506
|
+
if (key) {
|
|
3507
|
+
params[decodeURIComponent(key)] = decodeURIComponent(value);
|
|
3508
|
+
}
|
|
3509
|
+
return params;
|
|
3510
|
+
}, {})
|
|
3511
|
+
: undefined;
|
|
3512
|
+
return {
|
|
3513
|
+
segments,
|
|
3514
|
+
queryParams,
|
|
3515
|
+
fragment: fragment || undefined,
|
|
3516
|
+
};
|
|
3517
|
+
}
|
|
3518
|
+
/** Navigates using explicit path segments (same pattern as entity preload filters). */
|
|
3519
|
+
function axpNavigateAppPath(router, path, extras) {
|
|
3520
|
+
const { segments, queryParams, fragment } = axpParseAppPath(path);
|
|
3521
|
+
return router.navigate(segments, {
|
|
3522
|
+
...extras,
|
|
3523
|
+
queryParams,
|
|
3524
|
+
fragment,
|
|
3525
|
+
});
|
|
3526
|
+
}
|
|
3527
|
+
/** True when a URL path is an entity master list route (`.../e/{Entity}/list`). */
|
|
3528
|
+
function axpIsEntityListPath(url) {
|
|
3529
|
+
const path = url.split('?')[0].split('#')[0];
|
|
3530
|
+
return /\/e\/[^/]+\/list$/.test(path);
|
|
3531
|
+
}
|
|
3532
|
+
/** True when the current browser URL is an entity master list route (`.../e/{Entity}/list`). */
|
|
3533
|
+
function axpIsEntityListRoute(router) {
|
|
3534
|
+
return axpIsEntityListPath(router.url);
|
|
3535
|
+
}
|
|
3536
|
+
/** True when a URL path is an entity details view route (`.../e/{Entity}/{id}/view`). */
|
|
3537
|
+
function axpIsEntityDetailsPath(url) {
|
|
3538
|
+
const path = url.split('?')[0].split('#')[0];
|
|
3539
|
+
return /\/e\/[^/]+\/[^/]+\/view$/.test(path);
|
|
3540
|
+
}
|
|
3541
|
+
/**
|
|
3542
|
+
* Entity key (`module.entity`) for `/{app}/m/{module}/e/{entity}/{id}/view`.
|
|
3543
|
+
* Query and hash are ignored. Returns null for every other path.
|
|
3544
|
+
*/
|
|
3545
|
+
function axpEntityKeyFromDetailsPath(url) {
|
|
3546
|
+
const path = url.split('?')[0]?.split('#')[0] ?? '';
|
|
3547
|
+
const match = /\/m\/([^/]+)\/e\/([^/]+)\/[^/]+\/view$/.exec(path);
|
|
3548
|
+
const moduleName = match?.[1];
|
|
3549
|
+
const entityName = match?.[2];
|
|
3550
|
+
if (!moduleName || !entityName) {
|
|
3551
|
+
return null;
|
|
3552
|
+
}
|
|
3553
|
+
return `${moduleName}.${entityName}`;
|
|
3554
|
+
}
|
|
3555
|
+
/** True when the current browser URL is an entity details view route (`.../e/{Entity}/{id}/view`). */
|
|
3556
|
+
function axpIsEntityDetailsViewRoute(router) {
|
|
3557
|
+
return axpIsEntityDetailsPath(router.url);
|
|
3558
|
+
}
|
|
3559
|
+
/**
|
|
3560
|
+
* Merges query params on the current entity list route without pushing history.
|
|
3561
|
+
* Uses absolute path segments so a stale `relativeTo` cannot rewrite the active URL after navigating away.
|
|
3562
|
+
*/
|
|
3563
|
+
function axpReplaceEntityListRouteQueryParams(router, queryParams) {
|
|
3564
|
+
const url = router.url;
|
|
3565
|
+
if (!axpIsEntityListPath(url)) {
|
|
3566
|
+
return;
|
|
3567
|
+
}
|
|
3568
|
+
const parsed = router.parseUrl(url);
|
|
3569
|
+
const pathOnly = url.split('?')[0].split('#')[0];
|
|
3570
|
+
const { segments } = axpParseAppPath(pathOnly);
|
|
3571
|
+
const mergedQueryParams = { ...parsed.queryParams, ...queryParams };
|
|
3572
|
+
void router.navigate(segments, {
|
|
3573
|
+
queryParams: mergedQueryParams,
|
|
3574
|
+
replaceUrl: true,
|
|
3575
|
+
});
|
|
3576
|
+
}
|
|
3577
|
+
//#endregion
|
|
3578
|
+
|
|
3579
|
+
//#region ----- Constants -----
|
|
3580
|
+
/** Query param that distinguishes two menus pointing at the same entity list. */
|
|
3581
|
+
const ENTITY_LIST_INSTANCE_QUERY_PARAM = 'list';
|
|
3582
|
+
/** Used when the list is opened without a menu (command, deep link). */
|
|
3583
|
+
const ENTITY_LIST_DEFAULT_INSTANCE_ID = 'default';
|
|
3584
|
+
//#endregion
|
|
3585
|
+
//#region ----- Instance id -----
|
|
3586
|
+
function axpNormalizeEntityListInstanceId(value) {
|
|
3587
|
+
if (typeof value !== 'string') {
|
|
3588
|
+
return ENTITY_LIST_DEFAULT_INSTANCE_ID;
|
|
3589
|
+
}
|
|
3590
|
+
const trimmed = value.trim();
|
|
3591
|
+
return trimmed.length > 0 ? trimmed : ENTITY_LIST_DEFAULT_INSTANCE_ID;
|
|
3592
|
+
}
|
|
3593
|
+
function axpGetEntityListInstanceIdFromQueryString(queryString) {
|
|
3594
|
+
const params = new URLSearchParams(queryString.startsWith('?') ? queryString.slice(1) : queryString);
|
|
3595
|
+
return axpNormalizeEntityListInstanceId(params.get(ENTITY_LIST_INSTANCE_QUERY_PARAM));
|
|
3596
|
+
}
|
|
3597
|
+
function axpGetEntityListInstanceIdFromParamMap(queryParamMap) {
|
|
3598
|
+
return axpNormalizeEntityListInstanceId(queryParamMap.get(ENTITY_LIST_INSTANCE_QUERY_PARAM));
|
|
3599
|
+
}
|
|
3600
|
+
function axpGetEntityListInstanceIdFromPath(path) {
|
|
3601
|
+
const queryString = path.split('#')[0].split('?')[1] ?? '';
|
|
3602
|
+
return axpGetEntityListInstanceIdFromQueryString(queryString);
|
|
3603
|
+
}
|
|
3604
|
+
//#endregion
|
|
3605
|
+
//#region ----- Menu / URL stamping -----
|
|
3606
|
+
/**
|
|
3607
|
+
* Appends `list={instanceId}` to an entity-list path when missing.
|
|
3608
|
+
* Named menu entries get a stable identity so Angular reuses the list route
|
|
3609
|
+
* while filter persistence can still isolate each menu.
|
|
3610
|
+
*/
|
|
3611
|
+
function axpEnsureEntityListInstanceQueryParam(path, instanceId) {
|
|
3612
|
+
if (!path || !instanceId || !axpIsEntityListPath(path)) {
|
|
3613
|
+
return path;
|
|
3614
|
+
}
|
|
3615
|
+
const normalized = axpNormalizeEntityListInstanceId(instanceId);
|
|
3616
|
+
if (normalized === ENTITY_LIST_DEFAULT_INSTANCE_ID) {
|
|
3617
|
+
return path;
|
|
3618
|
+
}
|
|
3619
|
+
const { segments, queryParams, fragment } = axpParseAppPath(path);
|
|
3620
|
+
if (queryParams?.[ENTITY_LIST_INSTANCE_QUERY_PARAM]) {
|
|
3621
|
+
return path;
|
|
3622
|
+
}
|
|
3623
|
+
const nextQuery = new URLSearchParams({
|
|
3624
|
+
...(queryParams ?? {}),
|
|
3625
|
+
[ENTITY_LIST_INSTANCE_QUERY_PARAM]: normalized,
|
|
3626
|
+
});
|
|
3627
|
+
const base = `/${segments.join('/')}`;
|
|
3628
|
+
const withQuery = `${base}?${nextQuery.toString()}`;
|
|
3629
|
+
return fragment ? `${withQuery}#${fragment}` : withQuery;
|
|
3630
|
+
}
|
|
3631
|
+
/**
|
|
3632
|
+
* Query keys the list page rewrites while the user stays on the same menu
|
|
3633
|
+
* (`view`, `filters`, layout, refresh). They must not open another tab.
|
|
3634
|
+
*/
|
|
3635
|
+
const ENTITY_LIST_PAGE_STATE_QUERY_KEYS = new Set(['view', 'layout', 'filters', '_ts']);
|
|
3636
|
+
function pushEntityListNavigationPair(pairs, key, raw) {
|
|
3637
|
+
if (!key || ENTITY_LIST_PAGE_STATE_QUERY_KEYS.has(key)) {
|
|
3638
|
+
return;
|
|
3639
|
+
}
|
|
3640
|
+
const value = Array.isArray(raw) ? raw[0] : raw;
|
|
3641
|
+
if (typeof value !== 'string') {
|
|
3642
|
+
return;
|
|
3643
|
+
}
|
|
3644
|
+
if (key === ENTITY_LIST_INSTANCE_QUERY_PARAM) {
|
|
3645
|
+
const normalized = axpNormalizeEntityListInstanceId(value);
|
|
3646
|
+
if (normalized === ENTITY_LIST_DEFAULT_INSTANCE_ID) {
|
|
3647
|
+
return;
|
|
3648
|
+
}
|
|
3649
|
+
pairs.push([key, normalized]);
|
|
3650
|
+
return;
|
|
3651
|
+
}
|
|
3652
|
+
pairs.push([key, value]);
|
|
3653
|
+
}
|
|
3654
|
+
function readEntityListNavigationPairs(query) {
|
|
3655
|
+
const pairs = [];
|
|
3656
|
+
if (!query) {
|
|
3657
|
+
return pairs;
|
|
3658
|
+
}
|
|
3659
|
+
if (typeof query === 'string') {
|
|
3660
|
+
const queryString = query.includes('?')
|
|
3661
|
+
? (query.split('#')[0].split('?')[1] ?? '')
|
|
3662
|
+
: query.replace(/^\?/, '');
|
|
3663
|
+
const params = new URLSearchParams(queryString);
|
|
3664
|
+
params.forEach((value, key) => pushEntityListNavigationPair(pairs, key, value));
|
|
3665
|
+
return pairs;
|
|
3666
|
+
}
|
|
3667
|
+
if (typeof URLSearchParams !== 'undefined' && query instanceof URLSearchParams) {
|
|
3668
|
+
query.forEach((value, key) => pushEntityListNavigationPair(pairs, key, value));
|
|
3669
|
+
return pairs;
|
|
3670
|
+
}
|
|
3671
|
+
for (const [key, value] of Object.entries(query)) {
|
|
3672
|
+
pushEntityListNavigationPair(pairs, key, value);
|
|
3673
|
+
}
|
|
3674
|
+
return pairs;
|
|
3675
|
+
}
|
|
3676
|
+
/**
|
|
3677
|
+
* Tab and route-cache identity for an entity list.
|
|
3678
|
+
* Navigation query params (`mode=cm`, `mode=pm`, non-default `list`, …) keep each menu distinct,
|
|
3679
|
+
* the same way simple navigation does. Page-state params stay on the URL and do not split the tab.
|
|
3680
|
+
*/
|
|
3681
|
+
function axpEntityListNavigationTabKey(path, query) {
|
|
3682
|
+
const base = path.split('?')[0].split('#')[0].replace(/\/+$/, '') || '/';
|
|
3683
|
+
if (!axpIsEntityListPath(base)) {
|
|
3684
|
+
return base;
|
|
3685
|
+
}
|
|
3686
|
+
const pairs = readEntityListNavigationPairs(query);
|
|
3687
|
+
if (!pairs.length) {
|
|
3688
|
+
return base;
|
|
3689
|
+
}
|
|
3690
|
+
pairs.sort((left, right) => left[0].localeCompare(right[0]) || left[1].localeCompare(right[1]));
|
|
3691
|
+
const queryString = pairs
|
|
3692
|
+
.map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)
|
|
3693
|
+
.join('&');
|
|
3694
|
+
return `${base}?${queryString}`;
|
|
3695
|
+
}
|
|
3696
|
+
//#endregion
|
|
3697
|
+
|
|
3445
3698
|
//#endregion
|
|
3446
3699
|
/**
|
|
3447
3700
|
* Holds detached Angular route component instances keyed by tab key so tabular navigation can
|
|
@@ -3502,7 +3755,11 @@ class AXPTabRouteCacheRegistry {
|
|
|
3502
3755
|
*/
|
|
3503
3756
|
syncOpenKeys(scopedKeys, activeTabUrls = []) {
|
|
3504
3757
|
const scopedSet = new Set(scopedKeys);
|
|
3505
|
-
const activePathSet = new Set(activeTabUrls.
|
|
3758
|
+
const activePathSet = new Set(activeTabUrls.flatMap((url) => {
|
|
3759
|
+
const pathOnly = url.split('?')[0].split('#')[0].replace(/\/+$/, '') || '/';
|
|
3760
|
+
const withNavigation = axpEntityListNavigationTabKey(pathOnly, url);
|
|
3761
|
+
return withNavigation === pathOnly ? [pathOnly] : [pathOnly, withNavigation];
|
|
3762
|
+
}));
|
|
3506
3763
|
for (const cacheKey of [...this.handles.keys()]) {
|
|
3507
3764
|
const normalizedCacheKey = cacheKey.replace(/\/+$/, '') || '/';
|
|
3508
3765
|
const keepsScopedKey = scopedSet.has(normalizedCacheKey);
|
|
@@ -5329,7 +5586,7 @@ class AXPBackgroundOperationSlotComponent {
|
|
|
5329
5586
|
this.popover()?.close();
|
|
5330
5587
|
}
|
|
5331
5588
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPBackgroundOperationSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5332
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPBackgroundOperationSlotComponent, isStandalone: true, selector: "axp-background-operation-slot", viewQueries: [{ propertyName: "popover", first: true, predicate: AXPopoverComponent, descendants: true, isSignal: true }], ngImport: i0, template: "@if (showSlot()) {\n <!-- ----- Footer tray trigger ----- -->\n <button type=\"button\" class=\"operation-slot__trigger\" #operationTrigger (click)=\"onTriggerClick(panel)\">\n @if (badgeDisplay()) {\n <!-- ----- Count badge ----- -->\n <ax-badge class=\"operation-slot__badge\" [class.--xs]=\"badgeDisplay().length > 2\" color=\"danger\" [text]=\"badgeDisplay()\"></ax-badge>\n }\n @if (slotShowsFailureOnly()) {\n <!-- ----- Failed tasks ----- -->\n <ax-icon class=\"operation-slot__icon\">\n <i class=\"fa-light fa-circle-exclamation\"></i>\n </ax-icon>\n }\n <!--->\n <!-- ----- In-progress spinner (no icon for completed) ----- -->\n @else if (!slotShowsRetainedOnly()) {\n <ax-icon class=\"operation-slot__icon\">\n <i class=\"fa-light fa-spinner fa-spin\"></i>\n </ax-icon>\n }\n <span class=\"operation-slot__text\">\n {{ slotLabelKey() | translate | async }}\n </span>\n </button>\n\n <ax-popover\n [target]=\"operationTrigger\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n [adaptivityEnabled]=\"true\"\n (onOpened)=\"onPopoverOpened(panel)\"\n >\n <axp-background-operation-panel\n #panel\n (onClosePopover)=\"closePopover()\"\n ></axp-background-operation-panel>\n </ax-popover>\n}\n", styles: ["@layer properties;axp-background-operation-slot{display:inline-flex}.operation-slot__trigger{display:inline-flex;cursor:pointer;align-items:center;gap:calc(var(--spacing, .25rem) * 1.5);border-radius:var(--radius-md, .375rem);border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:var(--spacing, .25rem);color:var(--color-text-default);--ax-sys-size: ax-sm;--ax-sys-size-base: calc(var(--ax-sys-size-md) - var(--ax-sys-size-step));--spacing: calc(var(--ax-sys-spacing-base) - .25 * var(--ax-sys-padding-step));--ax-sys-border-radius: var(--ax-sys-border-radius-base);--text-xs: calc(var(--ax-sys-text-xs-base) * 11 / 12);--text-sm: calc(var(--ax-sys-text-sm-base) * 6 / 7);--text-base: calc(var(--ax-sys-body-font-size) * .875);--text-lg: calc(var(--ax-sys-text-lg-base) * 8 / 9);--text-xl: calc(var(--ax-sys-text-xl-base) * .9);--leading-3: calc(var(--ax-sys-leading-3-base) * 7 / 6);--leading-4: var(--ax-sys-leading-4-base);--leading-5: calc(var(--ax-sys-leading-5-base) * .9);--leading-6: calc(var(--ax-sys-leading-6-base) * 11 / 12)}@media(hover:hover){.operation-slot__trigger:hover{background-color:rgba(var(--ax-sys-color-light-surface))}}.operation-slot__icon{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)))}.operation-slot__text{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500)}.operation-slot__badge{flex-shrink:0}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i4$1.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i3$2.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "closeOnNavigation", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: AXPBackgroundOperationPanelComponent, selector: "axp-background-operation-panel", outputs: ["onActiveCountChange", "onClosePopover"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
5589
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPBackgroundOperationSlotComponent, isStandalone: true, selector: "axp-background-operation-slot", viewQueries: [{ propertyName: "popover", first: true, predicate: AXPopoverComponent, descendants: true, isSignal: true }], ngImport: i0, template: "@if (showSlot()) {\n <!-- ----- Footer tray trigger ----- -->\n <button type=\"button\" class=\"operation-slot__trigger\" #operationTrigger (click)=\"onTriggerClick(panel)\">\n @if (badgeDisplay()) {\n <!-- ----- Count badge ----- -->\n <ax-badge class=\"operation-slot__badge\" [class.--xs]=\"badgeDisplay().length > 2\" color=\"danger\" [text]=\"badgeDisplay()\"></ax-badge>\n }\n @if (slotShowsFailureOnly()) {\n <!-- ----- Failed tasks ----- -->\n <ax-icon class=\"operation-slot__icon\">\n <i class=\"fa-light fa-circle-exclamation\"></i>\n </ax-icon>\n }\n <!--->\n <!-- ----- In-progress spinner (no icon for completed) ----- -->\n @else if (!slotShowsRetainedOnly()) {\n <ax-icon class=\"operation-slot__icon\">\n <i class=\"fa-light fa-spinner fa-spin\"></i>\n </ax-icon>\n }\n <span class=\"operation-slot__text\">\n {{ slotLabelKey() | translate | async }}\n </span>\n </button>\n\n <ax-popover\n [target]=\"operationTrigger\"\n [openOn]=\"'toggle'\"\n [closeOn]=\"'clickOut'\"\n [adaptivityEnabled]=\"true\"\n (onOpened)=\"onPopoverOpened(panel)\"\n >\n <axp-background-operation-panel\n #panel\n (onClosePopover)=\"closePopover()\"\n ></axp-background-operation-panel>\n </ax-popover>\n}\n", styles: ["@layer properties;axp-background-operation-slot{display:inline-flex}.operation-slot__trigger{display:inline-flex;cursor:pointer;align-items:center;gap:calc(var(--spacing, .25rem) * 1.5);border-radius:var(--radius-md, .375rem);border-style:var(--tw-border-style);border-width:0px;background-color:transparent;padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:var(--spacing, .25rem);color:var(--color-text-default);--ax-sys-size: ax-sm;--ax-sys-size-base: calc(var(--ax-sys-size-md) - var(--ax-sys-size-step));--spacing: calc(var(--ax-sys-spacing-base) - .25 * var(--ax-sys-padding-step));--ax-sys-border-radius: var(--ax-sys-border-radius-base);--text-xs: calc(var(--ax-sys-text-xs-base) * 11 / 12);--text-sm: calc(var(--ax-sys-text-sm-base) * 6 / 7);--text-base: calc(var(--ax-sys-body-font-size) * .875);--text-lg: calc(var(--ax-sys-text-lg-base) * 8 / 9);--text-xl: calc(var(--ax-sys-text-xl-base) * .9);--leading-3: calc(var(--ax-sys-leading-3-base) * 7 / 6);--leading-4: var(--ax-sys-leading-4-base);--leading-5: calc(var(--ax-sys-leading-5-base) * .9);--leading-6: calc(var(--ax-sys-leading-6-base) * 11 / 12)}@media(hover:hover){.operation-slot__trigger:hover{background-color:rgba(var(--ax-sys-color-light-surface))}}.operation-slot__icon{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)))}.operation-slot__text{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500)}.operation-slot__badge{flex-shrink:0}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i4$1.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i3$2.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "restoreFocusOnClose", "openAfter", "closeAfter", "closeOnScroll", "closeOnNavigation", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: AXPBackgroundOperationPanelComponent, selector: "axp-background-operation-panel", outputs: ["onActiveCountChange", "onClosePopover"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
5333
5590
|
}
|
|
5334
5591
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPBackgroundOperationSlotComponent, decorators: [{
|
|
5335
5592
|
type: Component,
|
|
@@ -5600,148 +5857,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
5600
5857
|
args: [{ providedIn: 'root' }]
|
|
5601
5858
|
}] });
|
|
5602
5859
|
|
|
5603
|
-
//#endregion
|
|
5604
|
-
//#region ---- App Path Navigation ----
|
|
5605
|
-
/**
|
|
5606
|
-
* Splits an absolute app path (`/app/m/module/e/Entity/id/view`) into router command segments.
|
|
5607
|
-
* Prefer this over `navigate([fullPath])` or ambiguous single-segment navigation so browser history stays correct.
|
|
5608
|
-
*/
|
|
5609
|
-
function axpParseAppPath(path) {
|
|
5610
|
-
const trimmed = path.trim();
|
|
5611
|
-
const withoutLeadingSlash = trimmed.startsWith('/') ? trimmed.slice(1) : trimmed;
|
|
5612
|
-
const [pathAndFragment, queryString] = withoutLeadingSlash.split('?');
|
|
5613
|
-
const [pathPart, fragment] = pathAndFragment.split('#');
|
|
5614
|
-
const segments = pathPart.split('/').filter(Boolean);
|
|
5615
|
-
const queryParams = queryString
|
|
5616
|
-
? queryString.split('&').reduce((params, pair) => {
|
|
5617
|
-
const [key, value = ''] = pair.split('=');
|
|
5618
|
-
if (key) {
|
|
5619
|
-
params[decodeURIComponent(key)] = decodeURIComponent(value);
|
|
5620
|
-
}
|
|
5621
|
-
return params;
|
|
5622
|
-
}, {})
|
|
5623
|
-
: undefined;
|
|
5624
|
-
return {
|
|
5625
|
-
segments,
|
|
5626
|
-
queryParams,
|
|
5627
|
-
fragment: fragment || undefined,
|
|
5628
|
-
};
|
|
5629
|
-
}
|
|
5630
|
-
/** Navigates using explicit path segments (same pattern as entity preload filters). */
|
|
5631
|
-
function axpNavigateAppPath(router, path, extras) {
|
|
5632
|
-
const { segments, queryParams, fragment } = axpParseAppPath(path);
|
|
5633
|
-
return router.navigate(segments, {
|
|
5634
|
-
...extras,
|
|
5635
|
-
queryParams,
|
|
5636
|
-
fragment,
|
|
5637
|
-
});
|
|
5638
|
-
}
|
|
5639
|
-
/** True when a URL path is an entity master list route (`.../e/{Entity}/list`). */
|
|
5640
|
-
function axpIsEntityListPath(url) {
|
|
5641
|
-
const path = url.split('?')[0].split('#')[0];
|
|
5642
|
-
return /\/e\/[^/]+\/list$/.test(path);
|
|
5643
|
-
}
|
|
5644
|
-
/** True when the current browser URL is an entity master list route (`.../e/{Entity}/list`). */
|
|
5645
|
-
function axpIsEntityListRoute(router) {
|
|
5646
|
-
return axpIsEntityListPath(router.url);
|
|
5647
|
-
}
|
|
5648
|
-
/** True when a URL path is an entity details view route (`.../e/{Entity}/{id}/view`). */
|
|
5649
|
-
function axpIsEntityDetailsPath(url) {
|
|
5650
|
-
const path = url.split('?')[0].split('#')[0];
|
|
5651
|
-
return /\/e\/[^/]+\/[^/]+\/view$/.test(path);
|
|
5652
|
-
}
|
|
5653
|
-
/**
|
|
5654
|
-
* Entity key (`module.entity`) for `/{app}/m/{module}/e/{entity}/{id}/view`.
|
|
5655
|
-
* Query and hash are ignored. Returns null for every other path.
|
|
5656
|
-
*/
|
|
5657
|
-
function axpEntityKeyFromDetailsPath(url) {
|
|
5658
|
-
const path = url.split('?')[0]?.split('#')[0] ?? '';
|
|
5659
|
-
const match = /\/m\/([^/]+)\/e\/([^/]+)\/[^/]+\/view$/.exec(path);
|
|
5660
|
-
const moduleName = match?.[1];
|
|
5661
|
-
const entityName = match?.[2];
|
|
5662
|
-
if (!moduleName || !entityName) {
|
|
5663
|
-
return null;
|
|
5664
|
-
}
|
|
5665
|
-
return `${moduleName}.${entityName}`;
|
|
5666
|
-
}
|
|
5667
|
-
/** True when the current browser URL is an entity details view route (`.../e/{Entity}/{id}/view`). */
|
|
5668
|
-
function axpIsEntityDetailsViewRoute(router) {
|
|
5669
|
-
return axpIsEntityDetailsPath(router.url);
|
|
5670
|
-
}
|
|
5671
|
-
/**
|
|
5672
|
-
* Merges query params on the current entity list route without pushing history.
|
|
5673
|
-
* Uses absolute path segments so a stale `relativeTo` cannot rewrite the active URL after navigating away.
|
|
5674
|
-
*/
|
|
5675
|
-
function axpReplaceEntityListRouteQueryParams(router, queryParams) {
|
|
5676
|
-
const url = router.url;
|
|
5677
|
-
if (!axpIsEntityListPath(url)) {
|
|
5678
|
-
return;
|
|
5679
|
-
}
|
|
5680
|
-
const parsed = router.parseUrl(url);
|
|
5681
|
-
const pathOnly = url.split('?')[0].split('#')[0];
|
|
5682
|
-
const { segments } = axpParseAppPath(pathOnly);
|
|
5683
|
-
const mergedQueryParams = { ...parsed.queryParams, ...queryParams };
|
|
5684
|
-
void router.navigate(segments, {
|
|
5685
|
-
queryParams: mergedQueryParams,
|
|
5686
|
-
replaceUrl: true,
|
|
5687
|
-
});
|
|
5688
|
-
}
|
|
5689
|
-
//#endregion
|
|
5690
|
-
|
|
5691
|
-
//#region ----- Constants -----
|
|
5692
|
-
/** Query param that distinguishes two menus pointing at the same entity list. */
|
|
5693
|
-
const ENTITY_LIST_INSTANCE_QUERY_PARAM = 'list';
|
|
5694
|
-
/** Used when the list is opened without a menu (command, deep link). */
|
|
5695
|
-
const ENTITY_LIST_DEFAULT_INSTANCE_ID = 'default';
|
|
5696
|
-
//#endregion
|
|
5697
|
-
//#region ----- Instance id -----
|
|
5698
|
-
function axpNormalizeEntityListInstanceId(value) {
|
|
5699
|
-
if (typeof value !== 'string') {
|
|
5700
|
-
return ENTITY_LIST_DEFAULT_INSTANCE_ID;
|
|
5701
|
-
}
|
|
5702
|
-
const trimmed = value.trim();
|
|
5703
|
-
return trimmed.length > 0 ? trimmed : ENTITY_LIST_DEFAULT_INSTANCE_ID;
|
|
5704
|
-
}
|
|
5705
|
-
function axpGetEntityListInstanceIdFromQueryString(queryString) {
|
|
5706
|
-
const params = new URLSearchParams(queryString.startsWith('?') ? queryString.slice(1) : queryString);
|
|
5707
|
-
return axpNormalizeEntityListInstanceId(params.get(ENTITY_LIST_INSTANCE_QUERY_PARAM));
|
|
5708
|
-
}
|
|
5709
|
-
function axpGetEntityListInstanceIdFromParamMap(queryParamMap) {
|
|
5710
|
-
return axpNormalizeEntityListInstanceId(queryParamMap.get(ENTITY_LIST_INSTANCE_QUERY_PARAM));
|
|
5711
|
-
}
|
|
5712
|
-
function axpGetEntityListInstanceIdFromPath(path) {
|
|
5713
|
-
const queryString = path.split('#')[0].split('?')[1] ?? '';
|
|
5714
|
-
return axpGetEntityListInstanceIdFromQueryString(queryString);
|
|
5715
|
-
}
|
|
5716
|
-
//#endregion
|
|
5717
|
-
//#region ----- Menu / URL stamping -----
|
|
5718
|
-
/**
|
|
5719
|
-
* Appends `list={instanceId}` to an entity-list path when missing.
|
|
5720
|
-
* Named menu entries get a stable identity so Angular reuses the list route
|
|
5721
|
-
* while filter persistence can still isolate each menu.
|
|
5722
|
-
*/
|
|
5723
|
-
function axpEnsureEntityListInstanceQueryParam(path, instanceId) {
|
|
5724
|
-
if (!path || !instanceId || !axpIsEntityListPath(path)) {
|
|
5725
|
-
return path;
|
|
5726
|
-
}
|
|
5727
|
-
const normalized = axpNormalizeEntityListInstanceId(instanceId);
|
|
5728
|
-
if (normalized === ENTITY_LIST_DEFAULT_INSTANCE_ID) {
|
|
5729
|
-
return path;
|
|
5730
|
-
}
|
|
5731
|
-
const { segments, queryParams, fragment } = axpParseAppPath(path);
|
|
5732
|
-
if (queryParams?.[ENTITY_LIST_INSTANCE_QUERY_PARAM]) {
|
|
5733
|
-
return path;
|
|
5734
|
-
}
|
|
5735
|
-
const nextQuery = new URLSearchParams({
|
|
5736
|
-
...(queryParams ?? {}),
|
|
5737
|
-
[ENTITY_LIST_INSTANCE_QUERY_PARAM]: normalized,
|
|
5738
|
-
});
|
|
5739
|
-
const base = `/${segments.join('/')}`;
|
|
5740
|
-
const withQuery = `${base}?${nextQuery.toString()}`;
|
|
5741
|
-
return fragment ? `${withQuery}#${fragment}` : withQuery;
|
|
5742
|
-
}
|
|
5743
|
-
//#endregion
|
|
5744
|
-
|
|
5745
5860
|
//#region ----- Menu instance identity -----
|
|
5746
5861
|
/** Prefers the stamped `list` query param, then the menu item name. */
|
|
5747
5862
|
function axpMenuItemListInstanceId(item) {
|
|
@@ -7248,13 +7363,14 @@ withMethods((store, router = inject(Router), commandService = inject(AXPCommandS
|
|
|
7248
7363
|
const IGNORED_QUERY_KEYS = new Set(['_ts']);
|
|
7249
7364
|
/**
|
|
7250
7365
|
* Builds a stable tab key from a router URL.
|
|
7251
|
-
* Path segments define
|
|
7252
|
-
*
|
|
7366
|
+
* Path segments define the page. Entity-list navigation query params (`mode`, `list`, …)
|
|
7367
|
+
* stay in the key so two menus of the same entity stay distinct, matching simple navigation.
|
|
7368
|
+
* Page-state params (`view`, `filters`, `_ts`) stay on the URL and do not open another tab.
|
|
7253
7369
|
*/
|
|
7254
7370
|
function axpBuildTabKey(url) {
|
|
7255
7371
|
const normalized = normalizeRouterUrl(url);
|
|
7256
7372
|
const pathOnly = normalized.split('?')[0].split('#')[0];
|
|
7257
|
-
return pathOnly;
|
|
7373
|
+
return axpEntityListNavigationTabKey(pathOnly, normalized);
|
|
7258
7374
|
}
|
|
7259
7375
|
/** Normalizes a router URL for storage and navigation. */
|
|
7260
7376
|
function normalizeRouterUrl(url) {
|
|
@@ -7328,10 +7444,10 @@ function axpGetLeafRouteSnapshot(root) {
|
|
|
7328
7444
|
return route;
|
|
7329
7445
|
}
|
|
7330
7446
|
/**
|
|
7331
|
-
*
|
|
7447
|
+
* Path identity from an activated route tree, without query params.
|
|
7332
7448
|
* Uses the nearest ancestor with `data.tab = true`; otherwise the leaf path.
|
|
7333
7449
|
*/
|
|
7334
|
-
function
|
|
7450
|
+
function axpTabScopePathFromSnapshot(leaf) {
|
|
7335
7451
|
const chain = leaf.pathFromRoot;
|
|
7336
7452
|
for (let index = chain.length - 1; index >= 0; index--) {
|
|
7337
7453
|
const snapshot = chain[index];
|
|
@@ -7341,6 +7457,13 @@ function axpResolveTabKeyFromSnapshot(leaf) {
|
|
|
7341
7457
|
}
|
|
7342
7458
|
return axpPathFromSnapshot(leaf);
|
|
7343
7459
|
}
|
|
7460
|
+
/**
|
|
7461
|
+
* Resolves the tab dedupe key from an activated route tree.
|
|
7462
|
+
* Entity list routes also include navigation query params (`mode`, `list`, …), same as simple navigation.
|
|
7463
|
+
*/
|
|
7464
|
+
function axpResolveTabKeyFromSnapshot(leaf) {
|
|
7465
|
+
return axpEntityListNavigationTabKey(axpTabScopePathFromSnapshot(leaf), leaf.queryParams);
|
|
7466
|
+
}
|
|
7344
7467
|
//#endregion
|
|
7345
7468
|
//#region ---- Router / URL Resolution ----
|
|
7346
7469
|
/**
|
|
@@ -7351,15 +7474,17 @@ function axpResolveTabKey(router, url) {
|
|
|
7351
7474
|
const normalized = normalizeRouterUrl(url ?? router.url);
|
|
7352
7475
|
const pathOnly = normalized.split('?')[0].split('#')[0];
|
|
7353
7476
|
const currentPath = normalizeRouterUrl(router.url).split('?')[0].split('#')[0];
|
|
7477
|
+
let basePath;
|
|
7354
7478
|
if (!url || pathOnly === currentPath) {
|
|
7355
7479
|
const leaf = axpGetLeafRouteSnapshot(router.routerState.snapshot.root);
|
|
7356
|
-
|
|
7480
|
+
basePath = axpTabScopePathFromSnapshot(leaf);
|
|
7357
7481
|
}
|
|
7358
|
-
|
|
7359
|
-
|
|
7360
|
-
|
|
7482
|
+
else {
|
|
7483
|
+
basePath =
|
|
7484
|
+
axpResolveTabKeyFromRouteConfig(router.config, pathOnly) ??
|
|
7485
|
+
(pathOnly.startsWith('/') ? pathOnly : `/${pathOnly}`);
|
|
7361
7486
|
}
|
|
7362
|
-
return
|
|
7487
|
+
return axpEntityListNavigationTabKey(basePath, normalized);
|
|
7363
7488
|
}
|
|
7364
7489
|
/**
|
|
7365
7490
|
* Matches a URL path against registered routes and resolves the tab key from `data.tab`.
|
|
@@ -9426,7 +9551,7 @@ function isStoredImageFileId(value) {
|
|
|
9426
9551
|
*/
|
|
9427
9552
|
function buildFileStorageDownloadUrl(baseUrl, fileId) {
|
|
9428
9553
|
const base = baseUrl.replace(/\/$/, '');
|
|
9429
|
-
return `${base}/v1/file-storage/download/${encodeURIComponent(fileId)}`;
|
|
9554
|
+
return `${base}/v1/file-storage/download/${encodeURIComponent(fileId)}?v=raw`;
|
|
9430
9555
|
}
|
|
9431
9556
|
/**
|
|
9432
9557
|
* Resolves a stored image ref to a browser-displayable URL.
|
|
@@ -13625,6 +13750,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
13625
13750
|
}]
|
|
13626
13751
|
}] });
|
|
13627
13752
|
|
|
13753
|
+
const NON_CASCADE_OPERATORS = new Set(['not-in', 'nin']);
|
|
13628
13754
|
function AXPCleanNestedFilters(filters) {
|
|
13629
13755
|
return filters
|
|
13630
13756
|
.map((filter) => {
|
|
@@ -13647,6 +13773,34 @@ function AXPCleanNestedFilters(filters) {
|
|
|
13647
13773
|
})
|
|
13648
13774
|
.filter(Boolean);
|
|
13649
13775
|
}
|
|
13776
|
+
/**
|
|
13777
|
+
* True when a cascade parent filter has structure but no value yet.
|
|
13778
|
+
* `{}` and other structurally empty filters are not pending.
|
|
13779
|
+
* Top-level `not-in` / `nin` are not cascade; nested `not-in` still follows cleaning.
|
|
13780
|
+
*/
|
|
13781
|
+
function isPendingCascadeFilter(filter) {
|
|
13782
|
+
if (filter == null || isStructurallyEmptyFilter(filter)) {
|
|
13783
|
+
return false;
|
|
13784
|
+
}
|
|
13785
|
+
const operatorType = readFilterOperatorType(filter.operator);
|
|
13786
|
+
if (NON_CASCADE_OPERATORS.has(operatorType)) {
|
|
13787
|
+
return false;
|
|
13788
|
+
}
|
|
13789
|
+
return AXPCleanNestedFilters([filter]).length === 0;
|
|
13790
|
+
}
|
|
13791
|
+
function isStructurallyEmptyFilter(filter) {
|
|
13792
|
+
const hasField = filter.field != null && filter.field !== '';
|
|
13793
|
+
const hasOperator = filter.operator != null;
|
|
13794
|
+
const hasNestedFilters = Array.isArray(filter.filters) && filter.filters.length > 0;
|
|
13795
|
+
return !hasField && !hasOperator && !hasNestedFilters;
|
|
13796
|
+
}
|
|
13797
|
+
function readFilterOperatorType(operator) {
|
|
13798
|
+
if (operator == null || typeof operator !== 'object') {
|
|
13799
|
+
return '';
|
|
13800
|
+
}
|
|
13801
|
+
const type = operator.type;
|
|
13802
|
+
return typeof type === 'string' ? type.toLowerCase() : '';
|
|
13803
|
+
}
|
|
13650
13804
|
|
|
13651
13805
|
//#region ----- Locale codes -----
|
|
13652
13806
|
/** Normalizes AvailableLanguages values (string codes or `{ code }` rows) to BCP-47 locale strings. */
|
|
@@ -14025,5 +14179,5 @@ const axpPageGetContextQueryDefinition = defineQuery({
|
|
|
14025
14179
|
* Generated bundle index. Do not edit.
|
|
14026
14180
|
*/
|
|
14027
14181
|
|
|
14028
|
-
export { ALL_DEFAULT_OPERATORS, AXPAcorexFileTypeBridgeProvider, AXPAcorexFileTypeModule, AXPAppVersionService, AXPBackgroundOperationCompletionService, AXPBackgroundOperationEntityStoreService, AXPBackgroundOperationHandler, AXPBackgroundOperationNotificationService, AXPBackgroundOperationProvider, AXPBackgroundOperationRootConfig, AXPBackgroundOperationService, AXPBackgroundOperationSlotComponent, AXPBrowserTitleService, AXPCleanNestedFilters, AXPClipBoardService, AXPCommonModule, AXPCommonSettings, AXPCustomOperatorService, AXPCustomOperatorServiceImpl, AXPDataProvider, AXPDefaultMultiLanguageConfigService, AXPEntityDetailsNavTrailService, AXPErrorHandlerRegistryService, AXPExportService, AXPFileActionsService, AXPFileChooserSettings, AXPFileStorageEvaluatorScopeProvider, AXPFileStorageService, AXPFileTypeProviderService, AXPFilterOperatorMiddlewareService, AXPFilterOperatorMiddlewareServiceImpl, AXPFooterTextSlotComponent, AXPGlobalErrorHandler, AXPHomePageModule, AXPHomePageService, AXPIndexedDbSettingValueProvider, AXPIntegrationDomainProviderContext, AXPIntegrationDomainRegistryFacade, AXPIntegrationDomainRegistryService, AXPIntegrationOAuthService, AXPIntegrationProviderContext, AXPIntegrationProviderRegistryService, AXPIntegrationRuntimeService, AXPKeyboardShortcutsHelpComponent, AXPKeyboardShortcutsHelpService, AXPLocalEntityEngine, AXPLocalEntityIndexedDb, AXPLocalEntityOfflineRuntime, AXPLocalEntityOutboxService, AXPLocalEntityRealtimeBridge, AXPLockService, AXPLogoImageSrcResolverService, AXPMenuKeyboardShortcutService, AXPMenuMiddlewareRegistry, AXPMenuProviderService, AXPMenuRouteAccessService, AXPMenuRouteGuard, AXPMenuSearchDefinitionProvider, AXPMenuSearchProvider, AXPMenuService, AXPMenuVisibilityService, AXPNavBarSlotComponent, AXPNavigateCommand, AXPNetworkConnectivityService, AXPNotFoundCatchAllRoute, AXPNotFoundError, AXPOutputContractTranscriptSegmentService, AXPPageGetContextQuery, AXPPageRunActionCommand, AXPPlatformBrandingService, AXPPlatformDefaultConfigs, AXPPlatformSettingsLoadState, AXPPlatformSettingsOfflineBootstrapService, AXPQueryEvaluatorScopeProvider, AXPQueryParamsEvaluatorScopeProvider, AXPRegionalCalendarService, AXPSearchCommandProvider, AXPSearchDefinitionActionBuilder, AXPSearchDefinitionBuilder, AXPSearchDefinitionProviderContext, AXPSearchDefinitionProviderService, AXPSearchService, AXPSettingDefaultValuesAggregatorService, AXPSettingDefinitionGroupBuilder, AXPSettingDefinitionProviderContext, AXPSettingDefinitionProviderService, AXPSettingDefinitionSectionBuilder, AXPSettingsBulkSyncService, AXPSettingsEvaluatorScopeProvider, AXPSettingsIndexedDb, AXPSettingsService, AXPStateMessageComponent, AXPStatusDefinitionProviderService, AXPStickyDirective, AXPTabNavigationService, AXPTabPreviewService, AXPTabRouteCacheRegistry, AXPTokenDefinitionService, AXPTokenEvaluatorScopeProvider, AXPTranslateFormatter, AXPUnsavedChangesConfirmService, AXPUnsavedChangesPopstateService, AXPUserNotificationService, AXPVersioningService, AXP_AGENT_OUTPUT_CONTRACT_DEFAULT_STRUCTURED_RETRIES, AXP_APP_VERSION_PROVIDER, AXP_BACKGROUND_OPERATION_ENTITY_STORAGE, AXP_BACKGROUND_OPERATION_HANDLERS, AXP_BACKGROUND_OPERATION_PROVIDERS, AXP_BREADCRUMB_COLLAPSE_HEAD_COUNT, AXP_BREADCRUMB_COLLAPSE_TAIL_COUNT, AXP_DOCUMENT_FILE_TYPE_PURPOSES, AXP_ENTITY_LIST_DISPLAY_MODE_DEFAULT, AXP_ENTITY_VIEW_ACCESS, AXP_EXPERIENCE_SETTINGS_GROUP, AXP_EXPERIENCE_SETTINGS_SECTIONS, AXP_FILE_ACTION_PROVIDER, AXP_FILE_TYPE_INFO_PROVIDER, AXP_HOME_PAGES, AXP_HOME_PAGE_DEFAULT_KEY, AXP_HOME_TAB_KEY, AXP_INTEGRATION_CONNECTION_ESTABLISHED, AXP_INTEGRATION_CONNECTION_LIFECYCLE, AXP_INTEGRATION_DOMAIN_PROVIDER, AXP_INTEGRATION_OAUTH_SERVICE, AXP_INTEGRATION_PROVIDER, AXP_INTEGRATION_RUNTIME_PROVIDER, AXP_INTEGRATION_SECRET_STORE, AXP_IN_APP_NOTIFICATION_SERVICE, AXP_LOCALE_MANAGEMENT_PORT, AXP_LOCAL_ENTITY_BROADCAST_CHANNEL, AXP_LOCAL_ENTITY_DEFAULT_MAX_ITEMS, AXP_LOCAL_ENTITY_OUTBOX_LOCK, AXP_MENU_MIDDLEWARE, AXP_MENU_PROVIDER, AXP_NOT_FOUND_CATCH_ALL_ROUTE, AXP_NOT_FOUND_ROUTE, AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER, AXP_PLATFORM_BRANDING_SETTING_KEYS, AXP_PLATFORM_CONFIG_TOKEN, AXP_PROTECTED_ROUTE_GUARDS, AXP_ROOT_CONFIG_TOKEN, AXP_RUNTIME_QUERY_CACHE_DEFAULTS, AXP_SEARCH_DEFINITION_LAZY_RESOLVER, AXP_SEARCH_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER, AXP_SETTINGS_CACHE_SYNC, AXP_SETTINGS_SYNC_DEBOUNCE_MS, AXP_SETTINGS_SYNC_KEYS, AXP_SETTINGS_SYNC_RETRY_BACKOFF_MS, AXP_SETTINGS_SYNC_TTL_MS, AXP_SETTING_DEFAULT_VALUES_PROVIDERS, AXP_SETTING_DEFINITION_PROVIDER, AXP_SETTING_SCOPE_DESCENDANTS, AXP_SETTING_VALUE_PROVIDER, AXP_STATUS_PROVIDERS, AXP_TAB_BREADCRUMB_JOIN_SEPARATOR, AXP_TAB_ROUTE_DATA_KEY, AXP_TOKEN_DEFINITION_PROVIDER, AXP_UNAUTHORIZED_ROUTE, AXP_USER_NOTIFICATION_SERVICE, AXVChangeType, AX_FILE_TYPE_METADATA_SUPPORT_BY_FILE_VIEWER, BETWEEN_OPER, BOOLEAN_OPERATORS, CONTAINS_OPER, DATE_OPERATORS, DEFAULT_DATE_FILTER_PRESETS, DEFAULT_MULTILANGUAGE_FIELD_NAMES, ENDS_WITH_OPER, ENTITY_LIST_DEFAULT_INSTANCE_ID, ENTITY_LIST_INSTANCE_QUERY_PARAM, ENVIRONMENT, EQ_OPER, FILE_VIEWER_PREVIEW_EXTENSIONS, GTE_OPER, GT_OPER, IN_OPER, IS_EMPTY_OPER, IS_NOT_EMPTY_OPER, LTE_OPER, LT_OPER, MULTILANGUAGE_CAPABLE_WIDGET_TYPES, NOT_CONTAINS_OPER, NOT_EQ_OPER, NUMBER_OPERATORS, SETTINGS_TRACE_NS, SETTINGS_TRACE_TITLE, STARTS_WITH_OPER, STRING_OPERATORS, UploadFromComputerActionProvider, applyDateFilterPreset, axpBackgroundOperationCapabilities, axpBackgroundOperationDisplayTime, axpBackgroundOperationDurationMs, axpBackgroundOperationEntityName, axpBackgroundOperationEstimateEndDate, axpBackgroundOperationFailurePolicy, axpBackgroundOperationFromEntityModel, axpBackgroundOperationRemainingMs, axpBackgroundOperationStatusTextParams, axpBackgroundOperationToEntityModel, axpBeginCommandSubFlowNavigation, axpBuildBackgroundOperation, axpBuildTabKey, axpClearEntityDetailsNavTrail, axpCloneBreadcrumbItems, axpCoerceBackgroundOperationDate, axpComposeEntityDetailsNavTrail, axpCreateBackgroundOperationId, axpEndCommandSubFlowNavigation, axpEnsureEntityListInstanceQueryParam, axpEntityKeyFromDetailsPath, axpFallbackTabTitle, axpFindMenuItemByRoute, axpFormatBackgroundOperationDurationMs, axpGetBreadcrumbNavigatePath, axpGetEntityDetailsNavTrail, axpGetEntityListInstanceIdFromParamMap, axpGetEntityListInstanceIdFromPath, axpGetEntityListInstanceIdFromQueryString, axpGetEntityListReturnUrl, axpGetLeafRouteSnapshot, axpHasTabScope, axpInterpolateNavigatePath, axpIsActiveBackgroundOperationStatus, axpIsBackgroundOperationI18nText, axpIsCommandSubFlowNavigationSuspended, axpIsCompletedBackgroundOperationStatus, axpIsCompletedPanelBackgroundOperation, axpIsEntityDetailsPath, axpIsEntityDetailsViewRoute, axpIsEntityListPath, axpIsEntityListRoute, axpIsEntityRecordNotFound, axpIsInProgressPanelBackgroundOperation, axpIsLikelyNetworkFailure, axpIsSameEntityDetailsRecord, axpIsTabEligibleUrl, axpIsTrayVisibleBackgroundOperation, axpJoinTabTitleSegments, axpLocalEntityCanServeListLocally, axpLocalEntityHotListRequest, axpLocalEntityIndexedDb, axpLocalEntityRecordId, axpLocalEntitySortAt, axpLocalEntitySupportsOfflineWrite, axpLocalEntityToPayload, axpMenuItemListInstanceId, axpMenuPathsMatch, axpNavigateAppPath, axpNavigateCommandDefinition, axpNormalizeEntityListInstanceId, axpPageGetContextQueryDefinition, axpPageRunActionCommandDefinition, axpParseAppPath, axpParseEntityDetailsRoute, axpParseEntityListRoute, axpPathFromSnapshot, axpPeekCommandSubFlowReturnUrl, axpPlatformSettingsAvailableGuard, axpPrepareOriginNavTrail, axpRedirectToNotFound, axpRedirectToUnauthorized, axpReplaceEntityListRouteQueryParams, axpResolveNavigatePath, axpResolveTabKey, axpResolveTabKeyFromRouteConfig, axpResolveTabKeyFromSnapshot, axpResolveTabTitleParts, axpSaveEntityDetailsNavTrail, axpSaveEntityListReturnUrl, axpSetEntityDetailsPageQuery, axpSettingsIndexedDb, axpSplitCollapsedBreadcrumbs, axpStampEntityListMenuInstancePaths, axpStripHomeBreadcrumb, axpStripTrailingCommandlessCrumbs, axpTrimNavTrailBeforeTarget, backgroundOperationEntityFactory, buildFileStorageDownloadUrl, buildLocalEntityMetaId, buildLocalEntityStorageId, buildScopedSettingsSnapshotId, chooseSystemFiles, coerceAXPSettingRawValue, coerceAXPSettingRawValueByKind, configPlatform, createBackgroundOperationStore, createDefaultSettingValueProviders, createEmptyScopedSettingsSnapshot, createEntityCommandOptions, createEntityRowExpressionScope, createEntitySearchCommand, createFileTypeOpenContext, createIndexedDbSettingValueProviders, createMenuContext, createMenuMiddleware, createUnsavedChangesCanDeactivateGuard, downloadGraphicFromElement, evaluateEntityDisplayTemplate, extractFileExtension, extractHttpRequestErrorInfo, extractRequestErrorInfo, findManualPresetIdByOperation, formatEntityRowDisplayTitle, formatRequestError, hasFileTypeOpenHandler, hydrateSettingsValuesFromIndexedDb, inferSettingCoercionKind, isFileNameShownInViewer, isFileTypeShownInViewer, isFileViewerPreviewExtension, isOneWaySettingsIndexedDbCache, isSettingKeyCacheable, isSettingVisibleOnScope, isStoredImageFileId, normalizeAvailableLanguageCodes, normalizeDocumentFileTypePurposes, normalizeDocumentToFileListItem, normalizeOverridableAt, normalizePositiveNumberOption, normalizeRouterUrl, normalizeStoredImageRef, peelSettingValueKey, platformErrorI18nKey, primaryLanguageSubtag, printGraphicFromElement, projectSettingsValuesForIndexedDb, provideAXPUserNotificationService, provideDynamicHomePage, provideLocalEntityOfflineRuntime, provideMenuMiddleware, purgeLegacyTenantScopedSettingsSnapshots, resolveDateFilterPresets, resolveEffectiveAvailableLanguageCodes, resolveEntityCreateListBehavior, resolveEntityDetailsRouteAccess, resolveEntityModifyPopupTitle, resolveEntityRowDisplayText, resolveEntityRowDisplayTitle, resolveEntityRowDisplayTitleFromColumnContext, resolveEntitySearchTitleFallback, resolveExplorerFileDisplayName, resolveFileTypeDisplay, resolveFileViewerType, resolveGraphicElementSize, resolveGraphicPrintContent, resolveQueryMatchingDisplayText, resolveSearchDisplayTemplate, resolveSearchableText, resolveStoredImageDisplayUrl, searchInRecordValues, searchInSearchableValue, serializeSvgElement, shouldApplyDefaultMultiLanguageToEntityProperty, shouldApplyDefaultMultiLanguageToWidgetNode, shouldApplyDefaultMultiLanguageToWidgetProperty, shouldPersistSettingsInIndexedDb, stripAccidentalNestedSettingParents, throwIfCommandFailed, toAXPRequestError, toExecuteCommandFailureResult, traceSettingsAppStartupLoadComplete, traceSettingsAppStartupLoadStarted, traceSettingsClientTool, traceSettingsFlush, traceSettingsLocalPersist, traceSettingsPageLoadComplete, traceSettingsPageLoadStarted, traceSettingsPageRouteLoad, traceSettingsRetryScheduled, traceSettingsRevalidateFailed, traceSettingsServerApiCall, traceSettingsServiceLoadComplete, traceSettingsServiceLoadFailed, traceSettingsServiceLoadStarted, traceSettingsServiceReload, traceSettingsSyncFailed, triggerBrowserDownload, tryOpenFileByCatalogType, withDefaultMultiLanguageOnWidgetNodeTree, withDefaultMultiLanguageOnWidgetProperty };
|
|
14182
|
+
export { ALL_DEFAULT_OPERATORS, AXPAcorexFileTypeBridgeProvider, AXPAcorexFileTypeModule, AXPAppVersionService, AXPBackgroundOperationCompletionService, AXPBackgroundOperationEntityStoreService, AXPBackgroundOperationHandler, AXPBackgroundOperationNotificationService, AXPBackgroundOperationProvider, AXPBackgroundOperationRootConfig, AXPBackgroundOperationService, AXPBackgroundOperationSlotComponent, AXPBrowserTitleService, AXPCleanNestedFilters, AXPClipBoardService, AXPCommonModule, AXPCommonSettings, AXPCustomOperatorService, AXPCustomOperatorServiceImpl, AXPDataProvider, AXPDefaultMultiLanguageConfigService, AXPEntityDetailsNavTrailService, AXPErrorHandlerRegistryService, AXPExportService, AXPFileActionsService, AXPFileChooserSettings, AXPFileStorageEvaluatorScopeProvider, AXPFileStorageService, AXPFileTypeProviderService, AXPFilterOperatorMiddlewareService, AXPFilterOperatorMiddlewareServiceImpl, AXPFooterTextSlotComponent, AXPGlobalErrorHandler, AXPHomePageModule, AXPHomePageService, AXPIndexedDbSettingValueProvider, AXPIntegrationDomainProviderContext, AXPIntegrationDomainRegistryFacade, AXPIntegrationDomainRegistryService, AXPIntegrationOAuthService, AXPIntegrationProviderContext, AXPIntegrationProviderRegistryService, AXPIntegrationRuntimeService, AXPKeyboardShortcutsHelpComponent, AXPKeyboardShortcutsHelpService, AXPLocalEntityEngine, AXPLocalEntityIndexedDb, AXPLocalEntityOfflineRuntime, AXPLocalEntityOutboxService, AXPLocalEntityRealtimeBridge, AXPLockService, AXPLogoImageSrcResolverService, AXPMenuKeyboardShortcutService, AXPMenuMiddlewareRegistry, AXPMenuProviderService, AXPMenuRouteAccessService, AXPMenuRouteGuard, AXPMenuSearchDefinitionProvider, AXPMenuSearchProvider, AXPMenuService, AXPMenuVisibilityService, AXPNavBarSlotComponent, AXPNavigateCommand, AXPNetworkConnectivityService, AXPNotFoundCatchAllRoute, AXPNotFoundError, AXPOutputContractTranscriptSegmentService, AXPPageGetContextQuery, AXPPageRunActionCommand, AXPPlatformBrandingService, AXPPlatformDefaultConfigs, AXPPlatformSettingsLoadState, AXPPlatformSettingsOfflineBootstrapService, AXPQueryEvaluatorScopeProvider, AXPQueryParamsEvaluatorScopeProvider, AXPRegionalCalendarService, AXPSearchCommandProvider, AXPSearchDefinitionActionBuilder, AXPSearchDefinitionBuilder, AXPSearchDefinitionProviderContext, AXPSearchDefinitionProviderService, AXPSearchService, AXPSettingDefaultValuesAggregatorService, AXPSettingDefinitionGroupBuilder, AXPSettingDefinitionProviderContext, AXPSettingDefinitionProviderService, AXPSettingDefinitionSectionBuilder, AXPSettingsBulkSyncService, AXPSettingsEvaluatorScopeProvider, AXPSettingsIndexedDb, AXPSettingsService, AXPStateMessageComponent, AXPStatusDefinitionProviderService, AXPStickyDirective, AXPTabNavigationService, AXPTabPreviewService, AXPTabRouteCacheRegistry, AXPTokenDefinitionService, AXPTokenEvaluatorScopeProvider, AXPTranslateFormatter, AXPUnsavedChangesConfirmService, AXPUnsavedChangesPopstateService, AXPUserNotificationService, AXPVersioningService, AXP_AGENT_OUTPUT_CONTRACT_DEFAULT_STRUCTURED_RETRIES, AXP_APP_VERSION_PROVIDER, AXP_BACKGROUND_OPERATION_ENTITY_STORAGE, AXP_BACKGROUND_OPERATION_HANDLERS, AXP_BACKGROUND_OPERATION_PROVIDERS, AXP_BREADCRUMB_COLLAPSE_HEAD_COUNT, AXP_BREADCRUMB_COLLAPSE_TAIL_COUNT, AXP_DOCUMENT_FILE_TYPE_PURPOSES, AXP_ENTITY_LIST_DISPLAY_MODE_DEFAULT, AXP_ENTITY_VIEW_ACCESS, AXP_EXPERIENCE_SETTINGS_GROUP, AXP_EXPERIENCE_SETTINGS_SECTIONS, AXP_FILE_ACTION_PROVIDER, AXP_FILE_TYPE_INFO_PROVIDER, AXP_HOME_PAGES, AXP_HOME_PAGE_DEFAULT_KEY, AXP_HOME_TAB_KEY, AXP_INTEGRATION_CONNECTION_ESTABLISHED, AXP_INTEGRATION_CONNECTION_LIFECYCLE, AXP_INTEGRATION_DOMAIN_PROVIDER, AXP_INTEGRATION_OAUTH_SERVICE, AXP_INTEGRATION_PROVIDER, AXP_INTEGRATION_RUNTIME_PROVIDER, AXP_INTEGRATION_SECRET_STORE, AXP_IN_APP_NOTIFICATION_SERVICE, AXP_LOCALE_MANAGEMENT_PORT, AXP_LOCAL_ENTITY_BROADCAST_CHANNEL, AXP_LOCAL_ENTITY_DEFAULT_MAX_ITEMS, AXP_LOCAL_ENTITY_OUTBOX_LOCK, AXP_MENU_MIDDLEWARE, AXP_MENU_PROVIDER, AXP_NOT_FOUND_CATCH_ALL_ROUTE, AXP_NOT_FOUND_ROUTE, AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER, AXP_PLATFORM_BRANDING_SETTING_KEYS, AXP_PLATFORM_CONFIG_TOKEN, AXP_PROTECTED_ROUTE_GUARDS, AXP_ROOT_CONFIG_TOKEN, AXP_RUNTIME_QUERY_CACHE_DEFAULTS, AXP_SEARCH_DEFINITION_LAZY_RESOLVER, AXP_SEARCH_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER, AXP_SETTINGS_CACHE_SYNC, AXP_SETTINGS_SYNC_DEBOUNCE_MS, AXP_SETTINGS_SYNC_KEYS, AXP_SETTINGS_SYNC_RETRY_BACKOFF_MS, AXP_SETTINGS_SYNC_TTL_MS, AXP_SETTING_DEFAULT_VALUES_PROVIDERS, AXP_SETTING_DEFINITION_PROVIDER, AXP_SETTING_SCOPE_DESCENDANTS, AXP_SETTING_VALUE_PROVIDER, AXP_STATUS_PROVIDERS, AXP_TAB_BREADCRUMB_JOIN_SEPARATOR, AXP_TAB_ROUTE_DATA_KEY, AXP_TOKEN_DEFINITION_PROVIDER, AXP_UNAUTHORIZED_ROUTE, AXP_USER_NOTIFICATION_SERVICE, AXVChangeType, AX_FILE_TYPE_METADATA_SUPPORT_BY_FILE_VIEWER, BETWEEN_OPER, BOOLEAN_OPERATORS, CONTAINS_OPER, DATE_OPERATORS, DEFAULT_DATE_FILTER_PRESETS, DEFAULT_MULTILANGUAGE_FIELD_NAMES, ENDS_WITH_OPER, ENTITY_LIST_DEFAULT_INSTANCE_ID, ENTITY_LIST_INSTANCE_QUERY_PARAM, ENVIRONMENT, EQ_OPER, FILE_VIEWER_PREVIEW_EXTENSIONS, GTE_OPER, GT_OPER, IN_OPER, IS_EMPTY_OPER, IS_NOT_EMPTY_OPER, LTE_OPER, LT_OPER, MULTILANGUAGE_CAPABLE_WIDGET_TYPES, NOT_CONTAINS_OPER, NOT_EQ_OPER, NUMBER_OPERATORS, SETTINGS_TRACE_NS, SETTINGS_TRACE_TITLE, STARTS_WITH_OPER, STRING_OPERATORS, UploadFromComputerActionProvider, applyDateFilterPreset, axpBackgroundOperationCapabilities, axpBackgroundOperationDisplayTime, axpBackgroundOperationDurationMs, axpBackgroundOperationEntityName, axpBackgroundOperationEstimateEndDate, axpBackgroundOperationFailurePolicy, axpBackgroundOperationFromEntityModel, axpBackgroundOperationRemainingMs, axpBackgroundOperationStatusTextParams, axpBackgroundOperationToEntityModel, axpBeginCommandSubFlowNavigation, axpBuildBackgroundOperation, axpBuildTabKey, axpClearEntityDetailsNavTrail, axpCloneBreadcrumbItems, axpCoerceBackgroundOperationDate, axpComposeEntityDetailsNavTrail, axpCreateBackgroundOperationId, axpEndCommandSubFlowNavigation, axpEnsureEntityListInstanceQueryParam, axpEntityKeyFromDetailsPath, axpEntityListNavigationTabKey, axpFallbackTabTitle, axpFindMenuItemByRoute, axpFormatBackgroundOperationDurationMs, axpGetBreadcrumbNavigatePath, axpGetEntityDetailsNavTrail, axpGetEntityListInstanceIdFromParamMap, axpGetEntityListInstanceIdFromPath, axpGetEntityListInstanceIdFromQueryString, axpGetEntityListReturnUrl, axpGetLeafRouteSnapshot, axpHasTabScope, axpInterpolateNavigatePath, axpIsActiveBackgroundOperationStatus, axpIsBackgroundOperationI18nText, axpIsCommandSubFlowNavigationSuspended, axpIsCompletedBackgroundOperationStatus, axpIsCompletedPanelBackgroundOperation, axpIsEntityDetailsPath, axpIsEntityDetailsViewRoute, axpIsEntityListPath, axpIsEntityListRoute, axpIsEntityRecordNotFound, axpIsInProgressPanelBackgroundOperation, axpIsLikelyNetworkFailure, axpIsSameEntityDetailsRecord, axpIsTabEligibleUrl, axpIsTrayVisibleBackgroundOperation, axpJoinTabTitleSegments, axpLocalEntityCanServeListLocally, axpLocalEntityHotListRequest, axpLocalEntityIndexedDb, axpLocalEntityRecordId, axpLocalEntitySortAt, axpLocalEntitySupportsOfflineWrite, axpLocalEntityToPayload, axpMenuItemListInstanceId, axpMenuPathsMatch, axpNavigateAppPath, axpNavigateCommandDefinition, axpNormalizeEntityListInstanceId, axpPageGetContextQueryDefinition, axpPageRunActionCommandDefinition, axpParseAppPath, axpParseEntityDetailsRoute, axpParseEntityListRoute, axpPathFromSnapshot, axpPeekCommandSubFlowReturnUrl, axpPlatformSettingsAvailableGuard, axpPrepareOriginNavTrail, axpRedirectToNotFound, axpRedirectToUnauthorized, axpReplaceEntityListRouteQueryParams, axpResolveNavigatePath, axpResolveTabKey, axpResolveTabKeyFromRouteConfig, axpResolveTabKeyFromSnapshot, axpResolveTabTitleParts, axpSaveEntityDetailsNavTrail, axpSaveEntityListReturnUrl, axpSetEntityDetailsPageQuery, axpSettingsIndexedDb, axpSplitCollapsedBreadcrumbs, axpStampEntityListMenuInstancePaths, axpStripHomeBreadcrumb, axpStripTrailingCommandlessCrumbs, axpTabScopePathFromSnapshot, axpTrimNavTrailBeforeTarget, backgroundOperationEntityFactory, buildFileStorageDownloadUrl, buildLocalEntityMetaId, buildLocalEntityStorageId, buildScopedSettingsSnapshotId, chooseSystemFiles, coerceAXPSettingRawValue, coerceAXPSettingRawValueByKind, configPlatform, createBackgroundOperationStore, createDefaultSettingValueProviders, createEmptyScopedSettingsSnapshot, createEntityCommandOptions, createEntityRowExpressionScope, createEntitySearchCommand, createFileTypeOpenContext, createIndexedDbSettingValueProviders, createMenuContext, createMenuMiddleware, createUnsavedChangesCanDeactivateGuard, downloadGraphicFromElement, evaluateEntityDisplayTemplate, extractFileExtension, extractHttpRequestErrorInfo, extractRequestErrorInfo, findManualPresetIdByOperation, formatEntityRowDisplayTitle, formatRequestError, hasFileTypeOpenHandler, hydrateSettingsValuesFromIndexedDb, inferSettingCoercionKind, isFileNameShownInViewer, isFileTypeShownInViewer, isFileViewerPreviewExtension, isOneWaySettingsIndexedDbCache, isPendingCascadeFilter, isSettingKeyCacheable, isSettingVisibleOnScope, isStoredImageFileId, normalizeAvailableLanguageCodes, normalizeDocumentFileTypePurposes, normalizeDocumentToFileListItem, normalizeOverridableAt, normalizePositiveNumberOption, normalizeRouterUrl, normalizeStoredImageRef, peelSettingValueKey, platformErrorI18nKey, primaryLanguageSubtag, printGraphicFromElement, projectSettingsValuesForIndexedDb, provideAXPUserNotificationService, provideDynamicHomePage, provideLocalEntityOfflineRuntime, provideMenuMiddleware, purgeLegacyTenantScopedSettingsSnapshots, resolveDateFilterPresets, resolveEffectiveAvailableLanguageCodes, resolveEntityCreateListBehavior, resolveEntityDetailsRouteAccess, resolveEntityModifyPopupTitle, resolveEntityRowDisplayText, resolveEntityRowDisplayTitle, resolveEntityRowDisplayTitleFromColumnContext, resolveEntitySearchTitleFallback, resolveExplorerFileDisplayName, resolveFileTypeDisplay, resolveFileViewerType, resolveGraphicElementSize, resolveGraphicPrintContent, resolveQueryMatchingDisplayText, resolveSearchDisplayTemplate, resolveSearchableText, resolveStoredImageDisplayUrl, searchInRecordValues, searchInSearchableValue, serializeSvgElement, shouldApplyDefaultMultiLanguageToEntityProperty, shouldApplyDefaultMultiLanguageToWidgetNode, shouldApplyDefaultMultiLanguageToWidgetProperty, shouldPersistSettingsInIndexedDb, stripAccidentalNestedSettingParents, throwIfCommandFailed, toAXPRequestError, toExecuteCommandFailureResult, traceSettingsAppStartupLoadComplete, traceSettingsAppStartupLoadStarted, traceSettingsClientTool, traceSettingsFlush, traceSettingsLocalPersist, traceSettingsPageLoadComplete, traceSettingsPageLoadStarted, traceSettingsPageRouteLoad, traceSettingsRetryScheduled, traceSettingsRevalidateFailed, traceSettingsServerApiCall, traceSettingsServiceLoadComplete, traceSettingsServiceLoadFailed, traceSettingsServiceLoadStarted, traceSettingsServiceReload, traceSettingsSyncFailed, triggerBrowserDownload, tryOpenFileByCatalogType, withDefaultMultiLanguageOnWidgetNodeTree, withDefaultMultiLanguageOnWidgetProperty };
|
|
14029
14183
|
//# sourceMappingURL=acorex-platform-framework-client-common.mjs.map
|