@acorex-platform/framework-client 0.0.69 → 0.0.70
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-common.mjs +48 -8
- package/fesm2022/acorex-platform-framework-client-common.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-40YjUhSy.mjs → acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-CXziIWed.mjs} +130 -82
- package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-CXziIWed.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-TJwyeB27.mjs → acorex-platform-framework-client-layout-entity-attachments-page.component-DLgSciUV.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-TJwyeB27.mjs.map → acorex-platform-framework-client-layout-entity-attachments-page.component-DLgSciUV.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-CgLVcZHZ.mjs → acorex-platform-framework-client-layout-entity-bulk-entity.command-XZc1xZcD.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-CgLVcZHZ.mjs.map → acorex-platform-framework-client-layout-entity-bulk-entity.command-XZc1xZcD.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-_ZIlTKUf.mjs → acorex-platform-framework-client-layout-entity-gallery-page.component-DqfikqLb.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-_ZIlTKUf.mjs.map → acorex-platform-framework-client-layout-entity-gallery-page.component-DqfikqLb.mjs.map} +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-entity.mjs +1 -1
- package/package.json +2 -2
- package/types/acorex-platform-framework-client-common.d.ts +29 -5
- package/types/acorex-platform-framework-client-layout-entity.d.ts +9 -9
- package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-40YjUhSy.mjs.map +0 -1
|
@@ -4,14 +4,14 @@ import { AXToastService } from '@acorex/components/toast';
|
|
|
4
4
|
import * as i3$1 from '@acorex/core/translation';
|
|
5
5
|
import { AXTranslationService, AXTranslationModule, resolveMultiLanguageString, translateSync } from '@acorex/core/translation';
|
|
6
6
|
import * as i4$3 from '@acorex-platform/framework-client/common';
|
|
7
|
-
import { AXPNotFoundError,
|
|
7
|
+
import { AXPNotFoundError, AXPSettingsService, AXPCommonSettings, resolveEntityCreateListBehavior, platformErrorI18nKey, extractRequestErrorInfo, axpNavigateAppPath, AXPFileTypeProviderService, AXPFileStorageService, resolveFileTypeDisplay, resolveEntityRowDisplayTitle, resolveEntityModifyPopupTitle, commandMessageTextForError, resolveStoredImageDisplayUrl, isStoredImageFileId, AXPFilterOperatorMiddlewareService, AXP_ENTITY_LIST_DISPLAY_MODE_DEFAULT, ENTITY_LIST_DEFAULT_INSTANCE_ID, axpNormalizeEntityListInstanceId, axpGetEntityListInstanceIdFromParamMap, axpRedirectToNotFound, CONTAINS_OPER, toExecuteCommandFailureResult, AXPLocalEntityEngine, AXPLocalEntityRealtimeBridge, AXP_LOCAL_ENTITY_DEFAULT_MAX_ITEMS, resolveSearchableText, evaluateEntityDisplayTemplate, AXPCleanNestedFilters, AXPEntityDetailsNavTrailService, axpComposeEntityDetailsNavTrail, axpIsEntityRecordNotFound, coerceAXPSettingRawValueByKind, AXPDefaultMultiLanguageConfigService, withDefaultMultiLanguageOnWidgetNodeTree, axpIsEntityListPath, axpIsEntityDetailsPath, axpParseEntityListRoute, axpParseEntityDetailsRoute, axpSaveEntityListReturnUrl, AXPMenuRouteGuard, AXP_NOT_FOUND_ROUTE, AXP_PROTECTED_ROUTE_GUARDS, AXP_ENTITY_VIEW_ACCESS, AXP_SEARCH_DEFINITION_PROVIDER, AXP_SEARCH_DEFINITION_LAZY_RESOLVER } from '@acorex-platform/framework-client/common';
|
|
8
8
|
import { AXPWidgetsCatalog, runtimeCommandPayloadData, createRandomUuid, AXPRequestError, runtimeQueryPayloadData, runtimeQueryCollectionData, runtimeQueryFailure, runtimeQuerySuccessObject, runtimeCommandFailure, runtimeCommandSuccessObject, resolveActionLook, listThemeSurfaceClasses, parseRuntimeHexSurface, AXP_THEME_SURFACE_STYLES, AXPWidgetsList, AXPSystemActionType, coerceFilterDisplayText, AXPPlatformScope, flattenQueryFilterUserGroups, AXP_QUERY_QUICK_SEARCH_FIELD, wrapQueryFilterRoot, isPersistableFilterQuery, collectQueryFilterLeaves, isCompleteFilterCondition, resolveFilterQueryIdentityField, extractValue, setSmart, getChangedPaths, isSelectionValueEqual, toAxpGridItemWidgetOptions, runtimeQuerySuccessCollection } from '@acorex-platform/framework-shared/core';
|
|
9
9
|
import { AXPDeviceService, AXPExpressionEvaluatorService, AXPEntityBroadcastService, AXPHookService, AXPDebugService, AXPDataGenerator, AXPContextEvalFactory, ensureRuntimeSurfaceClass, applyFilterArray, createCommandExpressionScope, toExpressionRecord, AXPDistributedEventListenerService, applySortArray, AXHighlightService, AXPColumnWidthService, objectKeyValueTransforms, setupPopupFooterKeyboardShortcuts, AXPContextStore, AXPModuleManifestRegistry, provideAppStartUpTask, AXP_APP_STARTUP_PRIORITY, defaultColumnWidthProvider, AXP_COLUMN_WIDTH_PROVIDER } from '@acorex-platform/framework-client/core';
|
|
10
10
|
import { AXPLayoutBuilderService, AXPDialogOpener, LayoutBuilderModule } from '@acorex-platform/framework-client/layout/builder';
|
|
11
11
|
import * as i0 from '@angular/core';
|
|
12
12
|
import { InjectionToken, inject, Injector, runInInjectionContext, Injectable, signal, output, input, computed, effect, ChangeDetectionStrategy, Component, viewChild, untracked, HostBinding, model, ViewEncapsulation, ElementRef, EnvironmentInjector, NgModule, ChangeDetectorRef, Input, afterNextRender, viewChildren, linkedSignal, DestroyRef, makeEnvironmentProviders } from '@angular/core';
|
|
13
13
|
import { cloneDeep, merge, get, isNil, set, isArray, isString, castArray, has, isPlainObject, orderBy, defaultTo, isEmpty, isEqual, isObjectLike } from 'lodash-es';
|
|
14
|
-
import { Subject, filter, takeUntil,
|
|
14
|
+
import { Subject, combineLatest, map, filter, takeUntil, distinctUntilChanged, fromEvent, auditTime, merge as merge$1 } from 'rxjs';
|
|
15
15
|
import { AXPSessionService } from '@acorex-platform/framework-client/auth';
|
|
16
16
|
import { Router, NavigationStart, ActivatedRoute, ROUTES } from '@angular/router';
|
|
17
17
|
import { AXDialogService } from '@acorex/components/dialog';
|
|
@@ -52,6 +52,7 @@ import * as i2 from '@acorex/components/badge';
|
|
|
52
52
|
import { AXBadgeModule } from '@acorex/components/badge';
|
|
53
53
|
import * as i6 from '@acorex/components/dropdown';
|
|
54
54
|
import { AXDropdownModule } from '@acorex/components/dropdown';
|
|
55
|
+
import { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
55
56
|
import { AXOverlayService } from '@acorex/cdk/overlay';
|
|
56
57
|
import { AXLocaleService } from '@acorex/core/locale';
|
|
57
58
|
import { AXPlatform } from '@acorex/core/platform';
|
|
@@ -71,7 +72,6 @@ import { AXTagBoxModule } from '@acorex/components/tag-box';
|
|
|
71
72
|
import { AXValidationModule } from '@acorex/core/validation';
|
|
72
73
|
import { AXLookupComponent } from '@acorex/components/lookup';
|
|
73
74
|
import { AXHighlightTextComponent } from '@acorex/components/highlight';
|
|
74
|
-
import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
|
|
75
75
|
import * as i1$7 from '@acorex/components/data-table';
|
|
76
76
|
import { AXDataTableComponent, AXDataTableModule } from '@acorex/components/data-table';
|
|
77
77
|
import * as i2$1 from '@acorex/components/tabs';
|
|
@@ -2412,31 +2412,46 @@ function sortMergedSections(mainSections, extraSections, mainSectionIds) {
|
|
|
2412
2412
|
return [...beforeSections, ...sortedMiddleBlock, ...afterSections];
|
|
2413
2413
|
}
|
|
2414
2414
|
|
|
2415
|
+
const INDIVIDUAL_SCOPE = 'individual';
|
|
2416
|
+
const VIEW_TYPE = 'view';
|
|
2415
2417
|
/**
|
|
2416
|
-
*
|
|
2417
|
-
*
|
|
2418
|
+
* Permissions of the individual view action on `interfaces.master.list.actions`.
|
|
2419
|
+
* Prefers `default === true`, otherwise the first individual view action.
|
|
2420
|
+
* `null` means the hyperlink stays available: no view action, or no permissions declared.
|
|
2421
|
+
* Match is by type and scope. The command name is not part of the match.
|
|
2418
2422
|
*/
|
|
2419
|
-
function
|
|
2420
|
-
const
|
|
2421
|
-
if (
|
|
2423
|
+
function resolveIndividualViewPermissions(actions) {
|
|
2424
|
+
const views = (actions ?? []).filter((action) => action.scope === INDIVIDUAL_SCOPE && action.type === VIEW_TYPE);
|
|
2425
|
+
if (views.length === 0) {
|
|
2422
2426
|
return null;
|
|
2423
2427
|
}
|
|
2424
|
-
|
|
2425
|
-
|
|
2426
|
-
|
|
2427
|
-
|
|
2428
|
+
const selected = views.find((action) => action.default === true) ?? views[0];
|
|
2429
|
+
const permissions = selected.permissions;
|
|
2430
|
+
if (!permissions || permissions.length === 0) {
|
|
2431
|
+
return null;
|
|
2432
|
+
}
|
|
2433
|
+
return permissions;
|
|
2434
|
+
}
|
|
2435
|
+
/**
|
|
2436
|
+
* Session stamp for cached details-access decisions.
|
|
2437
|
+
* Changes when authorization, application, permissions, or features change.
|
|
2438
|
+
*/
|
|
2439
|
+
function buildEntityDetailsAccessStamp(input) {
|
|
2440
|
+
const features = input.features
|
|
2441
|
+
.map((feature) => `${feature.name}:${String(feature.value ?? '')}`)
|
|
2442
|
+
.join('\n');
|
|
2443
|
+
return `${input.isAuthorized ? '1' : '0'}|${input.applicationName}|${input.permissions.join('\n')}|${features}`;
|
|
2428
2444
|
}
|
|
2429
2445
|
|
|
2430
2446
|
/**
|
|
2431
|
-
*
|
|
2432
|
-
* Lookup
|
|
2447
|
+
* Whether the current session may navigate to an entity details view.
|
|
2448
|
+
* Lookup preview cards stay available. This gates the Open Details action and deep links.
|
|
2433
2449
|
*/
|
|
2434
2450
|
class AXPEntityDetailsAccessService {
|
|
2435
2451
|
constructor() {
|
|
2436
2452
|
//#region ----- Services & Dependencies -----
|
|
2437
|
-
this.router = inject(Router);
|
|
2438
2453
|
this.sessionService = inject(AXPSessionService);
|
|
2439
|
-
this.
|
|
2454
|
+
this.entityRegistry = inject(AXPEntityDefinitionRegistryService);
|
|
2440
2455
|
//#endregion
|
|
2441
2456
|
//#region ----- State -----
|
|
2442
2457
|
this.accessStamp = '';
|
|
@@ -2446,22 +2461,17 @@ class AXPEntityDetailsAccessService {
|
|
|
2446
2461
|
//#region ----- Public Methods -----
|
|
2447
2462
|
/**
|
|
2448
2463
|
* Whether the current session may open the entity details route.
|
|
2449
|
-
*
|
|
2464
|
+
* The record id does not change the view-action permission.
|
|
2465
|
+
* Missing entity, missing view action, or an empty permission list stays allowed.
|
|
2450
2466
|
*/
|
|
2451
|
-
async canOpen(entity,
|
|
2452
|
-
const applicationName = this.sessionService.application?.name;
|
|
2453
|
-
const route = buildEntityDetailsRoute(applicationName, entity, id);
|
|
2454
|
-
if (!route) {
|
|
2455
|
-
return false;
|
|
2456
|
-
}
|
|
2467
|
+
async canOpen(entity, _id = '0') {
|
|
2457
2468
|
this.syncStamp();
|
|
2458
2469
|
const cacheKey = entity;
|
|
2459
2470
|
const cached = this.decisions.get(cacheKey);
|
|
2460
2471
|
if (cached) {
|
|
2461
2472
|
return cached;
|
|
2462
2473
|
}
|
|
2463
|
-
const
|
|
2464
|
-
const pending = this.menuRouteAccess.canAccessUrl(url);
|
|
2474
|
+
const pending = this.resolveCanOpen(entity);
|
|
2465
2475
|
this.decisions.set(cacheKey, pending);
|
|
2466
2476
|
void pending.then(() => undefined, () => {
|
|
2467
2477
|
if (this.decisions.get(cacheKey) === pending) {
|
|
@@ -2472,21 +2482,45 @@ class AXPEntityDetailsAccessService {
|
|
|
2472
2482
|
}
|
|
2473
2483
|
//#endregion
|
|
2474
2484
|
//#region ----- Private Methods -----
|
|
2485
|
+
async resolveCanOpen(entity) {
|
|
2486
|
+
const definition = await this.tryResolveEntity(entity);
|
|
2487
|
+
const permissions = resolveIndividualViewPermissions(definition?.interfaces?.master?.list?.actions);
|
|
2488
|
+
if (!permissions) {
|
|
2489
|
+
return true;
|
|
2490
|
+
}
|
|
2491
|
+
return this.sessionService.authorize(...permissions);
|
|
2492
|
+
}
|
|
2475
2493
|
/** Drop cached decisions when application, permissions, or features change. */
|
|
2476
2494
|
syncStamp() {
|
|
2477
|
-
const
|
|
2478
|
-
|
|
2479
|
-
|
|
2480
|
-
|
|
2481
|
-
.
|
|
2482
|
-
|
|
2483
|
-
const stamp = `${authorized}|${applicationName}|${permissions}|${features}`;
|
|
2495
|
+
const stamp = buildEntityDetailsAccessStamp({
|
|
2496
|
+
isAuthorized: this.sessionService.isAuthorized,
|
|
2497
|
+
applicationName: this.sessionService.application?.name ?? '',
|
|
2498
|
+
permissions: this.sessionService.permissions,
|
|
2499
|
+
features: this.sessionService.features,
|
|
2500
|
+
});
|
|
2484
2501
|
if (stamp === this.accessStamp) {
|
|
2485
2502
|
return;
|
|
2486
2503
|
}
|
|
2487
2504
|
this.accessStamp = stamp;
|
|
2488
2505
|
this.decisions.clear();
|
|
2489
2506
|
}
|
|
2507
|
+
async tryResolveEntity(entityKey) {
|
|
2508
|
+
const separator = entityKey.indexOf('.');
|
|
2509
|
+
if (separator <= 0 || separator >= entityKey.length - 1) {
|
|
2510
|
+
return null;
|
|
2511
|
+
}
|
|
2512
|
+
const moduleName = entityKey.slice(0, separator);
|
|
2513
|
+
const entityName = entityKey.slice(separator + 1);
|
|
2514
|
+
try {
|
|
2515
|
+
return await this.entityRegistry.resolve(moduleName, entityName);
|
|
2516
|
+
}
|
|
2517
|
+
catch (error) {
|
|
2518
|
+
if (error instanceof AXPNotFoundError) {
|
|
2519
|
+
return null;
|
|
2520
|
+
}
|
|
2521
|
+
throw error;
|
|
2522
|
+
}
|
|
2523
|
+
}
|
|
2490
2524
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityDetailsAccessService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
2491
2525
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityDetailsAccessService, providedIn: 'root' }); }
|
|
2492
2526
|
}
|
|
@@ -2495,6 +2529,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
2495
2529
|
args: [{ providedIn: 'root' }]
|
|
2496
2530
|
}] });
|
|
2497
2531
|
|
|
2532
|
+
/**
|
|
2533
|
+
* Route for `/{app}/m/{module}/e/{entity}/{id}/view`, matching Entity:OpenDetails.
|
|
2534
|
+
* The id segment is not part of menu matching; callers may pass the real record id.
|
|
2535
|
+
*/
|
|
2536
|
+
function buildEntityDetailsRoute(applicationName, entity, id) {
|
|
2537
|
+
const [moduleName, entityName] = entity.split('.');
|
|
2538
|
+
if (!applicationName || !moduleName || !entityName || !id) {
|
|
2539
|
+
return null;
|
|
2540
|
+
}
|
|
2541
|
+
return {
|
|
2542
|
+
commands: ['/', applicationName, 'm', moduleName, 'e', entityName, id, 'view'],
|
|
2543
|
+
queryParams: { page: entityName },
|
|
2544
|
+
};
|
|
2545
|
+
}
|
|
2546
|
+
|
|
2498
2547
|
function resolveOpenEntityDetailsInput(input = {}) {
|
|
2499
2548
|
const context = resolveEntityActionCommandInput(input);
|
|
2500
2549
|
return {
|
|
@@ -8204,11 +8253,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
8204
8253
|
}], ctorParameters: () => [], propDecorators: { entity: [{ type: i0.Input, args: [{ isSignal: true, alias: "entity", required: true }] }], layout: [{ type: i0.Input, args: [{ isSignal: true, alias: "layout", required: false }] }], row: [{ type: i0.Input, args: [{ isSignal: true, alias: "row", required: true }] }], fields: [{ type: i0.Input, args: [{ isSignal: true, alias: "fields", required: false }] }], userStylingRules: [{ type: i0.Input, args: [{ isSignal: true, alias: "userStylingRules", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], interactive: [{ type: i0.Input, args: [{ isSignal: true, alias: "interactive", required: false }] }], embedded: [{ type: i0.Input, args: [{ isSignal: true, alias: "embedded", required: false }] }], elevated: [{ type: i0.Input, args: [{ isSignal: true, alias: "elevated", required: false }] }], disableLookupPopover: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableLookupPopover", required: false }] }], fillHost: [{ type: i0.Input, args: [{ isSignal: true, alias: "fillHost", required: false }] }], extraExpanded: [{ type: i0.Input, args: [{ isSignal: true, alias: "extraExpanded", required: false }] }, { type: i0.Output, args: ["extraExpandedChange"] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }], showNewBadge: [{ type: i0.Input, args: [{ isSignal: true, alias: "showNewBadge", required: false }] }], showSelection: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSelection", required: false }] }], showClose: [{ type: i0.Input, args: [{ isSignal: true, alias: "showClose", required: false }] }], primaryActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "primaryActions", required: false }] }], primaryActionLook: [{ type: i0.Input, args: [{ isSignal: true, alias: "primaryActionLook", required: false }] }], secondaryActionLoader: [{ type: i0.Input, args: [{ isSignal: true, alias: "secondaryActionLoader", required: false }] }], selectionChange: [{ type: i0.Output, args: ["selectionChange"] }], commandClick: [{ type: i0.Output, args: ["commandClick"] }], closeClick: [{ type: i0.Output, args: ["closeClick"] }] } });
|
|
8205
8254
|
|
|
8206
8255
|
class AXPEntityDetailPopoverComponent {
|
|
8256
|
+
//#endregion
|
|
8257
|
+
//#region ----- Lifecycle -----
|
|
8207
8258
|
constructor() {
|
|
8208
8259
|
//#region ----- Services & Dependencies -----
|
|
8209
8260
|
this.commandService = inject(AXPCommandService);
|
|
8210
8261
|
this.queryService = inject(AXPQueryService);
|
|
8211
8262
|
this.cardFieldsResolver = inject(AXPEntityCardFieldsResolver);
|
|
8263
|
+
this.detailsAccess = inject(AXPEntityDetailsAccessService);
|
|
8264
|
+
this.sessionService = inject(AXPSessionService);
|
|
8265
|
+
/** Re-check the Open Details action when application, permissions, or features change. */
|
|
8266
|
+
this.accessRevision = toSignal(combineLatest([
|
|
8267
|
+
this.sessionService.application$,
|
|
8268
|
+
this.sessionService.permissions$,
|
|
8269
|
+
this.sessionService.features$,
|
|
8270
|
+
]).pipe(map(([application, permissions, features]) => {
|
|
8271
|
+
const featureStamp = features
|
|
8272
|
+
.map((feature) => `${feature.name}:${String(feature.value ?? '')}`)
|
|
8273
|
+
.join('\n');
|
|
8274
|
+
return `${this.sessionService.isAuthorized ? '1' : '0'}|${application?.name ?? ''}|${permissions.join('\n')}|${featureStamp}`;
|
|
8275
|
+
})), { initialValue: '' });
|
|
8212
8276
|
//#endregion
|
|
8213
8277
|
//#region ----- Inputs -----
|
|
8214
8278
|
this.entity = input.required(/* @ts-ignore */
|
|
@@ -8227,6 +8291,10 @@ class AXPEntityDetailPopoverComponent {
|
|
|
8227
8291
|
...(ngDevMode ? [{ debugName: "entityData" }] : /* istanbul ignore next */ []));
|
|
8228
8292
|
this.isLoadingDetails = signal(false, /* @ts-ignore */
|
|
8229
8293
|
...(ngDevMode ? [{ debugName: "isLoadingDetails" }] : /* istanbul ignore next */ []));
|
|
8294
|
+
/** View-action permission for the Open Details footer. Hidden until the check allows it. */
|
|
8295
|
+
this.canOpenDetails = signal(false, /* @ts-ignore */
|
|
8296
|
+
...(ngDevMode ? [{ debugName: "canOpenDetails" }] : /* istanbul ignore next */ []));
|
|
8297
|
+
this.accessRequestId = 0;
|
|
8230
8298
|
//#endregion
|
|
8231
8299
|
//#region ----- Computed Properties -----
|
|
8232
8300
|
this.cardLayout = computed(() => {
|
|
@@ -8270,7 +8338,7 @@ class AXPEntityDetailPopoverComponent {
|
|
|
8270
8338
|
/** Same footer slot the master-list card uses for primary row actions. */
|
|
8271
8339
|
this.openDetailsActions = computed(() => {
|
|
8272
8340
|
const definition = this.entityDefinition();
|
|
8273
|
-
if (!definition) {
|
|
8341
|
+
if (!definition || !this.canOpenDetails()) {
|
|
8274
8342
|
return [];
|
|
8275
8343
|
}
|
|
8276
8344
|
return [
|
|
@@ -8285,6 +8353,22 @@ class AXPEntityDetailPopoverComponent {
|
|
|
8285
8353
|
];
|
|
8286
8354
|
}, /* @ts-ignore */
|
|
8287
8355
|
...(ngDevMode ? [{ debugName: "openDetailsActions" }] : /* istanbul ignore next */ []));
|
|
8356
|
+
effect(() => {
|
|
8357
|
+
this.accessRevision();
|
|
8358
|
+
const entity = this.entity();
|
|
8359
|
+
const id = this.entityId();
|
|
8360
|
+
if (!entity || id == null || id === '') {
|
|
8361
|
+
this.accessRequestId++;
|
|
8362
|
+
this.canOpenDetails.set(false);
|
|
8363
|
+
return;
|
|
8364
|
+
}
|
|
8365
|
+
const requestId = ++this.accessRequestId;
|
|
8366
|
+
void this.detailsAccess.canOpen(entity, String(id)).then((allowed) => {
|
|
8367
|
+
if (requestId === this.accessRequestId) {
|
|
8368
|
+
this.canOpenDetails.set(allowed);
|
|
8369
|
+
}
|
|
8370
|
+
});
|
|
8371
|
+
});
|
|
8288
8372
|
}
|
|
8289
8373
|
//#endregion
|
|
8290
8374
|
//#region ----- Event Handlers -----
|
|
@@ -8335,7 +8419,7 @@ class AXPEntityDetailPopoverComponent {
|
|
|
8335
8419
|
}
|
|
8336
8420
|
}
|
|
8337
8421
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityDetailPopoverComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8338
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPEntityDetailPopoverComponent, isStandalone: true, selector: "axp-entity-detail-popover", inputs: { entity: { classPropertyName: "entity", publicName: "entity", isSignal: true, isRequired: true, transformFunction: null }, entityId: { classPropertyName: "entityId", publicName: "entityId", isSignal: true, isRequired: true, transformFunction: null }, requestClose: { classPropertyName: "requestClose", publicName: "requestClose", isSignal: true, isRequired: false, transformFunction: null }, breadcrumb: { classPropertyName: "breadcrumb", publicName: "breadcrumb", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{ provide: AXP_SELECT_COLUMN_RESOLVE_QUERY, useValue: true }], ngImport: i0, template: "<div class=\"axp-entity-detail-popover\">\n @if (breadcrumb()) {\n <!-- ----- Optional lookup breadcrumb above the shared entity card ----- -->\n <div class=\"text-xs text-neutral-500 mb-2\">{{ breadcrumb() }}</div>\n }\n @if (isLoadingDetails()) {\n <!-- ----- Loading placeholder while Entity:GetDetails is fetched ----- -->\n <div class=\"axp-entity-detail-popover__loading\">\n @if (canClose()) {\n <!-- ----- Dismiss while the lookup card is still loading ----- -->\n <ax-button\n class=\"axp-entity-detail-popover__close ax-sm\"\n [look]=\"'blank'\"\n [color]=\"'default'\"\n [iconOnly]=\"true\"\n [attr.title]=\"('@general:actions.close.title' | translate | async)\"\n [attr.aria-label]=\"('@general:actions.close.title' | translate | async)\"\n (onClick)=\"onClose()\"\n >\n <i class=\"fa-light fa-xmark\" aria-hidden=\"true\"></i>\n </ax-button>\n }\n <axp-entity-card-skeleton\n [fieldCount]=\"skeletonFieldCount()\"\n [badgeCount]=\"skeletonBadgeCount()\"\n [showContent]=\"true\"\n [showFooter]=\"
|
|
8422
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPEntityDetailPopoverComponent, isStandalone: true, selector: "axp-entity-detail-popover", inputs: { entity: { classPropertyName: "entity", publicName: "entity", isSignal: true, isRequired: true, transformFunction: null }, entityId: { classPropertyName: "entityId", publicName: "entityId", isSignal: true, isRequired: true, transformFunction: null }, requestClose: { classPropertyName: "requestClose", publicName: "requestClose", isSignal: true, isRequired: false, transformFunction: null }, breadcrumb: { classPropertyName: "breadcrumb", publicName: "breadcrumb", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{ provide: AXP_SELECT_COLUMN_RESOLVE_QUERY, useValue: true }], ngImport: i0, template: "<div class=\"axp-entity-detail-popover\">\n @if (breadcrumb()) {\n <!-- ----- Optional lookup breadcrumb above the shared entity card ----- -->\n <div class=\"text-xs text-neutral-500 mb-2\">{{ breadcrumb() }}</div>\n }\n @if (isLoadingDetails()) {\n <!-- ----- Loading placeholder while Entity:GetDetails is fetched ----- -->\n <div class=\"axp-entity-detail-popover__loading\">\n @if (canClose()) {\n <!-- ----- Dismiss while the lookup card is still loading ----- -->\n <ax-button\n class=\"axp-entity-detail-popover__close ax-sm\"\n [look]=\"'blank'\"\n [color]=\"'default'\"\n [iconOnly]=\"true\"\n [attr.title]=\"('@general:actions.close.title' | translate | async)\"\n [attr.aria-label]=\"('@general:actions.close.title' | translate | async)\"\n (onClick)=\"onClose()\"\n >\n <i class=\"fa-light fa-xmark\" aria-hidden=\"true\"></i>\n </ax-button>\n }\n <axp-entity-card-skeleton\n [fieldCount]=\"skeletonFieldCount()\"\n [badgeCount]=\"skeletonBadgeCount()\"\n [showContent]=\"true\"\n [showFooter]=\"canOpenDetails()\"\n [showAvatar]=\"showSkeletonAvatar()\"\n [elevated]=\"true\"\n />\n </div>\n }\n <!-- ----- Same card chrome as the master list; Open Details uses the card footer ----- -->\n @else if (entityDefinition(); as definition) {\n <!--->\n <!-- ----- Entity card when row details have loaded ----- -->\n @if (entityData(); as row) {\n <axp-entity-card\n [entity]=\"definition\"\n [layout]=\"cardLayout()\"\n [row]=\"row\"\n [fields]=\"cardFields()\"\n variant=\"card\"\n [interactive]=\"false\"\n [elevated]=\"true\"\n [showClose]=\"canClose()\"\n primaryActionLook=\"solid\"\n [disableLookupPopover]=\"true\"\n [primaryActions]=\"openDetailsActions()\"\n (commandClick)=\"onCardCommandClick($event)\"\n (closeClick)=\"onClose()\"\n />\n }\n }\n</div>\n", styles: [":host{display:block;border-radius:var(--radius-md, .375rem);width:min(600px,calc(100vw - 2rem));background-color:rgb(var(--ax-sys-color-lightest-surface));box-shadow:0 8px 16px #00000029,0 24px 48px #00000038,0 48px 96px #00000047}.axp-entity-detail-popover__loading{position:relative}.axp-entity-detail-popover__close{position:absolute;z-index:20;inset-block-start:.75rem;inset-inline-end:1rem}.axp-entity-detail-popover-overlay,.axp-entity-detail-popover-overlay.ax-overlay-container,.axp-entity-detail-popover-overlay.ax-overlay-pane,.axp-entity-detail-popover-overlay .ax-overlay-pane,.axp-entity-detail-popover-overlay .overlay-pane{width:min(600px,calc(100vw - 2rem))!important;min-width:min(600px,calc(100vw - 2rem));overflow:visible!important;background:transparent!important;border:none!important;box-shadow:none!important;padding:0!important}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXSkeletonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPEntityCardComponent, selector: "axp-entity-card", inputs: ["entity", "layout", "row", "fields", "userStylingRules", "variant", "interactive", "embedded", "elevated", "disableLookupPopover", "fillHost", "extraExpanded", "selected", "showNewBadge", "showSelection", "showClose", "primaryActions", "primaryActionLook", "secondaryActionLoader"], outputs: ["extraExpandedChange", "selectionChange", "commandClick", "closeClick"] }, { kind: "component", type: AXPEntityCardSkeletonComponent, selector: "axp-entity-card-skeleton", inputs: ["fieldCount", "badgeCount", "showFooter", "showHeaderMenu", "showContent", "rowLayout", "showAvatar", "fillHost", "embedded", "elevated"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
8339
8423
|
}
|
|
8340
8424
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityDetailPopoverComponent, decorators: [{
|
|
8341
8425
|
type: Component,
|
|
@@ -8347,8 +8431,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
8347
8431
|
AXTranslationModule,
|
|
8348
8432
|
AXPEntityCardComponent,
|
|
8349
8433
|
AXPEntityCardSkeletonComponent,
|
|
8350
|
-
], providers: [{ provide: AXP_SELECT_COLUMN_RESOLVE_QUERY, useValue: true }], template: "<div class=\"axp-entity-detail-popover\">\n @if (breadcrumb()) {\n <!-- ----- Optional lookup breadcrumb above the shared entity card ----- -->\n <div class=\"text-xs text-neutral-500 mb-2\">{{ breadcrumb() }}</div>\n }\n @if (isLoadingDetails()) {\n <!-- ----- Loading placeholder while Entity:GetDetails is fetched ----- -->\n <div class=\"axp-entity-detail-popover__loading\">\n @if (canClose()) {\n <!-- ----- Dismiss while the lookup card is still loading ----- -->\n <ax-button\n class=\"axp-entity-detail-popover__close ax-sm\"\n [look]=\"'blank'\"\n [color]=\"'default'\"\n [iconOnly]=\"true\"\n [attr.title]=\"('@general:actions.close.title' | translate | async)\"\n [attr.aria-label]=\"('@general:actions.close.title' | translate | async)\"\n (onClick)=\"onClose()\"\n >\n <i class=\"fa-light fa-xmark\" aria-hidden=\"true\"></i>\n </ax-button>\n }\n <axp-entity-card-skeleton\n [fieldCount]=\"skeletonFieldCount()\"\n [badgeCount]=\"skeletonBadgeCount()\"\n [showContent]=\"true\"\n [showFooter]=\"
|
|
8351
|
-
}], propDecorators: { entity: [{ type: i0.Input, args: [{ isSignal: true, alias: "entity", required: true }] }], entityId: [{ type: i0.Input, args: [{ isSignal: true, alias: "entityId", required: true }] }], requestClose: [{ type: i0.Input, args: [{ isSignal: true, alias: "requestClose", required: false }] }], breadcrumb: [{ type: i0.Input, args: [{ isSignal: true, alias: "breadcrumb", required: false }] }] } });
|
|
8434
|
+
], providers: [{ provide: AXP_SELECT_COLUMN_RESOLVE_QUERY, useValue: true }], template: "<div class=\"axp-entity-detail-popover\">\n @if (breadcrumb()) {\n <!-- ----- Optional lookup breadcrumb above the shared entity card ----- -->\n <div class=\"text-xs text-neutral-500 mb-2\">{{ breadcrumb() }}</div>\n }\n @if (isLoadingDetails()) {\n <!-- ----- Loading placeholder while Entity:GetDetails is fetched ----- -->\n <div class=\"axp-entity-detail-popover__loading\">\n @if (canClose()) {\n <!-- ----- Dismiss while the lookup card is still loading ----- -->\n <ax-button\n class=\"axp-entity-detail-popover__close ax-sm\"\n [look]=\"'blank'\"\n [color]=\"'default'\"\n [iconOnly]=\"true\"\n [attr.title]=\"('@general:actions.close.title' | translate | async)\"\n [attr.aria-label]=\"('@general:actions.close.title' | translate | async)\"\n (onClick)=\"onClose()\"\n >\n <i class=\"fa-light fa-xmark\" aria-hidden=\"true\"></i>\n </ax-button>\n }\n <axp-entity-card-skeleton\n [fieldCount]=\"skeletonFieldCount()\"\n [badgeCount]=\"skeletonBadgeCount()\"\n [showContent]=\"true\"\n [showFooter]=\"canOpenDetails()\"\n [showAvatar]=\"showSkeletonAvatar()\"\n [elevated]=\"true\"\n />\n </div>\n }\n <!-- ----- Same card chrome as the master list; Open Details uses the card footer ----- -->\n @else if (entityDefinition(); as definition) {\n <!--->\n <!-- ----- Entity card when row details have loaded ----- -->\n @if (entityData(); as row) {\n <axp-entity-card\n [entity]=\"definition\"\n [layout]=\"cardLayout()\"\n [row]=\"row\"\n [fields]=\"cardFields()\"\n variant=\"card\"\n [interactive]=\"false\"\n [elevated]=\"true\"\n [showClose]=\"canClose()\"\n primaryActionLook=\"solid\"\n [disableLookupPopover]=\"true\"\n [primaryActions]=\"openDetailsActions()\"\n (commandClick)=\"onCardCommandClick($event)\"\n (closeClick)=\"onClose()\"\n />\n }\n }\n</div>\n", styles: [":host{display:block;border-radius:var(--radius-md, .375rem);width:min(600px,calc(100vw - 2rem));background-color:rgb(var(--ax-sys-color-lightest-surface));box-shadow:0 8px 16px #00000029,0 24px 48px #00000038,0 48px 96px #00000047}.axp-entity-detail-popover__loading{position:relative}.axp-entity-detail-popover__close{position:absolute;z-index:20;inset-block-start:.75rem;inset-inline-end:1rem}.axp-entity-detail-popover-overlay,.axp-entity-detail-popover-overlay.ax-overlay-container,.axp-entity-detail-popover-overlay.ax-overlay-pane,.axp-entity-detail-popover-overlay .ax-overlay-pane,.axp-entity-detail-popover-overlay .overlay-pane{width:min(600px,calc(100vw - 2rem))!important;min-width:min(600px,calc(100vw - 2rem));overflow:visible!important;background:transparent!important;border:none!important;box-shadow:none!important;padding:0!important}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
|
|
8435
|
+
}], ctorParameters: () => [], propDecorators: { entity: [{ type: i0.Input, args: [{ isSignal: true, alias: "entity", required: true }] }], entityId: [{ type: i0.Input, args: [{ isSignal: true, alias: "entityId", required: true }] }], requestClose: [{ type: i0.Input, args: [{ isSignal: true, alias: "requestClose", required: false }] }], breadcrumb: [{ type: i0.Input, args: [{ isSignal: true, alias: "breadcrumb", required: false }] }] } });
|
|
8352
8436
|
|
|
8353
8437
|
class AXPEntityDetailPopoverService {
|
|
8354
8438
|
constructor() {
|
|
@@ -8358,7 +8442,6 @@ class AXPEntityDetailPopoverService {
|
|
|
8358
8442
|
this.localeService = inject(AXLocaleService);
|
|
8359
8443
|
this.document = inject(DOCUMENT);
|
|
8360
8444
|
this.router = inject(Router);
|
|
8361
|
-
this.detailsAccess = inject(AXPEntityDetailsAccessService);
|
|
8362
8445
|
//#endregion
|
|
8363
8446
|
//#region ---- Private Properties ----
|
|
8364
8447
|
this.overlayRef = null;
|
|
@@ -8378,9 +8461,6 @@ class AXPEntityDetailPopoverService {
|
|
|
8378
8461
|
if (!anchorElement) {
|
|
8379
8462
|
return;
|
|
8380
8463
|
}
|
|
8381
|
-
if (!(await this.detailsAccess.canOpen(options.entity, String(options.id)))) {
|
|
8382
|
-
return;
|
|
8383
|
-
}
|
|
8384
8464
|
this.hide();
|
|
8385
8465
|
const panelClasses = ['animate-fadeIn', 'animate-faster', 'axp-entity-detail-popover-overlay'];
|
|
8386
8466
|
if (this.platform.isDark()) {
|
|
@@ -14215,7 +14295,7 @@ class AXMAttachmentsPageComponentProvider {
|
|
|
14215
14295
|
return [
|
|
14216
14296
|
{
|
|
14217
14297
|
key: ATTACHMENTS_PAGE_COMPONENT_KEY,
|
|
14218
|
-
loader: () => import('./acorex-platform-framework-client-layout-entity-attachments-page.component-
|
|
14298
|
+
loader: () => import('./acorex-platform-framework-client-layout-entity-attachments-page.component-DLgSciUV.mjs').then((m) => m.AXMAttachmentsPageComponent),
|
|
14219
14299
|
},
|
|
14220
14300
|
];
|
|
14221
14301
|
}
|
|
@@ -14752,7 +14832,7 @@ class AXMGalleryPageComponentProvider {
|
|
|
14752
14832
|
return [
|
|
14753
14833
|
{
|
|
14754
14834
|
key: GALLERY_PAGE_COMPONENT_KEY,
|
|
14755
|
-
loader: () => import('./acorex-platform-framework-client-layout-entity-gallery-page.component-
|
|
14835
|
+
loader: () => import('./acorex-platform-framework-client-layout-entity-gallery-page.component-DqfikqLb.mjs').then((m) => m.AXMGalleryPageComponent),
|
|
14756
14836
|
},
|
|
14757
14837
|
];
|
|
14758
14838
|
}
|
|
@@ -17141,7 +17221,6 @@ class AXPEntityCategoryWidgetColumnComponent extends AXPColumnWidgetComponent {
|
|
|
17141
17221
|
this.formatService = inject(AXFormatService);
|
|
17142
17222
|
this.entityResolver = inject(AXPEntityDefinitionRegistryService);
|
|
17143
17223
|
this.categoryBatchResolver = inject(AXPEntityCategoryBatchResolverService);
|
|
17144
|
-
this.detailsAccess = inject(AXPEntityDetailsAccessService);
|
|
17145
17224
|
//#endregion
|
|
17146
17225
|
//#region ---- Inputs ----
|
|
17147
17226
|
this.rawValueSignal = signal(null, /* @ts-ignore */
|
|
@@ -17235,7 +17314,7 @@ class AXPEntityCategoryWidgetColumnComponent extends AXPColumnWidgetComponent {
|
|
|
17235
17314
|
const id = Array.isArray(columnData) ? columnData[index] : columnData;
|
|
17236
17315
|
this.selectedItemIndex.set(index);
|
|
17237
17316
|
const entityKey = this.entity();
|
|
17238
|
-
if (entityKey && id
|
|
17317
|
+
if (entityKey && id) {
|
|
17239
17318
|
await this.entityDetailPopoverService.show(anchor ?? this.host.nativeElement, {
|
|
17240
17319
|
entity: entityKey,
|
|
17241
17320
|
id: id,
|
|
@@ -25484,19 +25563,6 @@ class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent {
|
|
|
25484
25563
|
this.expressionEvaluator = inject(AXPExpressionEvaluatorService);
|
|
25485
25564
|
this.contextEvalFactory = inject(AXPContextEvalFactory);
|
|
25486
25565
|
this.lookupByKeyCache = inject(AXPLookupByKeyCacheService);
|
|
25487
|
-
this.detailsAccess = inject(AXPEntityDetailsAccessService);
|
|
25488
|
-
this.sessionService = inject(AXPSessionService);
|
|
25489
|
-
/** Re-check lookup links when application, permissions, or features change. */
|
|
25490
|
-
this.accessRevision = toSignal(combineLatest([
|
|
25491
|
-
this.sessionService.application$,
|
|
25492
|
-
this.sessionService.permissions$,
|
|
25493
|
-
this.sessionService.features$,
|
|
25494
|
-
]).pipe(map(([application, permissions, features]) => {
|
|
25495
|
-
const featureStamp = features
|
|
25496
|
-
.map((feature) => `${feature.name}:${String(feature.value ?? '')}`)
|
|
25497
|
-
.join('\n');
|
|
25498
|
-
return `${this.sessionService.isAuthorized ? '1' : '0'}|${application?.name ?? ''}|${permissions.join('\n')}|${featureStamp}`;
|
|
25499
|
-
})), { initialValue: '' });
|
|
25500
25566
|
//#endregion
|
|
25501
25567
|
//#region ---- View Children ----
|
|
25502
25568
|
this.moreButton = viewChild('moreButton', /* @ts-ignore */
|
|
@@ -25534,10 +25600,8 @@ class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent {
|
|
|
25534
25600
|
return popover?.enabled !== false;
|
|
25535
25601
|
}, /* @ts-ignore */
|
|
25536
25602
|
...(ngDevMode ? [{ debugName: "detailPopoverEnabled" }] : /* istanbul ignore next */ []));
|
|
25537
|
-
/**
|
|
25538
|
-
this.
|
|
25539
|
-
...(ngDevMode ? [{ debugName: "canOpenLinkedEntity" }] : /* istanbul ignore next */ []));
|
|
25540
|
-
this.linkEnabled = computed(() => this.detailPopoverEnabled() && this.canOpenLinkedEntity(), /* @ts-ignore */
|
|
25603
|
+
/** Cell opens the preview card. Open Details inside the card follows the view permission. */
|
|
25604
|
+
this.linkEnabled = computed(() => this.detailPopoverEnabled(), /* @ts-ignore */
|
|
25541
25605
|
...(ngDevMode ? [{ debugName: "linkEnabled" }] : /* istanbul ignore next */ []));
|
|
25542
25606
|
//#endregion
|
|
25543
25607
|
//#region ---- Signals ----
|
|
@@ -25564,7 +25628,6 @@ class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent {
|
|
|
25564
25628
|
this.hydratedDisplayItems = signal(null, /* @ts-ignore */
|
|
25565
25629
|
...(ngDevMode ? [{ debugName: "hydratedDisplayItems" }] : /* istanbul ignore next */ []));
|
|
25566
25630
|
this.hydrateRequestId = 0;
|
|
25567
|
-
this.accessRequestId = 0;
|
|
25568
25631
|
this.mainLabelsVersion = 0;
|
|
25569
25632
|
this.lazyPopoverLabelsVersion = 0;
|
|
25570
25633
|
//#endregion
|
|
@@ -25664,22 +25727,6 @@ class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent {
|
|
|
25664
25727
|
: this.displayCount();
|
|
25665
25728
|
void this.refreshPopoverHeader(count);
|
|
25666
25729
|
});
|
|
25667
|
-
effect(() => {
|
|
25668
|
-
this.accessRevision();
|
|
25669
|
-
const key = this.getEntityKey();
|
|
25670
|
-
const popoverEnabled = this.detailPopoverEnabled();
|
|
25671
|
-
if (!popoverEnabled || key.indexOf('.') <= 0) {
|
|
25672
|
-
this.accessRequestId++;
|
|
25673
|
-
this.canOpenLinkedEntity.set(false);
|
|
25674
|
-
return;
|
|
25675
|
-
}
|
|
25676
|
-
const requestId = ++this.accessRequestId;
|
|
25677
|
-
void this.detailsAccess.canOpen(key).then((allowed) => {
|
|
25678
|
-
if (requestId === this.accessRequestId) {
|
|
25679
|
-
this.canOpenLinkedEntity.set(allowed);
|
|
25680
|
-
}
|
|
25681
|
-
});
|
|
25682
|
-
});
|
|
25683
25730
|
effect(() => {
|
|
25684
25731
|
const key = this.getEntityKey();
|
|
25685
25732
|
const dotIndex = key.indexOf('.');
|
|
@@ -28955,7 +29002,6 @@ const ENTITY_EXTENDED_WIDGETS = [
|
|
|
28955
29002
|
defaultFilterOperator: AXP_LOOKUP_FILTER_DEFAULT_OPERATOR,
|
|
28956
29003
|
components: {},
|
|
28957
29004
|
options: {
|
|
28958
|
-
look: 'select',
|
|
28959
29005
|
filterMode: true,
|
|
28960
29006
|
},
|
|
28961
29007
|
},
|
|
@@ -32552,6 +32598,7 @@ class AXPEntityModule {
|
|
|
32552
32598
|
AXPWidgetCoreModule,
|
|
32553
32599
|
LayoutBuilderModule] }); }
|
|
32554
32600
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPEntityModule, providers: [
|
|
32601
|
+
{ provide: AXP_ENTITY_VIEW_ACCESS, useExisting: AXPEntityDetailsAccessService },
|
|
32555
32602
|
AXP_ENTITY_DETAILS_VIEW_ADAPTER_LOADER_PROVIDER,
|
|
32556
32603
|
{
|
|
32557
32604
|
provide: AXP_REPEATER_ENTITY_BY_KEY_LOOKUP,
|
|
@@ -32664,7 +32711,7 @@ class AXPEntityModule {
|
|
|
32664
32711
|
},
|
|
32665
32712
|
{
|
|
32666
32713
|
key: 'Entity:Bulk',
|
|
32667
|
-
command: () => import('./acorex-platform-framework-client-layout-entity-bulk-entity.command-
|
|
32714
|
+
command: () => import('./acorex-platform-framework-client-layout-entity-bulk-entity.command-XZc1xZcD.mjs').then((c) => c.AXPBulkEntityCommand),
|
|
32668
32715
|
},
|
|
32669
32716
|
{
|
|
32670
32717
|
key: 'Entity:OpenList',
|
|
@@ -32713,6 +32760,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
32713
32760
|
exports: [],
|
|
32714
32761
|
declarations: [],
|
|
32715
32762
|
providers: [
|
|
32763
|
+
{ provide: AXP_ENTITY_VIEW_ACCESS, useExisting: AXPEntityDetailsAccessService },
|
|
32716
32764
|
AXP_ENTITY_DETAILS_VIEW_ADAPTER_LOADER_PROVIDER,
|
|
32717
32765
|
{
|
|
32718
32766
|
provide: AXP_REPEATER_ENTITY_BY_KEY_LOOKUP,
|
|
@@ -32825,7 +32873,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
32825
32873
|
},
|
|
32826
32874
|
{
|
|
32827
32875
|
key: 'Entity:Bulk',
|
|
32828
|
-
command: () => import('./acorex-platform-framework-client-layout-entity-bulk-entity.command-
|
|
32876
|
+
command: () => import('./acorex-platform-framework-client-layout-entity-bulk-entity.command-XZc1xZcD.mjs').then((c) => c.AXPBulkEntityCommand),
|
|
32829
32877
|
},
|
|
32830
32878
|
{
|
|
32831
32879
|
key: 'Entity:OpenList',
|
|
@@ -33151,4 +33199,4 @@ function detectEntityChanges(oldObj, newObj) {
|
|
|
33151
33199
|
*/
|
|
33152
33200
|
|
|
33153
33201
|
export { AXPEntityListViewModelResolver as $, AXPEntityDefinitionRegistryService as A, AXPEntityCategoryWidgetViewComponent as B, AXPEntityCommandTriggerViewModel as C, AXPEntityCreateViewElementViewModel as D, AXPEntityCreateViewModelFactory as E, AXPEntityCreateViewSectionViewModel as F, AXPEntityDataProvider as G, AXPEntityDataProviderImpl as H, AXPEntityDataSelectorRowActionsService as I, AXPEntityDataSelectorService as J, AXPEntityDefinitionProviderWidget as K, AXPEntityDefinitionProviderWidgetEditComponent as L, AXPEntityDeletePerformService as M, AXPEntityDetailListViewModel as N, AXPEntityDetailPopoverComponent as O, AXPEntityDetailPopoverService as P, AXPEntityDetailViewModelFactory as Q, AXPEntityDetailViewModelResolver as R, AXPEntityEventDispatcherService as S, AXPEntityFormBuilderService as T, AXPEntityLifecycleHookKeys as U, AXPEntityListPersistenceModeDefault as V, AXPEntityListTableService as W, AXPEntityListToolbarService as X, AXPEntityListViewCardFieldViewModel as Y, AXPEntityListViewColumnViewModel as Z, AXPEntityListViewModelFactory as _, showOperationResultToast as a, AXP_CATEGORY_TREE_ROOT_TITLE_I18N_KEY as a$, AXPEntityListWidget as a0, AXPEntityListWidgetViewComponent as a1, AXPEntityMasterCreateViewModel as a2, AXPEntityMasterListCardSelectActionName as a3, AXPEntityMasterListViewModel as a4, AXPEntityMasterListViewQueryViewModel as a5, AXPEntityMasterSingleElementViewModel as a6, AXPEntityMasterSingleViewGroupViewModel as a7, AXPEntityMasterSingleViewModel as a8, AXPEntityMasterUpdateElementViewModel as a9, AXPLookupWidgetViewComponent as aA, AXPMiddlewareAbortError as aB, AXPMiddlewareEntityStorageService as aC, AXPMultiSourceDefinitionProviderContext as aD, AXPMultiSourceDefinitionProviderService as aE, AXPMultiSourceFederatedSearchService as aF, AXPMultiSourceSelectorComponent as aG, AXPMultiSourceSelectorService as aH, AXPMultiSourceSelectorWidget as aI, AXPMultiSourceSelectorWidgetColumnComponent as aJ, AXPMultiSourceSelectorWidgetEditComponent as aK, AXPMultiSourceSelectorWidgetViewComponent as aL, AXPMultiSourceType as aM, AXPOpenEntityDetailsCommand as aN, AXPOpenEntityListCommand as aO, AXPRelatedColumnEnrichmentService as aP, AXPRelatedColumnMetadataResolver as aQ, AXPSelectorStructureWidget as aR, AXPSelectorStructureWidgetColumnComponent as aS, AXPSelectorStructureWidgetEditComponent as aT, AXPSelectorStructureWidgetViewComponent as aU, AXPShowFileUploaderPopupCommand as aV, AXPTruncatedBreadcrumbComponent as aW, AXPUpdateEntityCommand as aX, AXPUpdateEntityStatusCommand as aY, AXPViewEntityDetailsCommand as aZ, AXP_APPEARANCE_SECTION_ORDER as a_, AXPEntityMasterUpdateViewModel as aa, AXPEntityMasterUpdateViewModelFactory as ab, AXPEntityMiddlewareSkipContext as ac, AXPEntityModule as ad, AXPEntityPreloadFiltersContainerComponent as ae, AXPEntityPreloadFiltersViewModel as af, AXPEntityPreloadFiltersViewModelResolver as ag, AXPEntityResolver as ah, AXPEntityRuntimeAccessorService as ai, AXPEntityService as aj, AXPEntityStorageService as ak, AXPEntityUpdateViewSectionViewModel as al, AXPFileListComponent as am, AXPFileUploaderLoadFilesQuery as an, AXPFileUploaderSaveFilesCommand as ao, AXPFileUploaderWidget as ap, AXPFileUploaderWidgetColumnComponent as aq, AXPFileUploaderWidgetEditComponent as ar, AXPFileUploaderWidgetService as as, AXPFileUploaderWidgetViewComponent as at, AXPGetEntityDetailsQuery as au, AXPLayoutOrderingConfigService as av, AXPLookupByKeyCacheService as aw, AXPLookupWidget as ax, AXPLookupWidgetColumnComponent as ay, AXPLookupWidgetEditComponent as az, buildSelectedIdsFilter as b, defaultSortPresetsMiddlewareProvider as b$, AXP_CLASSIFICATION_SECTION_ORDER as b0, AXP_CLIENT_LOCAL_DEFAULT_MAX_ITEMS as b1, AXP_CLIENT_LOCAL_PLUGIN_NAME as b2, AXP_DATA_SEEDER_TOKEN as b3, AXP_ENTITY_ACTION_PLUGIN as b4, AXP_ENTITY_CONFIG_TOKEN as b5, AXP_ENTITY_DEFINITION_LOADER as b6, AXP_ENTITY_MIDDLEWARE as b7, AXP_ENTITY_MODIFIER as b8, AXP_ENTITY_STORAGE_MIDDLEWARE as b9, axpShowFileUploaderPopupCommandDefinition as bA, axpUpdateEntityStatusCommandDefinition as bB, buildDataSourceTraceSnapshot as bC, canPersistEntityListState as bD, clientLocalPlugin as bE, cloneLayoutArrays as bF, columnOrderingMiddleware as bG, columnOrderingMiddlewareProvider as bH, columnWidthMiddleware as bI, columnWidthMiddlewareProvider as bJ, committedAttachments as bK, composeEntityMiddlewares as bL, composeEntityStorageMiddlewares as bM, computeEntityAggregates as bN, configureEntityListColumnsSettingsMigrateDrop as bO, configureEntityListColumnsSettingsVersion as bP, createColumnOrderingMiddlewareProvider as bQ, createEntityCardDisplayScope as bR, createEntityCardLogicScope as bS, createEntityMiddlewareContext as bT, createEntityStorageContext as bU, createLayoutOrderingMiddlewareProvider as bV, defaultCardLayoutMiddleware as bW, defaultCardLayoutMiddlewareProvider as bX, defaultMultiLanguageMiddleware as bY, defaultMultiLanguageMiddlewareProvider as bZ, defaultSortPresetsMiddleware as b_, AXP_LOOKUP_FILTER_DEFAULT_OPERATOR as ba, AXP_MULTI_SOURCE_DEFINITION_PROVIDER as bb, DEFAULT_COLUMN_ORDER as bc, DEFAULT_PAIR_SPAN_RULES as bd, DEFAULT_PROPERTY_ORDER as be, DEFAULT_SECTION_ORDER as bf, ENTITY_FORM_ACTION_FIRST_STEP_CONTINUE as bg, ENTITY_LIST_LAYOUT_META as bh, ENTITY_LIST_ROUTE_CONTEXT_SESSION_KEY as bi, ENTITY_MASTER_LIST_TRACE_NS as bj, EntityBuilder as bk, EntityDataAccessor as bl, GALLERY_PAGE_COMPONENT_KEY as bm, TREE_CHILDREN_QUERY_TAKE as bn, actionExists as bo, applyDataSourcePagingWithoutLoad as bp, attachmentFieldCount as bq, attachmentNeedsHydration as br, attachmentsPlugin as bs, attachmentsSemanticallyEqual as bt, axpBuildEntityListPageContextSnapshot as bu, axpCreateEntityAiToolInputDefaults as bv, axpCreateEntityCommandDefinition as bw, axpDeleteEntityCommandDefinition as bx, axpOpenEntityListCommandDefinition as by, axpRunEntityListPageContextAction as bz, ATTACHMENTS_PAGE_COMPONENT_KEY as c, provideLocalEntityCatalog as c$, detectEntityChanges as c0, dispatchEntityModifiedSideEffects as c1, ensureHierarchicalRootFilter as c2, ensureLayoutPropertyView as c3, ensureLayoutSection as c4, ensureListActions as c5, entityCreateBridgeMiddleware as c6, entityDeleteBridgeMiddleware as c7, entityGetOneBridgeMiddleware as c8, entityListInstanceCurrentViewPath as c9, hasFileUploaderTitleOrDescriptionFields as cA, hydrateAttachmentFieldToFileList as cB, isAXPMiddlewareAbortError as cC, isAttachmentFieldPresentOnRow as cD, isAttachmentListEntry as cE, isAttachmentStorageRef as cF, isCategoryEntity as cG, isCategoryFilter as cH, isFileListItem as cI, isFileUploaderEditDialogAuto as cJ, isLegacyEntityDataSelectorOptions as cK, layoutOrderingMiddlewareFactory as cL, layoutOrderingMiddlewareProvider as cM, mapEntityStorageErrorToCommandResult as cN, mapLegacyEntityDataSelectorOptions as cO, mergeEntityListViewAndPersistedFilters as cP, normalizeEntityCardHeaderDisplayValue as cQ, normalizeEntityDataSelectorColumnSpecs as cR, normalizeEntityDataSelectorOptions as cS, normalizeEntityFieldToFileList as cT, normalizeEntityListPersistenceMode as cU, normalizeListPaging as cV, prefetchClientLocalRelated as cW, provideEntity as cX, provideEntityMiddlewareBridge as cY, provideEntityRealtimeHandlers as cZ, provideEntityStorageMiddlewareBridge as c_, entityListInstanceFilterPath as ca, entityListStylingRulesPath as cb, entityQueryBridgeMiddleware as cc, entityStorageCreateBridgeMiddleware as cd, entityStorageDeleteBridgeMiddleware as ce, entityStorageGetOneBridgeMiddleware as cf, entityStorageQueryBridgeMiddleware as cg, entityStorageUpdateBridgeMiddleware as ch, entityUpdateBridgeMiddleware as ci, eventDispatchMiddleware as cj, filterEntityMiddlewares as ck, filterEntityStorageMiddlewares as cl, filterSortEntityRows as cm, filterTouchesParentKey as cn, findEntityListRowDataInTree as co, fingerprintAttachmentItem as cp, fingerprintAttachments as cq, fireEntityLifecycleHook as cr, formatLookupItemDisplay as cs, formatLookupItemDisplayAsync as ct, galleryPlugin as cu, getDataSourcePageIndex as cv, getEntityListColumnsSettingsMigrateDrop as cw, getEntityListColumnsSettingsVersion as cx, getEntityListRowId as cy, getMasterInterfacePropertySortKey as cz, AXMEntityCrudService as d, readPersistedEntityListInstanceCurrentView as d0, readPersistedEntityListInstanceFilters as d1, readPersistedEntityListStylingRules as d2, resetPagingForTreeChildrenLoad as d3, resolveAttachmentFieldPath as d4, resolveEntityCardBadgeColorValue as d5, resolveEntityCardHeaderValue as d6, resolveEntityMasterFieldStylingClass as d7, resolveEntityMasterRecordStylingClass as d8, resolveEntityMasterStylingClass as d9, resolveEntityPluginDetailPageOrder as da, resolveFileUploaderEditDialog as db, resolveFileUploaderEntityScope as dc, resolveLookupDisplayField as dd, resolveLookupDisplayTemplate as de, resolveLookupEntityCacheKey as df, resolveLookupEntityKey as dg, resolveMasterInterfacePropertyOrder as dh, restoreEntityListExpandedRows as di, runEntityMiddlewarePipeline as dj, runEntityQuery as dk, runEntityStorageMiddlewarePipeline as dl, searchResultDescriptionMiddleware as dm, searchResultDescriptionMiddlewareProvider as dn, shouldLoadEntityListStateFromStorage as dp, shouldResetEntityListStateOnRouteEntry as dq, traceEntityMasterList as dr, AXMEntityCrudServiceImpl as e, AXPCategoryTreeService as f, AXPClientLocalPluginModule as g, AXPCreateEntityCommand as h, AXPDataSeederService as i, AXPDeleteEntityCommand as j, AXPDomainQueryEntityDefinitionLoader as k, AXPEditFileUploaderCommand as l, AXPEntityBulkPatchPerformService as m, newBulkExecutionId as n, AXPEntityCardComponent as o, persistedAttachments as p, AXPEntityCardFieldsResolver as q, resolveBulkFailureBody as r, settleAfterLoadingDialog as s, AXPEntityCardSelectActionName as t, AXPEntityCardSkeletonComponent as u, AXPEntityCategoryTreeSelectorComponent as v, watchBulkProgress as w, AXPEntityCategoryWidget as x, AXPEntityCategoryWidgetColumnComponent as y, AXPEntityCategoryWidgetEditComponent as z };
|
|
33154
|
-
//# sourceMappingURL=acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-
|
|
33202
|
+
//# sourceMappingURL=acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-CXziIWed.mjs.map
|