@acorex/connectivity 21.0.0-next.2 → 21.0.0-next.5

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.
Files changed (30) hide show
  1. package/api/index.d.ts +5 -6
  2. package/fesm2022/{acorex-connectivity-api-execute.command-CQt_HF1B.mjs → acorex-connectivity-api-execute.command-SGNBLcOi.mjs} +2 -2
  3. package/fesm2022/acorex-connectivity-api-execute.command-SGNBLcOi.mjs.map +1 -0
  4. package/fesm2022/acorex-connectivity-api.mjs +29 -23
  5. package/fesm2022/acorex-connectivity-api.mjs.map +1 -1
  6. package/fesm2022/acorex-connectivity-mock-get-application-versions-chart-data.query-C3eQfF0A.mjs +115 -0
  7. package/fesm2022/acorex-connectivity-mock-get-application-versions-chart-data.query-C3eQfF0A.mjs.map +1 -0
  8. package/fesm2022/acorex-connectivity-mock-get-application-versions-timeline.query-CLzDz9ob.mjs +163 -0
  9. package/fesm2022/acorex-connectivity-mock-get-application-versions-timeline.query-CLzDz9ob.mjs.map +1 -0
  10. package/fesm2022/acorex-connectivity-mock-get-product-chart-data.query-DDVVFeYN.mjs +97 -0
  11. package/fesm2022/acorex-connectivity-mock-get-product-chart-data.query-DDVVFeYN.mjs.map +1 -0
  12. package/fesm2022/acorex-connectivity-mock-get-product-list.query-ChtYlSTt.mjs +157 -0
  13. package/fesm2022/acorex-connectivity-mock-get-product-list.query-ChtYlSTt.mjs.map +1 -0
  14. package/fesm2022/acorex-connectivity-mock-get-subscriptions-chart-data.query-HxX_bCT8.mjs +56 -0
  15. package/fesm2022/acorex-connectivity-mock-get-subscriptions-chart-data.query-HxX_bCT8.mjs.map +1 -0
  16. package/fesm2022/acorex-connectivity-mock-get-subscriptions-timeline.query-dp08JqLP.mjs +168 -0
  17. package/fesm2022/acorex-connectivity-mock-get-subscriptions-timeline.query-dp08JqLP.mjs.map +1 -0
  18. package/fesm2022/acorex-connectivity-mock-get-tenant-application-access.query-IATTXcAV.mjs +180 -0
  19. package/fesm2022/acorex-connectivity-mock-get-tenant-application-access.query-IATTXcAV.mjs.map +1 -0
  20. package/fesm2022/acorex-connectivity-mock-get-tenant-registration-chart-data.query-DlXi4Rcg.mjs +56 -0
  21. package/fesm2022/acorex-connectivity-mock-get-tenant-registration-chart-data.query-DlXi4Rcg.mjs.map +1 -0
  22. package/fesm2022/acorex-connectivity-mock-get-tenant-registration-timeline.query-hskw8Ioa.mjs +216 -0
  23. package/fesm2022/acorex-connectivity-mock-get-tenant-registration-timeline.query-hskw8Ioa.mjs.map +1 -0
  24. package/fesm2022/acorex-connectivity-mock-get-tenant-user-distribution.query-Bs5U5tze.mjs +134 -0
  25. package/fesm2022/acorex-connectivity-mock-get-tenant-user-distribution.query-Bs5U5tze.mjs.map +1 -0
  26. package/fesm2022/acorex-connectivity-mock.mjs +28129 -27839
  27. package/fesm2022/acorex-connectivity-mock.mjs.map +1 -1
  28. package/mock/index.d.ts +622 -1896
  29. package/package.json +6 -6
  30. package/fesm2022/acorex-connectivity-api-execute.command-CQt_HF1B.mjs.map +0 -1
