@acorex-platform/module-tenant-management-client 0.0.59 → 0.0.61
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-module-tenant-management-client-approve-tenant-request.command-D18-n5Lc.mjs +91 -0
- package/fesm2022/acorex-platform-module-tenant-management-client-approve-tenant-request.command-D18-n5Lc.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-tenant-management-client-contracts-entities-resource-share.mjs +6 -0
- package/fesm2022/acorex-platform-module-tenant-management-client-contracts-entities-resource-share.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-tenant-management-client-contracts-entities-tenant-user-app-access.mjs +110 -5
- package/fesm2022/acorex-platform-module-tenant-management-client-contracts-entities-tenant-user-app-access.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-tenant-management-client-contracts-entities-tenant-user.mjs +186 -9
- package/fesm2022/acorex-platform-module-tenant-management-client-contracts-entities-tenant-user.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-tenant-management-client-contracts-entities-tenant.mjs +158 -24
- package/fesm2022/acorex-platform-module-tenant-management-client-contracts-entities-tenant.mjs.map +1 -1
- package/fesm2022/{acorex-platform-module-tenant-management-client-contracts-entity-catalog-acorex-platform-module-tenant-management-client-contracts-entity-catalog-CDfoKWOn.mjs → acorex-platform-module-tenant-management-client-contracts-entity-catalog-acorex-platform-module-tenant-management-client-contracts-entity-catalog-DqBYnske.mjs} +11 -5
- package/fesm2022/acorex-platform-module-tenant-management-client-contracts-entity-catalog-acorex-platform-module-tenant-management-client-contracts-entity-catalog-DqBYnske.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-tenant-management-client-contracts-entity-catalog-resource-share.entity-BPbgUTEH.mjs → acorex-platform-module-tenant-management-client-contracts-entity-catalog-resource-share.entity-Bf7keWah.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-tenant-management-client-contracts-entity-catalog-resource-share.entity-BPbgUTEH.mjs.map → acorex-platform-module-tenant-management-client-contracts-entity-catalog-resource-share.entity-Bf7keWah.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-tenant-management-client-contracts-entity-catalog-tenant-user-admin-scope-C6Ekm0Qg.mjs +43 -0
- package/fesm2022/acorex-platform-module-tenant-management-client-contracts-entity-catalog-tenant-user-admin-scope-C6Ekm0Qg.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-tenant-management-client-contracts-entity-catalog-tenant-user-app-access.entity-nA_yhhRD.mjs → acorex-platform-module-tenant-management-client-contracts-entity-catalog-tenant-user-app-access.entity-BhkM_HyR.mjs} +66 -7
- package/fesm2022/acorex-platform-module-tenant-management-client-contracts-entity-catalog-tenant-user-app-access.entity-BhkM_HyR.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-tenant-management-client-contracts-entity-catalog-tenant-user.entity-CmUdRisR.mjs → acorex-platform-module-tenant-management-client-contracts-entity-catalog-tenant-user.entity-Dk8LTu5B.mjs} +142 -11
- package/fesm2022/acorex-platform-module-tenant-management-client-contracts-entity-catalog-tenant-user.entity-Dk8LTu5B.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-tenant-management-client-contracts-entity-catalog-tenant.entity-ZpnmQnXF.mjs → acorex-platform-module-tenant-management-client-contracts-entity-catalog-tenant.entity-cOVeFcEP.mjs} +154 -26
- package/fesm2022/acorex-platform-module-tenant-management-client-contracts-entity-catalog-tenant.entity-cOVeFcEP.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-tenant-management-client-contracts-entity-catalog.mjs +1 -1
- package/fesm2022/acorex-platform-module-tenant-management-client-contracts.mjs +96 -3
- package/fesm2022/acorex-platform-module-tenant-management-client-contracts.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-tenant-management-client-reject-tenant-request.command-CKSHPw1a.mjs +80 -0
- package/fesm2022/acorex-platform-module-tenant-management-client-reject-tenant-request.command-CKSHPw1a.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-tenant-management-client.mjs +350 -14
- package/fesm2022/acorex-platform-module-tenant-management-client.mjs.map +1 -1
- package/i18n/en-AU/tenant-management.json +91 -10
- package/i18n/en-US/tenant-management.json +91 -10
- package/i18n/fa-IR/tenant-management.json +92 -11
- package/package.json +1 -1
- package/types/acorex-platform-module-tenant-management-client-contracts.d.ts +178 -4
- package/types/acorex-platform-module-tenant-management-client.d.ts +25 -1
- package/fesm2022/acorex-platform-module-tenant-management-client-contracts-entity-catalog-acorex-platform-module-tenant-management-client-contracts-entity-catalog-CDfoKWOn.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-tenant-management-client-contracts-entity-catalog-tenant-user-app-access.entity-nA_yhhRD.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-tenant-management-client-contracts-entity-catalog-tenant-user.entity-CmUdRisR.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-tenant-management-client-contracts-entity-catalog-tenant.entity-ZpnmQnXF.mjs.map +0 -1
|
@@ -10,12 +10,32 @@ const AXM_TENANT_CONTEXT_DEFINITIONS = [
|
|
|
10
10
|
];
|
|
11
11
|
//#endregion
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Tenant Management feature keys.
|
|
15
|
+
* ManagePlatformTenants is Platform Console edition only (platform tenant directory).
|
|
16
|
+
* TenantConsole gates TM Administration menus (Tenant Users / App Access / Sessions) —
|
|
17
|
+
* TM Standard edition only; must not appear on Platform Console (ADR-TEN-001).
|
|
18
|
+
* InviteMultiApplication enables TM tenant-level multi-app invite (ADR-TEN-001 D-05).
|
|
19
|
+
* TM edition may include the TenantManagement module without ManagePlatformTenants.
|
|
20
|
+
*/
|
|
21
|
+
const AXMTenantManagementFeatureKeys = {
|
|
22
|
+
ManagePlatformTenants: 'TenantManagement:Feature:ManagePlatformTenants',
|
|
23
|
+
TenantConsole: 'TenantManagement:Feature:TenantConsole',
|
|
24
|
+
InviteMultiApplication: 'TenantManagement:Feature:InviteMultiApplication',
|
|
25
|
+
};
|
|
15
26
|
|
|
16
27
|
const AXMTenantManagementMenuKeys = {
|
|
17
28
|
Root: 'TenantManagement:Menu',
|
|
18
29
|
Tenants: 'TenantManagement:Menu:Tenants',
|
|
30
|
+
/** Current-tenant membership directory (ADR-TEN-001 D-04). */
|
|
31
|
+
TenantUsers: 'TenantManagement:Menu:TenantUsers',
|
|
32
|
+
/** Tenant-wide application access rows for current tenant. */
|
|
33
|
+
TenantApplicationAccess: 'TenantManagement:Menu:TenantApplicationAccess',
|
|
34
|
+
/**
|
|
35
|
+
* Tenant-wide device session administration (same entity as Security → Sessions).
|
|
36
|
+
* Profile self-session management remains separate (ADR-TEN-001 D-07).
|
|
37
|
+
*/
|
|
38
|
+
TenantSessions: 'TenantManagement:Menu:TenantSessions',
|
|
19
39
|
};
|
|
20
40
|
|
|
21
41
|
/**
|
|
@@ -88,7 +108,13 @@ const RootConfig = {
|
|
|
88
108
|
},
|
|
89
109
|
queries: {
|
|
90
110
|
dashboard: {
|
|
111
|
+
/** Tenant-wide TenantUser count (Tenant Console Overview). */
|
|
91
112
|
activeUsersKpi: `${config.module}:Dashboard:ActiveUsersKpi`,
|
|
113
|
+
/**
|
|
114
|
+
* Current-application TenantUserAppAccess count (TM Application scope).
|
|
115
|
+
* On Tenant Console Overview / TM Application Overview widgets (D-17 / D-18).
|
|
116
|
+
*/
|
|
117
|
+
tmApplicationUsersKpi: `${config.module}:Dashboard:TmApplicationUsersKpi`,
|
|
92
118
|
usersByRoleDonut: `${config.module}:Dashboard:UsersByRoleDonut`,
|
|
93
119
|
},
|
|
94
120
|
reports: {
|
|
@@ -128,6 +154,73 @@ const TenantManagementManifest = {
|
|
|
128
154
|
};
|
|
129
155
|
//#endregion
|
|
130
156
|
|
|
157
|
+
//#region ----- Tenant Users admin scope (operation-owned) -----
|
|
158
|
+
/** Query `params` key carrying the operation scope. */
|
|
159
|
+
const AXP_TENANT_USER_ADMIN_SCOPE_PARAM = 'tenantUserAdminScope';
|
|
160
|
+
/** HTTP header (lowercase) for getOne/update/delete (and related) ops. */
|
|
161
|
+
const AXP_TENANT_USER_ADMIN_SCOPE_HEADER = 'x-axp-tenant-user-admin-scope';
|
|
162
|
+
/** Entity list view name for TM → Tenant Users / Tenant Application Access. */
|
|
163
|
+
const AXP_TENANT_USERS_VIEW = 'tenant-users';
|
|
164
|
+
function normalizeTenantUserAdminScope(value) {
|
|
165
|
+
return value === 'current-tenant' ? 'current-tenant' : 'default';
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Whether the URL carries the explicit Tenant Users operation context.
|
|
169
|
+
*
|
|
170
|
+
* Prefer durable `tenantUserAdminScope=current-tenant` (entity list rewrites
|
|
171
|
+
* unknown `view=` values to `all`). Also accept `view=tenant-users` when present.
|
|
172
|
+
* Never infer from entity path `/e/TenantUser*` alone.
|
|
173
|
+
*/
|
|
174
|
+
function isTenantUsersOperationUrl(url) {
|
|
175
|
+
if (!url) {
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
try {
|
|
179
|
+
const parsed = new URL(url, 'http://local.invalid');
|
|
180
|
+
if (parsed.searchParams.get(AXP_TENANT_USER_ADMIN_SCOPE_PARAM)?.trim() === 'current-tenant') {
|
|
181
|
+
return true;
|
|
182
|
+
}
|
|
183
|
+
if (parsed.searchParams.get('view')?.trim() === AXP_TENANT_USERS_VIEW) {
|
|
184
|
+
return true;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
// Fall through to substring checks.
|
|
189
|
+
}
|
|
190
|
+
return (url.includes(`${AXP_TENANT_USER_ADMIN_SCOPE_PARAM}=current-tenant`) ||
|
|
191
|
+
url.includes(`view=${AXP_TENANT_USERS_VIEW}`));
|
|
192
|
+
}
|
|
193
|
+
function resolveTenantUserAdminScopeFromUrl(url) {
|
|
194
|
+
return isTenantUsersOperationUrl(url) ? 'current-tenant' : 'default';
|
|
195
|
+
}
|
|
196
|
+
//#endregion
|
|
197
|
+
|
|
198
|
+
//#region ----- Tenant creation request contracts -----
|
|
199
|
+
/** Server command keys for public tenant-creation requests and PC approve/reject. */
|
|
200
|
+
const AXMTenantManagementServerCommands = {
|
|
201
|
+
RequestTenantCreation: 'TenantManagement:Server:RequestTenantCreation',
|
|
202
|
+
ListPublicSubscriptionPlans: 'TenantManagement:Server:ListPublicSubscriptionPlans',
|
|
203
|
+
CheckTenantNameAvailable: 'TenantManagement:Server:CheckTenantNameAvailable',
|
|
204
|
+
ApproveTenantRequest: 'TenantManagement:Server:ApproveTenantRequest',
|
|
205
|
+
RejectTenantRequest: 'TenantManagement:Server:RejectTenantRequest',
|
|
206
|
+
};
|
|
207
|
+
/** Client/UI action keys on TenantManagement.Tenant (Platform Console). */
|
|
208
|
+
const AXM_TENANT_APPROVE_REQUEST_COMMAND = 'TenantManagement:Tenant:ApproveRequest';
|
|
209
|
+
const AXM_TENANT_REJECT_REQUEST_COMMAND = 'TenantManagement:Tenant:RejectRequest';
|
|
210
|
+
/** Stable codes for client i18n mapping. */
|
|
211
|
+
const AXM_TENANT_REQUEST_ERROR_CODES = {
|
|
212
|
+
InvalidInput: 'TENANT_REQUEST_INVALID_INPUT',
|
|
213
|
+
NameTaken: 'TENANT_REQUEST_NAME_TAKEN',
|
|
214
|
+
PlanNotFound: 'TENANT_REQUEST_PLAN_NOT_FOUND',
|
|
215
|
+
NotPending: 'TENANT_REQUEST_NOT_PENDING',
|
|
216
|
+
NotFound: 'TENANT_REQUEST_NOT_FOUND',
|
|
217
|
+
Unauthorized: 'TENANT_REQUEST_UNAUTHORIZED',
|
|
218
|
+
};
|
|
219
|
+
//#endregion
|
|
220
|
+
|
|
221
|
+
//#region ----- Tenant extra (product/demo) field defs -----
|
|
222
|
+
//#endregion
|
|
223
|
+
|
|
131
224
|
//#endregion
|
|
132
225
|
|
|
133
226
|
//#region ---- ResourceShare types ----
|
|
@@ -139,5 +232,5 @@ const TenantManagementManifest = {
|
|
|
139
232
|
* Generated bundle index. Do not edit.
|
|
140
233
|
*/
|
|
141
234
|
|
|
142
|
-
export { AXMTenantManagementFeatureKeys, AXMTenantManagementMenuKeys, AXMTenantManagementModuleConst, AXMTenantManagementPermissionsKeys, AXM_TENANT_CONTEXT_DEFINITIONS, AXPApplicationsPlatformPermissionKeys, RootConfig, TenantManagementManifest };
|
|
235
|
+
export { AXMTenantManagementFeatureKeys, AXMTenantManagementMenuKeys, AXMTenantManagementModuleConst, AXMTenantManagementPermissionsKeys, AXMTenantManagementServerCommands, AXM_TENANT_APPROVE_REQUEST_COMMAND, AXM_TENANT_CONTEXT_DEFINITIONS, AXM_TENANT_REJECT_REQUEST_COMMAND, AXM_TENANT_REQUEST_ERROR_CODES, AXPApplicationsPlatformPermissionKeys, AXP_TENANT_USERS_VIEW, AXP_TENANT_USER_ADMIN_SCOPE_HEADER, AXP_TENANT_USER_ADMIN_SCOPE_PARAM, RootConfig, TenantManagementManifest, isTenantUsersOperationUrl, normalizeTenantUserAdminScope, resolveTenantUserAdminScopeFromUrl };
|
|
143
236
|
//# sourceMappingURL=acorex-platform-module-tenant-management-client-contracts.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-tenant-management-client-contracts.mjs","sources":["../../../../libs/modules/tenant-management/contracts/src/lib/context.definitions.ts","../../../../libs/modules/tenant-management/contracts/src/features.keys.ts","../../../../libs/modules/tenant-management/contracts/src/menu.keys.ts","../../../../libs/modules/tenant-management/contracts/src/permissions.keys.ts","../../../../libs/modules/tenant-management/contracts/src/root-config.ts","../../../../libs/modules/tenant-management/contracts/src/manifest.ts","../../../../libs/modules/tenant-management/contracts/src/entities/tenant-user-app-access/tenant-user-app-access.types.ts","../../../../libs/modules/tenant-management/contracts/src/entities/resource-share/resource-share.types.ts","../../../../libs/modules/tenant-management/contracts/src/index.ts","../../../../libs/modules/tenant-management/contracts/src/acorex-platform-module-tenant-management-client-contracts.ts"],"sourcesContent":["import type { AXPContextDefinition } from '@acorex-platform/framework-shared/core';\n\n//#region ---- Tenant context definitions ----\n\nexport const AXM_TENANT_CONTEXT_DEFINITIONS: AXPContextDefinition[] = [\n {\n name: 'tenantTitle',\n title: 'Tenant title',\n description: 'Display name of the active tenant from the session (title or name).',\n order: 21,\n capabilities: ['ai'],\n },\n];\n\n//#endregion\n","// Management feature removed - module name is used directly as feature key\nexport const AXMTenantManagementFeatureKeys = {} as const;\n\n","export const AXMTenantManagementMenuKeys = {\n Root: 'TenantManagement:Menu',\n Tenants: 'TenantManagement:Menu:Tenants',\n} as const;\n\n","/**\n * Applications & Platform capabilities used by this module.\n * Domain capability keys for this module. Root groups live in `AXPCommonPermissionGroupKeys` (common contracts).\n */\nexport const AXPApplicationsPlatformPermissionKeys = {\n Access: 'ApplicationsPlatform:Permission:Access',\n MaintainApplications: 'ApplicationsPlatform:Permission:MaintainApplications',\n MaintainTenants: 'ApplicationsPlatform:Permission:MaintainTenants',\n MaintainPlatformShell: 'ApplicationsPlatform:Permission:MaintainPlatformShell',\n MaintainLandingPages: 'ApplicationsPlatform:Permission:MaintainLandingPages',\n MaintainIdentifiers: 'ApplicationsPlatform:Permission:MaintainIdentifiers',\n MaintainTenantSettings: 'ApplicationsPlatform:Permission:MaintainTenantSettings',\n MaintainPlatformSettings: 'ApplicationsPlatform:Permission:MaintainPlatformSettings',\n MaintainLocales: 'ApplicationsPlatform:Permission:MaintainLocales',\n UseDevTools: 'ApplicationsPlatform:Permission:UseDevTools',\n} as const;\n\n/**\n * @deprecated Prefer {@link AXPApplicationsPlatformPermissionKeys}.\n * Legacy nested shape kept so existing imports compile during migration.\n */\nexport const AXMTenantManagementPermissionsKeys = {\n TenantManagement: {\n Management: AXPApplicationsPlatformPermissionKeys.MaintainTenants,\n },\n} as const;\n","const config = {\n i18n: 'tenant-management',\n module: 'TenantManagement',\n};\n\nexport const RootConfig = {\n config,\n module: {\n route: 'tenant-management',\n name: config.module,\n title: `@${config.i18n}:module.title`,\n icon: 'fa-light fa-building',\n },\n entities: {\n tenant: {\n name: 'Tenant',\n source: `${config.module}.Tenant`,\n title: `@${config.i18n}:tenants.entities.tenant.title`,\n titlePlural: `@${config.i18n}:tenants.entities.tenant.plural`,\n icon: 'fa-light fa-building',\n },\n tenantUser: {\n name: 'TenantUser',\n source: `${config.module}.TenantUser`,\n title: `@${config.i18n}:tenants.entities.tenant-user.title`,\n titlePlural: `@${config.i18n}:tenants.entities.tenant-user.plural`,\n icon: 'fa-light fa-user-group',\n },\n tenantUserAppAccess: {\n name: 'TenantUserAppAccess',\n source: `${config.module}.TenantUserAppAccess`,\n title: `@${config.i18n}:tenants.entities.tenant-user-app-access.title`,\n titlePlural: `@${config.i18n}:tenants.entities.tenant-user-app-access.plural`,\n icon: 'fa-light fa-app-store',\n },\n resourceShare: {\n name: 'ResourceShare',\n source: `${config.module}.ResourceShare`,\n title: `@${config.i18n}:tenants.entities.resource-share.title`,\n titlePlural: `@${config.i18n}:tenants.entities.resource-share.plural`,\n icon: 'fa-light fa-share-nodes',\n },\n },\n queries: {\n dashboard: {\n activeUsersKpi: `${config.module}:Dashboard:ActiveUsersKpi`,\n usersByRoleDonut: `${config.module}:Dashboard:UsersByRoleDonut`,\n },\n reports: {\n getTenantApplicationAccess: `${config.module}:Reports:GetTenantApplicationAccess`,\n getTenantUserDistribution: `${config.module}:Reports:GetTenantUserDistribution`,\n getTenantRegistrationTimeline: `${config.module}:Reports:GetTenantRegistrationTimeline`,\n getTenantRegistrationChartData: `${config.module}:Reports:GetTenantRegistrationChartData`,\n getSubscriptionsTimeline: `${config.module}:Reports:GetSubscriptionsTimeline`,\n getSubscriptionsChartData: `${config.module}:Reports:GetSubscriptionsChartData`,\n },\n },\n};\n\n// Keep the old export for backward compatibility\nexport const AXMTenantManagementModuleConst = {\n moduleName: 'TenantManagement',\n moduleRoute: 'tenant-management',\n i18n: 'tenant-management',\n} as const;\n","//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex-platform/framework-shared/core';\nimport { RootConfig } from './root-config';\n\n//#endregion\n\n//#region ---- Manifest Definition ----\n\n/**\n * Tenant Management Module Manifest.\n * Defines module metadata, features, and provider references.\n */\nexport const TenantManagementManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n type: 'platform',\n domain: 'platform',\n required: true,\n\n // Module dependencies (optional)\n};\n\n//#endregion\n\n","import type { AXPSystemStatusType } from '@acorex-platform/framework-shared/core';\nimport type { AXPEntityModel } from '@acorex-platform/framework-shared/entity';\n\n//#region ---- TenantUserAppAccess model ----\n\n/**\n * Application access grant for a tenant membership (period-based).\n * User → TenantUser → TenantUserAppAccess.\n */\nexport interface AXMTenantManagementTenantUserAppAccessEntityModel\n extends AXPEntityModel<string> {\n tenantUserId: string;\n tenantUser?: {\n id: string;\n userId?: string;\n tenantId?: string;\n };\n\n /** Denormalized for membership filters (same as TenantUser.tenantId). */\n tenantId: string;\n\n applicationId: string;\n application?: {\n id: string;\n title?: string;\n };\n\n statusId?: AXPSystemStatusType;\n startDate: Date;\n endDate?: Date;\n}\n\n//#endregion\n","//#region ---- ResourceShare types ----\n\nimport type { AXPEntityModel } from '@acorex-platform/framework-shared/entity';\n\nexport type AXMResourceSharePermission = 'read' | 'contribute' | 'admin';\nexport type AXMResourceShareStatus = 'active' | 'revoked';\n\nexport interface AXMResourceShareResourceInfo {\n /** Entity type, e.g. `ProjectManagement.Project`. */\n type: string;\n id: string;\n}\n\nexport interface AXMResourceShareShareInfo {\n ownerTenantId: string;\n sharedWithTenantId: string;\n applicationId?: string;\n permission: AXMResourceSharePermission;\n status: AXMResourceShareStatus;\n validFrom?: Date | string;\n validTo?: Date | string;\n}\n\nexport interface AXMTenantManagementResourceShareEntityModel extends AXPEntityModel<string> {\n resourceInfo: AXMResourceShareResourceInfo;\n shareInfo: AXMResourceShareShareInfo;\n}\n\n//#endregion\n","//#region ---- Contracts barrel ----\n\nexport * from './lib/context.definitions';\nexport * from './features.keys';\nexport * from './menu.keys';\nexport * from './permissions.keys';\n\nexport * from './root-config';\nexport * from './manifest';\n\n//#endregion\n\nexport * from './entities';\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-contracts.mjs","sources":["../../../../libs/modules/tenant-management/contracts/src/lib/context.definitions.ts","../../../../libs/modules/tenant-management/contracts/src/features.keys.ts","../../../../libs/modules/tenant-management/contracts/src/menu.keys.ts","../../../../libs/modules/tenant-management/contracts/src/permissions.keys.ts","../../../../libs/modules/tenant-management/contracts/src/root-config.ts","../../../../libs/modules/tenant-management/contracts/src/manifest.ts","../../../../libs/modules/tenant-management/contracts/src/tenant-user-admin-scope.ts","../../../../libs/modules/tenant-management/contracts/src/tenant-request.ts","../../../../libs/modules/tenant-management/contracts/src/tenant-extra.types.ts","../../../../libs/modules/tenant-management/contracts/src/entities/tenant-user-app-access/tenant-user-app-access.types.ts","../../../../libs/modules/tenant-management/contracts/src/entities/resource-share/resource-share.types.ts","../../../../libs/modules/tenant-management/contracts/src/index.ts","../../../../libs/modules/tenant-management/contracts/src/acorex-platform-module-tenant-management-client-contracts.ts"],"sourcesContent":["import type { AXPContextDefinition } from '@acorex-platform/framework-shared/core';\n\n//#region ---- Tenant context definitions ----\n\nexport const AXM_TENANT_CONTEXT_DEFINITIONS: AXPContextDefinition[] = [\n {\n name: 'tenantTitle',\n title: 'Tenant title',\n description: 'Display name of the active tenant from the session (title or name).',\n order: 21,\n capabilities: ['ai'],\n },\n];\n\n//#endregion\n","/**\n * Tenant Management feature keys.\n * ManagePlatformTenants is Platform Console edition only (platform tenant directory).\n * TenantConsole gates TM Administration menus (Tenant Users / App Access / Sessions) —\n * TM Standard edition only; must not appear on Platform Console (ADR-TEN-001).\n * InviteMultiApplication enables TM tenant-level multi-app invite (ADR-TEN-001 D-05).\n * TM edition may include the TenantManagement module without ManagePlatformTenants.\n */\nexport const AXMTenantManagementFeatureKeys = {\n ManagePlatformTenants: 'TenantManagement:Feature:ManagePlatformTenants',\n TenantConsole: 'TenantManagement:Feature:TenantConsole',\n InviteMultiApplication: 'TenantManagement:Feature:InviteMultiApplication',\n} as const;\n\n","export const AXMTenantManagementMenuKeys = {\n Root: 'TenantManagement:Menu',\n Tenants: 'TenantManagement:Menu:Tenants',\n /** Current-tenant membership directory (ADR-TEN-001 D-04). */\n TenantUsers: 'TenantManagement:Menu:TenantUsers',\n /** Tenant-wide application access rows for current tenant. */\n TenantApplicationAccess: 'TenantManagement:Menu:TenantApplicationAccess',\n /**\n * Tenant-wide device session administration (same entity as Security → Sessions).\n * Profile self-session management remains separate (ADR-TEN-001 D-07).\n */\n TenantSessions: 'TenantManagement:Menu:TenantSessions',\n} as const;\n","/**\n * Applications & Platform capabilities used by this module.\n * Domain capability keys for this module. Root groups live in `AXPCommonPermissionGroupKeys` (common contracts).\n */\nexport const AXPApplicationsPlatformPermissionKeys = {\n Access: 'ApplicationsPlatform:Permission:Access',\n MaintainApplications: 'ApplicationsPlatform:Permission:MaintainApplications',\n MaintainTenants: 'ApplicationsPlatform:Permission:MaintainTenants',\n MaintainPlatformShell: 'ApplicationsPlatform:Permission:MaintainPlatformShell',\n MaintainLandingPages: 'ApplicationsPlatform:Permission:MaintainLandingPages',\n MaintainIdentifiers: 'ApplicationsPlatform:Permission:MaintainIdentifiers',\n MaintainTenantSettings: 'ApplicationsPlatform:Permission:MaintainTenantSettings',\n MaintainPlatformSettings: 'ApplicationsPlatform:Permission:MaintainPlatformSettings',\n MaintainLocales: 'ApplicationsPlatform:Permission:MaintainLocales',\n UseDevTools: 'ApplicationsPlatform:Permission:UseDevTools',\n} as const;\n\n/**\n * @deprecated Prefer {@link AXPApplicationsPlatformPermissionKeys}.\n * Legacy nested shape kept so existing imports compile during migration.\n */\nexport const AXMTenantManagementPermissionsKeys = {\n TenantManagement: {\n Management: AXPApplicationsPlatformPermissionKeys.MaintainTenants,\n },\n} as const;\n","const config = {\n i18n: 'tenant-management',\n module: 'TenantManagement',\n};\n\nexport const RootConfig = {\n config,\n module: {\n route: 'tenant-management',\n name: config.module,\n title: `@${config.i18n}:module.title`,\n icon: 'fa-light fa-building',\n },\n entities: {\n tenant: {\n name: 'Tenant',\n source: `${config.module}.Tenant`,\n title: `@${config.i18n}:tenants.entities.tenant.title`,\n titlePlural: `@${config.i18n}:tenants.entities.tenant.plural`,\n icon: 'fa-light fa-building',\n },\n tenantUser: {\n name: 'TenantUser',\n source: `${config.module}.TenantUser`,\n title: `@${config.i18n}:tenants.entities.tenant-user.title`,\n titlePlural: `@${config.i18n}:tenants.entities.tenant-user.plural`,\n icon: 'fa-light fa-user-group',\n },\n tenantUserAppAccess: {\n name: 'TenantUserAppAccess',\n source: `${config.module}.TenantUserAppAccess`,\n title: `@${config.i18n}:tenants.entities.tenant-user-app-access.title`,\n titlePlural: `@${config.i18n}:tenants.entities.tenant-user-app-access.plural`,\n icon: 'fa-light fa-app-store',\n },\n resourceShare: {\n name: 'ResourceShare',\n source: `${config.module}.ResourceShare`,\n title: `@${config.i18n}:tenants.entities.resource-share.title`,\n titlePlural: `@${config.i18n}:tenants.entities.resource-share.plural`,\n icon: 'fa-light fa-share-nodes',\n },\n },\n queries: {\n dashboard: {\n /** Tenant-wide TenantUser count (Tenant Console Overview). */\n activeUsersKpi: `${config.module}:Dashboard:ActiveUsersKpi`,\n /**\n * Current-application TenantUserAppAccess count (TM Application scope).\n * On Tenant Console Overview / TM Application Overview widgets (D-17 / D-18).\n */\n tmApplicationUsersKpi: `${config.module}:Dashboard:TmApplicationUsersKpi`,\n usersByRoleDonut: `${config.module}:Dashboard:UsersByRoleDonut`,\n },\n reports: {\n getTenantApplicationAccess: `${config.module}:Reports:GetTenantApplicationAccess`,\n getTenantUserDistribution: `${config.module}:Reports:GetTenantUserDistribution`,\n getTenantRegistrationTimeline: `${config.module}:Reports:GetTenantRegistrationTimeline`,\n getTenantRegistrationChartData: `${config.module}:Reports:GetTenantRegistrationChartData`,\n getSubscriptionsTimeline: `${config.module}:Reports:GetSubscriptionsTimeline`,\n getSubscriptionsChartData: `${config.module}:Reports:GetSubscriptionsChartData`,\n },\n },\n};\n\n// Keep the old export for backward compatibility\nexport const AXMTenantManagementModuleConst = {\n moduleName: 'TenantManagement',\n moduleRoute: 'tenant-management',\n i18n: 'tenant-management',\n} as const;\n","//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex-platform/framework-shared/core';\nimport { RootConfig } from './root-config';\n\n//#endregion\n\n//#region ---- Manifest Definition ----\n\n/**\n * Tenant Management Module Manifest.\n * Defines module metadata, features, and provider references.\n */\nexport const TenantManagementManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n type: 'platform',\n domain: 'platform',\n required: true,\n\n // Module dependencies (optional)\n};\n\n//#endregion\n\n","//#region ----- Tenant Users admin scope (operation-owned) -----\n\n/**\n * Explicit Tenant Users / Tenant Application Access operation scope (ADR-TEN-001).\n * Selected by the calling surface (`view=tenant-users`), not Application.code / TM ids,\n * and not by generic `/e/TenantUser*` entity routes alone.\n *\n * - `current-tenant` — TM → Tenant Users (and related AppAccess): force session tenant\n * - `default` — generic / platform TenantUser ops: existing membership policy (incl. isPlatform)\n */\nexport type AXPTenantUserAdminScope = 'current-tenant' | 'default';\n\n/** Query `params` key carrying the operation scope. */\nexport const AXP_TENANT_USER_ADMIN_SCOPE_PARAM = 'tenantUserAdminScope';\n\n/** HTTP header (lowercase) for getOne/update/delete (and related) ops. */\nexport const AXP_TENANT_USER_ADMIN_SCOPE_HEADER = 'x-axp-tenant-user-admin-scope';\n\n/** Entity list view name for TM → Tenant Users / Tenant Application Access. */\nexport const AXP_TENANT_USERS_VIEW = 'tenant-users';\n\nexport function normalizeTenantUserAdminScope(value: unknown): AXPTenantUserAdminScope {\n return value === 'current-tenant' ? 'current-tenant' : 'default';\n}\n\n/**\n * Whether the URL carries the explicit Tenant Users operation context.\n *\n * Prefer durable `tenantUserAdminScope=current-tenant` (entity list rewrites\n * unknown `view=` values to `all`). Also accept `view=tenant-users` when present.\n * Never infer from entity path `/e/TenantUser*` alone.\n */\nexport function isTenantUsersOperationUrl(url: string | null | undefined): boolean {\n if (!url) {\n return false;\n }\n\n try {\n const parsed = new URL(url, 'http://local.invalid');\n if (\n parsed.searchParams.get(AXP_TENANT_USER_ADMIN_SCOPE_PARAM)?.trim() === 'current-tenant'\n ) {\n return true;\n }\n if (parsed.searchParams.get('view')?.trim() === AXP_TENANT_USERS_VIEW) {\n return true;\n }\n } catch {\n // Fall through to substring checks.\n }\n\n return (\n url.includes(`${AXP_TENANT_USER_ADMIN_SCOPE_PARAM}=current-tenant`) ||\n url.includes(`view=${AXP_TENANT_USERS_VIEW}`)\n );\n}\n\nexport function resolveTenantUserAdminScopeFromUrl(\n url: string | null | undefined,\n): AXPTenantUserAdminScope {\n return isTenantUsersOperationUrl(url) ? 'current-tenant' : 'default';\n}\n\n//#endregion\n","//#region ----- Tenant creation request contracts -----\n\n/** Server command keys for public tenant-creation requests and PC approve/reject. */\nexport const AXMTenantManagementServerCommands = {\n RequestTenantCreation: 'TenantManagement:Server:RequestTenantCreation',\n ListPublicSubscriptionPlans: 'TenantManagement:Server:ListPublicSubscriptionPlans',\n CheckTenantNameAvailable: 'TenantManagement:Server:CheckTenantNameAvailable',\n ApproveTenantRequest: 'TenantManagement:Server:ApproveTenantRequest',\n RejectTenantRequest: 'TenantManagement:Server:RejectTenantRequest',\n} as const;\n\n/** Client/UI action keys on TenantManagement.Tenant (Platform Console). */\nexport const AXM_TENANT_APPROVE_REQUEST_COMMAND = 'TenantManagement:Tenant:ApproveRequest';\nexport const AXM_TENANT_REJECT_REQUEST_COMMAND = 'TenantManagement:Tenant:RejectRequest';\n\n/** Stable codes for client i18n mapping. */\nexport const AXM_TENANT_REQUEST_ERROR_CODES = {\n InvalidInput: 'TENANT_REQUEST_INVALID_INPUT',\n NameTaken: 'TENANT_REQUEST_NAME_TAKEN',\n PlanNotFound: 'TENANT_REQUEST_PLAN_NOT_FOUND',\n NotPending: 'TENANT_REQUEST_NOT_PENDING',\n NotFound: 'TENANT_REQUEST_NOT_FOUND',\n Unauthorized: 'TENANT_REQUEST_UNAUTHORIZED',\n} as const;\n\n/** Metadata stored on a pending/rejected tenant created via the public form. */\nexport interface AXMTenantRequestInfo {\n planId: string;\n requesterUserId: string;\n requestedAt: string;\n requesterEmail?: string;\n}\n\nexport interface AXMRequestTenantCreationInput {\n /** Unique tenant name (slug). */\n name: string;\n /** Display title / company name (plain string; stored as MLS). */\n title: string;\n /** Selected SubscriptionPlan id (not PC-001). */\n planId: string;\n /** Requester email — existing User reused when present. */\n email: string;\n /** Business phone → Tenant.phone */\n phone?: string;\n /** Street address → Tenant.street1 */\n street1?: string;\n /** Post code → Tenant.postalCode */\n postalCode?: string;\n /** Product/demo-specific bag (e.g. Safetyminder fields). */\n extra?: Record<string, unknown>;\n webOrigin?: string;\n}\n\nexport interface AXMRequestTenantCreationResult {\n tenantId: string;\n name: string;\n}\n\nexport interface AXMCheckTenantNameAvailableInput {\n name: string;\n}\n\nexport interface AXMCheckTenantNameAvailableResult {\n available: boolean;\n}\n\nexport interface AXMPublicSubscriptionPlanItem {\n id: string;\n code: string;\n title: unknown;\n description?: unknown;\n}\n\nexport interface AXMListPublicSubscriptionPlansResult {\n items: AXMPublicSubscriptionPlanItem[];\n}\n\nexport interface AXMApproveTenantRequestInput {\n tenantId?: string;\n /** Entity action payload. */\n data?: { id?: string };\n webOrigin?: string;\n}\n\nexport interface AXMRejectTenantRequestInput {\n tenantId?: string;\n data?: { id?: string };\n}\n\n//#endregion\n","//#region ----- Tenant extra (product/demo) field defs -----\n\n/**\n * Host/product-specific fields stored on {@link AXMTenantManagementTenantEntityModel.extra}.\n * Definitions are registered by demo (e.g. safetyminder/client), not by the module.\n */\nexport interface AXMTenantExtraFieldDefinition {\n /** Key inside `Tenant.extra`. */\n name: string;\n /** UI label — i18n key (`@scope:…`) or plain string. */\n title: string;\n /** Widget type name (e.g. `text-editor`). Defaults to `text-editor`. */\n editorType?: string;\n placeholder?: string;\n required?: boolean;\n /** Optional select options when `editorType` is `select-editor`. */\n selectOptions?: Array<{ id: string; title: string }>;\n}\n\n//#endregion\n","import type { AXPSystemStatusType } from '@acorex-platform/framework-shared/core';\nimport type { AXPEntityModel } from '@acorex-platform/framework-shared/entity';\n\n//#region ---- TenantUserAppAccess model ----\n\n/**\n * Application access grant for a tenant membership (period-based).\n * User → TenantUser → TenantUserAppAccess.\n */\nexport interface AXMTenantManagementTenantUserAppAccessEntityModel\n extends AXPEntityModel<string> {\n tenantUserId: string;\n tenantUser?: {\n id: string;\n userId?: string;\n tenantId?: string;\n displayName?: string;\n };\n\n /** Denormalized for membership filters (same as TenantUser.tenantId). */\n tenantId: string;\n tenant?: {\n id: string;\n title?: unknown;\n name?: string;\n };\n\n /** Denormalized from TenantUser.userId — list/lookup display of the member. */\n userId?: string;\n user?: {\n id: string;\n displayName?: string;\n };\n /** Snapshot label for list columns (avoids identity-read AppAccess gaps in TM). */\n userDisplayName?: string;\n\n applicationId: string;\n application?: {\n id: string;\n title?: string;\n };\n\n statusId?: AXPSystemStatusType;\n startDate: Date;\n endDate?: Date;\n}\n\n//#endregion\n","//#region ---- ResourceShare types ----\n\nimport type { AXPEntityModel } from '@acorex-platform/framework-shared/entity';\n\nexport type AXMResourceSharePermission = 'read' | 'contribute' | 'admin';\nexport type AXMResourceShareStatus = 'active' | 'revoked';\n\nexport interface AXMResourceShareResourceInfo {\n /** Entity type, e.g. `ProjectManagement.Project`. */\n type: string;\n id: string;\n}\n\nexport interface AXMResourceShareShareInfo {\n ownerTenantId: string;\n sharedWithTenantId: string;\n applicationId?: string;\n permission: AXMResourceSharePermission;\n status: AXMResourceShareStatus;\n validFrom?: Date | string;\n validTo?: Date | string;\n}\n\nexport interface AXMTenantManagementResourceShareEntityModel extends AXPEntityModel<string> {\n resourceInfo: AXMResourceShareResourceInfo;\n shareInfo: AXMResourceShareShareInfo;\n}\n\n//#endregion\n","//#region ---- Contracts barrel ----\n\nexport * from './lib/context.definitions';\nexport * from './features.keys';\nexport * from './menu.keys';\nexport * from './permissions.keys';\n\nexport * from './root-config';\nexport * from './manifest';\nexport * from './tenant-user-admin-scope';\nexport * from './tenant-request';\nexport * from './tenant-extra.types';\n\n//#endregion\n\nexport * from './entities';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { AXDialogService } from '@acorex/components/dialog';
|
|
2
|
+
import { AXToastService } from '@acorex/components/toast';
|
|
3
|
+
import { AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';
|
|
4
|
+
import { AXPCommandService } from '@acorex-platform/framework-client/runtime';
|
|
5
|
+
import { resolveEntityActionCommandInput } from '@acorex-platform/framework-shared/runtime';
|
|
6
|
+
import { AXMTenantManagementServerCommands, AXM_TENANT_REQUEST_ERROR_CODES } from '@acorex-platform/module-tenant-management-client/contracts';
|
|
7
|
+
export { AXM_TENANT_REJECT_REQUEST_COMMAND } from '@acorex-platform/module-tenant-management-client/contracts';
|
|
8
|
+
import * as i0 from '@angular/core';
|
|
9
|
+
import { inject, Injectable } from '@angular/core';
|
|
10
|
+
|
|
11
|
+
//#region ---- AXPRejectTenantRequestCommand ----
|
|
12
|
+
class AXPRejectTenantRequestCommand {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.dialogService = inject(AXDialogService);
|
|
15
|
+
this.toastService = inject(AXToastService);
|
|
16
|
+
this.translationService = inject(AXTranslationService);
|
|
17
|
+
this.commandService = inject(AXPCommandService);
|
|
18
|
+
}
|
|
19
|
+
async execute(input) {
|
|
20
|
+
const actionInput = resolveEntityActionCommandInput(input);
|
|
21
|
+
const data = (actionInput.data ?? {});
|
|
22
|
+
const tenantId = String(data['id'] ?? '').trim();
|
|
23
|
+
if (!tenantId) {
|
|
24
|
+
return { success: false, message: { text: 'Tenant id is required.' } };
|
|
25
|
+
}
|
|
26
|
+
const locale = this.translationService.getActiveLang?.() ?? 'en-US';
|
|
27
|
+
const who = resolveMultiLanguageString(data['title'], locale).trim() ||
|
|
28
|
+
String(data['name'] ?? tenantId);
|
|
29
|
+
const confirmTitle = await this.translationService
|
|
30
|
+
.translateAsync('@tenant-management:tenants.actions.reject-request.confirm-title')
|
|
31
|
+
.catch(() => 'Reject Tenant Request');
|
|
32
|
+
const confirmMessage = await this.translationService
|
|
33
|
+
.translateAsync('@tenant-management:tenants.actions.reject-request.confirm-message', {
|
|
34
|
+
params: { tenant: who },
|
|
35
|
+
})
|
|
36
|
+
.catch(() => `Reject the tenant request for ${who}?`);
|
|
37
|
+
const confirmed = await this.dialogService.confirm(confirmTitle, confirmMessage, 'danger', 'horizontal');
|
|
38
|
+
if (!confirmed.result) {
|
|
39
|
+
return { success: true, kind: 'object', data: { outcome: 'cancelled' } };
|
|
40
|
+
}
|
|
41
|
+
const result = await this.commandService.executeRemote(AXMTenantManagementServerCommands.RejectTenantRequest, { tenantId });
|
|
42
|
+
if (result?.success) {
|
|
43
|
+
const [toastTitle, toastContent] = await Promise.all([
|
|
44
|
+
this.translationService
|
|
45
|
+
.translateAsync('@tenant-management:tenants.actions.reject-request.success.title')
|
|
46
|
+
.catch(() => 'Rejected'),
|
|
47
|
+
this.translationService
|
|
48
|
+
.translateAsync('@tenant-management:tenants.actions.reject-request.success.description')
|
|
49
|
+
.catch(() => 'The tenant request was rejected.'),
|
|
50
|
+
]);
|
|
51
|
+
this.toastService.show({ color: 'success', title: toastTitle, content: toastContent, timeOut: 3000 });
|
|
52
|
+
return { success: true, kind: 'object', data: undefined };
|
|
53
|
+
}
|
|
54
|
+
const [toastTitle, fallback] = await Promise.all([
|
|
55
|
+
this.translationService
|
|
56
|
+
.translateAsync('@tenant-management:tenants.actions.reject-request.error.title')
|
|
57
|
+
.catch(() => 'Reject Failed'),
|
|
58
|
+
this.translationService
|
|
59
|
+
.translateAsync('@tenant-management:tenants.actions.reject-request.error.description')
|
|
60
|
+
.catch(() => 'Failed to reject the tenant request.'),
|
|
61
|
+
]);
|
|
62
|
+
const code = typeof result?.message?.code === 'string' ? result.message.code : '';
|
|
63
|
+
const mapped = code === AXM_TENANT_REQUEST_ERROR_CODES.NotPending
|
|
64
|
+
? await this.translationService
|
|
65
|
+
.translateAsync('@tenant-management:tenants.actions.reject-request.error.not-pending')
|
|
66
|
+
.catch(() => fallback)
|
|
67
|
+
: fallback;
|
|
68
|
+
this.toastService.show({ color: 'danger', title: toastTitle, content: mapped, timeOut: 4000 });
|
|
69
|
+
return { success: false };
|
|
70
|
+
}
|
|
71
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPRejectTenantRequestCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
72
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPRejectTenantRequestCommand, providedIn: 'root' }); }
|
|
73
|
+
}
|
|
74
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPRejectTenantRequestCommand, decorators: [{
|
|
75
|
+
type: Injectable,
|
|
76
|
+
args: [{ providedIn: 'root' }]
|
|
77
|
+
}] });
|
|
78
|
+
|
|
79
|
+
export { AXPRejectTenantRequestCommand };
|
|
80
|
+
//# sourceMappingURL=acorex-platform-module-tenant-management-client-reject-tenant-request.command-CKSHPw1a.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-tenant-management-client-reject-tenant-request.command-CKSHPw1a.mjs","sources":["../../../../libs/modules/tenant-management/client/src/lib/commands/reject-tenant-request.command.ts"],"sourcesContent":["import { AXDialogService } from '@acorex/components/dialog';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport type { AXPCommand, AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { resolveEntityActionCommandInput } from '@acorex-platform/framework-shared/runtime';\nimport {\n AXM_TENANT_REJECT_REQUEST_COMMAND,\n AXM_TENANT_REQUEST_ERROR_CODES,\n AXMTenantManagementServerCommands,\n} from '@acorex-platform/module-tenant-management-client/contracts';\nimport { inject, Injectable } from '@angular/core';\n\nexport { AXM_TENANT_REJECT_REQUEST_COMMAND };\n\n//#region ---- AXPRejectTenantRequestCommand ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXPRejectTenantRequestCommand implements AXPCommand {\n private readonly dialogService = inject(AXDialogService);\n private readonly toastService = inject(AXToastService);\n private readonly translationService = inject(AXTranslationService);\n private readonly commandService = inject(AXPCommandService);\n\n async execute(input?: unknown): AXPCommandExecuteResultPromise {\n const actionInput = resolveEntityActionCommandInput(input);\n const data = (actionInput.data ?? {}) as Record<string, unknown>;\n const tenantId = String(data['id'] ?? '').trim();\n if (!tenantId) {\n return { success: false, message: { text: 'Tenant id is required.' } };\n }\n\n const locale = this.translationService.getActiveLang?.() ?? 'en-US';\n const who =\n resolveMultiLanguageString(data['title'] as never, locale).trim() ||\n String(data['name'] ?? tenantId);\n\n const confirmTitle = await this.translationService\n .translateAsync('@tenant-management:tenants.actions.reject-request.confirm-title')\n .catch(() => 'Reject Tenant Request');\n const confirmMessage = await this.translationService\n .translateAsync('@tenant-management:tenants.actions.reject-request.confirm-message', {\n params: { tenant: who },\n })\n .catch(() => `Reject the tenant request for ${who}?`);\n\n const confirmed = await this.dialogService.confirm(confirmTitle, confirmMessage, 'danger', 'horizontal');\n if (!confirmed.result) {\n return { success: true, kind: 'object', data: { outcome: 'cancelled' } };\n }\n\n const result = await this.commandService.executeRemote(\n AXMTenantManagementServerCommands.RejectTenantRequest,\n { tenantId },\n );\n\n if (result?.success) {\n const [toastTitle, toastContent] = await Promise.all([\n this.translationService\n .translateAsync('@tenant-management:tenants.actions.reject-request.success.title')\n .catch(() => 'Rejected'),\n this.translationService\n .translateAsync('@tenant-management:tenants.actions.reject-request.success.description')\n .catch(() => 'The tenant request was rejected.'),\n ]);\n this.toastService.show({ color: 'success', title: toastTitle, content: toastContent, timeOut: 3000 });\n return { success: true, kind: 'object', data: undefined };\n }\n\n const [toastTitle, fallback] = await Promise.all([\n this.translationService\n .translateAsync('@tenant-management:tenants.actions.reject-request.error.title')\n .catch(() => 'Reject Failed'),\n this.translationService\n .translateAsync('@tenant-management:tenants.actions.reject-request.error.description')\n .catch(() => 'Failed to reject the tenant request.'),\n ]);\n const code = typeof result?.message?.code === 'string' ? result.message.code : '';\n const mapped =\n code === AXM_TENANT_REQUEST_ERROR_CODES.NotPending\n ? await this.translationService\n .translateAsync('@tenant-management:tenants.actions.reject-request.error.not-pending')\n .catch(() => fallback)\n : fallback;\n this.toastService.show({ color: 'danger', title: toastTitle, content: mapped, timeOut: 4000 });\n return { success: false };\n }\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
|