@acorex-platform/module-tenant-management-client 0.0.62 → 0.0.65
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.
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AXPMiddlewareAbortError, AXPEntityService, configureEntityListColumnsSettingsMigrateDrop, configureEntityListColumnsSettingsVersion, AXP_ENTITY_STORAGE_MIDDLEWARE } from '@acorex-platform/framework-client/layout/entity';
|
|
2
2
|
import { AXP_FEATURE_DEFINITION_PROVIDER, AXP_CONTEXT_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/core';
|
|
3
|
-
import { AXPSearchCommandProvider, createEntitySearchCommand, AXP_STATUS_PROVIDERS, AXP_MENU_PROVIDER, AXP_SETTING_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER } from '@acorex-platform/framework-client/common';
|
|
4
|
-
import { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';
|
|
3
|
+
import { AXPSearchCommandProvider, createEntitySearchCommand, AXP_STATUS_PROVIDERS, AXP_MENU_PROVIDER, AXP_MENU_MIDDLEWARE, AXP_SETTING_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER } from '@acorex-platform/framework-client/common';
|
|
4
|
+
import { AXPSessionService, AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';
|
|
5
5
|
import { provideCommandSetups } from '@acorex-platform/framework-client/runtime';
|
|
6
6
|
import { RootConfig, AXP_TENANT_USER_ADMIN_SCOPE_PARAM, resolveTenantUserAdminScopeFromUrl, AXP_TENANT_USER_ADMIN_SCOPE_HEADER, AXMTenantManagementFeatureKeys, AXPApplicationsPlatformPermissionKeys, AXP_TENANT_USERS_VIEW, AXMTenantManagementMenuKeys, AXM_TENANT_APPROVE_REQUEST_COMMAND, AXM_TENANT_REJECT_REQUEST_COMMAND } from '@acorex-platform/module-tenant-management-client/contracts';
|
|
7
7
|
import { HTTP_INTERCEPTORS } from '@angular/common/http';
|
|
@@ -507,6 +507,42 @@ class AXMTenantManagementModuleMenuProvider {
|
|
|
507
507
|
}
|
|
508
508
|
//#endregion
|
|
509
509
|
|
|
510
|
+
//#region ----- Imports -----
|
|
511
|
+
//#endregion
|
|
512
|
+
//#region ----- Constants -----
|
|
513
|
+
/**
|
|
514
|
+
* Security Management root (`AXPSecurityManagementMenuKeys.Root`).
|
|
515
|
+
* String only — importing that client would cycle.
|
|
516
|
+
*/
|
|
517
|
+
const APPLICATION_SECURITY_MENU = 'SecurityManagement:Menu';
|
|
518
|
+
//#endregion
|
|
519
|
+
//#region ----- Middleware -----
|
|
520
|
+
/**
|
|
521
|
+
* Hides application-scoped Security menus when Tenant Console is enabled.
|
|
522
|
+
* Runs after every menu provider so the Security tree exists before removal.
|
|
523
|
+
*/
|
|
524
|
+
class AXMTenantConsoleSecurityMenuMiddleware {
|
|
525
|
+
constructor() {
|
|
526
|
+
//#region ----- Services & Dependencies -----
|
|
527
|
+
this.name = 'tenant-console-security-menu';
|
|
528
|
+
this.priority = 100;
|
|
529
|
+
this.sessionService = inject(AXPSessionService);
|
|
530
|
+
}
|
|
531
|
+
//#endregion
|
|
532
|
+
//#region ----- Menu Processing -----
|
|
533
|
+
async process(context) {
|
|
534
|
+
if (!this.sessionService.isFeatureEnabled(AXMTenantManagementFeatureKeys.TenantConsole)) {
|
|
535
|
+
return;
|
|
536
|
+
}
|
|
537
|
+
context.find(APPLICATION_SECURITY_MENU).remove();
|
|
538
|
+
}
|
|
539
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMTenantConsoleSecurityMenuMiddleware, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
540
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMTenantConsoleSecurityMenuMiddleware }); }
|
|
541
|
+
}
|
|
542
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMTenantConsoleSecurityMenuMiddleware, decorators: [{
|
|
543
|
+
type: Injectable
|
|
544
|
+
}] });
|
|
545
|
+
|
|
510
546
|
const I18N = `@${RootConfig.config.i18n}:tenants.settings.tenant`;
|
|
511
547
|
class AXMTenantSettingProvider {
|
|
512
548
|
async provide(context) {
|
|
@@ -611,6 +647,11 @@ class AXMTenantManagementModule {
|
|
|
611
647
|
useClass: AXMTenantManagementModuleMenuProvider,
|
|
612
648
|
multi: true,
|
|
613
649
|
},
|
|
650
|
+
{
|
|
651
|
+
provide: AXP_MENU_MIDDLEWARE,
|
|
652
|
+
useClass: AXMTenantConsoleSecurityMenuMiddleware,
|
|
653
|
+
multi: true,
|
|
654
|
+
},
|
|
614
655
|
{
|
|
615
656
|
provide: AXP_SETTING_DEFINITION_PROVIDER,
|
|
616
657
|
useClass: AXMTenantSettingProvider,
|
|
@@ -689,6 +730,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
689
730
|
useClass: AXMTenantManagementModuleMenuProvider,
|
|
690
731
|
multi: true,
|
|
691
732
|
},
|
|
733
|
+
{
|
|
734
|
+
provide: AXP_MENU_MIDDLEWARE,
|
|
735
|
+
useClass: AXMTenantConsoleSecurityMenuMiddleware,
|
|
736
|
+
multi: true,
|
|
737
|
+
},
|
|
692
738
|
{
|
|
693
739
|
provide: AXP_SETTING_DEFINITION_PROVIDER,
|
|
694
740
|
useClass: AXMTenantSettingProvider,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-tenant-management-client.mjs","sources":["../../../../libs/modules/tenant-management/client/src/lib/features/tenant-status.provider.ts","../../../../libs/modules/tenant-management/client/src/lib/features/tenant-user-status.provider.ts","../../../../libs/modules/tenant-management/client/src/lib/middlewares/tenant-user-account-holder.middleware.ts","../../../../libs/modules/tenant-management/client/src/lib/middlewares/tenant-user-admin-scope.util.ts","../../../../libs/modules/tenant-management/client/src/lib/middlewares/tenant-user-admin-scope.middleware.ts","../../../../libs/modules/tenant-management/client/src/lib/middlewares/tenant-user-admin-scope.interceptor.ts","../../../../libs/modules/tenant-management/client/src/lib/middlewares/index.ts","../../../../libs/modules/tenant-management/client/src/lib/feature-definition.provider.ts","../../../../libs/modules/tenant-management/client/src/lib/permission-definition.provider.ts","../../../../libs/modules/tenant-management/client/src/lib/menu.provider.ts","../../../../libs/modules/tenant-management/client/src/lib/setting.provider.ts","../../../../libs/modules/tenant-management/client/src/lib/search-command.provider.ts","../../../../libs/modules/tenant-management/client/src/lib/context-definition.provider.ts","../../../../libs/modules/tenant-management/client/src/lib/tenant-management.module.ts","../../../../libs/modules/tenant-management/client/src/lib/tenant-extra/tenant-extra.token.ts","../../../../libs/modules/tenant-management/client/src/lib/tenant-extra/tenant-extra-layout.util.ts","../../../../libs/modules/tenant-management/client/src/acorex-platform-module-tenant-management-client.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPStatusProvider, AXPStatusTransition, AXPSystemStatusType, systemStatusToDefinition } from '@acorex-platform/framework-shared/core';\n\n//#endregion\n\n//#region ---- Tenant Status Provider ----\n\n/**\n * Tenant status provider defining lifecycle states for tenants.\n * Used by the status plugin to manage tenant status transitions and metadata.\n */\nexport class AXMTenantStatusProvider extends AXPStatusProvider {\n readonly key = 'tenant-management.status.tenant';\n\n readonly defaultStatus = AXPSystemStatusType.Active;\n\n readonly statuses = [\n systemStatusToDefinition(AXPSystemStatusType.Active, {\n title: '@tenant-management:tenants.states.active',\n generateView: true,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Inactive, {\n title: '@tenant-management:tenants.states.inactive',\n generateView: true,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Suspended, {\n title: '@tenant-management:tenants.states.suspended',\n generateView: true,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Pending, {\n title: '@tenant-management:tenants.states.pending',\n generateView: true,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Rejected, {\n title: '@tenant-management:tenants.states.rejected',\n generateView: true,\n }),\n ];\n\n readonly transitions: AXPStatusTransition[] = [\n // Pending → Active / Rejected: use primary Approve / Reject request actions only\n // (status-chip UpdateStatus would skip invite / email / provisioning).\n {\n from: AXPSystemStatusType.Active,\n to: AXPSystemStatusType.Inactive,\n title: '@tenant-management:tenants.transitions.deactivate',\n },\n {\n from: AXPSystemStatusType.Active,\n to: AXPSystemStatusType.Suspended,\n title: '@tenant-management:tenants.transitions.suspend',\n },\n {\n from: AXPSystemStatusType.Suspended,\n to: AXPSystemStatusType.Active,\n title: '@tenant-management:tenants.transitions.resume',\n },\n {\n from: AXPSystemStatusType.Inactive,\n to: AXPSystemStatusType.Active,\n title: '@tenant-management:tenants.transitions.activate',\n },\n ];\n}\n\n//#endregion\n\n","//#region ----- Imports -----\n\nimport {\n AXPStatusProvider,\n AXPStatusTransition,\n AXPSystemStatusType,\n systemStatusToDefinition,\n} from '@acorex-platform/framework-shared/core';\n\n//#endregion\n\n//#region ----- TenantUser membership status -----\n\n/**\n * Membership lifecycle for TenantManagement.TenantUser (incl. invite outcomes).\n * Separate from tenant-management.status.tenant so Tenant entity tabs stay clean.\n */\nexport class AXMTenantUserStatusProvider extends AXPStatusProvider {\n readonly key = 'tenant-management.status.tenant-user';\n\n readonly defaultStatus = AXPSystemStatusType.Active;\n\n readonly statuses = [\n systemStatusToDefinition(AXPSystemStatusType.Pending, {\n title: '@tenant-management:tenants.entities.tenant-user.states.pending',\n generateView: false,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Active, {\n title: '@tenant-management:tenants.entities.tenant-user.states.active',\n generateView: false,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Rejected, {\n title: '@tenant-management:tenants.entities.tenant-user.states.rejected',\n generateView: false,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Cancelled, {\n title: '@tenant-management:tenants.entities.tenant-user.states.cancelled',\n generateView: false,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Expired, {\n title: '@tenant-management:tenants.entities.tenant-user.states.expired',\n generateView: false,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Inactive, {\n title: '@tenant-management:tenants.entities.tenant-user.states.inactive',\n generateView: false,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Suspended, {\n title: '@tenant-management:tenants.entities.tenant-user.states.suspended',\n generateView: false,\n }),\n ];\n\n readonly transitions: AXPStatusTransition[] = [];\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { inject } from '@angular/core';\nimport {\n AXPEntityStorageMiddleware,\n AXPMiddlewareAbortError,\n} from '@acorex-platform/framework-client/layout/entity';\nimport { RootConfig } from '@acorex-platform/module-tenant-management-client/contracts';\n\n//#endregion\n\n//#region ---- Tenant User Account Holder Middleware ----\n\n/**\n * Tenant User Account Holder Enforcement Middleware\n *\n * Enforces business rules for the isAccountHolder flag:\n * 1. CREATE: Prevents manual creation with isAccountHolder=true (must use TransferOwnership command)\n * 2. UPDATE:\n * - Prevents deactivating account holder\n * - Prevents manually toggling isAccountHolder flag\n * 3. DELETE: Prevents deleting account holder\n *\n * Runs on: TenantUser entity operations\n */\nexport const tenantUserAccountHolderMiddleware: AXPEntityStorageMiddleware = {\n target: {\n ops: ['create', 'update', 'delete'],\n order: 10, // Early enforcement before other business logic\n },\n\n execute: async (ctx, next) => {\n const entityFullName = `${RootConfig.module.name}.${RootConfig.entities.tenantUser.name}`;\n\n // Only apply to TenantUser entity\n if (ctx.entityName !== entityFullName) {\n await next();\n return;\n }\n\n const backend = ctx.entities;\n\n //#region ---- CREATE Operation ----\n\n if (ctx.op === 'create') {\n // Rule 1: Cannot manually create account holder\n // Must use TransferOwnership command instead\n if (ctx.data?.isAccountHolder === true) {\n throw new AXPMiddlewareAbortError(\n 'Cannot manually create tenant user as account holder. Use Transfer Ownership command.',\n {\n status: 400,\n code: 'TENANT_USER_ACCOUNT_HOLDER_MANUAL_CREATE',\n details: {\n entity: ctx.entityName,\n field: 'isAccountHolder',\n },\n }\n );\n }\n\n // Ensure isAccountHolder is explicitly set to false for new users\n if (ctx.data) {\n ctx.data.isAccountHolder = false;\n }\n }\n\n //#endregion\n\n //#region ---- UPDATE Operation ----\n\n if (ctx.op === 'update') {\n // Load existing record to check current state\n let existing: any;\n try {\n existing = await backend.getOne(ctx.entityName, ctx.id);\n } catch (error) {\n // If record doesn't exist, let it fail naturally in next()\n await next();\n return;\n }\n\n // Rule 2: Cannot manually toggle isAccountHolder flag\n if (\n ctx.data?.isAccountHolder !== undefined &&\n ctx.data.isAccountHolder !== existing.isAccountHolder\n ) {\n throw new AXPMiddlewareAbortError(\n 'Cannot manually change account holder status. Use Transfer Ownership command.',\n {\n status: 400,\n code: 'TENANT_USER_ACCOUNT_HOLDER_MANUAL_TOGGLE',\n details: {\n entity: ctx.entityName,\n id: ctx.id,\n currentValue: existing.isAccountHolder,\n attemptedValue: ctx.data.isAccountHolder,\n },\n }\n );\n }\n\n // Rule 3: Cannot deactivate account holder\n if (existing.isAccountHolder === true) {\n // Check if trying to deactivate (status change to inactive/disabled)\n if (ctx.data?.statusId && ctx.data.statusId !== 'active') {\n throw new AXPMiddlewareAbortError(\n 'Cannot deactivate account holder. Transfer ownership to another user first.',\n {\n status: 400,\n code: 'TENANT_USER_ACCOUNT_HOLDER_DEACTIVATE',\n details: {\n entity: ctx.entityName,\n id: ctx.id,\n tenantId: existing.tenantId,\n userId: existing.userId,\n },\n }\n );\n }\n\n // Prevent end date before current date for account holder\n if (ctx.data?.endDate) {\n const endDate = new Date(ctx.data.endDate);\n const now = new Date();\n if (endDate < now) {\n throw new AXPMiddlewareAbortError(\n 'Cannot set past end date for account holder. Transfer ownership first.',\n {\n status: 400,\n code: 'TENANT_USER_ACCOUNT_HOLDER_END_DATE',\n details: {\n entity: ctx.entityName,\n id: ctx.id,\n endDate: ctx.data.endDate,\n },\n }\n );\n }\n }\n }\n }\n\n //#endregion\n\n //#region ---- DELETE Operation ----\n\n if (ctx.op === 'delete') {\n // Load existing record to check if it's an account holder\n let existing: any;\n try {\n existing = await backend.getOne(ctx.entityName, ctx.id);\n } catch (error) {\n // If record doesn't exist, let it fail naturally in next()\n await next();\n return;\n }\n\n // Rule 4: Cannot delete account holder\n if (existing?.isAccountHolder === true) {\n throw new AXPMiddlewareAbortError(\n 'Cannot delete account holder. Transfer ownership to another user first.',\n {\n status: 400,\n code: 'TENANT_USER_ACCOUNT_HOLDER_DELETE',\n details: {\n entity: ctx.entityName,\n id: ctx.id,\n tenantId: existing.tenantId,\n userId: existing.userId,\n },\n }\n );\n }\n }\n\n //#endregion\n\n // Execute the operation if all validations passed\n await next();\n },\n};\n\n//#endregion\n\n","//#region ----- Imports -----\n\nimport {\n AXP_TENANT_USER_ADMIN_SCOPE_PARAM,\n RootConfig,\n resolveTenantUserAdminScopeFromUrl,\n type AXPTenantUserAdminScope,\n} from '@acorex-platform/module-tenant-management-client/contracts';\n\n//#endregion\n\n//#region ----- Tenant Users admin scope (client) -----\n\nexport const TENANT_USER_ENTITY_NAME = `${RootConfig.module.name}.${RootConfig.entities.tenantUser.name}`;\nexport const TENANT_USER_APP_ACCESS_ENTITY_NAME = `${RootConfig.module.name}.${RootConfig.entities.tenantUserAppAccess.name}`;\n\nexport { resolveTenantUserAdminScopeFromUrl };\n\nexport function isTenantUserAdminScopeEntity(entityName: string | null | undefined): boolean {\n return (\n entityName === TENANT_USER_ENTITY_NAME || entityName === TENANT_USER_APP_ACCESS_ENTITY_NAME\n );\n}\n\nexport function withTenantUserAdminScopeParam(\n params: Record<string, string> | undefined,\n scope: AXPTenantUserAdminScope,\n): Record<string, string> {\n return {\n ...(params ?? {}),\n [AXP_TENANT_USER_ADMIN_SCOPE_PARAM]: scope,\n };\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXPEntityStorageMiddleware } from '@acorex-platform/framework-client/layout/entity';\nimport { inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport {\n isTenantUserAdminScopeEntity,\n resolveTenantUserAdminScopeFromUrl,\n withTenantUserAdminScopeParam,\n} from './tenant-user-admin-scope.util';\n\n//#endregion\n\n//#region ----- Tenant Users admin scope (client entity middleware) -----\n\n/**\n * Injects explicit `tenantUserAdminScope=current-tenant` on TenantUser /\n * TenantUserAppAccess queries when the open surface carries `view=tenant-users`\n * — not for generic / PC / shared entity routes without that view.\n */\nexport const tenantUserAdminScopeMiddleware: AXPEntityStorageMiddleware = {\n target: {\n ops: ['query'],\n order: 8,\n },\n\n execute: async (ctx, next) => {\n if (!isTenantUserAdminScopeEntity(ctx.entityName)) {\n await next();\n return;\n }\n\n const router = inject(Router);\n const scope = resolveTenantUserAdminScopeFromUrl(router.url);\n if (scope === 'current-tenant' && ctx.request) {\n ctx.request = {\n ...ctx.request,\n params: withTenantUserAdminScopeParam(ctx.request.params, scope),\n };\n }\n await next();\n },\n};\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXP_TENANT_USER_ADMIN_SCOPE_HEADER } from '@acorex-platform/module-tenant-management-client/contracts';\nimport {\n HttpEvent,\n HttpHandler,\n HttpInterceptor,\n HttpRequest,\n} from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport {\n isTenantUserAdminScopeEntity,\n resolveTenantUserAdminScopeFromUrl,\n} from './tenant-user-admin-scope.util';\n\n//#endregion\n\n//#region ----- Tenant Users admin scope interceptor -----\n\n/**\n * Attaches admin-scope header for TenantUser / TenantUserAppAccess runtime\n * calls so getOne / update / delete honor the same Tenant Users operation\n * as the open list/detail surface.\n */\n@Injectable()\nexport class TenantUserAdminScopeInterceptor implements HttpInterceptor {\n private readonly router = inject(Router);\n\n intercept(\n request: HttpRequest<unknown>,\n next: HttpHandler,\n ): Observable<HttpEvent<unknown>> {\n if (!this.targetsTenantUserEntities(request)) {\n return next.handle(request);\n }\n\n const scope = resolveTenantUserAdminScopeFromUrl(this.router.url);\n if (scope !== 'current-tenant') {\n return next.handle(request);\n }\n\n return next.handle(\n request.clone({\n setHeaders: {\n [AXP_TENANT_USER_ADMIN_SCOPE_HEADER]: scope,\n },\n }),\n );\n }\n\n private targetsTenantUserEntities(request: HttpRequest<unknown>): boolean {\n const body = request.body;\n if (body && typeof body === 'object' && !Array.isArray(body)) {\n const record = body as Record<string, unknown>;\n const input = record['input'];\n const entityFromInput =\n input && typeof input === 'object' && !Array.isArray(input)\n ? (input as Record<string, unknown>)['entity']\n : undefined;\n const entity = record['entity'] ?? entityFromInput;\n if (typeof entity === 'string' && isTenantUserAdminScopeEntity(entity)) {\n return true;\n }\n }\n\n const entityQuery = request.params?.get?.('entity');\n if (typeof entityQuery === 'string' && isTenantUserAdminScopeEntity(entityQuery)) {\n return true;\n }\n\n return (\n request.url.includes('TenantUserAppAccess') || request.url.includes('/TenantUser')\n );\n }\n}\n\n//#endregion\n","//#region ---- Middleware Exports ----\n\nexport { tenantUserAccountHolderMiddleware } from './tenant-user-account-holder.middleware';\nexport { tenantUserAdminScopeMiddleware } from './tenant-user-admin-scope.middleware';\nexport { TenantUserAdminScopeInterceptor } from './tenant-user-admin-scope.interceptor';\n\n//#endregion\n\n","//#region ---- Imports ----\n\nimport {\n AXPFeatureDefinitionProvider,\n AXPFeatureDefinitionProviderContext,\n} from '@acorex-platform/framework-client/core';\nimport {\n AXMTenantManagementFeatureKeys,\n RootConfig,\n} from '@acorex-platform/module-tenant-management-client/contracts';\n\n//#endregion\n\n//#region ---- Feature Definition Provider ----\n\n/**\n * Tenant Management Feature Definition Provider.\n * Provides feature definitions for the Tenant Management module.\n */\nexport class AXMTenantManagementFeatureDefinitionProvider implements AXPFeatureDefinitionProvider {\n async provide(context: AXPFeatureDefinitionProviderContext): Promise<void> {\n const i18n = RootConfig.config.i18n;\n\n context.addFeature(AXMTenantManagementFeatureKeys.ManagePlatformTenants, {\n title: `@${i18n}:features.manage-platform-tenants.title`,\n description: `@${i18n}:features.manage-platform-tenants.description`,\n defaultValue: false,\n type: 'boolean',\n });\n\n context.addFeature(AXMTenantManagementFeatureKeys.TenantConsole, {\n title: `@${i18n}:features.tenant-console.title`,\n description: `@${i18n}:features.tenant-console.description`,\n defaultValue: false,\n type: 'boolean',\n });\n\n context.addFeature(AXMTenantManagementFeatureKeys.InviteMultiApplication, {\n title: `@${i18n}:features.invite-multi-application.title`,\n description: `@${i18n}:features.invite-multi-application.description`,\n defaultValue: false,\n type: 'boolean',\n });\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n AXPPermissionDefinitionProvider,\n AXPPermissionDefinitionProviderContext,\n} from '@acorex-platform/framework-client/auth';\nimport {\n AXPCommonPermissionGroupKeys\n} from '@acorex-platform/module-common-client/contracts';\nimport {\n AXPApplicationsPlatformPermissionKeys\n} from '@acorex-platform/module-tenant-management-client/contracts';\n\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ---- Permission Definition Provider ----\n\n/**\n * Registers MaintainTenants under Applications & Platform.\n */\n@Injectable()\nexport class AXMTenantManagementPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXPApplicationsPlatformPermissionKeys;\n const groups = AXPCommonPermissionGroupKeys;\n const P = '@common:applications-platform.permissions';\n const G = '@common:permission-groups';\n\n context.addGroup(groups.ApplicationsPlatform.Root, `${G}.applications-platform.title`, `${G}.applications-platform.description`, { order: 110 });\n\n context\n .addGroup(\n groups.ApplicationsPlatform.TenancyShell,\n `${G}.applications-platform-tenancy-shell.title`,\n `${G}.applications-platform-tenancy-shell.description`,\n { parent: groups.ApplicationsPlatform.Root, order: 20 },\n )\n .addPermission(keys.MaintainTenants, `${P}.maintain-tenants.title`, `${P}.maintain-tenants.description`, {\n modules: ['TenantManagement'],\n requiredFeatures: ['TenantManagement'],\n })\n .endPermission()\n .endGroup();\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPCommonMenuKeys } from '@acorex-platform/module-common-client/contracts';\nimport {\n AXPApplicationsPlatformPermissionKeys,\n AXP_TENANT_USER_ADMIN_SCOPE_PARAM,\n AXP_TENANT_USERS_VIEW,\n AXMTenantManagementFeatureKeys,\n AXMTenantManagementMenuKeys,\n RootConfig,\n} from '@acorex-platform/module-tenant-management-client/contracts';\nimport { inject } from '@angular/core';\n\n//#endregion\n\n//#region ---- Constants ----\n\n/** Stable capability keys (avoid importing SecurityManagement client — cycle risk). */\nconst MAINTAIN_USERS_AND_ROLES = 'Administration:Permission:MaintainUsersAndRoles';\nconst MANAGE_SESSIONS = 'Administration:Permission:ManageSessions';\nconst SECURITY_MODULE = 'SecurityManagement';\nconst DEVICE_SESSIONS_ENTITY = 'DeviceSessions';\n/** Explicit tenant-sessions list view (operation-owned scope; not inferred from TM app id). */\nconst TENANT_SESSIONS_VIEW = 'tenant-sessions';\n\n/**\n * Durable Tenant Users operation signal on the menu path.\n * Prefer `tenantUserAdminScope=` over `view=` alone — entity list rewrites\n * unknown/hidden views to `all` and would drop a view-only signal.\n */\nconst TENANT_USERS_OPERATION_QUERY = `${AXP_TENANT_USER_ADMIN_SCOPE_PARAM}=current-tenant&view=${AXP_TENANT_USERS_VIEW}`;\n\n//#endregion\n\n//#region ---- Menu Provider ----\n\nexport class AXMTenantManagementModuleMenuProvider implements AXPMenuProvider {\n private readonly entityService = inject(AXPEntityService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const module = RootConfig.module;\n\n // Platform → Tenants: Platform Console only (ADR-TEN-001 — must not appear in TM).\n context.find(AXPCommonMenuKeys.Platform).addItems([\n {\n name: AXMTenantManagementMenuKeys.Tenants,\n text: `@${RootConfig.config.i18n}:tenants.entities.tenant.plural`,\n path: this.entityService.createPath(module.name, RootConfig.entities.tenant.name),\n icon: RootConfig.entities.tenant.icon,\n priority: 4,\n policy: {\n features: [AXMTenantManagementFeatureKeys.ManagePlatformTenants],\n permissions: [AXPApplicationsPlatformPermissionKeys.MaintainTenants],\n },\n },\n { name: `${AXMTenantManagementMenuKeys.Root}:divider`, text: '', type: 'break', priority: 5 },\n ]);\n\n // TM Administration surfaces (ADR-TEN-001 D-04 / D-07) — TM application only.\n // Gated by TenantConsole (TM Standard edition); not by TenantManagement module alone\n // (PC also enables the module for Platform → Tenants).\n // Application Users remain under Administration → Security → Users (SecurityManagement provider).\n context.find(AXPCommonMenuKeys.Administration).addItems([\n {\n name: AXMTenantManagementMenuKeys.TenantUsers,\n text: RootConfig.entities.tenantUser.titlePlural,\n // Explicit Tenant Users operation (current-tenant scope; not Application.code).\n path: `${this.entityService.createPath(module.name, RootConfig.entities.tenantUser.name)}?${TENANT_USERS_OPERATION_QUERY}`,\n icon: RootConfig.entities.tenantUser.icon,\n priority: 20,\n policy: {\n features: [AXMTenantManagementFeatureKeys.TenantConsole],\n permissions: [MAINTAIN_USERS_AND_ROLES],\n },\n },\n {\n name: AXMTenantManagementMenuKeys.TenantApplicationAccess,\n text: RootConfig.entities.tenantUserAppAccess.titlePlural,\n path: `${this.entityService.createPath(module.name, RootConfig.entities.tenantUserAppAccess.name)}?${TENANT_USERS_OPERATION_QUERY}`,\n icon: RootConfig.entities.tenantUserAppAccess.icon,\n priority: 21,\n policy: {\n features: [AXMTenantManagementFeatureKeys.TenantConsole],\n permissions: [MAINTAIN_USERS_AND_ROLES],\n },\n },\n {\n name: AXMTenantManagementMenuKeys.TenantSessions,\n text: `@${RootConfig.config.i18n}:module.menus.tenant-sessions.title`,\n path: `${this.entityService.createPath(SECURITY_MODULE, DEVICE_SESSIONS_ENTITY)}?view=${TENANT_SESSIONS_VIEW}`,\n icon: 'fa-light fa-laptop-mobile',\n priority: 22,\n policy: {\n features: [AXMTenantManagementFeatureKeys.TenantConsole, SECURITY_MODULE],\n permissions: [MANAGE_SESSIONS],\n },\n },\n ]);\n }\n}\n\n//#endregion\n","import { AXPSettingDefinitionProvider, AXPSettingDefinitionProviderContext } from '@acorex-platform/framework-client/common';\nimport { RootConfig } from '@acorex-platform/module-tenant-management-client/contracts';\n\nconst I18N = `@${RootConfig.config.i18n}:tenants.settings.tenant`;\n\nexport class AXMTenantSettingProvider implements AXPSettingDefinitionProvider {\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n context\n .addGroup(\n 'tenant',\n `${I18N}.group.nav-title`,\n `${I18N}.group.description`,\n RootConfig.module.icon,\n `${I18N}.group.title`,\n 25,\n )\n .addSection('general', `${I18N}.sections.general.title`, `${I18N}.sections.general.description`)\n // TODO: Add tenant-specific settings here when needed\n .endSection()\n .endGroup();\n }\n}\n","//#region ---- Imports ----\n\nimport { AXPSearchCommandProvider, createEntitySearchCommand } from '@acorex-platform/framework-client/common';\nimport { RootConfig } from '@acorex-platform/module-tenant-management-client/contracts';\n\n//#endregion\n\n//#region ---- Search Command Provider ----\n\nexport class AXMTenantSearchCommandProvider extends AXPSearchCommandProvider {\n commands = [\n createEntitySearchCommand({\n id: 'create-tenant',\n entityKey: `${RootConfig.module.name}.${RootConfig.entities.tenant.name}`,\n entityInfo: { name: RootConfig.entities.tenant.name, module: RootConfig.module.name, title: RootConfig.entities.tenant.title },\n titleKey: `@${RootConfig.config.i18n}:tenants.actions.create-tenant.title`,\n descriptionKey: `@${RootConfig.config.i18n}:tenants.actions.create-tenant.description`,\n icon: RootConfig.entities.tenant.icon,\n }),\n ];\n}\n\n//#endregion\n\n","import { Injectable } from '@angular/core';\nimport type { AXPContextDefinition, AXPContextDefinitionProvider } from '@acorex-platform/framework-client/core';\nimport { AXM_TENANT_CONTEXT_DEFINITIONS } from '@acorex-platform/module-tenant-management-client/contracts';\n\n//#region ---- Tenant context definitions ----\n\n@Injectable()\nexport class AXMTenantManagementContextDefinitionProvider implements AXPContextDefinitionProvider {\n async items(): Promise<AXPContextDefinition[]> {\n return AXM_TENANT_CONTEXT_DEFINITIONS;\n }\n}\n\n//#endregion\n","import {\n AXP_ENTITY_STORAGE_MIDDLEWARE,\n configureEntityListColumnsSettingsMigrateDrop,\n configureEntityListColumnsSettingsVersion,\n} from '@acorex-platform/framework-client/layout/entity';\nimport { AXP_CONTEXT_DEFINITION_PROVIDER, AXP_FEATURE_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/core';\nimport { AXP_STATUS_PROVIDERS, AXP_MENU_PROVIDER, AXP_SETTING_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER } from '@acorex-platform/framework-client/common';\nimport { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';\nimport { provideCommandSetups } from '@acorex-platform/framework-client/runtime';\nimport {\n AXM_TENANT_APPROVE_REQUEST_COMMAND,\n AXM_TENANT_REJECT_REQUEST_COMMAND,\n} from '@acorex-platform/module-tenant-management-client/contracts';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\nimport { AXMTenantStatusProvider } from './features/tenant-status.provider';\nimport { AXMTenantUserStatusProvider } from './features/tenant-user-status.provider';\nimport {\n TenantUserAdminScopeInterceptor,\n tenantUserAccountHolderMiddleware,\n tenantUserAdminScopeMiddleware,\n} from './middlewares';\nimport { AXMTenantManagementFeatureDefinitionProvider } from './feature-definition.provider';\nimport { AXMTenantManagementPermissionDefinitionProvider } from './permission-definition.provider';\nimport { AXMTenantManagementModuleMenuProvider } from './menu.provider';\n\nimport { AXMTenantSettingProvider } from './setting.provider';\nimport { AXMTenantSearchCommandProvider } from './search-command.provider';\nimport { AXMTenantManagementContextDefinitionProvider } from './context-definition.provider';\n\n//#region ----- Boot configure (once) -----\n\n/**\n * Stale AppAccess list prefs pinned `tenantUser.userId` / bare `userDisplayName`\n * text columns; list now uses `userId` lookup (display via userDisplayName expose).\n */\nconfigureEntityListColumnsSettingsMigrateDrop([\n 'tenantUser.userId',\n 'tenantUserId',\n 'userDisplayName',\n]);\nconfigureEntityListColumnsSettingsVersion(5);\n\n//#endregion\n\n// Entity Modules\n\n@NgModule({\n imports: [\n // Entity Modules\n ],\n exports: [],\n declarations: [],\n providers: [\n // Module-specific providers (not part of manifest system)\n {\n provide: AXP_STATUS_PROVIDERS,\n useClass: AXMTenantStatusProvider,\n multi: true,\n },\n {\n provide: AXP_STATUS_PROVIDERS,\n useClass: AXMTenantUserStatusProvider,\n multi: true,\n },\n {\n provide: AXP_ENTITY_STORAGE_MIDDLEWARE,\n useValue: tenantUserAccountHolderMiddleware,\n multi: true,\n },\n {\n provide: AXP_ENTITY_STORAGE_MIDDLEWARE,\n useValue: tenantUserAdminScopeMiddleware,\n multi: true,\n },\n {\n provide: HTTP_INTERCEPTORS,\n useClass: TenantUserAdminScopeInterceptor,\n multi: true,\n },\n // Provider references (now using tokens)\n {\n provide: AXP_FEATURE_DEFINITION_PROVIDER,\n useClass: AXMTenantManagementFeatureDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMTenantManagementPermissionDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMTenantManagementModuleMenuProvider,\n multi: true,\n },\n \n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXMTenantSettingProvider,\n multi: true,\n },\n {\n provide: AXP_SEARCH_PROVIDER,\n useClass: AXMTenantSearchCommandProvider,\n multi: true,\n },\n {\n provide: AXP_CONTEXT_DEFINITION_PROVIDER,\n useClass: AXMTenantManagementContextDefinitionProvider,\n multi: true,\n },\n provideCommandSetups([\n {\n key: AXM_TENANT_APPROVE_REQUEST_COMMAND,\n command: () =>\n import('./commands/approve-tenant-request.command').then((c) => c.AXPApproveTenantRequestCommand),\n },\n {\n key: AXM_TENANT_REJECT_REQUEST_COMMAND,\n command: () =>\n import('./commands/reject-tenant-request.command').then((c) => c.AXPRejectTenantRequestCommand),\n },\n ]),\n ],\n})\nexport class AXMTenantManagementModule {\n constructor() { }\n}\n","import { InjectionToken } from '@angular/core';\nimport type { AXMTenantExtraFieldDefinition } from '@acorex-platform/module-tenant-management-client/contracts';\n\n//#region ----- Tenant extra field providers -----\n\n/**\n * Multi provider: each demo product (e.g. Safetyminder) supplies field defs\n * that merge into Tenant.extra on the public request form / PC layout.\n */\nexport const AXP_TENANT_EXTRA_FIELD_DEFINITIONS = new InjectionToken<\n AXMTenantExtraFieldDefinition[]\n>('AXP_TENANT_EXTRA_FIELD_DEFINITIONS');\n\n//#endregion\n","import { AXPWidgetsList, type AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport type { AXMTenantExtraFieldDefinition } from '@acorex-platform/module-tenant-management-client/contracts';\n\n//#region ----- Build layout for Tenant.extra -----\n\n/** Flattens multi-provider arrays into one field list (later providers override by name). */\nexport function mergeTenantExtraFieldDefinitions(\n batches: Array<AXMTenantExtraFieldDefinition[] | null | undefined>,\n): AXMTenantExtraFieldDefinition[] {\n const byName = new Map<string, AXMTenantExtraFieldDefinition>();\n for (const batch of batches) {\n if (!Array.isArray(batch)) {\n continue;\n }\n for (const field of batch) {\n const name = String(field?.name ?? '').trim();\n if (!name) {\n continue;\n }\n byName.set(name, field);\n }\n }\n return [...byName.values()];\n}\n\n/**\n * Builds an `axp-layout-renderer` tree bound under context path `extra.*`.\n */\nexport function buildTenantExtraFieldsLayout(\n fields: AXMTenantExtraFieldDefinition[],\n): AXPWidgetNode | null {\n if (!fields.length) {\n return null;\n }\n\n return {\n type: AXPWidgetsList.Layouts.FlexLayout,\n mode: 'edit',\n options: {\n flexDirection: 'column',\n gap: '16px',\n },\n children: fields.map((field) => buildFieldNode(field)),\n };\n}\n\nfunction buildFieldNode(field: AXMTenantExtraFieldDefinition): AXPWidgetNode {\n const editorType = (field.editorType ?? AXPWidgetsList.Editors.TextBox).trim();\n const path = `extra.${field.name}`;\n const validations = field.required ? [{ rule: 'required' }] : [];\n\n const editorOptions: Record<string, unknown> = {\n placeholder: field.placeholder,\n validations,\n };\n if (editorType === AXPWidgetsList.Editors.SelectBox && Array.isArray(field.selectOptions)) {\n editorOptions['dataSource'] = field.selectOptions;\n editorOptions['valueField'] = 'id';\n editorOptions['textField'] = 'title';\n }\n\n return {\n type: AXPWidgetsList.Layouts.FormField,\n mode: 'edit',\n options: {\n label: field.title,\n showLabel: true,\n },\n children: [\n {\n type: editorType,\n mode: 'edit',\n path,\n name: field.name,\n options: editorOptions,\n },\n ],\n };\n}\n\n/**\n * Meta-data-editor `listMeta` shape (interface is a JSON widget tree string).\n */\nexport function toTenantExtraMetaDataList(\n fields: AXMTenantExtraFieldDefinition[],\n): Array<{ name: string; title: string; interface: string }> {\n return fields.map((field) => {\n const editorType = (field.editorType ?? AXPWidgetsList.Editors.TextBox).trim();\n const editorNode: AXPWidgetNode = {\n type: editorType,\n mode: 'edit',\n path: field.name,\n name: field.name,\n options: {\n placeholder: field.placeholder,\n ...(editorType === AXPWidgetsList.Editors.SelectBox && Array.isArray(field.selectOptions)\n ? {\n dataSource: field.selectOptions,\n valueField: 'id',\n textField: 'title',\n }\n : {}),\n },\n };\n return {\n name: field.name,\n title: field.title,\n interface: JSON.stringify({\n children: [{ children: [editorNode] }],\n }),\n };\n });\n}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-tenant-management-client.mjs","sources":["../../../../libs/modules/tenant-management/client/src/lib/features/tenant-status.provider.ts","../../../../libs/modules/tenant-management/client/src/lib/features/tenant-user-status.provider.ts","../../../../libs/modules/tenant-management/client/src/lib/middlewares/tenant-user-account-holder.middleware.ts","../../../../libs/modules/tenant-management/client/src/lib/middlewares/tenant-user-admin-scope.util.ts","../../../../libs/modules/tenant-management/client/src/lib/middlewares/tenant-user-admin-scope.middleware.ts","../../../../libs/modules/tenant-management/client/src/lib/middlewares/tenant-user-admin-scope.interceptor.ts","../../../../libs/modules/tenant-management/client/src/lib/middlewares/index.ts","../../../../libs/modules/tenant-management/client/src/lib/feature-definition.provider.ts","../../../../libs/modules/tenant-management/client/src/lib/permission-definition.provider.ts","../../../../libs/modules/tenant-management/client/src/lib/menu.provider.ts","../../../../libs/modules/tenant-management/client/src/lib/tenant-console-security-menu.middleware.ts","../../../../libs/modules/tenant-management/client/src/lib/setting.provider.ts","../../../../libs/modules/tenant-management/client/src/lib/search-command.provider.ts","../../../../libs/modules/tenant-management/client/src/lib/context-definition.provider.ts","../../../../libs/modules/tenant-management/client/src/lib/tenant-management.module.ts","../../../../libs/modules/tenant-management/client/src/lib/tenant-extra/tenant-extra.token.ts","../../../../libs/modules/tenant-management/client/src/lib/tenant-extra/tenant-extra-layout.util.ts","../../../../libs/modules/tenant-management/client/src/acorex-platform-module-tenant-management-client.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPStatusProvider, AXPStatusTransition, AXPSystemStatusType, systemStatusToDefinition } from '@acorex-platform/framework-shared/core';\n\n//#endregion\n\n//#region ---- Tenant Status Provider ----\n\n/**\n * Tenant status provider defining lifecycle states for tenants.\n * Used by the status plugin to manage tenant status transitions and metadata.\n */\nexport class AXMTenantStatusProvider extends AXPStatusProvider {\n readonly key = 'tenant-management.status.tenant';\n\n readonly defaultStatus = AXPSystemStatusType.Active;\n\n readonly statuses = [\n systemStatusToDefinition(AXPSystemStatusType.Active, {\n title: '@tenant-management:tenants.states.active',\n generateView: true,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Inactive, {\n title: '@tenant-management:tenants.states.inactive',\n generateView: true,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Suspended, {\n title: '@tenant-management:tenants.states.suspended',\n generateView: true,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Pending, {\n title: '@tenant-management:tenants.states.pending',\n generateView: true,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Rejected, {\n title: '@tenant-management:tenants.states.rejected',\n generateView: true,\n }),\n ];\n\n readonly transitions: AXPStatusTransition[] = [\n // Pending → Active / Rejected: use primary Approve / Reject request actions only\n // (status-chip UpdateStatus would skip invite / email / provisioning).\n {\n from: AXPSystemStatusType.Active,\n to: AXPSystemStatusType.Inactive,\n title: '@tenant-management:tenants.transitions.deactivate',\n },\n {\n from: AXPSystemStatusType.Active,\n to: AXPSystemStatusType.Suspended,\n title: '@tenant-management:tenants.transitions.suspend',\n },\n {\n from: AXPSystemStatusType.Suspended,\n to: AXPSystemStatusType.Active,\n title: '@tenant-management:tenants.transitions.resume',\n },\n {\n from: AXPSystemStatusType.Inactive,\n to: AXPSystemStatusType.Active,\n title: '@tenant-management:tenants.transitions.activate',\n },\n ];\n}\n\n//#endregion\n\n","//#region ----- Imports -----\n\nimport {\n AXPStatusProvider,\n AXPStatusTransition,\n AXPSystemStatusType,\n systemStatusToDefinition,\n} from '@acorex-platform/framework-shared/core';\n\n//#endregion\n\n//#region ----- TenantUser membership status -----\n\n/**\n * Membership lifecycle for TenantManagement.TenantUser (incl. invite outcomes).\n * Separate from tenant-management.status.tenant so Tenant entity tabs stay clean.\n */\nexport class AXMTenantUserStatusProvider extends AXPStatusProvider {\n readonly key = 'tenant-management.status.tenant-user';\n\n readonly defaultStatus = AXPSystemStatusType.Active;\n\n readonly statuses = [\n systemStatusToDefinition(AXPSystemStatusType.Pending, {\n title: '@tenant-management:tenants.entities.tenant-user.states.pending',\n generateView: false,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Active, {\n title: '@tenant-management:tenants.entities.tenant-user.states.active',\n generateView: false,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Rejected, {\n title: '@tenant-management:tenants.entities.tenant-user.states.rejected',\n generateView: false,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Cancelled, {\n title: '@tenant-management:tenants.entities.tenant-user.states.cancelled',\n generateView: false,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Expired, {\n title: '@tenant-management:tenants.entities.tenant-user.states.expired',\n generateView: false,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Inactive, {\n title: '@tenant-management:tenants.entities.tenant-user.states.inactive',\n generateView: false,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Suspended, {\n title: '@tenant-management:tenants.entities.tenant-user.states.suspended',\n generateView: false,\n }),\n ];\n\n readonly transitions: AXPStatusTransition[] = [];\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { inject } from '@angular/core';\nimport {\n AXPEntityStorageMiddleware,\n AXPMiddlewareAbortError,\n} from '@acorex-platform/framework-client/layout/entity';\nimport { RootConfig } from '@acorex-platform/module-tenant-management-client/contracts';\n\n//#endregion\n\n//#region ---- Tenant User Account Holder Middleware ----\n\n/**\n * Tenant User Account Holder Enforcement Middleware\n *\n * Enforces business rules for the isAccountHolder flag:\n * 1. CREATE: Prevents manual creation with isAccountHolder=true (must use TransferOwnership command)\n * 2. UPDATE:\n * - Prevents deactivating account holder\n * - Prevents manually toggling isAccountHolder flag\n * 3. DELETE: Prevents deleting account holder\n *\n * Runs on: TenantUser entity operations\n */\nexport const tenantUserAccountHolderMiddleware: AXPEntityStorageMiddleware = {\n target: {\n ops: ['create', 'update', 'delete'],\n order: 10, // Early enforcement before other business logic\n },\n\n execute: async (ctx, next) => {\n const entityFullName = `${RootConfig.module.name}.${RootConfig.entities.tenantUser.name}`;\n\n // Only apply to TenantUser entity\n if (ctx.entityName !== entityFullName) {\n await next();\n return;\n }\n\n const backend = ctx.entities;\n\n //#region ---- CREATE Operation ----\n\n if (ctx.op === 'create') {\n // Rule 1: Cannot manually create account holder\n // Must use TransferOwnership command instead\n if (ctx.data?.isAccountHolder === true) {\n throw new AXPMiddlewareAbortError(\n 'Cannot manually create tenant user as account holder. Use Transfer Ownership command.',\n {\n status: 400,\n code: 'TENANT_USER_ACCOUNT_HOLDER_MANUAL_CREATE',\n details: {\n entity: ctx.entityName,\n field: 'isAccountHolder',\n },\n }\n );\n }\n\n // Ensure isAccountHolder is explicitly set to false for new users\n if (ctx.data) {\n ctx.data.isAccountHolder = false;\n }\n }\n\n //#endregion\n\n //#region ---- UPDATE Operation ----\n\n if (ctx.op === 'update') {\n // Load existing record to check current state\n let existing: any;\n try {\n existing = await backend.getOne(ctx.entityName, ctx.id);\n } catch (error) {\n // If record doesn't exist, let it fail naturally in next()\n await next();\n return;\n }\n\n // Rule 2: Cannot manually toggle isAccountHolder flag\n if (\n ctx.data?.isAccountHolder !== undefined &&\n ctx.data.isAccountHolder !== existing.isAccountHolder\n ) {\n throw new AXPMiddlewareAbortError(\n 'Cannot manually change account holder status. Use Transfer Ownership command.',\n {\n status: 400,\n code: 'TENANT_USER_ACCOUNT_HOLDER_MANUAL_TOGGLE',\n details: {\n entity: ctx.entityName,\n id: ctx.id,\n currentValue: existing.isAccountHolder,\n attemptedValue: ctx.data.isAccountHolder,\n },\n }\n );\n }\n\n // Rule 3: Cannot deactivate account holder\n if (existing.isAccountHolder === true) {\n // Check if trying to deactivate (status change to inactive/disabled)\n if (ctx.data?.statusId && ctx.data.statusId !== 'active') {\n throw new AXPMiddlewareAbortError(\n 'Cannot deactivate account holder. Transfer ownership to another user first.',\n {\n status: 400,\n code: 'TENANT_USER_ACCOUNT_HOLDER_DEACTIVATE',\n details: {\n entity: ctx.entityName,\n id: ctx.id,\n tenantId: existing.tenantId,\n userId: existing.userId,\n },\n }\n );\n }\n\n // Prevent end date before current date for account holder\n if (ctx.data?.endDate) {\n const endDate = new Date(ctx.data.endDate);\n const now = new Date();\n if (endDate < now) {\n throw new AXPMiddlewareAbortError(\n 'Cannot set past end date for account holder. Transfer ownership first.',\n {\n status: 400,\n code: 'TENANT_USER_ACCOUNT_HOLDER_END_DATE',\n details: {\n entity: ctx.entityName,\n id: ctx.id,\n endDate: ctx.data.endDate,\n },\n }\n );\n }\n }\n }\n }\n\n //#endregion\n\n //#region ---- DELETE Operation ----\n\n if (ctx.op === 'delete') {\n // Load existing record to check if it's an account holder\n let existing: any;\n try {\n existing = await backend.getOne(ctx.entityName, ctx.id);\n } catch (error) {\n // If record doesn't exist, let it fail naturally in next()\n await next();\n return;\n }\n\n // Rule 4: Cannot delete account holder\n if (existing?.isAccountHolder === true) {\n throw new AXPMiddlewareAbortError(\n 'Cannot delete account holder. Transfer ownership to another user first.',\n {\n status: 400,\n code: 'TENANT_USER_ACCOUNT_HOLDER_DELETE',\n details: {\n entity: ctx.entityName,\n id: ctx.id,\n tenantId: existing.tenantId,\n userId: existing.userId,\n },\n }\n );\n }\n }\n\n //#endregion\n\n // Execute the operation if all validations passed\n await next();\n },\n};\n\n//#endregion\n\n","//#region ----- Imports -----\n\nimport {\n AXP_TENANT_USER_ADMIN_SCOPE_PARAM,\n RootConfig,\n resolveTenantUserAdminScopeFromUrl,\n type AXPTenantUserAdminScope,\n} from '@acorex-platform/module-tenant-management-client/contracts';\n\n//#endregion\n\n//#region ----- Tenant Users admin scope (client) -----\n\nexport const TENANT_USER_ENTITY_NAME = `${RootConfig.module.name}.${RootConfig.entities.tenantUser.name}`;\nexport const TENANT_USER_APP_ACCESS_ENTITY_NAME = `${RootConfig.module.name}.${RootConfig.entities.tenantUserAppAccess.name}`;\n\nexport { resolveTenantUserAdminScopeFromUrl };\n\nexport function isTenantUserAdminScopeEntity(entityName: string | null | undefined): boolean {\n return (\n entityName === TENANT_USER_ENTITY_NAME || entityName === TENANT_USER_APP_ACCESS_ENTITY_NAME\n );\n}\n\nexport function withTenantUserAdminScopeParam(\n params: Record<string, string> | undefined,\n scope: AXPTenantUserAdminScope,\n): Record<string, string> {\n return {\n ...(params ?? {}),\n [AXP_TENANT_USER_ADMIN_SCOPE_PARAM]: scope,\n };\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXPEntityStorageMiddleware } from '@acorex-platform/framework-client/layout/entity';\nimport { inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport {\n isTenantUserAdminScopeEntity,\n resolveTenantUserAdminScopeFromUrl,\n withTenantUserAdminScopeParam,\n} from './tenant-user-admin-scope.util';\n\n//#endregion\n\n//#region ----- Tenant Users admin scope (client entity middleware) -----\n\n/**\n * Injects explicit `tenantUserAdminScope=current-tenant` on TenantUser /\n * TenantUserAppAccess queries when the open surface carries `view=tenant-users`\n * — not for generic / PC / shared entity routes without that view.\n */\nexport const tenantUserAdminScopeMiddleware: AXPEntityStorageMiddleware = {\n target: {\n ops: ['query'],\n order: 8,\n },\n\n execute: async (ctx, next) => {\n if (!isTenantUserAdminScopeEntity(ctx.entityName)) {\n await next();\n return;\n }\n\n const router = inject(Router);\n const scope = resolveTenantUserAdminScopeFromUrl(router.url);\n if (scope === 'current-tenant' && ctx.request) {\n ctx.request = {\n ...ctx.request,\n params: withTenantUserAdminScopeParam(ctx.request.params, scope),\n };\n }\n await next();\n },\n};\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXP_TENANT_USER_ADMIN_SCOPE_HEADER } from '@acorex-platform/module-tenant-management-client/contracts';\nimport {\n HttpEvent,\n HttpHandler,\n HttpInterceptor,\n HttpRequest,\n} from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport {\n isTenantUserAdminScopeEntity,\n resolveTenantUserAdminScopeFromUrl,\n} from './tenant-user-admin-scope.util';\n\n//#endregion\n\n//#region ----- Tenant Users admin scope interceptor -----\n\n/**\n * Attaches admin-scope header for TenantUser / TenantUserAppAccess runtime\n * calls so getOne / update / delete honor the same Tenant Users operation\n * as the open list/detail surface.\n */\n@Injectable()\nexport class TenantUserAdminScopeInterceptor implements HttpInterceptor {\n private readonly router = inject(Router);\n\n intercept(\n request: HttpRequest<unknown>,\n next: HttpHandler,\n ): Observable<HttpEvent<unknown>> {\n if (!this.targetsTenantUserEntities(request)) {\n return next.handle(request);\n }\n\n const scope = resolveTenantUserAdminScopeFromUrl(this.router.url);\n if (scope !== 'current-tenant') {\n return next.handle(request);\n }\n\n return next.handle(\n request.clone({\n setHeaders: {\n [AXP_TENANT_USER_ADMIN_SCOPE_HEADER]: scope,\n },\n }),\n );\n }\n\n private targetsTenantUserEntities(request: HttpRequest<unknown>): boolean {\n const body = request.body;\n if (body && typeof body === 'object' && !Array.isArray(body)) {\n const record = body as Record<string, unknown>;\n const input = record['input'];\n const entityFromInput =\n input && typeof input === 'object' && !Array.isArray(input)\n ? (input as Record<string, unknown>)['entity']\n : undefined;\n const entity = record['entity'] ?? entityFromInput;\n if (typeof entity === 'string' && isTenantUserAdminScopeEntity(entity)) {\n return true;\n }\n }\n\n const entityQuery = request.params?.get?.('entity');\n if (typeof entityQuery === 'string' && isTenantUserAdminScopeEntity(entityQuery)) {\n return true;\n }\n\n return (\n request.url.includes('TenantUserAppAccess') || request.url.includes('/TenantUser')\n );\n }\n}\n\n//#endregion\n","//#region ---- Middleware Exports ----\n\nexport { tenantUserAccountHolderMiddleware } from './tenant-user-account-holder.middleware';\nexport { tenantUserAdminScopeMiddleware } from './tenant-user-admin-scope.middleware';\nexport { TenantUserAdminScopeInterceptor } from './tenant-user-admin-scope.interceptor';\n\n//#endregion\n\n","//#region ---- Imports ----\n\nimport {\n AXPFeatureDefinitionProvider,\n AXPFeatureDefinitionProviderContext,\n} from '@acorex-platform/framework-client/core';\nimport {\n AXMTenantManagementFeatureKeys,\n RootConfig,\n} from '@acorex-platform/module-tenant-management-client/contracts';\n\n//#endregion\n\n//#region ---- Feature Definition Provider ----\n\n/**\n * Tenant Management Feature Definition Provider.\n * Provides feature definitions for the Tenant Management module.\n */\nexport class AXMTenantManagementFeatureDefinitionProvider implements AXPFeatureDefinitionProvider {\n async provide(context: AXPFeatureDefinitionProviderContext): Promise<void> {\n const i18n = RootConfig.config.i18n;\n\n context.addFeature(AXMTenantManagementFeatureKeys.ManagePlatformTenants, {\n title: `@${i18n}:features.manage-platform-tenants.title`,\n description: `@${i18n}:features.manage-platform-tenants.description`,\n defaultValue: false,\n type: 'boolean',\n });\n\n context.addFeature(AXMTenantManagementFeatureKeys.TenantConsole, {\n title: `@${i18n}:features.tenant-console.title`,\n description: `@${i18n}:features.tenant-console.description`,\n defaultValue: false,\n type: 'boolean',\n });\n\n context.addFeature(AXMTenantManagementFeatureKeys.InviteMultiApplication, {\n title: `@${i18n}:features.invite-multi-application.title`,\n description: `@${i18n}:features.invite-multi-application.description`,\n defaultValue: false,\n type: 'boolean',\n });\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n AXPPermissionDefinitionProvider,\n AXPPermissionDefinitionProviderContext,\n} from '@acorex-platform/framework-client/auth';\nimport {\n AXPCommonPermissionGroupKeys\n} from '@acorex-platform/module-common-client/contracts';\nimport {\n AXPApplicationsPlatformPermissionKeys\n} from '@acorex-platform/module-tenant-management-client/contracts';\n\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ---- Permission Definition Provider ----\n\n/**\n * Registers MaintainTenants under Applications & Platform.\n */\n@Injectable()\nexport class AXMTenantManagementPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXPApplicationsPlatformPermissionKeys;\n const groups = AXPCommonPermissionGroupKeys;\n const P = '@common:applications-platform.permissions';\n const G = '@common:permission-groups';\n\n context.addGroup(groups.ApplicationsPlatform.Root, `${G}.applications-platform.title`, `${G}.applications-platform.description`, { order: 110 });\n\n context\n .addGroup(\n groups.ApplicationsPlatform.TenancyShell,\n `${G}.applications-platform-tenancy-shell.title`,\n `${G}.applications-platform-tenancy-shell.description`,\n { parent: groups.ApplicationsPlatform.Root, order: 20 },\n )\n .addPermission(keys.MaintainTenants, `${P}.maintain-tenants.title`, `${P}.maintain-tenants.description`, {\n modules: ['TenantManagement'],\n requiredFeatures: ['TenantManagement'],\n })\n .endPermission()\n .endGroup();\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPCommonMenuKeys } from '@acorex-platform/module-common-client/contracts';\nimport {\n AXPApplicationsPlatformPermissionKeys,\n AXP_TENANT_USER_ADMIN_SCOPE_PARAM,\n AXP_TENANT_USERS_VIEW,\n AXMTenantManagementFeatureKeys,\n AXMTenantManagementMenuKeys,\n RootConfig,\n} from '@acorex-platform/module-tenant-management-client/contracts';\nimport { inject } from '@angular/core';\n\n//#endregion\n\n//#region ---- Constants ----\n\n/** Stable capability keys (avoid importing SecurityManagement client — cycle risk). */\nconst MAINTAIN_USERS_AND_ROLES = 'Administration:Permission:MaintainUsersAndRoles';\nconst MANAGE_SESSIONS = 'Administration:Permission:ManageSessions';\nconst SECURITY_MODULE = 'SecurityManagement';\nconst DEVICE_SESSIONS_ENTITY = 'DeviceSessions';\n/** Explicit tenant-sessions list view (operation-owned scope; not inferred from TM app id). */\nconst TENANT_SESSIONS_VIEW = 'tenant-sessions';\n\n/**\n * Durable Tenant Users operation signal on the menu path.\n * Prefer `tenantUserAdminScope=` over `view=` alone — entity list rewrites\n * unknown/hidden views to `all` and would drop a view-only signal.\n */\nconst TENANT_USERS_OPERATION_QUERY = `${AXP_TENANT_USER_ADMIN_SCOPE_PARAM}=current-tenant&view=${AXP_TENANT_USERS_VIEW}`;\n\n//#endregion\n\n//#region ---- Menu Provider ----\n\nexport class AXMTenantManagementModuleMenuProvider implements AXPMenuProvider {\n private readonly entityService = inject(AXPEntityService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const module = RootConfig.module;\n\n // Platform → Tenants: Platform Console only (ADR-TEN-001 — must not appear in TM).\n context.find(AXPCommonMenuKeys.Platform).addItems([\n {\n name: AXMTenantManagementMenuKeys.Tenants,\n text: `@${RootConfig.config.i18n}:tenants.entities.tenant.plural`,\n path: this.entityService.createPath(module.name, RootConfig.entities.tenant.name),\n icon: RootConfig.entities.tenant.icon,\n priority: 4,\n policy: {\n features: [AXMTenantManagementFeatureKeys.ManagePlatformTenants],\n permissions: [AXPApplicationsPlatformPermissionKeys.MaintainTenants],\n },\n },\n { name: `${AXMTenantManagementMenuKeys.Root}:divider`, text: '', type: 'break', priority: 5 },\n ]);\n\n // TM Administration surfaces (ADR-TEN-001 D-04 / D-07) — TM application only.\n // Gated by TenantConsole (TM Standard edition); not by TenantManagement module alone\n // (PC also enables the module for Platform → Tenants).\n // Application Users remain under Administration → Security → Users (SecurityManagement provider).\n context.find(AXPCommonMenuKeys.Administration).addItems([\n {\n name: AXMTenantManagementMenuKeys.TenantUsers,\n text: RootConfig.entities.tenantUser.titlePlural,\n // Explicit Tenant Users operation (current-tenant scope; not Application.code).\n path: `${this.entityService.createPath(module.name, RootConfig.entities.tenantUser.name)}?${TENANT_USERS_OPERATION_QUERY}`,\n icon: RootConfig.entities.tenantUser.icon,\n priority: 20,\n policy: {\n features: [AXMTenantManagementFeatureKeys.TenantConsole],\n permissions: [MAINTAIN_USERS_AND_ROLES],\n },\n },\n {\n name: AXMTenantManagementMenuKeys.TenantApplicationAccess,\n text: RootConfig.entities.tenantUserAppAccess.titlePlural,\n path: `${this.entityService.createPath(module.name, RootConfig.entities.tenantUserAppAccess.name)}?${TENANT_USERS_OPERATION_QUERY}`,\n icon: RootConfig.entities.tenantUserAppAccess.icon,\n priority: 21,\n policy: {\n features: [AXMTenantManagementFeatureKeys.TenantConsole],\n permissions: [MAINTAIN_USERS_AND_ROLES],\n },\n },\n {\n name: AXMTenantManagementMenuKeys.TenantSessions,\n text: `@${RootConfig.config.i18n}:module.menus.tenant-sessions.title`,\n path: `${this.entityService.createPath(SECURITY_MODULE, DEVICE_SESSIONS_ENTITY)}?view=${TENANT_SESSIONS_VIEW}`,\n icon: 'fa-light fa-laptop-mobile',\n priority: 22,\n policy: {\n features: [AXMTenantManagementFeatureKeys.TenantConsole, SECURITY_MODULE],\n permissions: [MANAGE_SESSIONS],\n },\n },\n ]);\n }\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport type { AXPMenuMiddleware, AXPMenuMiddlewareContext } from '@acorex-platform/framework-client/common';\nimport { AXMTenantManagementFeatureKeys } from '@acorex-platform/module-tenant-management-client/contracts';\nimport { Injectable, inject } from '@angular/core';\n\n//#endregion\n\n//#region ----- Constants -----\n\n/**\n * Security Management root (`AXPSecurityManagementMenuKeys.Root`).\n * String only — importing that client would cycle.\n */\nconst APPLICATION_SECURITY_MENU = 'SecurityManagement:Menu';\n\n//#endregion\n\n//#region ----- Middleware -----\n\n/**\n * Hides application-scoped Security menus when Tenant Console is enabled.\n * Runs after every menu provider so the Security tree exists before removal.\n */\n@Injectable()\nexport class AXMTenantConsoleSecurityMenuMiddleware implements AXPMenuMiddleware {\n //#region ----- Services & Dependencies -----\n\n readonly name = 'tenant-console-security-menu';\n readonly priority = 100;\n\n private readonly sessionService = inject(AXPSessionService);\n\n //#endregion\n\n //#region ----- Menu Processing -----\n\n async process(context: AXPMenuMiddlewareContext): Promise<void> {\n if (!this.sessionService.isFeatureEnabled(AXMTenantManagementFeatureKeys.TenantConsole)) {\n return;\n }\n\n context.find(APPLICATION_SECURITY_MENU).remove();\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXPSettingDefinitionProvider, AXPSettingDefinitionProviderContext } from '@acorex-platform/framework-client/common';\nimport { RootConfig } from '@acorex-platform/module-tenant-management-client/contracts';\n\nconst I18N = `@${RootConfig.config.i18n}:tenants.settings.tenant`;\n\nexport class AXMTenantSettingProvider implements AXPSettingDefinitionProvider {\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n context\n .addGroup(\n 'tenant',\n `${I18N}.group.nav-title`,\n `${I18N}.group.description`,\n RootConfig.module.icon,\n `${I18N}.group.title`,\n 25,\n )\n .addSection('general', `${I18N}.sections.general.title`, `${I18N}.sections.general.description`)\n // TODO: Add tenant-specific settings here when needed\n .endSection()\n .endGroup();\n }\n}\n","//#region ---- Imports ----\n\nimport { AXPSearchCommandProvider, createEntitySearchCommand } from '@acorex-platform/framework-client/common';\nimport { RootConfig } from '@acorex-platform/module-tenant-management-client/contracts';\n\n//#endregion\n\n//#region ---- Search Command Provider ----\n\nexport class AXMTenantSearchCommandProvider extends AXPSearchCommandProvider {\n commands = [\n createEntitySearchCommand({\n id: 'create-tenant',\n entityKey: `${RootConfig.module.name}.${RootConfig.entities.tenant.name}`,\n entityInfo: { name: RootConfig.entities.tenant.name, module: RootConfig.module.name, title: RootConfig.entities.tenant.title },\n titleKey: `@${RootConfig.config.i18n}:tenants.actions.create-tenant.title`,\n descriptionKey: `@${RootConfig.config.i18n}:tenants.actions.create-tenant.description`,\n icon: RootConfig.entities.tenant.icon,\n }),\n ];\n}\n\n//#endregion\n\n","import { Injectable } from '@angular/core';\nimport type { AXPContextDefinition, AXPContextDefinitionProvider } from '@acorex-platform/framework-client/core';\nimport { AXM_TENANT_CONTEXT_DEFINITIONS } from '@acorex-platform/module-tenant-management-client/contracts';\n\n//#region ---- Tenant context definitions ----\n\n@Injectable()\nexport class AXMTenantManagementContextDefinitionProvider implements AXPContextDefinitionProvider {\n async items(): Promise<AXPContextDefinition[]> {\n return AXM_TENANT_CONTEXT_DEFINITIONS;\n }\n}\n\n//#endregion\n","import {\n AXP_ENTITY_STORAGE_MIDDLEWARE,\n configureEntityListColumnsSettingsMigrateDrop,\n configureEntityListColumnsSettingsVersion,\n} from '@acorex-platform/framework-client/layout/entity';\nimport { AXP_CONTEXT_DEFINITION_PROVIDER, AXP_FEATURE_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/core';\nimport { AXP_STATUS_PROVIDERS, AXP_MENU_MIDDLEWARE, AXP_MENU_PROVIDER, AXP_SETTING_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER } from '@acorex-platform/framework-client/common';\nimport { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';\nimport { provideCommandSetups } from '@acorex-platform/framework-client/runtime';\nimport {\n AXM_TENANT_APPROVE_REQUEST_COMMAND,\n AXM_TENANT_REJECT_REQUEST_COMMAND,\n} from '@acorex-platform/module-tenant-management-client/contracts';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\nimport { AXMTenantStatusProvider } from './features/tenant-status.provider';\nimport { AXMTenantUserStatusProvider } from './features/tenant-user-status.provider';\nimport {\n TenantUserAdminScopeInterceptor,\n tenantUserAccountHolderMiddleware,\n tenantUserAdminScopeMiddleware,\n} from './middlewares';\nimport { AXMTenantManagementFeatureDefinitionProvider } from './feature-definition.provider';\nimport { AXMTenantManagementPermissionDefinitionProvider } from './permission-definition.provider';\nimport { AXMTenantManagementModuleMenuProvider } from './menu.provider';\nimport { AXMTenantConsoleSecurityMenuMiddleware } from './tenant-console-security-menu.middleware';\n\nimport { AXMTenantSettingProvider } from './setting.provider';\nimport { AXMTenantSearchCommandProvider } from './search-command.provider';\nimport { AXMTenantManagementContextDefinitionProvider } from './context-definition.provider';\n\n//#region ----- Boot configure (once) -----\n\n/**\n * Stale AppAccess list prefs pinned `tenantUser.userId` / bare `userDisplayName`\n * text columns; list now uses `userId` lookup (display via userDisplayName expose).\n */\nconfigureEntityListColumnsSettingsMigrateDrop([\n 'tenantUser.userId',\n 'tenantUserId',\n 'userDisplayName',\n]);\nconfigureEntityListColumnsSettingsVersion(5);\n\n//#endregion\n\n// Entity Modules\n\n@NgModule({\n imports: [\n // Entity Modules\n ],\n exports: [],\n declarations: [],\n providers: [\n // Module-specific providers (not part of manifest system)\n {\n provide: AXP_STATUS_PROVIDERS,\n useClass: AXMTenantStatusProvider,\n multi: true,\n },\n {\n provide: AXP_STATUS_PROVIDERS,\n useClass: AXMTenantUserStatusProvider,\n multi: true,\n },\n {\n provide: AXP_ENTITY_STORAGE_MIDDLEWARE,\n useValue: tenantUserAccountHolderMiddleware,\n multi: true,\n },\n {\n provide: AXP_ENTITY_STORAGE_MIDDLEWARE,\n useValue: tenantUserAdminScopeMiddleware,\n multi: true,\n },\n {\n provide: HTTP_INTERCEPTORS,\n useClass: TenantUserAdminScopeInterceptor,\n multi: true,\n },\n // Provider references (now using tokens)\n {\n provide: AXP_FEATURE_DEFINITION_PROVIDER,\n useClass: AXMTenantManagementFeatureDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMTenantManagementPermissionDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMTenantManagementModuleMenuProvider,\n multi: true,\n },\n {\n provide: AXP_MENU_MIDDLEWARE,\n useClass: AXMTenantConsoleSecurityMenuMiddleware,\n multi: true,\n },\n \n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXMTenantSettingProvider,\n multi: true,\n },\n {\n provide: AXP_SEARCH_PROVIDER,\n useClass: AXMTenantSearchCommandProvider,\n multi: true,\n },\n {\n provide: AXP_CONTEXT_DEFINITION_PROVIDER,\n useClass: AXMTenantManagementContextDefinitionProvider,\n multi: true,\n },\n provideCommandSetups([\n {\n key: AXM_TENANT_APPROVE_REQUEST_COMMAND,\n command: () =>\n import('./commands/approve-tenant-request.command').then((c) => c.AXPApproveTenantRequestCommand),\n },\n {\n key: AXM_TENANT_REJECT_REQUEST_COMMAND,\n command: () =>\n import('./commands/reject-tenant-request.command').then((c) => c.AXPRejectTenantRequestCommand),\n },\n ]),\n ],\n})\nexport class AXMTenantManagementModule {\n constructor() { }\n}\n","import { InjectionToken } from '@angular/core';\nimport type { AXMTenantExtraFieldDefinition } from '@acorex-platform/module-tenant-management-client/contracts';\n\n//#region ----- Tenant extra field providers -----\n\n/**\n * Multi provider: each demo product (e.g. Safetyminder) supplies field defs\n * that merge into Tenant.extra on the public request form / PC layout.\n */\nexport const AXP_TENANT_EXTRA_FIELD_DEFINITIONS = new InjectionToken<\n AXMTenantExtraFieldDefinition[]\n>('AXP_TENANT_EXTRA_FIELD_DEFINITIONS');\n\n//#endregion\n","import { AXPWidgetsList, type AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport type { AXMTenantExtraFieldDefinition } from '@acorex-platform/module-tenant-management-client/contracts';\n\n//#region ----- Build layout for Tenant.extra -----\n\n/** Flattens multi-provider arrays into one field list (later providers override by name). */\nexport function mergeTenantExtraFieldDefinitions(\n batches: Array<AXMTenantExtraFieldDefinition[] | null | undefined>,\n): AXMTenantExtraFieldDefinition[] {\n const byName = new Map<string, AXMTenantExtraFieldDefinition>();\n for (const batch of batches) {\n if (!Array.isArray(batch)) {\n continue;\n }\n for (const field of batch) {\n const name = String(field?.name ?? '').trim();\n if (!name) {\n continue;\n }\n byName.set(name, field);\n }\n }\n return [...byName.values()];\n}\n\n/**\n * Builds an `axp-layout-renderer` tree bound under context path `extra.*`.\n */\nexport function buildTenantExtraFieldsLayout(\n fields: AXMTenantExtraFieldDefinition[],\n): AXPWidgetNode | null {\n if (!fields.length) {\n return null;\n }\n\n return {\n type: AXPWidgetsList.Layouts.FlexLayout,\n mode: 'edit',\n options: {\n flexDirection: 'column',\n gap: '16px',\n },\n children: fields.map((field) => buildFieldNode(field)),\n };\n}\n\nfunction buildFieldNode(field: AXMTenantExtraFieldDefinition): AXPWidgetNode {\n const editorType = (field.editorType ?? AXPWidgetsList.Editors.TextBox).trim();\n const path = `extra.${field.name}`;\n const validations = field.required ? [{ rule: 'required' }] : [];\n\n const editorOptions: Record<string, unknown> = {\n placeholder: field.placeholder,\n validations,\n };\n if (editorType === AXPWidgetsList.Editors.SelectBox && Array.isArray(field.selectOptions)) {\n editorOptions['dataSource'] = field.selectOptions;\n editorOptions['valueField'] = 'id';\n editorOptions['textField'] = 'title';\n }\n\n return {\n type: AXPWidgetsList.Layouts.FormField,\n mode: 'edit',\n options: {\n label: field.title,\n showLabel: true,\n },\n children: [\n {\n type: editorType,\n mode: 'edit',\n path,\n name: field.name,\n options: editorOptions,\n },\n ],\n };\n}\n\n/**\n * Meta-data-editor `listMeta` shape (interface is a JSON widget tree string).\n */\nexport function toTenantExtraMetaDataList(\n fields: AXMTenantExtraFieldDefinition[],\n): Array<{ name: string; title: string; interface: string }> {\n return fields.map((field) => {\n const editorType = (field.editorType ?? AXPWidgetsList.Editors.TextBox).trim();\n const editorNode: AXPWidgetNode = {\n type: editorType,\n mode: 'edit',\n path: field.name,\n name: field.name,\n options: {\n placeholder: field.placeholder,\n ...(editorType === AXPWidgetsList.Editors.SelectBox && Array.isArray(field.selectOptions)\n ? {\n dataSource: field.selectOptions,\n valueField: 'id',\n textField: 'title',\n }\n : {}),\n },\n };\n return {\n name: field.name,\n title: field.title,\n interface: JSON.stringify({\n children: [{ children: [editorNode] }],\n }),\n };\n });\n}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|