@@ -0,0 +1,180 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, Injectable } from '@angular/core';
3
+ import { AXPEntityService } from '@acorex/platform/layout/entity';
4
+ import { AXPSystemStatusType } from '@acorex/platform/common';
5
+ import { RootConfig } from '@acorex/modules/tenant-management';
6
+ import { RootConfig as RootConfig$1 } from '@acorex/modules/subscription-management';
7
+ import { RootConfig as RootConfig$2 } from '@acorex/modules/application-management';
8
+
9
+ //#endregion
10
+ class GetTenantApplicationAccessQuery {
11
+ constructor() {
12
+ this.entityService = inject(AXPEntityService);
13
+ this.tenantService = this.entityService
14
+ .withEntity(`${RootConfig.module.name}.${RootConfig.entities.tenant.name}`)
15
+ .data();
16
+ this.subscriptionService = this.entityService
17
+ .withEntity(`${RootConfig$1.module.name}.${RootConfig$1.entities.subscription.name}`)
18
+ .data();
19
+ this.planService = this.entityService
20
+ .withEntity(`${RootConfig$1.module.name}.${RootConfig$1.entities.subscriptionPlan.name}`)
21
+ .data();
22
+ this.planItemService = this.entityService
23
+ .withEntity(`${RootConfig$1.module.name}.${RootConfig$1.entities.subscriptionPlanItem.name}`)
24
+ .data();
25
+ this.applicationService = this.entityService
26
+ .withEntity(`${RootConfig$2.module.name}.${RootConfig$2.entities.application.name}`)
27
+ .data();
28
+ }
29
+ async fetch(input) {
30
+ // Get all tenants
31
+ const tenantsResult = await this.tenantService.query({
32
+ skip: 0,
33
+ take: 10000,
34
+ filter: input.filters && input.filters.length > 0
35
+ ? {
36
+ logic: input.logic || 'and',
37
+ filters: input.filters.filter((f) => f.field !== 'dateRange'),
38
+ }
39
+ : undefined,
40
+ });
41
+ let tenants = tenantsResult.items;
42
+ // Apply date range filter if provided
43
+ if (input.filters) {
44
+ for (const filter of input.filters) {
45
+ if (filter.field === 'dateRange' && filter.value) {
46
+ tenants = this.applyDateRangeFilter(tenants, filter.value);
47
+ }
48
+ }
49
+ }
50
+ // Get all subscriptions
51
+ const subscriptionsResult = await this.subscriptionService.query({
52
+ skip: 0,
53
+ take: 10000,
54
+ });
55
+ const subscriptions = subscriptionsResult.items.filter((s) => s.subscriberType === 'Tenant');
56
+ // Get all plans
57
+ const plansResult = await this.planService.query({
58
+ skip: 0,
59
+ take: 10000,
60
+ });
61
+ const plans = plansResult.items;
62
+ // Get all plan items
63
+ const planItemsResult = await this.planItemService.query({
64
+ skip: 0,
65
+ take: 10000,
66
+ });
67
+ const planItems = planItemsResult.items;
68
+ // Get all applications
69
+ const applicationsResult = await this.applicationService.query({
70
+ skip: 0,
71
+ take: 10000,
72
+ });
73
+ const applications = applicationsResult.items;
74
+ // Build results for each tenant
75
+ const results = [];
76
+ for (const tenant of tenants) {
77
+ // Get tenant's subscriptions
78
+ const tenantSubscriptions = subscriptions.filter((s) => s.subscriberId === tenant.id);
79
+ // Get unique applications through subscriptions → plans → plan items → editions → applications
80
+ const applicationSet = new Set();
81
+ const applicationNames = [];
82
+ for (const subscription of tenantSubscriptions) {
83
+ if (!subscription.planId)
84
+ continue;
85
+ // Get plan items for this plan
86
+ const planPlanItems = planItems.filter((pi) => pi.planId === subscription.planId);
87
+ for (const planItem of planPlanItems) {
88
+ if (!planItem.editionId)
89
+ continue;
90
+ // Find applications that have this edition
91
+ for (const application of applications) {
92
+ if (application.editionIds && application.editionIds.includes(planItem.editionId)) {
93
+ if (!applicationSet.has(application.id)) {
94
+ applicationSet.add(application.id);
95
+ applicationNames.push(application.title);
96
+ }
97
+ }
98
+ }
99
+ }
100
+ }
101
+ // Count active subscriptions
102
+ const activeSubscriptions = tenantSubscriptions.filter((s) => s.statusId === AXPSystemStatusType.Active);
103
+ results.push({
104
+ tenantId: tenant.id,
105
+ tenantName: tenant.title,
106
+ tenantStatus: tenant.statusId || 'Unknown',
107
+ subscriptionCount: tenantSubscriptions.length,
108
+ applicationsCount: applicationSet.size,
109
+ applicationsList: applicationNames.join(', '),
110
+ activeSubscriptionsCount: activeSubscriptions.length,
111
+ registrationDate: tenant.registrationDate,
112
+ registrationDateStr: tenant.registrationDate?.toISOString(),
113
+ });
114
+ }
115
+ // Apply sorting if provided
116
+ if (input.sort && input.sort.length > 0) {
117
+ results.sort((a, b) => {
118
+ for (const sortField of input.sort) {
119
+ const field = sortField.field;
120
+ const aValue = a[field];
121
+ const bValue = b[field];
122
+ const dir = sortField.dir === 'asc' ? 1 : -1;
123
+ if (aValue === undefined && bValue === undefined)
124
+ continue;
125
+ if (aValue === undefined)
126
+ return 1 * dir;
127
+ if (bValue === undefined)
128
+ return -1 * dir;
129
+ if (aValue < bValue)
130
+ return -1 * dir;
131
+ if (aValue > bValue)
132
+ return 1 * dir;
133
+ }
134
+ return 0;
135
+ });
136
+ }
137
+ else {
138
+ // Default sort by tenant name
139
+ results.sort((a, b) => a.tenantName.localeCompare(b.tenantName));
140
+ }
141
+ // Apply pagination
142
+ const skip = input.skip || 0;
143
+ const take = input.take || 10;
144
+ const total = results.length;
145
+ const items = results.slice(skip, skip + take);
146
+ return {
147
+ items,
148
+ total,
149
+ };
150
+ }
151
+ //#region ---- Custom Filter Handlers ----
152
+ /**
153
+ * Apply date range filter to tenants
154
+ */
155
+ applyDateRangeFilter(tenants, dateRange) {
156
+ if (!dateRange || !dateRange.start || !dateRange.end) {
157
+ return tenants;
158
+ }
159
+ const startDate = new Date(dateRange.start);
160
+ const endDate = new Date(dateRange.end);
161
+ endDate.setHours(23, 59, 59, 999);
162
+ return tenants.filter((tenant) => {
163
+ if (!tenant.registrationDate)
164
+ return false;
165
+ const regDate = new Date(tenant.registrationDate);
166
+ return regDate >= startDate && regDate <= endDate;
167
+ });
168
+ }
169
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: GetTenantApplicationAccessQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
170
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: GetTenantApplicationAccessQuery, providedIn: 'root' }); }
171
+ }
172
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: GetTenantApplicationAccessQuery, decorators: [{
173
+ type: Injectable,
174
+ args: [{
175
+ providedIn: 'root',
176
+ }]
177
+ }] });
178
+
179
+ export { GetTenantApplicationAccessQuery };
180
+ //# sourceMappingURL=acorex-connectivity-mock-get-tenant-application-access.query-IATTXcAV.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-connectivity-mock-get-tenant-application-access.query-IATTXcAV.mjs","sources":["../tmp-esm2022/mock/lib/tenant-management/reports/get-tenant-application-access.query.js"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPSystemStatusType } from '@acorex/platform/common';\nimport { RootConfig as TenantRootConfig } from '@acorex/modules/tenant-management';\nimport { RootConfig as SubscriptionRootConfig } from '@acorex/modules/subscription-management';\nimport { RootConfig as ApplicationRootConfig } from '@acorex/modules/application-management';\nimport * as i0 from \"@angular/core\";\n//#endregion\nexport class GetTenantApplicationAccessQuery {\n constructor() {\n this.entityService = inject(AXPEntityService);\n this.tenantService = this.entityService\n .withEntity(`${TenantRootConfig.module.name}.${TenantRootConfig.entities.tenant.name}`)\n .data();\n this.subscriptionService = this.entityService\n .withEntity(`${SubscriptionRootConfig.module.name}.${SubscriptionRootConfig.entities.subscription.name}`)\n .data();\n this.planService = this.entityService\n .withEntity(`${SubscriptionRootConfig.module.name}.${SubscriptionRootConfig.entities.subscriptionPlan.name}`)\n .data();\n this.planItemService = this.entityService\n .withEntity(`${SubscriptionRootConfig.module.name}.${SubscriptionRootConfig.entities.subscriptionPlanItem.name}`)\n .data();\n this.applicationService = this.entityService\n .withEntity(`${ApplicationRootConfig.module.name}.${ApplicationRootConfig.entities.application.name}`)\n .data();\n }\n async fetch(input) {\n // Get all tenants\n const tenantsResult = await this.tenantService.query({\n skip: 0,\n take: 10000,\n filter: input.filters && input.filters.length > 0\n ? {\n logic: input.logic || 'and',\n filters: input.filters.filter((f) => f.field !== 'dateRange'),\n }\n : undefined,\n });\n let tenants = tenantsResult.items;\n // Apply date range filter if provided\n if (input.filters) {\n for (const filter of input.filters) {\n if (filter.field === 'dateRange' && filter.value) {\n tenants = this.applyDateRangeFilter(tenants, filter.value);\n }\n }\n }\n // Get all subscriptions\n const subscriptionsResult = await this.subscriptionService.query({\n skip: 0,\n take: 10000,\n });\n const subscriptions = subscriptionsResult.items.filter((s) => s.subscriberType === 'Tenant');\n // Get all plans\n const plansResult = await this.planService.query({\n skip: 0,\n take: 10000,\n });\n const plans = plansResult.items;\n // Get all plan items\n const planItemsResult = await this.planItemService.query({\n skip: 0,\n take: 10000,\n });\n const planItems = planItemsResult.items;\n // Get all applications\n const applicationsResult = await this.applicationService.query({\n skip: 0,\n take: 10000,\n });\n const applications = applicationsResult.items;\n // Build results for each tenant\n const results = [];\n for (const tenant of tenants) {\n // Get tenant's subscriptions\n const tenantSubscriptions = subscriptions.filter((s) => s.subscriberId === tenant.id);\n // Get unique applications through subscriptions → plans → plan items → editions → applications\n const applicationSet = new Set();\n const applicationNames = [];\n for (const subscription of tenantSubscriptions) {\n if (!subscription.planId)\n continue;\n // Get plan items for this plan\n const planPlanItems = planItems.filter((pi) => pi.planId === subscription.planId);\n for (const planItem of planPlanItems) {\n if (!planItem.editionId)\n continue;\n // Find applications that have this edition\n for (const application of applications) {\n if (application.editionIds && application.editionIds.includes(planItem.editionId)) {\n if (!applicationSet.has(application.id)) {\n applicationSet.add(application.id);\n applicationNames.push(application.title);\n }\n }\n }\n }\n }\n // Count active subscriptions\n const activeSubscriptions = tenantSubscriptions.filter((s) => s.statusId === AXPSystemStatusType.Active);\n results.push({\n tenantId: tenant.id,\n tenantName: tenant.title,\n tenantStatus: tenant.statusId || 'Unknown',\n subscriptionCount: tenantSubscriptions.length,\n applicationsCount: applicationSet.size,\n applicationsList: applicationNames.join(', '),\n activeSubscriptionsCount: activeSubscriptions.length,\n registrationDate: tenant.registrationDate,\n registrationDateStr: tenant.registrationDate?.toISOString(),\n });\n }\n // Apply sorting if provided\n if (input.sort && input.sort.length > 0) {\n results.sort((a, b) => {\n for (const sortField of input.sort) {\n const field = sortField.field;\n const aValue = a[field];\n const bValue = b[field];\n const dir = sortField.dir === 'asc' ? 1 : -1;\n if (aValue === undefined && bValue === undefined)\n continue;\n if (aValue === undefined)\n return 1 * dir;\n if (bValue === undefined)\n return -1 * dir;\n if (aValue < bValue)\n return -1 * dir;\n if (aValue > bValue)\n return 1 * dir;\n }\n return 0;\n });\n }\n else {\n // Default sort by tenant name\n results.sort((a, b) => a.tenantName.localeCompare(b.tenantName));\n }\n // Apply pagination\n const skip = input.skip || 0;\n const take = input.take || 10;\n const total = results.length;\n const items = results.slice(skip, skip + take);\n return {\n items,\n total,\n };\n }\n //#region ---- Custom Filter Handlers ----\n /**\n * Apply date range filter to tenants\n */\n applyDateRangeFilter(tenants, dateRange) {\n if (!dateRange || !dateRange.start || !dateRange.end) {\n return tenants;\n }\n const startDate = new Date(dateRange.start);\n const endDate = new Date(dateRange.end);\n endDate.setHours(23, 59, 59, 999);\n return tenants.filter((tenant) => {\n if (!tenant.registrationDate)\n return false;\n const regDate = new Date(tenant.registrationDate);\n return regDate >= startDate && regDate <= endDate;\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: GetTenantApplicationAccessQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: GetTenantApplicationAccessQuery, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: GetTenantApplicationAccessQuery, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXRlbmFudC1hcHBsaWNhdGlvbi1hY2Nlc3MucXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nvbm5lY3Rpdml0eS9tb2NrL3NyYy9saWIvdGVuYW50LW1hbmFnZW1lbnQvcmVwb3J0cy9nZXQtdGVuYW50LWFwcGxpY2F0aW9uLWFjY2Vzcy5xdWVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQU1sRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxJQUFJLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkYsT0FBTyxFQUFFLFVBQVUsSUFBSSxzQkFBc0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQy9GLE9BQU8sRUFBRSxVQUFVLElBQUkscUJBQXFCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7QUFpQzdGLFlBQVk7QUFLWixNQUFNLE9BQU8sK0JBQStCO0lBSDVDO1FBTW1CLGtCQUFhLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDbEQsa0JBQWEsR0FBRyxJQUFJLENBQUMsYUFBYTthQUN2QyxVQUFVLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDdEYsSUFBSSxFQUFnRCxDQUFDO1FBQ2hELHdCQUFtQixHQUFHLElBQUksQ0FBQyxhQUFhO2FBQzdDLFVBQVUsQ0FBQyxHQUFHLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksc0JBQXNCLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJ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QUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUFF1ZXJ5IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9ydW50aW1lJztcbmltcG9ydCB7IEFYUEVudGl0eVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9lbnRpdHknO1xuaW1wb3J0IHsgQVhNVGVuYW50TWFuYWdlbWVudFRlbmFudEVudGl0eU1vZGVsIH0gZnJvbSAnQGFjb3JleC9tb2R1bGVzL3RlbmFudC1tYW5hZ2VtZW50JztcbmltcG9ydCB7IEFYTVN1YnNjcmlwdGlvbk1hbmFnZW1lbnRTdWJzY3JpcHRpb25FbnRpdHlNb2RlbCB9IGZyb20gJ0BhY29yZXgvbW9kdWxlcy9zdWJzY3JpcHRpb24tbWFuYWdlbWVudCc7XG5pbXBvcnQgeyBBWE1TdWJzY3JpcHRpb25NYW5hZ2VtZW50U3Vic2NyaXB0aW9uUGxhbkVudGl0eU1vZGVsIH0gZnJvbSAnQGFjb3JleC9tb2R1bGVzL3N1YnNjcmlwdGlvbi1tYW5hZ2VtZW50JztcbmltcG9ydCB7IEFYTVN1YnNjcmlwdGlvbk1hbmFnZW1lbnRTdWJzY3JpcHRpb25QbGFuSXRlbUVudGl0eU1vZGVsIH0gZnJvbSAnQGFjb3JleC9tb2R1bGVzL3N1YnNjcmlwdGlvbi1tYW5hZ2VtZW50JztcbmltcG9ydCB7IEFYTUFwcGxpY2F0aW9uTWFuYWdlbWVudEFwcGxpY2F0aW9uRW50aXR5TW9kZWwgfSBmcm9tICdAYWNvcmV4L21vZHVsZXMvYXBwbGljYXRpb24tbWFuYWdlbWVudCc7XG5pbXBvcnQgeyBBWFBTeXN0ZW1TdGF0dXNUeXBlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb21tb24nO1xuaW1wb3J0IHsgUm9vdENvbmZpZyBhcyBUZW5hbnRSb290Q29uZmlnIH0gZnJvbSAnQGFjb3JleC9tb2R1bGVzL3RlbmFudC1tYW5hZ2VtZW50JztcbmltcG9ydCB7IFJvb3RDb25maWcgYXMgU3Vic2NyaXB0aW9uUm9vdENvbmZpZyB9IGZyb20gJ0BhY29yZXgvbW9kdWxlcy9zdWJzY3JpcHRpb24tbWFuYWdlbWVudCc7XG5pbXBvcnQgeyBSb290Q29uZmlnIGFzIEFwcGxpY2F0aW9uUm9vdENvbmZpZyB9IGZyb20gJ0BhY29yZXgvbW9kdWxlcy9hcHBsaWNhdGlvbi1tYW5hZ2VtZW50JztcblxuLy8jcmVnaW9uIC0tLS0gICBRdWVyeSBJbnB1dC9PdXRwdXQgVHlwZXMgICAtLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0VGVuYW50QXBwbGljYXRpb25BY2Nlc3NRdWVyeUlucHV0IHtcbiAgc2tpcD86IG51bWJlcjtcbiAgdGFrZT86IG51bWJlcjtcbiAgc29ydD86IEFycmF5PHsgZmllbGQ6IHN0cmluZzsgZGlyOiAnYXNjJyB8ICdkZXNjJyB9PjtcbiAgZmlsdGVycz86IEFycmF5PHtcbiAgICBmaWVsZDogc3RyaW5nO1xuICAgIG9wZXJhdG9yOiB7IHR5cGU6IHN0cmluZyB9O1xuICAgIHZhbHVlOiBhbnk7XG4gIH0+O1xuICBsb2dpYz86ICdhbmQnIHwgJ29yJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRBcHBsaWNhdGlvbkFjY2Vzc1Jlc3VsdCB7XG4gIHRlbmFudElkOiBzdHJpbmc7XG4gIHRlbmFudE5hbWU6IHN0cmluZztcbiAgdGVuYW50U3RhdHVzOiBzdHJpbmc7XG4gIHN1YnNjcmlwdGlvbkNvdW50OiBudW1iZXI7XG4gIGFwcGxpY2F0aW9uc0NvdW50OiBudW1iZXI7XG4gIGFwcGxpY2F0aW9uc0xpc3Q6IHN0cmluZztcbiAgYWN0aXZlU3Vic2NyaXB0aW9uc0NvdW50OiBudW1iZXI7XG4gIHJlZ2lzdHJhdGlvbkRhdGU/OiBEYXRlO1xuICByZWdpc3RyYXRpb25EYXRlU3RyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldFRlbmFudEFwcGxpY2F0aW9uQWNjZXNzUXVlcnlSZXN1bHQge1xuICBpdGVtczogVGVuYW50QXBwbGljYXRpb25BY2Nlc3NSZXN1bHRbXTtcbiAgdG90YWw6IG51bWJlcjtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBHZXRUZW5hbnRBcHBsaWNhdGlvbkFjY2Vzc1F1ZXJ5XG4gIGltcGxlbWVudHMgQVhQUXVlcnk8R2V0VGVuYW50QXBwbGljYXRpb25BY2Nlc3NRdWVyeUlucHV0LCBHZXRUZW5hbnRBcHBsaWNhdGlvbkFjY2Vzc1F1ZXJ5UmVzdWx0Plxue1xuICBwcml2YXRlIHJlYWRvbmx5IGVudGl0eVNlcnZpY2UgPSBpbmplY3QoQVhQRW50aXR5U2VydmljZSk7XG4gIHByaXZhdGUgdGVuYW50U2VydmljZSA9IHRoaXMuZW50aXR5U2VydmljZVxuICAgIC53aXRoRW50aXR5KGAke1RlbmFudFJvb3RDb25maWcubW9kdWxlLm5hbWV9LiR7VGVuYW50Um9vdENvbmZpZy5lbnRpdGllcy50ZW5hbnQubmFtZX1gKVxuICAgIC5kYXRhPHN0cmluZywgQVhNVGVuYW50TWFuYWdlbWVudFRlbmFudEVudGl0eU1vZGVsPigpO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvblNlcnZpY2UgPSB0aGlzLmVudGl0eVNlcnZpY2VcbiAgICAud2l0aEVudGl0eShgJHtTdWJzY3JpcHRpb25Sb290Q29uZmlnLm1vZHVsZS5uYW1lfS4ke1N1YnNjcmlwdGlvblJvb3RDb25maWcuZW50aXRpZXMuc3Vic2NyaXB0aW9uLm5hbWV9YClcbiAgICAuZGF0YTxzdHJpbmcsIEFYTVN1YnNjcmlwdGlvbk1hbmFnZW1lbnRTdWJzY3JpcHRpb25FbnRpdHlNb2RlbD4oKTtcbiAgcHJpdmF0ZSBwbGFuU2VydmljZSA9IHRoaXMuZW50aXR5U2VydmljZVxuICAgIC53aXRoRW50aXR5KGAke1N1YnNjcmlwdGlvblJvb3RDb25maWcubW9kdWxlLm5hbWV9LiR7U3Vic2NyaXB0aW9uUm9vdENvbmZpZy5lbnRpdGllcy5zdWJzY3JpcHRpb25QbGFuLm5hbWV9YClcbiAgICAuZGF0YTxzdHJpbmcsIEFYTVN1YnNjcmlwdGlvbk1hbmFnZW1lbnRTdWJzY3JpcHRpb25QbGFuRW50aXR5TW9kZWw+KCk7XG4gIHByaXZhdGUgcGxhbkl0ZW1TZXJ2aWNlID0gdGhpcy5lbnRpdHlTZXJ2aWNlXG4gICAgLndpdGhFbnRpdHkoYCR7U3Vic2NyaXB0aW9uUm9vdENvbmZpZy5tb2R1bGUubmFtZX0uJHtTdWJzY3JpcHRpb25Sb290Q29uZmlnLmVudGl0aWVzLnN1YnNjcmlwdGlvblBsYW5JdGVtLm5hbWV9YClcbiAgICAuZGF0YTxzdHJpbmcsIEFYTVN1YnNjcmlwdGlvbk1hbmFnZW1lbnRTdWJzY3JpcHRpb25QbGFuSXRlbUVudGl0eU1vZGVsPigpO1xuICBwcml2YXRlIGFwcGxpY2F0aW9uU2VydmljZSA9IHRoaXMuZW50aXR5U2VydmljZVxuICAgIC53aXRoRW50aXR5KGAke0FwcGxpY2F0aW9uUm9vdENvbmZpZy5tb2R1bGUubmFtZX0uJHtBcHBsaWNhdGlvblJvb3RDb25maWcuZW50aXRpZXMuYXBwbGljYXRpb24ubmFtZX1gKVxuICAgIC5kYXRhPHN0cmluZywgQVhNQXBwbGljYXRpb25NYW5hZ2VtZW50QXBwbGljYXRpb25FbnRpdHlNb2RlbD4oKTtcblxuICBhc3luYyBmZXRjaChpbnB1dDogR2V0VGVuYW50QXBwbGljYXRpb25BY2Nlc3NRdWVyeUlucHV0KTogUHJvbWlzZTxHZXRUZW5hbnRBcHBsaWNhdGlvbkFjY2Vzc1F1ZXJ5UmVzdWx0PiB7XG4gICAgLy8gR2V0IGFsbCB0ZW5hbnRzXG4gICAgY29uc3QgdGVuYW50c1Jlc3VsdCA9IGF3YWl0IHRoaXMudGVuYW50U2VydmljZS5xdWVyeSh7XG4gICAgICBza2lwOiAwLFxuICAgICAgdGFrZTogMTAwMDAsXG4gICAgICBmaWx0ZXI6XG4gICAgICAgIGlucHV0LmZpbHRlcnMgJiYgaW5wdXQuZmlsdGVycy5sZW5ndGggPiAwXG4gICAgICAgICAgPyAoe1xuICAgICAgICAgICAgICBsb2dpYzogaW5wdXQubG9naWMgfHwgJ2FuZCcsXG4gICAgICAgICAgICAgIGZpbHRlcnM6IGlucHV0LmZpbHRlcnMuZmlsdGVyKChmKSA9PiBmLmZpZWxkICE9PSAnZGF0ZVJhbmdlJyksXG4gICAgICAgICAgICB9IGFzIGFueSlcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIGxldCB0ZW5hbnRzID0gdGVuYW50c1Jlc3VsdC5pdGVtcztcblxuICAgIC8vIEFwcGx5IGRhdGUgcmFuZ2UgZmlsdGVyIGlmIHByb3ZpZGVkXG4gICAgaWYgKGlucHV0LmZpbHRlcnMpIHtcbiAgICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGlucHV0LmZpbHRlcnMpIHtcbiAgICAgICAgaWYgKGZpbHRlci5maWVsZCA9PT0gJ2RhdGVSYW5nZScgJiYgZmlsdGVyLnZhbHVlKSB7XG4gICAgICAgICAgdGVuYW50cyA9IHRoaXMuYXBwbHlEYXRlUmFuZ2VGaWx0ZXIodGVuYW50cywgZmlsdGVyLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEdldCBhbGwgc3Vic2NyaXB0aW9uc1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbnNSZXN1bHQgPSBhd2FpdCB0aGlzLnN1YnNjcmlwdGlvblNlcnZpY2UucXVlcnkoe1xuICAgICAgc2tpcDogMCxcbiAgICAgIHRha2U6IDEwMDAwLFxuICAgIH0pO1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSBzdWJzY3JpcHRpb25zUmVzdWx0Lml0ZW1zLmZpbHRlcigocykgPT4gcy5zdWJzY3JpYmVyVHlwZSA9PT0gJ1RlbmFudCcpO1xuXG4gICAgLy8gR2V0IGFsbCBwbGFuc1xuICAgIGNvbnN0IHBsYW5zUmVzdWx0ID0gYXdhaXQgdGhpcy5wbGFuU2VydmljZS5xdWVyeSh7XG4gICAgICBza2lwOiAwLFxuICAgICAgdGFrZTogMTAwMDAsXG4gICAgfSk7XG4gICAgY29uc3QgcGxhbnMgPSBwbGFuc1Jlc3VsdC5pdGVtcztcblxuICAgIC8vIEdldCBhbGwgcGxhbiBpdGVtc1xuICAgIGNvbnN0IHBsYW5JdGVtc1Jlc3VsdCA9IGF3YWl0IHRoaXMucGxhbkl0ZW1TZXJ2aWNlLnF1ZXJ5KHtcbiAgICAgIHNraXA6IDAsXG4gICAgICB0YWtlOiAxMDAwMCxcbiAgICB9KTtcbiAgICBjb25zdCBwbGFuSXRlbXMgPSBwbGFuSXRlbXNSZXN1bHQuaXRlbXM7XG5cbiAgICAvLyBHZXQgYWxsIGFwcGxpY2F0aW9uc1xuICAgIGNvbnN0IGFwcGxpY2F0aW9uc1Jlc3VsdCA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLnF1ZXJ5KHtcbiAgICAgIHNraXA6IDAsXG4gICAgICB0YWtlOiAxMDAwMCxcbiAgICB9KTtcbiAgICBjb25zdCBhcHBsaWNhdGlvbnMgPSBhcHBsaWNhdGlvbnNSZXN1bHQuaXRlbXM7XG5cbiAgICAvLyBCdWlsZCByZXN1bHRzIGZvciBlYWNoIHRlbmFudFxuICAgIGNvbnN0IHJlc3VsdHM6IFRlbmFudEFwcGxpY2F0aW9uQWNjZXNzUmVzdWx0W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgdGVuYW50IG9mIHRlbmFudHMpIHtcbiAgICAgIC8vIEdldCB0ZW5hbnQncyBzdWJzY3JpcHRpb25zXG4gICAgICBjb25zdCB0ZW5hbnRTdWJzY3JpcHRpb25zID0gc3Vic2NyaXB0aW9ucy5maWx0ZXIoKHMpID0+IHMuc3Vic2NyaWJlcklkID09PSB0ZW5hbnQuaWQpO1xuXG4gICAgICAvLyBHZXQgdW5pcXVlIGFwcGxpY2F0aW9ucyB0aHJvdWdoIHN1YnNjcmlwdGlvbnMg4oaSIHBsYW5zIOKGkiBwbGFuIGl0ZW1zIOKGkiBlZGl0aW9ucyDihpIgYXBwbGljYXRpb25zXG4gICAgICBjb25zdCBhcHBsaWNhdGlvblNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgY29uc3QgYXBwbGljYXRpb25OYW1lczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2YgdGVuYW50U3Vic2NyaXB0aW9ucykge1xuICAgICAgICBpZiAoIXN1YnNjcmlwdGlvbi5wbGFuSWQpIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIEdldCBwbGFuIGl0ZW1zIGZvciB0aGlzIHBsYW5cbiAgICAgICAgY29uc3QgcGxhblBsYW5JdGVtcyA9IHBsYW5JdGVtcy5maWx0ZXIoKHBpKSA9PiBwaS5wbGFuSWQgPT09IHN1YnNjcmlwdGlvbi5wbGFuSWQpO1xuXG4gICAgICAgIGZvciAoY29uc3QgcGxhbkl0ZW0gb2YgcGxhblBsYW5JdGVtcykge1xuICAgICAgICAgIGlmICghcGxhbkl0ZW0uZWRpdGlvbklkKSBjb250aW51ZTtcblxuICAgICAgICAgIC8vIEZpbmQgYXBwbGljYXRpb25zIHRoYXQgaGF2ZSB0aGlzIGVkaXRpb25cbiAgICAgICAgICBmb3IgKGNvbnN0IGFwcGxpY2F0aW9uIG9mIGFwcGxpY2F0aW9ucykge1xuICAgICAgICAgICAgaWYgKGFwcGxpY2F0aW9uLmVkaXRpb25JZHMgJiYgYXBwbGljYXRpb24uZWRpdGlvbklkcy5pbmNsdWRlcyhwbGFuSXRlbS5lZGl0aW9uSWQpKSB7XG4gICAgICAgICAgICAgIGlmICghYXBwbGljYXRpb25TZXQuaGFzKGFwcGxpY2F0aW9uLmlkKSkge1xuICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uU2V0LmFkZChhcHBsaWNhdGlvbi5pZCk7XG4gICAgICAgICAgICAgICAgYXBwbGljYXRpb25OYW1lcy5wdXNoKGFwcGxpY2F0aW9uLnRpdGxlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDb3VudCBhY3RpdmUgc3Vic2NyaXB0aW9uc1xuICAgICAgY29uc3QgYWN0aXZlU3Vic2NyaXB0aW9ucyA9IHRlbmFudFN1YnNjcmlwdGlvbnMuZmlsdGVyKFxuICAgICAgICAocykgPT4gcy5zdGF0dXNJZCA9PT0gQVhQU3lzdGVtU3RhdHVzVHlwZS5BY3RpdmVcbiAgICAgICk7XG5cbiAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgIHRlbmFudElkOiB0ZW5hbnQuaWQsXG4gICAgICAgIHRlbmFudE5hbWU6IHRlbmFudC50aXRsZSxcbiAgICAgICAgdGVuYW50U3RhdHVzOiB0ZW5hbnQuc3RhdHVzSWQgfHwgJ1Vua25vd24nLFxuICAgICAgICBzdWJzY3JpcHRpb25Db3VudDogdGVuYW50U3Vic2NyaXB0aW9ucy5sZW5ndGgsXG4gICAgICAgIGFwcGxpY2F0aW9uc0NvdW50OiBhcHBsaWNhdGlvblNldC5zaXplLFxuICAgICAgICBhcHBsaWNhdGlvbnNMaXN0OiBhcHBsaWNhdGlvbk5hbWVzLmpvaW4oJywgJyksXG4gICAgICAgIGFjdGl2ZVN1YnNjcmlwdGlvbnNDb3VudDogYWN0aXZlU3Vic2NyaXB0aW9ucy5sZW5ndGgsXG4gICAgICAgIHJlZ2lzdHJhdGlvbkRhdGU6IHRlbmFudC5yZWdpc3RyYXRpb25EYXRlLFxuICAgICAgICByZWdpc3RyYXRpb25EYXRlU3RyOiB0ZW5hbnQucmVnaXN0cmF0aW9uRGF0ZT8udG9JU09TdHJpbmcoKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFwcGx5IHNvcnRpbmcgaWYgcHJvdmlkZWRcbiAgICBpZiAoaW5wdXQuc29ydCAmJiBpbnB1dC5zb3J0Lmxlbmd0aCA+IDApIHtcbiAgICAgIHJlc3VsdHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHNvcnRGaWVsZCBvZiBpbnB1dC5zb3J0ISkge1xuICAgICAgICAgIGNvbnN0IGZpZWxkID0gc29ydEZpZWxkLmZpZWxkIGFzIGtleW9mIFRlbmFudEFwcGxpY2F0aW9uQWNjZXNzUmVzdWx0O1xuICAgICAgICAgIGNvbnN0IGFWYWx1ZSA9IGFbZmllbGRdO1xuICAgICAgICAgIGNvbnN0IGJWYWx1ZSA9IGJbZmllbGRdO1xuICAgICAgICAgIGNvbnN0IGRpciA9IHNvcnRGaWVsZC5kaXIgPT09ICdhc2MnID8gMSA6IC0xO1xuXG4gICAgICAgICAgaWYgKGFWYWx1ZSA9PT0gdW5kZWZpbmVkICYmIGJWYWx1ZSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICAgICAgICBpZiAoYVZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiAxICogZGlyO1xuICAgICAgICAgIGlmIChiVmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIC0xICogZGlyO1xuXG4gICAgICAgICAgaWYgKGFWYWx1ZSA8IGJWYWx1ZSkgcmV0dXJuIC0xICogZGlyO1xuICAgICAgICAgIGlmIChhVmFsdWUgPiBiVmFsdWUpIHJldHVybiAxICogZGlyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERlZmF1bHQgc29ydCBieSB0ZW5hbnQgbmFtZVxuICAgICAgcmVzdWx0cy5zb3J0KChhLCBiKSA9PiBhLnRlbmFudE5hbWUubG9jYWxlQ29tcGFyZShiLnRlbmFudE5hbWUpKTtcbiAgICB9XG5cbiAgICAvLyBBcHBseSBwYWdpbmF0aW9uXG4gICAgY29uc3Qgc2tpcCA9IGlucHV0LnNraXAgfHwgMDtcbiAgICBjb25zdCB0YWtlID0gaW5wdXQudGFrZSB8fCAxMDtcbiAgICBjb25zdCB0b3RhbCA9IHJlc3VsdHMubGVuZ3RoO1xuICAgIGNvbnN0IGl0ZW1zID0gcmVzdWx0cy5zbGljZShza2lwLCBza2lwICsgdGFrZSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXMsXG4gICAgICB0b3RhbCxcbiAgICB9O1xuICB9XG5cbiAgLy8jcmVnaW9uIC0tLS0gICBDdXN0b20gRmlsdGVyIEhhbmRsZXJzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBBcHBseSBkYXRlIHJhbmdlIGZpbHRlciB0byB0ZW5hbnRzXG4gICAqL1xuICBwcml2YXRlIGFwcGx5RGF0ZVJhbmdlRmlsdGVyKFxuICAgIHRlbmFudHM6IEFYTVRlbmFudE1hbmFnZW1lbnRUZW5hbnRFbnRpdHlNb2RlbFtdLFxuICAgIGRhdGVSYW5nZTogYW55XG4gICk6IEFYTVRlbmFudE1hbmFnZW1lbnRUZW5hbnRFbnRpdHlNb2RlbFtdIHtcbiAgICBpZiAoIWRhdGVSYW5nZSB8fCAhZGF0ZVJhbmdlLnN0YXJ0IHx8ICFkYXRlUmFuZ2UuZW5kKSB7XG4gICAgICByZXR1cm4gdGVuYW50cztcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydERhdGUgPSBuZXcgRGF0ZShkYXRlUmFuZ2Uuc3RhcnQpO1xuICAgIGNvbnN0IGVuZERhdGUgPSBuZXcgRGF0ZShkYXRlUmFuZ2UuZW5kKTtcbiAgICBlbmREYXRlLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSk7XG5cbiAgICByZXR1cm4gdGVuYW50cy5maWx0ZXIoKHRlbmFudCkgPT4ge1xuICAgICAgaWYgKCF0ZW5hbnQucmVnaXN0cmF0aW9uRGF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3QgcmVnRGF0ZSA9IG5ldyBEYXRlKHRlbmFudC5yZWdpc3RyYXRpb25EYXRlKTtcbiAgICAgIHJldHVybiByZWdEYXRlID49IHN0YXJ0RGF0ZSAmJiByZWdEYXRlIDw9IGVuZERhdGU7XG4gICAgfSk7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cbn1cblxuIl19"],"names":["TenantRootConfig","SubscriptionRootConfig","ApplicationRootConfig"],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, Injectable } from '@angular/core';
3
+ import { GetTenantRegistrationTimelineQuery } from './acorex-connectivity-mock-get-tenant-registration-timeline.query-hskw8Ioa.mjs';
4
+
5
+ //#endregion
6
+ class GetTenantRegistrationChartDataQuery {
7
+ constructor() {
8
+ this.tenantRegistrationTimelineQuery = inject(GetTenantRegistrationTimelineQuery);
9
+ }
10
+ async fetch(input) {
11
+ // Get all tenant registration timeline data (no pagination for charts)
12
+ const timelineResult = await this.tenantRegistrationTimelineQuery.fetch({
13
+ skip: 0,
14
+ take: 10000,
15
+ filters: input.filters,
16
+ logic: input.logic,
17
+ });
18
+ // Group by month
19
+ const monthGroups = new Map();
20
+ for (const item of timelineResult.items) {
21
+ const monthKey = `${item.year}-${String(item.monthNumber).padStart(2, '0')}`;
22
+ if (!monthGroups.has(monthKey)) {
23
+ monthGroups.set(monthKey, {
24
+ month: item.month,
25
+ year: item.year,
26
+ quarter: item.quarter,
27
+ tenantCount: 0,
28
+ });
29
+ }
30
+ const group = monthGroups.get(monthKey);
31
+ group.tenantCount++;
32
+ }
33
+ // Convert to array and sort by date
34
+ const results = Array.from(monthGroups.values()).sort((a, b) => {
35
+ if (a.year !== b.year)
36
+ return a.year - b.year;
37
+ const monthA = new Date(`${a.month} 1, ${a.year}`).getMonth();
38
+ const monthB = new Date(`${b.month} 1, ${b.year}`).getMonth();
39
+ return monthA - monthB;
40
+ });
41
+ return {
42
+ items: results,
43
+ };
44
+ }
45
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: GetTenantRegistrationChartDataQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
46
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: GetTenantRegistrationChartDataQuery, providedIn: 'root' }); }
47
+ }
48
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: GetTenantRegistrationChartDataQuery, decorators: [{
49
+ type: Injectable,
50
+ args: [{
51
+ providedIn: 'root',
52
+ }]
53
+ }] });
54
+
55
+ export { GetTenantRegistrationChartDataQuery };
56
+ //# sourceMappingURL=acorex-connectivity-mock-get-tenant-registration-chart-data.query-DlXi4Rcg.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-connectivity-mock-get-tenant-registration-chart-data.query-DlXi4Rcg.mjs","sources":["../tmp-esm2022/mock/lib/tenant-management/reports/get-tenant-registration-chart-data.query.js"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { GetTenantRegistrationTimelineQuery } from './get-tenant-registration-timeline.query';\nimport * as i0 from \"@angular/core\";\n//#endregion\nexport class GetTenantRegistrationChartDataQuery {\n constructor() {\n this.tenantRegistrationTimelineQuery = inject(GetTenantRegistrationTimelineQuery);\n }\n async fetch(input) {\n // Get all tenant registration timeline data (no pagination for charts)\n const timelineResult = await this.tenantRegistrationTimelineQuery.fetch({\n skip: 0,\n take: 10000,\n filters: input.filters,\n logic: input.logic,\n });\n // Group by month\n const monthGroups = new Map();\n for (const item of timelineResult.items) {\n const monthKey = `${item.year}-${String(item.monthNumber).padStart(2, '0')}`;\n if (!monthGroups.has(monthKey)) {\n monthGroups.set(monthKey, {\n month: item.month,\n year: item.year,\n quarter: item.quarter,\n tenantCount: 0,\n });\n }\n const group = monthGroups.get(monthKey);\n group.tenantCount++;\n }\n // Convert to array and sort by date\n const results = Array.from(monthGroups.values()).sort((a, b) => {\n if (a.year !== b.year)\n return a.year - b.year;\n const monthA = new Date(`${a.month} 1, ${a.year}`).getMonth();\n const monthB = new Date(`${b.month} 1, ${b.year}`).getMonth();\n return monthA - monthB;\n });\n return {\n items: results,\n };\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: GetTenantRegistrationChartDataQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: GetTenantRegistrationChartDataQuery, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: GetTenantRegistrationChartDataQuery, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXRlbmFudC1yZWdpc3RyYXRpb24tY2hhcnQtZGF0YS5xdWVyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29ubmVjdGl2aXR5L21vY2svc3JjL2xpYi90ZW5hbnQtbWFuYWdlbWVudC9yZXBvcnRzL2dldC10ZW5hbnQtcmVnaXN0cmF0aW9uLWNoYXJ0LWRhdGEucXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHbkQsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sMENBQTBDLENBQUM7O0FBd0I5RixZQUFZO0FBS1osTUFBTSxPQUFPLG1DQUFtQztJQUhoRDtRQU1tQixvQ0FBK0IsR0FBRyxNQUFNLENBQUMsa0NBQWtDLENBQUMsQ0FBQztLQTBDL0Y7SUF4Q0MsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUErQztRQUN6RCx1RUFBdUU7UUFDdkUsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsK0JBQStCLENBQUMsS0FBSyxDQUFDO1lBQ3RFLElBQUksRUFBRSxDQUFDO1lBQ1AsSUFBSSxFQUFFLEtBQUs7WUFDWCxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDdEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO1NBQ25CLENBQUMsQ0FBQztRQUVILGlCQUFpQjtRQUNqQixNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBNkMsQ0FBQztRQUV6RSxLQUFLLE1BQU0sSUFBSSxJQUFJLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN4QyxNQUFNLFFBQVEsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFFN0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDL0IsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUU7b0JBQ3hCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztvQkFDakIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO29CQUNmLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztvQkFDckIsV0FBVyxFQUFFLENBQUM7aUJBQ2YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFFLENBQUM7WUFDekMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3RCLENBQUM7UUFFRCxvQ0FBb0M7UUFDcEMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDN0QsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJO2dCQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzlDLE1BQU0sTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM5RCxNQUFNLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDOUQsT0FBTyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTztZQUNMLEtBQUssRUFBRSxPQUFPO1NBQ2YsQ0FBQztJQUNKLENBQUM7K0dBNUNVLG1DQUFtQzttSEFBbkMsbUNBQW1DLGNBRmxDLE1BQU07OzRGQUVQLG1DQUFtQztrQkFIL0MsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUFF1ZXJ5IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9ydW50aW1lJztcbmltcG9ydCB7IEdldFRlbmFudFJlZ2lzdHJhdGlvblRpbWVsaW5lUXVlcnlJbnB1dCB9IGZyb20gJy4vZ2V0LXRlbmFudC1yZWdpc3RyYXRpb24tdGltZWxpbmUucXVlcnknO1xuaW1wb3J0IHsgR2V0VGVuYW50UmVnaXN0cmF0aW9uVGltZWxpbmVRdWVyeSB9IGZyb20gJy4vZ2V0LXRlbmFudC1yZWdpc3RyYXRpb24tdGltZWxpbmUucXVlcnknO1xuXG4vLyNyZWdpb24gLS0tLSAgIFF1ZXJ5IElucHV0L091dHB1dCBUeXBlcyAgIC0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRUZW5hbnRSZWdpc3RyYXRpb25DaGFydERhdGFRdWVyeUlucHV0IHtcbiAgZmlsdGVycz86IEFycmF5PHtcbiAgICBmaWVsZDogc3RyaW5nO1xuICAgIG9wZXJhdG9yOiB7IHR5cGU6IHN0cmluZyB9O1xuICAgIHZhbHVlOiBhbnk7XG4gIH0+O1xuICBsb2dpYz86ICdhbmQnIHwgJ29yJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRSZWdpc3RyYXRpb25DaGFydERhdGFSZXN1bHQge1xuICBtb250aDogc3RyaW5nO1xuICB5ZWFyOiBudW1iZXI7XG4gIHF1YXJ0ZXI6IHN0cmluZztcbiAgdGVuYW50Q291bnQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRUZW5hbnRSZWdpc3RyYXRpb25DaGFydERhdGFRdWVyeVJlc3VsdCB7XG4gIGl0ZW1zOiBUZW5hbnRSZWdpc3RyYXRpb25DaGFydERhdGFSZXN1bHRbXTtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBHZXRUZW5hbnRSZWdpc3RyYXRpb25DaGFydERhdGFRdWVyeVxuICBpbXBsZW1lbnRzIEFYUFF1ZXJ5PEdldFRlbmFudFJlZ2lzdHJhdGlvbkNoYXJ0RGF0YVF1ZXJ5SW5wdXQsIEdldFRlbmFudFJlZ2lzdHJhdGlvbkNoYXJ0RGF0YVF1ZXJ5UmVzdWx0Plxue1xuICBwcml2YXRlIHJlYWRvbmx5IHRlbmFudFJlZ2lzdHJhdGlvblRpbWVsaW5lUXVlcnkgPSBpbmplY3QoR2V0VGVuYW50UmVnaXN0cmF0aW9uVGltZWxpbmVRdWVyeSk7XG5cbiAgYXN5bmMgZmV0Y2goaW5wdXQ6IEdldFRlbmFudFJlZ2lzdHJhdGlvbkNoYXJ0RGF0YVF1ZXJ5SW5wdXQpOiBQcm9taXNlPEdldFRlbmFudFJlZ2lzdHJhdGlvbkNoYXJ0RGF0YVF1ZXJ5UmVzdWx0PiB7XG4gICAgLy8gR2V0IGFsbCB0ZW5hbnQgcmVnaXN0cmF0aW9uIHRpbWVsaW5lIGRhdGEgKG5vIHBhZ2luYXRpb24gZm9yIGNoYXJ0cylcbiAgICBjb25zdCB0aW1lbGluZVJlc3VsdCA9IGF3YWl0IHRoaXMudGVuYW50UmVnaXN0cmF0aW9uVGltZWxpbmVRdWVyeS5mZXRjaCh7XG4gICAgICBza2lwOiAwLFxuICAgICAgdGFrZTogMTAwMDAsXG4gICAgICBmaWx0ZXJzOiBpbnB1dC5maWx0ZXJzLFxuICAgICAgbG9naWM6IGlucHV0LmxvZ2ljLFxuICAgIH0pO1xuXG4gICAgLy8gR3JvdXAgYnkgbW9udGhcbiAgICBjb25zdCBtb250aEdyb3VwcyA9IG5ldyBNYXA8c3RyaW5nLCBUZW5hbnRSZWdpc3RyYXRpb25DaGFydERhdGFSZXN1bHQ+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGltZWxpbmVSZXN1bHQuaXRlbXMpIHtcbiAgICAgIGNvbnN0IG1vbnRoS2V5ID0gYCR7aXRlbS55ZWFyfS0ke1N0cmluZyhpdGVtLm1vbnRoTnVtYmVyKS5wYWRTdGFydCgyLCAnMCcpfWA7XG5cbiAgICAgIGlmICghbW9udGhHcm91cHMuaGFzKG1vbnRoS2V5KSkge1xuICAgICAgICBtb250aEdyb3Vwcy5zZXQobW9udGhLZXksIHtcbiAgICAgICAgICBtb250aDogaXRlbS5tb250aCxcbiAgICAgICAgICB5ZWFyOiBpdGVtLnllYXIsXG4gICAgICAgICAgcXVhcnRlcjogaXRlbS5xdWFydGVyLFxuICAgICAgICAgIHRlbmFudENvdW50OiAwLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ3JvdXAgPSBtb250aEdyb3Vwcy5nZXQobW9udGhLZXkpITtcbiAgICAgIGdyb3VwLnRlbmFudENvdW50Kys7XG4gICAgfVxuXG4gICAgLy8gQ29udmVydCB0byBhcnJheSBhbmQgc29ydCBieSBkYXRlXG4gICAgY29uc3QgcmVzdWx0cyA9IEFycmF5LmZyb20obW9udGhHcm91cHMudmFsdWVzKCkpLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGlmIChhLnllYXIgIT09IGIueWVhcikgcmV0dXJuIGEueWVhciAtIGIueWVhcjtcbiAgICAgIGNvbnN0IG1vbnRoQSA9IG5ldyBEYXRlKGAke2EubW9udGh9IDEsICR7YS55ZWFyfWApLmdldE1vbnRoKCk7XG4gICAgICBjb25zdCBtb250aEIgPSBuZXcgRGF0ZShgJHtiLm1vbnRofSAxLCAke2IueWVhcn1gKS5nZXRNb250aCgpO1xuICAgICAgcmV0dXJuIG1vbnRoQSAtIG1vbnRoQjtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBpdGVtczogcmVzdWx0cyxcbiAgICB9O1xuICB9XG59XG5cbiJdfQ=="],"names":[],"mappings":"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"}
@@ -0,0 +1,216 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, Injectable } from '@angular/core';
3
+ import { AXPEntityService } from '@acorex/platform/layout/entity';
4
+ import { RootConfig } from '@acorex/modules/tenant-management';
5
+ import { RootConfig as RootConfig$1 } from '@acorex/modules/subscription-management';
6
+ import { RootConfig as RootConfig$2 } from '@acorex/modules/application-management';
7
+
8
+ //#endregion
9
+ class GetTenantRegistrationTimelineQuery {
10
+ constructor() {
11
+ this.entityService = inject(AXPEntityService);
12
+ this.tenantService = this.entityService
13
+ .withEntity(`${RootConfig.module.name}.${RootConfig.entities.tenant.name}`)
14
+ .data();
15
+ this.tenantUserService = this.entityService
16
+ .withEntity(`${RootConfig.module.name}.${RootConfig.entities.tenantUser.name}`)
17
+ .data();
18
+ this.subscriptionService = this.entityService
19
+ .withEntity(`${RootConfig$1.module.name}.${RootConfig$1.entities.subscription.name}`)
20
+ .data();
21
+ this.planItemService = this.entityService
22
+ .withEntity(`${RootConfig$1.module.name}.${RootConfig$1.entities.subscriptionPlanItem.name}`)
23
+ .data();
24
+ this.applicationService = this.entityService
25
+ .withEntity(`${RootConfig$2.module.name}.${RootConfig$2.entities.application.name}`)
26
+ .data();
27
+ }
28
+ async fetch(input) {
29
+ // Get all tenants
30
+ const tenantsResult = await this.tenantService.query({
31
+ skip: 0,
32
+ take: 10000,
33
+ filter: input.filters && input.filters.length > 0
34
+ ? {
35
+ logic: input.logic || 'and',
36
+ filters: input.filters.filter((f) => f.field !== 'dateRange'),
37
+ }
38
+ : undefined,
39
+ });
40
+ let tenants = tenantsResult.items.filter((t) => t.registrationDate);
41
+ // Apply date range filter if provided
42
+ if (input.filters) {
43
+ for (const filter of input.filters) {
44
+ if (filter.field === 'dateRange' && filter.value) {
45
+ tenants = this.applyDateRangeFilter(tenants, filter.value);
46
+ }
47
+ }
48
+ }
49
+ // Get all tenant users for counting
50
+ const tenantUsersResult = await this.tenantUserService.query({
51
+ skip: 0,
52
+ take: 10000,
53
+ });
54
+ const tenantUsers = tenantUsersResult.items;
55
+ // Get all subscriptions for counting
56
+ const subscriptionsResult = await this.subscriptionService.query({
57
+ skip: 0,
58
+ take: 10000,
59
+ });
60
+ const subscriptions = subscriptionsResult.items.filter((s) => s.subscriberType === 'Tenant');
61
+ // Get all plan items and applications for application counting
62
+ const planItemsResult = await this.planItemService.query({
63
+ skip: 0,
64
+ take: 10000,
65
+ });
66
+ const planItems = planItemsResult.items;
67
+ const applicationsResult = await this.applicationService.query({
68
+ skip: 0,
69
+ take: 10000,
70
+ });
71
+ const applications = applicationsResult.items;
72
+ // Get application counts for tenants
73
+ const applicationCounts = await this.getApplicationCountsForTenants(tenants.map((t) => t.id), subscriptions, planItems, applications);
74
+ // Build results
75
+ const results = [];
76
+ for (const tenant of tenants) {
77
+ if (!tenant.registrationDate)
78
+ continue;
79
+ const registrationDate = new Date(tenant.registrationDate);
80
+ // Extract time period info
81
+ const year = registrationDate.getFullYear();
82
+ const month = registrationDate.getMonth() + 1;
83
+ const monthName = registrationDate.toLocaleString('en-US', { month: 'long' });
84
+ const quarter = Math.ceil(month / 3);
85
+ const quarterName = `Q${quarter}`;
86
+ // Count users for this tenant
87
+ const userCount = tenantUsers.filter((tu) => tu.tenantId === tenant.id).length;
88
+ // Count subscriptions for this tenant
89
+ const subscriptionCount = subscriptions.filter((s) => s.subscriberId === tenant.id).length;
90
+ // Get application count
91
+ const applicationCount = applicationCounts.get(tenant.id) || 0;
92
+ results.push({
93
+ tenantId: tenant.id,
94
+ tenantName: tenant.title,
95
+ registrationDate: registrationDate,
96
+ registrationDateStr: registrationDate.toISOString(),
97
+ status: tenant.statusId || 'Unknown',
98
+ country: tenant.country?.title,
99
+ userCount: userCount,
100
+ applicationCount: applicationCount,
101
+ subscriptionCount: subscriptionCount,
102
+ month: monthName,
103
+ monthNumber: month,
104
+ quarter: quarterName,
105
+ year: year,
106
+ });
107
+ }
108
+ // Apply sorting if provided
109
+ if (input.sort && input.sort.length > 0) {
110
+ results.sort((a, b) => {
111
+ for (const sortField of input.sort) {
112
+ const field = sortField.field;
113
+ const aValue = a[field];
114
+ const bValue = b[field];
115
+ const dir = sortField.dir === 'asc' ? 1 : -1;
116
+ if (aValue === undefined && bValue === undefined)
117
+ continue;
118
+ if (aValue === undefined)
119
+ return 1 * dir;
120
+ if (bValue === undefined)
121
+ return -1 * dir;
122
+ // Handle date comparison
123
+ if (field === 'registrationDate') {
124
+ const aDate = a.registrationDate.getTime();
125
+ const bDate = b.registrationDate.getTime();
126
+ if (aDate < bDate)
127
+ return -1 * dir;
128
+ if (aDate > bDate)
129
+ return 1 * dir;
130
+ continue;
131
+ }
132
+ if (aValue < bValue)
133
+ return -1 * dir;
134
+ if (aValue > bValue)
135
+ return 1 * dir;
136
+ }
137
+ return 0;
138
+ });
139
+ }
140
+ else {
141
+ // Default sort by registration date descending (newest first)
142
+ results.sort((a, b) => {
143
+ return b.registrationDate.getTime() - a.registrationDate.getTime();
144
+ });
145
+ }
146
+ // Apply pagination
147
+ const skip = input.skip || 0;
148
+ const take = input.take || 10;
149
+ const total = results.length;
150
+ const items = results.slice(skip, skip + take);
151
+ return {
152
+ items,
153
+ total,
154
+ };
155
+ }
156
+ //#region ---- Helper Methods ----
157
+ /**
158
+ * Get application counts for tenants
159
+ */
160
+ async getApplicationCountsForTenants(tenantIds, subscriptions, planItems, applications) {
161
+ const counts = new Map();
162
+ for (const tenantId of tenantIds) {
163
+ const tenantSubscriptions = subscriptions.filter((s) => s.subscriberId === tenantId);
164
+ // Get unique applications through subscriptions → plans → plan items → editions → applications
165
+ const applicationSet = new Set();
166
+ for (const subscription of tenantSubscriptions) {
167
+ if (!subscription.planId)
168
+ continue;
169
+ // Get plan items for this plan
170
+ const planPlanItems = planItems.filter((pi) => pi.planId === subscription.planId);
171
+ for (const planItem of planPlanItems) {
172
+ if (!planItem.editionId)
173
+ continue;
174
+ // Find applications that have this edition
175
+ for (const application of applications) {
176
+ if (application.editionIds && application.editionIds.includes(planItem.editionId)) {
177
+ applicationSet.add(application.id);
178
+ }
179
+ }
180
+ }
181
+ }
182
+ counts.set(tenantId, applicationSet.size);
183
+ }
184
+ return counts;
185
+ }
186
+ //#endregion
187
+ //#region ---- Custom Filter Handlers ----
188
+ /**
189
+ * Apply date range filter to tenants
190
+ */
191
+ applyDateRangeFilter(tenants, dateRange) {
192
+ if (!dateRange || !dateRange.start || !dateRange.end) {
193
+ return tenants;
194
+ }
195
+ const startDate = new Date(dateRange.start);
196
+ const endDate = new Date(dateRange.end);
197
+ endDate.setHours(23, 59, 59, 999);
198
+ return tenants.filter((tenant) => {
199
+ if (!tenant.registrationDate)
200
+ return false;
201
+ const regDate = new Date(tenant.registrationDate);
202
+ return regDate >= startDate && regDate <= endDate;
203
+ });
204
+ }
205
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: GetTenantRegistrationTimelineQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
206
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: GetTenantRegistrationTimelineQuery, providedIn: 'root' }); }
207
+ }
208
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: GetTenantRegistrationTimelineQuery, decorators: [{
209
+ type: Injectable,
210
+ args: [{
211
+ providedIn: 'root',
212
+ }]
213
+ }] });
214
+
215
+ export { GetTenantRegistrationTimelineQuery };
216
+ //# sourceMappingURL=acorex-connectivity-mock-get-tenant-registration-timeline.query-hskw8Ioa.mjs.map