@acorex/connectivity 20.7.5 → 20.7.7

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.
@@ -0,0 +1,213 @@
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/human-capital-management';
5
+
6
+ //#endregion
7
+ class GetEmployeeListQuery {
8
+ constructor() {
9
+ this.entityService = inject(AXPEntityService);
10
+ this.employeeService = this.entityService
11
+ .withEntity(`${RootConfig.module.name}.${RootConfig.entities.employee.name}`)
12
+ .data();
13
+ }
14
+ async fetch(input) {
15
+ // Extract employee-specific filters from AXPFilterClause format
16
+ const extractedFilters = this.extractEmployeeFilters(input.filters);
17
+ // Separate custom filters from entity filters
18
+ const entityFilters = [];
19
+ if (extractedFilters && extractedFilters.length > 0) {
20
+ for (const filter of extractedFilters) {
21
+ entityFilters.push(filter);
22
+ }
23
+ }
24
+ // Get all employees from storage with entity filters
25
+ const allEmployeesResult = await this.employeeService.query({
26
+ skip: 0,
27
+ take: 10000, // Get all employees for aggregation
28
+ filter: entityFilters.length > 0
29
+ ? {
30
+ logic: input.logic || 'and',
31
+ filters: entityFilters,
32
+ }
33
+ : undefined,
34
+ });
35
+ const allEmployees = allEmployeesResult.items;
36
+ // Group employees by department and team
37
+ const departmentGroups = new Map();
38
+ for (const employee of allEmployees) {
39
+ // Get department from position (assuming position has departmentId)
40
+ const departmentId = employee.position?.departmentId || employee.departmentId || 'unknown';
41
+ const departmentTitle = employee.position?.department?.title || 'Unknown Department';
42
+ // Get team from team memberships (assuming employee has teamId or teamMemberships)
43
+ const teamId = employee.teamId || employee.teamMemberships?.[0]?.teamId || undefined;
44
+ const teamTitle = employee.team?.title || employee.teamMemberships?.[0]?.team?.title || undefined;
45
+ const teamKey = teamId || 'no-team';
46
+ if (!departmentGroups.has(departmentId)) {
47
+ departmentGroups.set(departmentId, new Map());
48
+ }
49
+ const teamMap = departmentGroups.get(departmentId);
50
+ if (!teamMap.has(teamKey)) {
51
+ teamMap.set(teamKey, []);
52
+ }
53
+ teamMap.get(teamKey).push(employee);
54
+ }
55
+ // Aggregate data by department and team
56
+ const aggregatedResults = [];
57
+ for (const [departmentId, teamMap] of departmentGroups.entries()) {
58
+ const firstEmployee = Array.from(teamMap.values())[0]?.[0];
59
+ const departmentTitle = firstEmployee?.position?.department?.title || 'Unknown Department';
60
+ for (const [teamKey, employees] of teamMap.entries()) {
61
+ const teamId = teamKey !== 'no-team' ? teamKey : undefined;
62
+ const teamTitle = teamKey !== 'no-team' ? employees[0]?.team?.title || employees[0]?.teamMemberships?.[0]?.team?.title : undefined;
63
+ // Calculate average experience (years since hire date)
64
+ const now = new Date();
65
+ const experiences = employees
66
+ .map((emp) => {
67
+ if (!emp.hireDate)
68
+ return 0;
69
+ const hireDate = new Date(emp.hireDate);
70
+ const diffTime = Math.abs(now.getTime() - hireDate.getTime());
71
+ return diffTime / (1000 * 60 * 60 * 24 * 365.25); // Convert to years
72
+ })
73
+ .filter((exp) => exp > 0);
74
+ const averageExperience = experiences.length > 0 ? experiences.reduce((sum, exp) => sum + exp, 0) / experiences.length : 0;
75
+ // Get unique employment types
76
+ const employmentTypeSet = new Set();
77
+ for (const employee of employees) {
78
+ if (employee.employmentType?.title) {
79
+ employmentTypeSet.add(employee.employmentType.title);
80
+ }
81
+ }
82
+ const employmentTypes = Array.from(employmentTypeSet).join(', ') || 'N/A';
83
+ aggregatedResults.push({
84
+ departmentId,
85
+ departmentTitle,
86
+ teamId,
87
+ teamTitle,
88
+ employeeCount: employees.length,
89
+ employmentTypes,
90
+ averageExperience: Number(averageExperience.toFixed(2)),
91
+ totalEmployees: employees.length,
92
+ });
93
+ }
94
+ }
95
+ // Apply sorting if provided
96
+ if (input.sort && input.sort.length > 0) {
97
+ aggregatedResults.sort((a, b) => {
98
+ for (const sortField of input.sort) {
99
+ const field = sortField.field;
100
+ const aValue = a[field];
101
+ const bValue = b[field];
102
+ const dir = sortField.dir === 'asc' ? 1 : -1;
103
+ // Handle undefined values
104
+ if (aValue === undefined && bValue === undefined)
105
+ continue;
106
+ if (aValue === undefined)
107
+ return 1 * dir;
108
+ if (bValue === undefined)
109
+ return -1 * dir;
110
+ if (aValue < bValue)
111
+ return -1 * dir;
112
+ if (aValue > bValue)
113
+ return 1 * dir;
114
+ }
115
+ return 0;
116
+ });
117
+ }
118
+ // Apply pagination
119
+ const skip = input.skip || 0;
120
+ const take = input.take || 10;
121
+ const total = aggregatedResults.length;
122
+ const items = aggregatedResults.slice(skip, skip + take);
123
+ return {
124
+ items,
125
+ total,
126
+ };
127
+ }
128
+ //#region ---- Filter Extraction ----
129
+ /**
130
+ * Extract employee-specific filters from AXPFilterClause format
131
+ * Maps report parameter paths to employee entity field names
132
+ */
133
+ extractEmployeeFilters(parameters) {
134
+ const filters = [];
135
+ const paramsAny = parameters;
136
+ if (!paramsAny?.filters || !Array.isArray(paramsAny.filters)) {
137
+ return filters;
138
+ }
139
+ for (const filter of paramsAny.filters) {
140
+ if (!filter?.field || filter?.value === undefined || filter?.value === null) {
141
+ continue;
142
+ }
143
+ const field = filter.field;
144
+ const value = filter.value;
145
+ const operator = filter.operator || { type: 'equal' };
146
+ // Handle employee-specific field mappings
147
+ if (field === 'department') {
148
+ // Department filter - can be array of IDs or single ID
149
+ if (Array.isArray(value) && value.length > 0) {
150
+ filters.push({
151
+ field: 'position.departmentId', // Assuming position has departmentId
152
+ operator: { type: 'in' },
153
+ value: value,
154
+ });
155
+ }
156
+ else if (value) {
157
+ filters.push({
158
+ field: 'position.departmentId',
159
+ operator: { type: 'equal' },
160
+ value: value,
161
+ });
162
+ }
163
+ }
164
+ else if (field === 'team') {
165
+ // Team filter - can be array of IDs or single ID
166
+ if (Array.isArray(value) && value.length > 0) {
167
+ filters.push({
168
+ field: 'teamId', // Assuming employee has teamId or teamMemberships
169
+ operator: { type: 'in' },
170
+ value: value,
171
+ });
172
+ }
173
+ else if (value) {
174
+ filters.push({
175
+ field: 'teamId',
176
+ operator: { type: 'equal' },
177
+ value: value,
178
+ });
179
+ }
180
+ }
181
+ else if (field === 'employmentType') {
182
+ // Employment type filter - skip 'all' value
183
+ if (value && value !== 'all') {
184
+ filters.push({
185
+ field: 'employmentTypeId',
186
+ operator: { type: 'equal' },
187
+ value: value,
188
+ });
189
+ }
190
+ }
191
+ else {
192
+ // Direct field mapping
193
+ filters.push({
194
+ field: field,
195
+ operator: operator,
196
+ value: value,
197
+ });
198
+ }
199
+ }
200
+ return filters;
201
+ }
202
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GetEmployeeListQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
203
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GetEmployeeListQuery, providedIn: 'root' }); }
204
+ }
205
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GetEmployeeListQuery, decorators: [{
206
+ type: Injectable,
207
+ args: [{
208
+ providedIn: 'root',
209
+ }]
210
+ }] });
211
+
212
+ export { GetEmployeeListQuery };
213
+ //# sourceMappingURL=acorex-connectivity-mock-get-employee-list.query--f2M5RgC.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-connectivity-mock-get-employee-list.query--f2M5RgC.mjs","sources":["../tmp-esm2022/mock/lib/report-management/samples/get-employee-list.query.js"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig as HumanCapitalRootConfig } from '@acorex/modules/human-capital-management';\nimport * as i0 from \"@angular/core\";\n//#endregion\nexport class GetEmployeeListQuery {\n constructor() {\n this.entityService = inject(AXPEntityService);\n this.employeeService = this.entityService\n .withEntity(`${HumanCapitalRootConfig.module.name}.${HumanCapitalRootConfig.entities.employee.name}`)\n .data();\n }\n async fetch(input) {\n // Extract employee-specific filters from AXPFilterClause format\n const extractedFilters = this.extractEmployeeFilters(input.filters);\n // Separate custom filters from entity filters\n const entityFilters = [];\n if (extractedFilters && extractedFilters.length > 0) {\n for (const filter of extractedFilters) {\n entityFilters.push(filter);\n }\n }\n // Get all employees from storage with entity filters\n const allEmployeesResult = await this.employeeService.query({\n skip: 0,\n take: 10000, // Get all employees for aggregation\n filter: entityFilters.length > 0\n ? {\n logic: input.logic || 'and',\n filters: entityFilters,\n }\n : undefined,\n });\n const allEmployees = allEmployeesResult.items;\n // Group employees by department and team\n const departmentGroups = new Map();\n for (const employee of allEmployees) {\n // Get department from position (assuming position has departmentId)\n const departmentId = employee.position?.departmentId || employee.departmentId || 'unknown';\n const departmentTitle = employee.position?.department?.title || 'Unknown Department';\n // Get team from team memberships (assuming employee has teamId or teamMemberships)\n const teamId = employee.teamId || employee.teamMemberships?.[0]?.teamId || undefined;\n const teamTitle = employee.team?.title || employee.teamMemberships?.[0]?.team?.title || undefined;\n const teamKey = teamId || 'no-team';\n if (!departmentGroups.has(departmentId)) {\n departmentGroups.set(departmentId, new Map());\n }\n const teamMap = departmentGroups.get(departmentId);\n if (!teamMap.has(teamKey)) {\n teamMap.set(teamKey, []);\n }\n teamMap.get(teamKey).push(employee);\n }\n // Aggregate data by department and team\n const aggregatedResults = [];\n for (const [departmentId, teamMap] of departmentGroups.entries()) {\n const firstEmployee = Array.from(teamMap.values())[0]?.[0];\n const departmentTitle = firstEmployee?.position?.department?.title || 'Unknown Department';\n for (const [teamKey, employees] of teamMap.entries()) {\n const teamId = teamKey !== 'no-team' ? teamKey : undefined;\n const teamTitle = teamKey !== 'no-team' ? employees[0]?.team?.title || employees[0]?.teamMemberships?.[0]?.team?.title : undefined;\n // Calculate average experience (years since hire date)\n const now = new Date();\n const experiences = employees\n .map((emp) => {\n if (!emp.hireDate)\n return 0;\n const hireDate = new Date(emp.hireDate);\n const diffTime = Math.abs(now.getTime() - hireDate.getTime());\n return diffTime / (1000 * 60 * 60 * 24 * 365.25); // Convert to years\n })\n .filter((exp) => exp > 0);\n const averageExperience = experiences.length > 0 ? experiences.reduce((sum, exp) => sum + exp, 0) / experiences.length : 0;\n // Get unique employment types\n const employmentTypeSet = new Set();\n for (const employee of employees) {\n if (employee.employmentType?.title) {\n employmentTypeSet.add(employee.employmentType.title);\n }\n }\n const employmentTypes = Array.from(employmentTypeSet).join(', ') || 'N/A';\n aggregatedResults.push({\n departmentId,\n departmentTitle,\n teamId,\n teamTitle,\n employeeCount: employees.length,\n employmentTypes,\n averageExperience: Number(averageExperience.toFixed(2)),\n totalEmployees: employees.length,\n });\n }\n }\n // Apply sorting if provided\n if (input.sort && input.sort.length > 0) {\n aggregatedResults.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 // Handle undefined values\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 // Apply pagination\n const skip = input.skip || 0;\n const take = input.take || 10;\n const total = aggregatedResults.length;\n const items = aggregatedResults.slice(skip, skip + take);\n return {\n items,\n total,\n };\n }\n //#region ---- Filter Extraction ----\n /**\n * Extract employee-specific filters from AXPFilterClause format\n * Maps report parameter paths to employee entity field names\n */\n extractEmployeeFilters(parameters) {\n const filters = [];\n const paramsAny = parameters;\n if (!paramsAny?.filters || !Array.isArray(paramsAny.filters)) {\n return filters;\n }\n for (const filter of paramsAny.filters) {\n if (!filter?.field || filter?.value === undefined || filter?.value === null) {\n continue;\n }\n const field = filter.field;\n const value = filter.value;\n const operator = filter.operator || { type: 'equal' };\n // Handle employee-specific field mappings\n if (field === 'department') {\n // Department filter - can be array of IDs or single ID\n if (Array.isArray(value) && value.length > 0) {\n filters.push({\n field: 'position.departmentId', // Assuming position has departmentId\n operator: { type: 'in' },\n value: value,\n });\n }\n else if (value) {\n filters.push({\n field: 'position.departmentId',\n operator: { type: 'equal' },\n value: value,\n });\n }\n }\n else if (field === 'team') {\n // Team filter - can be array of IDs or single ID\n if (Array.isArray(value) && value.length > 0) {\n filters.push({\n field: 'teamId', // Assuming employee has teamId or teamMemberships\n operator: { type: 'in' },\n value: value,\n });\n }\n else if (value) {\n filters.push({\n field: 'teamId',\n operator: { type: 'equal' },\n value: value,\n });\n }\n }\n else if (field === 'employmentType') {\n // Employment type filter - skip 'all' value\n if (value && value !== 'all') {\n filters.push({\n field: 'employmentTypeId',\n operator: { type: 'equal' },\n value: value,\n });\n }\n }\n else {\n // Direct field mapping\n filters.push({\n field: field,\n operator: operator,\n value: value,\n });\n }\n }\n return filters;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: GetEmployeeListQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: GetEmployeeListQuery, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: GetEmployeeListQuery, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWVtcGxveWVlLWxpc3QucXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nvbm5lY3Rpdml0eS9tb2NrL3NyYy9saWIvcmVwb3J0LW1hbmFnZW1lbnQvc2FtcGxlcy9nZXQtZW1wbG95ZWUtbGlzdC5xdWVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVsRSxPQUFPLEVBQUUsVUFBVSxJQUFJLHNCQUFzQixFQUFFLE1BQU0sMENBQTBDLENBQUM7O0FBaUNoRyxZQUFZO0FBS1osTUFBTSxPQUFPLG9CQUFvQjtJQUhqQztRQUltQixrQkFBYSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2xELG9CQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWE7YUFDekMsVUFBVSxDQUFDLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ3BHLElBQUksRUFBd0QsQ0FBQztLQXFOakU7SUFuTkMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFzQztRQUNoRCxnRUFBZ0U7UUFDaEUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXBFLDhDQUE4QztRQUM5QyxNQUFNLGFBQWEsR0FBeUMsRUFBRSxDQUFDO1FBRS9ELElBQUksZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BELEtBQUssTUFBTSxNQUFNLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztnQkFDdEMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFN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O2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQUXVlcnkgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3J1bnRpbWUnO1xuaW1wb3J0IHsgQVhQRW50aXR5U2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2VudGl0eSc7XG5pbXBvcnQgeyBBWE1IdW1hbkNhcGl0YWxNYW5hZ2VtZW50RW1wbG95ZWVFbnRpdHlNb2RlbCB9IGZyb20gJ0BhY29yZXgvbW9kdWxlcy9odW1hbi1jYXBpdGFsLW1hbmFnZW1lbnQnO1xuaW1wb3J0IHsgUm9vdENvbmZpZyBhcyBIdW1hbkNhcGl0YWxSb290Q29uZmlnIH0gZnJvbSAnQGFjb3JleC9tb2R1bGVzL2h1bWFuLWNhcGl0YWwtbWFuYWdlbWVudCc7XG5pbXBvcnQgeyBSb290Q29uZmlnIGFzIE9yZ2FuaXphdGlvblJvb3RDb25maWcgfSBmcm9tICdAYWNvcmV4L21vZHVsZXMvb3JnYW5pemF0aW9uLW1hbmFnZW1lbnQnO1xuXG4vLyNyZWdpb24gLS0tLSAgIFF1ZXJ5IElucHV0L091dHB1dCBUeXBlcyAgIC0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRFbXBsb3llZUxpc3RRdWVyeUlucHV0IHtcbiAgc2tpcD86IG51bWJlcjtcbiAgdGFrZT86IG51bWJlcjtcbiAgc29ydD86IEFycmF5PHsgZmllbGQ6IHN0cmluZzsgZGlyOiAnYXNjJyB8ICdkZXNjJyB9PjtcbiAgZmlsdGVycz86IEFycmF5PHtcbiAgICBmaWVsZDogc3RyaW5nO1xuICAgIG9wZXJhdG9yOiB7IHR5cGU6IHN0cmluZyB9O1xuICAgIHZhbHVlOiBhbnk7XG4gIH0+O1xuICBsb2dpYz86ICdhbmQnIHwgJ29yJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbXBsb3llZUJ5RGVwYXJ0bWVudFJlc3VsdCB7XG4gIGRlcGFydG1lbnRJZDogc3RyaW5nO1xuICBkZXBhcnRtZW50VGl0bGU6IHN0cmluZztcbiAgdGVhbUlkPzogc3RyaW5nO1xuICB0ZWFtVGl0bGU/OiBzdHJpbmc7XG4gIGVtcGxveWVlQ291bnQ6IG51bWJlcjtcbiAgZW1wbG95bWVudFR5cGVzOiBzdHJpbmc7XG4gIGF2ZXJhZ2VFeHBlcmllbmNlOiBudW1iZXI7XG4gIHRvdGFsRW1wbG95ZWVzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0RW1wbG95ZWVMaXN0UXVlcnlSZXN1bHQge1xuICBpdGVtczogRW1wbG95ZWVCeURlcGFydG1lbnRSZXN1bHRbXTtcbiAgdG90YWw6IG51bWJlcjtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBHZXRFbXBsb3llZUxpc3RRdWVyeSBpbXBsZW1lbnRzIEFYUFF1ZXJ5PEdldEVtcGxveWVlTGlzdFF1ZXJ5SW5wdXQsIEdldEVtcGxveWVlTGlzdFF1ZXJ5UmVzdWx0PiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW50aXR5U2VydmljZSA9IGluamVjdChBWFBFbnRpdHlTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBlbXBsb3llZVNlcnZpY2UgPSB0aGlzLmVudGl0eVNlcnZpY2VcbiAgICAud2l0aEVudGl0eShgJHtIdW1hbkNhcGl0YWxSb290Q29uZmlnLm1vZHVsZS5uYW1lfS4ke0h1bWFuQ2FwaXRhbFJvb3RDb25maWcuZW50aXRpZXMuZW1wbG95ZWUubmFtZX1gKVxuICAgIC5kYXRhPHN0cmluZywgQVhNSHVtYW5DYXBpdGFsTWFuYWdlbWVudEVtcGxveWVlRW50aXR5TW9kZWw+KCk7XG5cbiAgYXN5bmMgZmV0Y2goaW5wdXQ6IEdldEVtcGxveWVlTGlzdFF1ZXJ5SW5wdXQgfCBhbnkpOiBQcm9taXNlPEdldEVtcGxveWVlTGlzdFF1ZXJ5UmVzdWx0PiB7XG4gICAgLy8gRXh0cmFjdCBlbXBsb3llZS1zcGVjaWZpYyBmaWx0ZXJzIGZyb20gQVhQRmlsdGVyQ2xhdXNlIGZvcm1hdFxuICAgIGNvbnN0IGV4dHJhY3RlZEZpbHRlcnMgPSB0aGlzLmV4dHJhY3RFbXBsb3llZUZpbHRlcnMoaW5wdXQuZmlsdGVycyk7XG5cbiAgICAvLyBTZXBhcmF0ZSBjdXN0b20gZmlsdGVycyBmcm9tIGVudGl0eSBmaWx0ZXJzXG4gICAgY29uc3QgZW50aXR5RmlsdGVyczogR2V0RW1wbG95ZWVMaXN0UXVlcnlJbnB1dFsnZmlsdGVycyddID0gW107XG5cbiAgICBpZiAoZXh0cmFjdGVkRmlsdGVycyAmJiBleHRyYWN0ZWRGaWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGV4dHJhY3RlZEZpbHRlcnMpIHtcbiAgICAgICAgZW50aXR5RmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gR2V0IGFsbCBlbXBsb3llZXMgZnJvbSBzdG9yYWdlIHdpdGggZW50aXR5IGZpbHRlcnNcbiAgICBjb25zdCBhbGxFbXBsb3llZXNSZXN1bHQgPSBhd2FpdCB0aGlzLmVtcGxveWVlU2VydmljZS5xdWVyeSh7XG4gICAgICBza2lwOiAwLFxuICAgICAgdGFrZTogMTAwMDAsIC8vIEdldCBhbGwgZW1wbG95ZWVzIGZvciBhZ2dyZWdhdGlvblxuICAgICAgZmlsdGVyOlxuICAgICAgICBlbnRpdHlGaWx0ZXJzLmxlbmd0aCA+IDBcbiAgICAgICAgICA/ICh7XG4gICAgICAgICAgICAgIGxvZ2ljOiBpbnB1dC5sb2dpYyB8fCAnYW5kJyxcbiAgICAgICAgICAgICAgZmlsdGVyczogZW50aXR5RmlsdGVycyxcbiAgICAgICAgICAgIH0gYXMgYW55KVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYWxsRW1wbG95ZWVzID0gYWxsRW1wbG95ZWVzUmVzdWx0Lml0ZW1zO1xuXG4gICAgLy8gR3JvdXAgZW1wbG95ZWVzIGJ5IGRlcGFydG1lbnQgYW5kIHRlYW1cbiAgICBjb25zdCBkZXBhcnRtZW50R3JvdXBzID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIEFYTUh1bWFuQ2FwaXRhbE1hbmFnZW1lbnRFbXBsb3llZUVudGl0eU1vZGVsW10+PigpO1xuXG4gICAgZm9yIChjb25zdCBlbXBsb3llZSBvZiBhbGxFbXBsb3llZXMpIHtcbiAgICAgIC8vIEdldCBkZXBhcnRtZW50IGZyb20gcG9zaXRpb24gKGFzc3VtaW5nIHBvc2l0aW9uIGhhcyBkZXBhcnRtZW50SWQpXG4gICAgICBjb25zdCBkZXBhcnRtZW50SWQgPSAoZW1wbG95ZWUgYXMgYW55KS5wb3NpdGlvbj8uZGVwYXJ0bWVudElkIHx8IChlbXBsb3llZSBhcyBhbnkpLmRlcGFydG1lbnRJZCB8fCAndW5rbm93bic7XG4gICAgICBjb25zdCBkZXBhcnRtZW50VGl0bGUgPSAoZW1wbG95ZWUgYXMgYW55KS5wb3NpdGlvbj8uZGVwYXJ0bWVudD8udGl0bGUgfHwgJ1Vua25vd24gRGVwYXJ0bWVudCc7XG5cbiAgICAgIC8vIEdldCB0ZWFtIGZyb20gdGVhbSBtZW1iZXJzaGlwcyAoYXNzdW1pbmcgZW1wbG95ZWUgaGFzIHRlYW1JZCBvciB0ZWFtTWVtYmVyc2hpcHMpXG4gICAgICBjb25zdCB0ZWFtSWQgPSAoZW1wbG95ZWUgYXMgYW55KS50ZWFtSWQgfHwgKGVtcGxveWVlIGFzIGFueSkudGVhbU1lbWJlcnNoaXBzPy5bMF0/LnRlYW1JZCB8fCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCB0ZWFtVGl0bGUgPSAoZW1wbG95ZWUgYXMgYW55KS50ZWFtPy50aXRsZSB8fCAoZW1wbG95ZWUgYXMgYW55KS50ZWFtTWVtYmVyc2hpcHM/LlswXT8udGVhbT8udGl0bGUgfHwgdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCB0ZWFtS2V5ID0gdGVhbUlkIHx8ICduby10ZWFtJztcblxuICAgICAgaWYgKCFkZXBhcnRtZW50R3JvdXBzLmhhcyhkZXBhcnRtZW50SWQpKSB7XG4gICAgICAgIGRlcGFydG1lbnRHcm91cHMuc2V0KGRlcGFydG1lbnRJZCwgbmV3IE1hcCgpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGVhbU1hcCA9IGRlcGFydG1lbnRHcm91cHMuZ2V0KGRlcGFydG1lbnRJZCkhO1xuICAgICAgaWYgKCF0ZWFtTWFwLmhhcyh0ZWFtS2V5KSkge1xuICAgICAgICB0ZWFtTWFwLnNldCh0ZWFtS2V5LCBbXSk7XG4gICAgICB9XG5cbiAgICAgIHRlYW1NYXAuZ2V0KHRlYW1LZXkpIS5wdXNoKGVtcGxveWVlKTtcbiAgICB9XG5cbiAgICAvLyBBZ2dyZWdhdGUgZGF0YSBieSBkZXBhcnRtZW50IGFuZCB0ZWFtXG4gICAgY29uc3QgYWdncmVnYXRlZFJlc3VsdHM6IEVtcGxveWVlQnlEZXBhcnRtZW50UmVzdWx0W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW2RlcGFydG1lbnRJZCwgdGVhbU1hcF0gb2YgZGVwYXJ0bWVudEdyb3Vwcy5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IGZpcnN0RW1wbG95ZWUgPSBBcnJheS5mcm9tKHRlYW1NYXAudmFsdWVzKCkpWzBdPy5bMF07XG4gICAgICBjb25zdCBkZXBhcnRtZW50VGl0bGUgPSAoZmlyc3RFbXBsb3llZSBhcyBhbnkpPy5wb3NpdGlvbj8uZGVwYXJ0bWVudD8udGl0bGUgfHwgJ1Vua25vd24gRGVwYXJ0bWVudCc7XG5cbiAgICAgIGZvciAoY29uc3QgW3RlYW1LZXksIGVtcGxveWVlc10gb2YgdGVhbU1hcC5lbnRyaWVzKCkpIHtcbiAgICAgICAgY29uc3QgdGVhbUlkID0gdGVhbUtleSAhPT0gJ25vLXRlYW0nID8gdGVhbUtleSA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgdGVhbVRpdGxlID1cbiAgICAgICAgICB0ZWFtS2V5ICE9PSAnbm8tdGVhbScgPyAoZW1wbG95ZWVzWzBdIGFzIGFueSk/LnRlYW0/LnRpdGxlIHx8IChlbXBsb3llZXNbMF0gYXMgYW55KT8udGVhbU1lbWJlcnNoaXBzPy5bMF0/LnRlYW0/LnRpdGxlIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIC8vIENhbGN1bGF0ZSBhdmVyYWdlIGV4cGVyaWVuY2UgKHllYXJzIHNpbmNlIGhpcmUgZGF0ZSlcbiAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgICAgY29uc3QgZXhwZXJpZW5jZXMgPSBlbXBsb3llZXNcbiAgICAgICAgICAubWFwKChlbXApID0+IHtcbiAgICAgICAgICAgIGlmICghZW1wLmhpcmVEYXRlKSByZXR1cm4gMDtcbiAgICAgICAgICAgIGNvbnN0IGhpcmVEYXRlID0gbmV3IERhdGUoZW1wLmhpcmVEYXRlKTtcbiAgICAgICAgICAgIGNvbnN0IGRpZmZUaW1lID0gTWF0aC5hYnMobm93LmdldFRpbWUoKSAtIGhpcmVEYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICByZXR1cm4gZGlmZlRpbWUgLyAoMTAwMCAqIDYwICogNjAgKiAyNCAqIDM2NS4yNSk7IC8vIENvbnZlcnQgdG8geWVhcnNcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5maWx0ZXIoKGV4cCkgPT4gZXhwID4gMCk7XG5cbiAgICAgICAgY29uc3QgYXZlcmFnZUV4cGVyaWVuY2UgPSBleHBlcmllbmNlcy5sZW5ndGggPiAwID8gZXhwZXJpZW5jZXMucmVkdWNlKChzdW0sIGV4cCkgPT4gc3VtICsgZXhwLCAwKSAvIGV4cGVyaWVuY2VzLmxlbmd0aCA6IDA7XG5cbiAgICAgICAgLy8gR2V0IHVuaXF1ZSBlbXBsb3ltZW50IHR5cGVzXG4gICAgICAgIGNvbnN0IGVtcGxveW1lbnRUeXBlU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIGZvciAoY29uc3QgZW1wbG95ZWUgb2YgZW1wbG95ZWVzKSB7XG4gICAgICAgICAgaWYgKChlbXBsb3llZSBhcyBhbnkpLmVtcGxveW1lbnRUeXBlPy50aXRsZSkge1xuICAgICAgICAgICAgZW1wbG95bWVudFR5cGVTZXQuYWRkKChlbXBsb3llZSBhcyBhbnkpLmVtcGxveW1lbnRUeXBlLnRpdGxlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW1wbG95bWVudFR5cGVzID0gQXJyYXkuZnJvbShlbXBsb3ltZW50VHlwZVNldCkuam9pbignLCAnKSB8fCAnTi9BJztcblxuICAgICAgICBhZ2dyZWdhdGVkUmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICBkZXBhcnRtZW50SWQsXG4gICAgICAgICAgZGVwYXJ0bWVudFRpdGxlLFxuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgICB0ZWFtVGl0bGUsXG4gICAgICAgICAgZW1wbG95ZWVDb3VudDogZW1wbG95ZWVzLmxlbmd0aCxcbiAgICAgICAgICBlbXBsb3ltZW50VHlwZXMsXG4gICAgICAgICAgYXZlcmFnZUV4cGVyaWVuY2U6IE51bWJlcihhdmVyYWdlRXhwZXJpZW5jZS50b0ZpeGVkKDIpKSxcbiAgICAgICAgICB0b3RhbEVtcGxveWVlczogZW1wbG95ZWVzLmxlbmd0aCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgc29ydGluZyBpZiBwcm92aWRlZFxuICAgIGlmIChpbnB1dC5zb3J0ICYmIGlucHV0LnNvcnQubGVuZ3RoID4gMCkge1xuICAgICAgYWdncmVnYXRlZFJlc3VsdHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHNvcnRGaWVsZCBvZiBpbnB1dC5zb3J0ISkge1xuICAgICAgICAgIGNvbnN0IGZpZWxkID0gc29ydEZpZWxkLmZpZWxkIGFzIGtleW9mIEVtcGxveWVlQnlEZXBhcnRtZW50UmVzdWx0O1xuICAgICAgICAgIGNvbnN0IGFWYWx1ZSA9IGFbZmllbGRdO1xuICAgICAgICAgIGNvbnN0IGJWYWx1ZSA9IGJbZmllbGRdO1xuICAgICAgICAgIGNvbnN0IGRpciA9IHNvcnRGaWVsZC5kaXIgPT09ICdhc2MnID8gMSA6IC0xO1xuXG4gICAgICAgICAgLy8gSGFuZGxlIHVuZGVmaW5lZCB2YWx1ZXNcbiAgICAgICAgICBpZiAoYVZhbHVlID09PSB1bmRlZmluZWQgJiYgYlZhbHVlID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuICAgICAgICAgIGlmIChhVmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDEgKiBkaXI7XG4gICAgICAgICAgaWYgKGJWYWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gLTEgKiBkaXI7XG5cbiAgICAgICAgICBpZiAoYVZhbHVlIDwgYlZhbHVlKSByZXR1cm4gLTEgKiBkaXI7XG4gICAgICAgICAgaWYgKGFWYWx1ZSA+IGJWYWx1ZSkgcmV0dXJuIDEgKiBkaXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBcHBseSBwYWdpbmF0aW9uXG4gICAgY29uc3Qgc2tpcCA9IGlucHV0LnNraXAgfHwgMDtcbiAgICBjb25zdCB0YWtlID0gaW5wdXQudGFrZSB8fCAxMDtcbiAgICBjb25zdCB0b3RhbCA9IGFnZ3JlZ2F0ZWRSZXN1bHRzLmxlbmd0aDtcbiAgICBjb25zdCBpdGVtcyA9IGFnZ3JlZ2F0ZWRSZXN1bHRzLnNsaWNlKHNraXAsIHNraXAgKyB0YWtlKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpdGVtcyxcbiAgICAgIHRvdGFsLFxuICAgIH07XG4gIH1cblxuICAvLyNyZWdpb24gLS0tLSAgIEZpbHRlciBFeHRyYWN0aW9uICAgLS0tLVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IGVtcGxveWVlLXNwZWNpZmljIGZpbHRlcnMgZnJvbSBBWFBGaWx0ZXJDbGF1c2UgZm9ybWF0XG4gICAqIE1hcHMgcmVwb3J0IHBhcmFtZXRlciBwYXRocyB0byBlbXBsb3llZSBlbnRpdHkgZmllbGQgbmFtZXNcbiAgICovXG4gIHByaXZhdGUgZXh0cmFjdEVtcGxveWVlRmlsdGVycyhwYXJhbWV0ZXJzOiBhbnkpOiBHZXRFbXBsb3llZUxpc3RRdWVyeUlucHV0WydmaWx0ZXJzJ10ge1xuICAgIGNvbnN0IGZpbHRlcnM6IEdldEVtcGxveWVlTGlzdFF1ZXJ5SW5wdXRbJ2ZpbHRlcnMnXSA9IFtdO1xuICAgIGNvbnN0IHBhcmFtc0FueSA9IHBhcmFtZXRlcnMgYXMgYW55O1xuXG4gICAgaWYgKCFwYXJhbXNBbnk/LmZpbHRlcnMgfHwgIUFycmF5LmlzQXJyYXkocGFyYW1zQW55LmZpbHRlcnMpKSB7XG4gICAgICByZXR1cm4gZmlsdGVycztcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBwYXJhbXNBbnkuZmlsdGVycykge1xuICAgICAgaWYgKCFmaWx0ZXI/LmZpZWxkIHx8IGZpbHRlcj8udmFsdWUgPT09IHVuZGVmaW5lZCB8fCBmaWx0ZXI/LnZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaWVsZCA9IGZpbHRlci5maWVsZDtcbiAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyLnZhbHVlO1xuICAgICAgY29uc3Qgb3BlcmF0b3IgPSBmaWx0ZXIub3BlcmF0b3IgfHwgeyB0eXBlOiAnZXF1YWwnIH07XG5cbiAgICAgIC8vIEhhbmRsZSBlbXBsb3llZS1zcGVjaWZpYyBmaWVsZCBtYXBwaW5nc1xuICAgICAgaWYgKGZpZWxkID09PSAnZGVwYXJ0bWVudCcpIHtcbiAgICAgICAgLy8gRGVwYXJ0bWVudCBmaWx0ZXIgLSBjYW4gYmUgYXJyYXkgb2YgSURzIG9yIHNpbmdsZSBJRFxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICBmaWVsZDogJ3Bvc2l0aW9uLmRlcGFydG1lbnRJZCcsIC8vIEFzc3VtaW5nIHBvc2l0aW9uIGhhcyBkZXBhcnRtZW50SWRcbiAgICAgICAgICAgIG9wZXJhdG9yOiB7IHR5cGU6ICdpbicgfSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSkge1xuICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICBmaWVsZDogJ3Bvc2l0aW9uLmRlcGFydG1lbnRJZCcsXG4gICAgICAgICAgICBvcGVyYXRvcjogeyB0eXBlOiAnZXF1YWwnIH0sXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZmllbGQgPT09ICd0ZWFtJykge1xuICAgICAgICAvLyBUZWFtIGZpbHRlciAtIGNhbiBiZSBhcnJheSBvZiBJRHMgb3Igc2luZ2xlIElEXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgIGZpZWxkOiAndGVhbUlkJywgLy8gQXNzdW1pbmcgZW1wbG95ZWUgaGFzIHRlYW1JZCBvciB0ZWFtTWVtYmVyc2hpcHNcbiAgICAgICAgICAgIG9wZXJhdG9yOiB7IHR5cGU6ICdpbicgfSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSkge1xuICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICBmaWVsZDogJ3RlYW1JZCcsXG4gICAgICAgICAgICBvcGVyYXRvcjogeyB0eXBlOiAnZXF1YWwnIH0sXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZmllbGQgPT09ICdlbXBsb3ltZW50VHlwZScpIHtcbiAgICAgICAgLy8gRW1wbG95bWVudCB0eXBlIGZpbHRlciAtIHNraXAgJ2FsbCcgdmFsdWVcbiAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlICE9PSAnYWxsJykge1xuICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICBmaWVsZDogJ2VtcGxveW1lbnRUeXBlSWQnLFxuICAgICAgICAgICAgb3BlcmF0b3I6IHsgdHlwZTogJ2VxdWFsJyB9LFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEaXJlY3QgZmllbGQgbWFwcGluZ1xuICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgIGZpZWxkOiBmaWVsZCxcbiAgICAgICAgICBvcGVyYXRvcjogb3BlcmF0b3IsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVycztcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxufVxuIl19"],"names":["HumanCapitalRootConfig"],"mappings":"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"}
@@ -0,0 +1,209 @@
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/location-management';
5
+
6
+ //#endregion
7
+ class GetLocationListQuery {
8
+ constructor() {
9
+ this.entityService = inject(AXPEntityService);
10
+ this.locationService = this.entityService
11
+ .withEntity(`${RootConfig.module.name}.${RootConfig.entities.location.name}`)
12
+ .data();
13
+ }
14
+ async fetch(input) {
15
+ // Extract location-specific filters from AXPFilterClause format
16
+ const extractedFilters = this.extractLocationFilters(input.filters);
17
+ // Separate custom filters from entity filters
18
+ const entityFilters = [];
19
+ if (extractedFilters && extractedFilters.length > 0) {
20
+ for (const filter of extractedFilters) {
21
+ entityFilters.push(filter);
22
+ }
23
+ }
24
+ // Get all locations from storage with entity filters
25
+ const allLocationsResult = await this.locationService.query({
26
+ skip: 0,
27
+ take: 10000, // Get all locations for aggregation
28
+ filter: entityFilters.length > 0
29
+ ? {
30
+ logic: input.logic || 'and',
31
+ filters: entityFilters,
32
+ }
33
+ : undefined,
34
+ });
35
+ const allLocations = allLocationsResult.items;
36
+ // Group locations by country, province, and city
37
+ const locationGroups = new Map();
38
+ for (const location of allLocations) {
39
+ // Get geographic information
40
+ const countryId = location.countryId || 'unknown';
41
+ const countryTitle = location.country?.title || 'Unknown Country';
42
+ const provinceId = location.stateId || 'unknown';
43
+ const provinceTitle = location.state?.title || 'Unknown Province';
44
+ const cityId = location.cityId || 'unknown';
45
+ const cityTitle = location.city?.title || 'Unknown City';
46
+ // Create nested map structure: country -> province -> city -> locations[]
47
+ if (!locationGroups.has(countryId)) {
48
+ locationGroups.set(countryId, new Map());
49
+ }
50
+ const provinceMap = locationGroups.get(countryId);
51
+ if (!provinceMap.has(provinceId)) {
52
+ provinceMap.set(provinceId, new Map());
53
+ }
54
+ const cityMap = provinceMap.get(provinceId);
55
+ if (!cityMap.has(cityId)) {
56
+ cityMap.set(cityId, []);
57
+ }
58
+ cityMap.get(cityId).push(location);
59
+ }
60
+ // Aggregate data by country, province, and city
61
+ const aggregatedResults = [];
62
+ for (const [countryId, provinceMap] of locationGroups.entries()) {
63
+ const firstLocation = Array.from(provinceMap.values())[0]?.values().next().value?.[0];
64
+ const countryTitle = firstLocation?.country?.title || 'Unknown Country';
65
+ for (const [provinceId, cityMap] of provinceMap.entries()) {
66
+ const firstLocationInProvince = cityMap.values().next().value?.[0];
67
+ const provinceTitle = firstLocationInProvince?.state?.title || 'Unknown Province';
68
+ for (const [cityId, locations] of cityMap.entries()) {
69
+ const cityTitle = locations[0]?.city?.title || 'Unknown City';
70
+ aggregatedResults.push({
71
+ countryId,
72
+ countryTitle,
73
+ provinceId,
74
+ provinceTitle,
75
+ cityId,
76
+ cityTitle,
77
+ locationCount: locations.length,
78
+ totalLocations: locations.length,
79
+ });
80
+ }
81
+ }
82
+ }
83
+ // Apply sorting if provided
84
+ if (input.sort && input.sort.length > 0) {
85
+ aggregatedResults.sort((a, b) => {
86
+ for (const sortField of input.sort) {
87
+ const field = sortField.field;
88
+ const aValue = a[field];
89
+ const bValue = b[field];
90
+ const dir = sortField.dir === 'asc' ? 1 : -1;
91
+ // Handle undefined values
92
+ if (aValue === undefined && bValue === undefined)
93
+ continue;
94
+ if (aValue === undefined)
95
+ return 1 * dir;
96
+ if (bValue === undefined)
97
+ return -1 * dir;
98
+ if (aValue < bValue)
99
+ return -1 * dir;
100
+ if (aValue > bValue)
101
+ return 1 * dir;
102
+ }
103
+ return 0;
104
+ });
105
+ }
106
+ // Apply pagination
107
+ const skip = input.skip || 0;
108
+ const take = input.take || 10;
109
+ const total = aggregatedResults.length;
110
+ const items = aggregatedResults.slice(skip, skip + take);
111
+ return {
112
+ items,
113
+ total,
114
+ };
115
+ }
116
+ //#region ---- Filter Extraction ----
117
+ /**
118
+ * Extract location-specific filters from AXPFilterClause format
119
+ * Maps report parameter paths to location entity field names
120
+ */
121
+ extractLocationFilters(parameters) {
122
+ const filters = [];
123
+ const paramsAny = parameters;
124
+ if (!paramsAny?.filters || !Array.isArray(paramsAny.filters)) {
125
+ console.log('⚠️ [extractLocationFilters] No filters array found or not an array');
126
+ return filters;
127
+ }
128
+ for (const filter of paramsAny.filters) {
129
+ if (!filter?.field || filter?.value === undefined || filter?.value === null) {
130
+ continue;
131
+ }
132
+ const field = filter.field;
133
+ const value = filter.value;
134
+ const operator = filter.operator || { type: 'equal' };
135
+ // Handle location-specific field mappings
136
+ if (field === 'country') {
137
+ // Country filter
138
+ if (Array.isArray(value) && value.length > 0) {
139
+ filters.push({
140
+ field: 'countryId',
141
+ operator: { type: 'in' },
142
+ value: value,
143
+ });
144
+ }
145
+ else if (value) {
146
+ filters.push({
147
+ field: 'countryId',
148
+ operator: { type: 'equal' },
149
+ value: value,
150
+ });
151
+ }
152
+ }
153
+ else if (field === 'province') {
154
+ // Province/State filter
155
+ if (Array.isArray(value) && value.length > 0) {
156
+ filters.push({
157
+ field: 'stateId',
158
+ operator: { type: 'in' },
159
+ value: value,
160
+ });
161
+ }
162
+ else if (value) {
163
+ filters.push({
164
+ field: 'stateId',
165
+ operator: { type: 'equal' },
166
+ value: value,
167
+ });
168
+ console.log('✅ [extractLocationFilters] Added province filter (equal):', value);
169
+ }
170
+ }
171
+ else if (field === 'city') {
172
+ if (Array.isArray(value) && value.length > 0) {
173
+ filters.push({
174
+ field: 'cityId',
175
+ operator: { type: 'in' },
176
+ value: value,
177
+ });
178
+ }
179
+ else if (value) {
180
+ filters.push({
181
+ field: 'cityId',
182
+ operator: { type: 'equal' },
183
+ value: value,
184
+ });
185
+ }
186
+ }
187
+ else {
188
+ // Direct field mapping
189
+ filters.push({
190
+ field: field,
191
+ operator: operator,
192
+ value: value,
193
+ });
194
+ }
195
+ }
196
+ return filters;
197
+ }
198
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GetLocationListQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
199
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GetLocationListQuery, providedIn: 'root' }); }
200
+ }
201
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GetLocationListQuery, decorators: [{
202
+ type: Injectable,
203
+ args: [{
204
+ providedIn: 'root',
205
+ }]
206
+ }] });
207
+
208
+ export { GetLocationListQuery };
209
+ //# sourceMappingURL=acorex-connectivity-mock-get-location-list.query-Cz55arFF.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-connectivity-mock-get-location-list.query-Cz55arFF.mjs","sources":["../tmp-esm2022/mock/lib/report-management/samples/get-location-list.query.js"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig as LocationRootConfig } from '@acorex/modules/location-management';\nimport * as i0 from \"@angular/core\";\n//#endregion\nexport class GetLocationListQuery {\n constructor() {\n this.entityService = inject(AXPEntityService);\n this.locationService = this.entityService\n .withEntity(`${LocationRootConfig.module.name}.${LocationRootConfig.entities.location.name}`)\n .data();\n }\n async fetch(input) {\n // Extract location-specific filters from AXPFilterClause format\n const extractedFilters = this.extractLocationFilters(input.filters);\n // Separate custom filters from entity filters\n const entityFilters = [];\n if (extractedFilters && extractedFilters.length > 0) {\n for (const filter of extractedFilters) {\n entityFilters.push(filter);\n }\n }\n // Get all locations from storage with entity filters\n const allLocationsResult = await this.locationService.query({\n skip: 0,\n take: 10000, // Get all locations for aggregation\n filter: entityFilters.length > 0\n ? {\n logic: input.logic || 'and',\n filters: entityFilters,\n }\n : undefined,\n });\n const allLocations = allLocationsResult.items;\n // Group locations by country, province, and city\n const locationGroups = new Map();\n for (const location of allLocations) {\n // Get geographic information\n const countryId = location.countryId || 'unknown';\n const countryTitle = location.country?.title || 'Unknown Country';\n const provinceId = location.stateId || 'unknown';\n const provinceTitle = location.state?.title || 'Unknown Province';\n const cityId = location.cityId || 'unknown';\n const cityTitle = location.city?.title || 'Unknown City';\n // Create nested map structure: country -> province -> city -> locations[]\n if (!locationGroups.has(countryId)) {\n locationGroups.set(countryId, new Map());\n }\n const provinceMap = locationGroups.get(countryId);\n if (!provinceMap.has(provinceId)) {\n provinceMap.set(provinceId, new Map());\n }\n const cityMap = provinceMap.get(provinceId);\n if (!cityMap.has(cityId)) {\n cityMap.set(cityId, []);\n }\n cityMap.get(cityId).push(location);\n }\n // Aggregate data by country, province, and city\n const aggregatedResults = [];\n for (const [countryId, provinceMap] of locationGroups.entries()) {\n const firstLocation = Array.from(provinceMap.values())[0]?.values().next().value?.[0];\n const countryTitle = firstLocation?.country?.title || 'Unknown Country';\n for (const [provinceId, cityMap] of provinceMap.entries()) {\n const firstLocationInProvince = cityMap.values().next().value?.[0];\n const provinceTitle = firstLocationInProvince?.state?.title || 'Unknown Province';\n for (const [cityId, locations] of cityMap.entries()) {\n const cityTitle = locations[0]?.city?.title || 'Unknown City';\n aggregatedResults.push({\n countryId,\n countryTitle,\n provinceId,\n provinceTitle,\n cityId,\n cityTitle,\n locationCount: locations.length,\n totalLocations: locations.length,\n });\n }\n }\n }\n // Apply sorting if provided\n if (input.sort && input.sort.length > 0) {\n aggregatedResults.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 // Handle undefined values\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 // Apply pagination\n const skip = input.skip || 0;\n const take = input.take || 10;\n const total = aggregatedResults.length;\n const items = aggregatedResults.slice(skip, skip + take);\n return {\n items,\n total,\n };\n }\n //#region ---- Filter Extraction ----\n /**\n * Extract location-specific filters from AXPFilterClause format\n * Maps report parameter paths to location entity field names\n */\n extractLocationFilters(parameters) {\n const filters = [];\n const paramsAny = parameters;\n if (!paramsAny?.filters || !Array.isArray(paramsAny.filters)) {\n console.log('⚠️ [extractLocationFilters] No filters array found or not an array');\n return filters;\n }\n for (const filter of paramsAny.filters) {\n if (!filter?.field || filter?.value === undefined || filter?.value === null) {\n continue;\n }\n const field = filter.field;\n const value = filter.value;\n const operator = filter.operator || { type: 'equal' };\n // Handle location-specific field mappings\n if (field === 'country') {\n // Country filter\n if (Array.isArray(value) && value.length > 0) {\n filters.push({\n field: 'countryId',\n operator: { type: 'in' },\n value: value,\n });\n }\n else if (value) {\n filters.push({\n field: 'countryId',\n operator: { type: 'equal' },\n value: value,\n });\n }\n }\n else if (field === 'province') {\n // Province/State filter\n if (Array.isArray(value) && value.length > 0) {\n filters.push({\n field: 'stateId',\n operator: { type: 'in' },\n value: value,\n });\n }\n else if (value) {\n filters.push({\n field: 'stateId',\n operator: { type: 'equal' },\n value: value,\n });\n console.log('✅ [extractLocationFilters] Added province filter (equal):', value);\n }\n }\n else if (field === 'city') {\n if (Array.isArray(value) && value.length > 0) {\n filters.push({\n field: 'cityId',\n operator: { type: 'in' },\n value: value,\n });\n }\n else if (value) {\n filters.push({\n field: 'cityId',\n operator: { type: 'equal' },\n value: value,\n });\n }\n }\n else {\n // Direct field mapping\n filters.push({\n field: field,\n operator: operator,\n value: value,\n });\n }\n }\n return filters;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: GetLocationListQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: GetLocationListQuery, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: GetLocationListQuery, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWxvY2F0aW9uLWxpc3QucXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nvbm5lY3Rpdml0eS9tb2NrL3NyYy9saWIvcmVwb3J0LW1hbmFnZW1lbnQvc2FtcGxlcy9nZXQtbG9jYXRpb24tbGlzdC5xdWVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVsRSxPQUFPLEVBQUUsVUFBVSxJQUFJLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7O0FBZ0N2RixZQUFZO0FBS1osTUFBTSxPQUFPLG9CQUFvQjtJQUhqQztRQUltQixrQkFBYSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2xELG9CQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWE7YUFDekMsVUFBVSxDQUFDLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2FBQzVGLElBQUksRUFBb0QsQ0FBQztLQThNN0Q7SUE1TUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFzQztRQUNoRCxnRUFBZ0U7UUFDaEUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BFLDhDQUE4QztRQUM5QyxNQUFNLGFBQWEsR0FBeUMsRUFBRSxDQUFDO1FBRS9ELElBQUksZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BELEtBQUssTUFBTSxNQUFNLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztnQkFDdEMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFN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SCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sdUJBQXVCO2dCQUN2QixPQUFPLENBQUMsSUFBSSxDQUFDO29CQUNYLEtBQUssRUFBRSxLQUFLO29CQUNaLFFBQVEsRUFBRSxRQUFRO29CQUNsQixLQUFLLEVBQUUsS0FBSztpQkFDYixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7K0dBL01VLG9CQUFvQjttSEFBcEIsb0JBQW9CLGNBRm5CLE1BQU07OzRGQUVQLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUFF1ZXJ5IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9ydW50aW1lJztcbmltcG9ydCB7IEFYUEVudGl0eVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9lbnRpdHknO1xuaW1wb3J0IHsgQVhNTG9jYXRpb25NYW5hZ2VtZW50TG9jYXRpb25FbnRpdHlNb2RlbCB9IGZyb20gJ0BhY29yZXgvbW9kdWxlcy9sb2NhdGlvbi1tYW5hZ2VtZW50JztcbmltcG9ydCB7IFJvb3RDb25maWcgYXMgTG9jYXRpb25Sb290Q29uZmlnIH0gZnJvbSAnQGFjb3JleC9tb2R1bGVzL2xvY2F0aW9uLW1hbmFnZW1lbnQnO1xuXG4vLyNyZWdpb24gLS0tLSAgIFF1ZXJ5IElucHV0L091dHB1dCBUeXBlcyAgIC0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRMb2NhdGlvbkxpc3RRdWVyeUlucHV0IHtcbiAgc2tpcD86IG51bWJlcjtcbiAgdGFrZT86IG51bWJlcjtcbiAgc29ydD86IEFycmF5PHsgZmllbGQ6IHN0cmluZzsgZGlyOiAnYXNjJyB8ICdkZXNjJyB9PjtcbiAgZmlsdGVycz86IEFycmF5PHtcbiAgICBmaWVsZDogc3RyaW5nO1xuICAgIG9wZXJhdG9yOiB7IHR5cGU6IHN0cmluZyB9O1xuICAgIHZhbHVlOiBhbnk7XG4gIH0+O1xuICBsb2dpYz86ICdhbmQnIHwgJ29yJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2NhdGlvbkJ5Q2l0eVJlc3VsdCB7XG4gIGNvdW50cnlJZD86IHN0cmluZztcbiAgY291bnRyeVRpdGxlPzogc3RyaW5nO1xuICBwcm92aW5jZUlkPzogc3RyaW5nO1xuICBwcm92aW5jZVRpdGxlPzogc3RyaW5nO1xuICBjaXR5SWQ/OiBzdHJpbmc7XG4gIGNpdHlUaXRsZT86IHN0cmluZztcbiAgbG9jYXRpb25Db3VudDogbnVtYmVyO1xuICB0b3RhbExvY2F0aW9uczogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldExvY2F0aW9uTGlzdFF1ZXJ5UmVzdWx0IHtcbiAgaXRlbXM6IExvY2F0aW9uQnlDaXR5UmVzdWx0W107XG4gIHRvdGFsOiBudW1iZXI7XG59XG5cbi8vI2VuZHJlZ2lvblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgR2V0TG9jYXRpb25MaXN0UXVlcnkgaW1wbGVtZW50cyBBWFBRdWVyeTxHZXRMb2NhdGlvbkxpc3RRdWVyeUlucHV0LCBHZXRMb2NhdGlvbkxpc3RRdWVyeVJlc3VsdD4ge1xuICBwcml2YXRlIHJlYWRvbmx5IGVudGl0eVNlcnZpY2UgPSBpbmplY3QoQVhQRW50aXR5U2VydmljZSk7XG4gIHByaXZhdGUgbG9jYXRpb25TZXJ2aWNlID0gdGhpcy5lbnRpdHlTZXJ2aWNlXG4gICAgLndpdGhFbnRpdHkoYCR7TG9jYXRpb25Sb290Q29uZmlnLm1vZHVsZS5uYW1lfS4ke0xvY2F0aW9uUm9vdENvbmZpZy5lbnRpdGllcy5sb2NhdGlvbi5uYW1lfWApXG4gICAgLmRhdGE8c3RyaW5nLCBBWE1Mb2NhdGlvbk1hbmFnZW1lbnRMb2NhdGlvbkVudGl0eU1vZGVsPigpO1xuXG4gIGFzeW5jIGZldGNoKGlucHV0OiBHZXRMb2NhdGlvbkxpc3RRdWVyeUlucHV0IHwgYW55KTogUHJvbWlzZTxHZXRMb2NhdGlvbkxpc3RRdWVyeVJlc3VsdD4ge1xuICAgIC8vIEV4dHJhY3QgbG9jYXRpb24tc3BlY2lmaWMgZmlsdGVycyBmcm9tIEFYUEZpbHRlckNsYXVzZSBmb3JtYXRcbiAgICBjb25zdCBleHRyYWN0ZWRGaWx0ZXJzID0gdGhpcy5leHRyYWN0TG9jYXRpb25GaWx0ZXJzKGlucHV0LmZpbHRlcnMpO1xuICAgIC8vIFNlcGFyYXRlIGN1c3RvbSBmaWx0ZXJzIGZyb20gZW50aXR5IGZpbHRlcnNcbiAgICBjb25zdCBlbnRpdHlGaWx0ZXJzOiBHZXRMb2NhdGlvbkxpc3RRdWVyeUlucHV0WydmaWx0ZXJzJ10gPSBbXTtcblxuICAgIGlmIChleHRyYWN0ZWRGaWx0ZXJzICYmIGV4dHJhY3RlZEZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgZXh0cmFjdGVkRmlsdGVycykge1xuICAgICAgICBlbnRpdHlGaWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gR2V0IGFsbCBsb2NhdGlvbnMgZnJvbSBzdG9yYWdlIHdpdGggZW50aXR5IGZpbHRlcnNcbiAgICBjb25zdCBhbGxMb2NhdGlvbnNSZXN1bHQgPSBhd2FpdCB0aGlzLmxvY2F0aW9uU2VydmljZS5xdWVyeSh7XG4gICAgICBza2lwOiAwLFxuICAgICAgdGFrZTogMTAwMDAsIC8vIEdldCBhbGwgbG9jYXRpb25zIGZvciBhZ2dyZWdhdGlvblxuICAgICAgZmlsdGVyOlxuICAgICAgICBlbnRpdHlGaWx0ZXJzLmxlbmd0aCA+IDBcbiAgICAgICAgICA/ICh7XG4gICAgICAgICAgICBsb2dpYzogaW5wdXQubG9naWMgfHwgJ2FuZCcsXG4gICAgICAgICAgICBmaWx0ZXJzOiBlbnRpdHlGaWx0ZXJzLFxuICAgICAgICAgIH0gYXMgYW55KVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYWxsTG9jYXRpb25zID0gYWxsTG9jYXRpb25zUmVzdWx0Lml0ZW1zO1xuXG4gICAgLy8gR3JvdXAgbG9jYXRpb25zIGJ5IGNvdW50cnksIHByb3ZpbmNlLCBhbmQgY2l0eVxuICAgIGNvbnN0IGxvY2F0aW9uR3JvdXBzID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIEFYTUxvY2F0aW9uTWFuYWdlbWVudExvY2F0aW9uRW50aXR5TW9kZWxbXT4+PigpO1xuXG4gICAgZm9yIChjb25zdCBsb2NhdGlvbiBvZiBhbGxMb2NhdGlvbnMpIHtcbiAgICAgIC8vIEdldCBnZW9ncmFwaGljIGluZm9ybWF0aW9uXG4gICAgICBjb25zdCBjb3VudHJ5SWQgPSAobG9jYXRpb24gYXMgYW55KS5jb3VudHJ5SWQgfHwgJ3Vua25vd24nO1xuICAgICAgY29uc3QgY291bnRyeVRpdGxlID0gKGxvY2F0aW9uIGFzIGFueSkuY291bnRyeT8udGl0bGUgfHwgJ1Vua25vd24gQ291bnRyeSc7XG5cbiAgICAgIGNvbnN0IHByb3ZpbmNlSWQgPSAobG9jYXRpb24gYXMgYW55KS5zdGF0ZUlkIHx8ICd1bmtub3duJztcbiAgICAgIGNvbnN0IHByb3ZpbmNlVGl0bGUgPSAobG9jYXRpb24gYXMgYW55KS5zdGF0ZT8udGl0bGUgfHwgJ1Vua25vd24gUHJvdmluY2UnO1xuXG4gICAgICBjb25zdCBjaXR5SWQgPSAobG9jYXRpb24gYXMgYW55KS5jaXR5SWQgfHwgJ3Vua25vd24nO1xuICAgICAgY29uc3QgY2l0eVRpdGxlID0gKGxvY2F0aW9uIGFzIGFueSkuY2l0eT8udGl0bGUgfHwgJ1Vua25vd24gQ2l0eSc7XG5cbiAgICAgIC8vIENyZWF0ZSBuZXN0ZWQgbWFwIHN0cnVjdHVyZTogY291bnRyeSAtPiBwcm92aW5jZSAtPiBjaXR5IC0+IGxvY2F0aW9uc1tdXG4gICAgICBpZiAoIWxvY2F0aW9uR3JvdXBzLmhhcyhjb3VudHJ5SWQpKSB7XG4gICAgICAgIGxvY2F0aW9uR3JvdXBzLnNldChjb3VudHJ5SWQsIG5ldyBNYXAoKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb3ZpbmNlTWFwID0gbG9jYXRpb25Hcm91cHMuZ2V0KGNvdW50cnlJZCkhO1xuICAgICAgaWYgKCFwcm92aW5jZU1hcC5oYXMocHJvdmluY2VJZCkpIHtcbiAgICAgICAgcHJvdmluY2VNYXAuc2V0KHByb3ZpbmNlSWQsIG5ldyBNYXAoKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNpdHlNYXAgPSBwcm92aW5jZU1hcC5nZXQocHJvdmluY2VJZCkhO1xuICAgICAgaWYgKCFjaXR5TWFwLmhhcyhjaXR5SWQpKSB7XG4gICAgICAgIGNpdHlNYXAuc2V0KGNpdHlJZCwgW10pO1xuICAgICAgfVxuXG4gICAgICBjaXR5TWFwLmdldChjaXR5SWQpIS5wdXNoKGxvY2F0aW9uKTtcbiAgICB9XG5cbiAgICAvLyBBZ2dyZWdhdGUgZGF0YSBieSBjb3VudHJ5LCBwcm92aW5jZSwgYW5kIGNpdHlcbiAgICBjb25zdCBhZ2dyZWdhdGVkUmVzdWx0czogTG9jYXRpb25CeUNpdHlSZXN1bHRbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBbY291bnRyeUlkLCBwcm92aW5jZU1hcF0gb2YgbG9jYXRpb25Hcm91cHMuZW50cmllcygpKSB7XG4gICAgICBjb25zdCBmaXJzdExvY2F0aW9uID0gQXJyYXkuZnJvbShwcm92aW5jZU1hcC52YWx1ZXMoKSlbMF0/LnZhbHVlcygpLm5leHQoKS52YWx1ZT8uWzBdO1xuICAgICAgY29uc3QgY291bnRyeVRpdGxlID0gKGZpcnN0TG9jYXRpb24gYXMgYW55KT8uY291bnRyeT8udGl0bGUgfHwgJ1Vua25vd24gQ291bnRyeSc7XG5cbiAgICAgIGZvciAoY29uc3QgW3Byb3ZpbmNlSWQsIGNpdHlNYXBdIG9mIHByb3ZpbmNlTWFwLmVudHJpZXMoKSkge1xuICAgICAgICBjb25zdCBmaXJzdExvY2F0aW9uSW5Qcm92aW5jZSA9IGNpdHlNYXAudmFsdWVzKCkubmV4dCgpLnZhbHVlPy5bMF07XG4gICAgICAgIGNvbnN0IHByb3ZpbmNlVGl0bGUgPSAoZmlyc3RMb2NhdGlvbkluUHJvdmluY2UgYXMgYW55KT8uc3RhdGU/LnRpdGxlIHx8ICdVbmtub3duIFByb3ZpbmNlJztcblxuICAgICAgICBmb3IgKGNvbnN0IFtjaXR5SWQsIGxvY2F0aW9uc10gb2YgY2l0eU1hcC5lbnRyaWVzKCkpIHtcbiAgICAgICAgICBjb25zdCBjaXR5VGl0bGUgPSAobG9jYXRpb25zWzBdIGFzIGFueSk/LmNpdHk/LnRpdGxlIHx8ICdVbmtub3duIENpdHknO1xuXG4gICAgICAgICAgYWdncmVnYXRlZFJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgICBjb3VudHJ5SWQsXG4gICAgICAgICAgICBjb3VudHJ5VGl0bGUsXG4gICAgICAgICAgICBwcm92aW5jZUlkLFxuICAgICAgICAgICAgcHJvdmluY2VUaXRsZSxcbiAgICAgICAgICAgIGNpdHlJZCxcbiAgICAgICAgICAgIGNpdHlUaXRsZSxcbiAgICAgICAgICAgIGxvY2F0aW9uQ291bnQ6IGxvY2F0aW9ucy5sZW5ndGgsXG4gICAgICAgICAgICB0b3RhbExvY2F0aW9uczogbG9jYXRpb25zLmxlbmd0aCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFwcGx5IHNvcnRpbmcgaWYgcHJvdmlkZWRcbiAgICBpZiAoaW5wdXQuc29ydCAmJiBpbnB1dC5zb3J0Lmxlbmd0aCA+IDApIHtcbiAgICAgIGFnZ3JlZ2F0ZWRSZXN1bHRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBzb3J0RmllbGQgb2YgaW5wdXQuc29ydCEpIHtcbiAgICAgICAgICBjb25zdCBmaWVsZCA9IHNvcnRGaWVsZC5maWVsZCBhcyBrZXlvZiBMb2NhdGlvbkJ5Q2l0eVJlc3VsdDtcbiAgICAgICAgICBjb25zdCBhVmFsdWUgPSBhW2ZpZWxkXTtcbiAgICAgICAgICBjb25zdCBiVmFsdWUgPSBiW2ZpZWxkXTtcbiAgICAgICAgICBjb25zdCBkaXIgPSBzb3J0RmllbGQuZGlyID09PSAnYXNjJyA/IDEgOiAtMTtcblxuICAgICAgICAgIC8vIEhhbmRsZSB1bmRlZmluZWQgdmFsdWVzXG4gICAgICAgICAgaWYgKGFWYWx1ZSA9PT0gdW5kZWZpbmVkICYmIGJWYWx1ZSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICAgICAgICBpZiAoYVZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiAxICogZGlyO1xuICAgICAgICAgIGlmIChiVmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIC0xICogZGlyO1xuXG4gICAgICAgICAgaWYgKGFWYWx1ZSA8IGJWYWx1ZSkgcmV0dXJuIC0xICogZGlyO1xuICAgICAgICAgIGlmIChhVmFsdWUgPiBiVmFsdWUpIHJldHVybiAxICogZGlyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgcGFnaW5hdGlvblxuICAgIGNvbnN0IHNraXAgPSBpbnB1dC5za2lwIHx8IDA7XG4gICAgY29uc3QgdGFrZSA9IGlucHV0LnRha2UgfHwgMTA7XG4gICAgY29uc3QgdG90YWwgPSBhZ2dyZWdhdGVkUmVzdWx0cy5sZW5ndGg7XG4gICAgY29uc3QgaXRlbXMgPSBhZ2dyZWdhdGVkUmVzdWx0cy5zbGljZShza2lwLCBza2lwICsgdGFrZSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXMsXG4gICAgICB0b3RhbCxcbiAgICB9O1xuICB9XG5cbiAgLy8jcmVnaW9uIC0tLS0gICBGaWx0ZXIgRXh0cmFjdGlvbiAgIC0tLS1cblxuICAvKipcbiAgICogRXh0cmFjdCBsb2NhdGlvbi1zcGVjaWZpYyBmaWx0ZXJzIGZyb20gQVhQRmlsdGVyQ2xhdXNlIGZvcm1hdFxuICAgKiBNYXBzIHJlcG9ydCBwYXJhbWV0ZXIgcGF0aHMgdG8gbG9jYXRpb24gZW50aXR5IGZpZWxkIG5hbWVzXG4gICAqL1xuICBwcml2YXRlIGV4dHJhY3RMb2NhdGlvbkZpbHRlcnMocGFyYW1ldGVyczogYW55KTogR2V0TG9jYXRpb25MaXN0UXVlcnlJbnB1dFsnZmlsdGVycyddIHtcbiAgICBjb25zdCBmaWx0ZXJzOiBHZXRMb2NhdGlvbkxpc3RRdWVyeUlucHV0WydmaWx0ZXJzJ10gPSBbXTtcbiAgICBjb25zdCBwYXJhbXNBbnkgPSBwYXJhbWV0ZXJzIGFzIGFueTtcblxuICAgIGlmICghcGFyYW1zQW55Py5maWx0ZXJzIHx8ICFBcnJheS5pc0FycmF5KHBhcmFtc0FueS5maWx0ZXJzKSkge1xuICAgICAgY29uc29sZS5sb2coJ+KaoO+4jyBbZXh0cmFjdExvY2F0aW9uRmlsdGVyc10gTm8gZmlsdGVycyBhcnJheSBmb3VuZCBvciBub3QgYW4gYXJyYXknKTtcbiAgICAgIHJldHVybiBmaWx0ZXJzO1xuICAgIH1cblxuXG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgcGFyYW1zQW55LmZpbHRlcnMpIHtcbiAgICAgIGlmICghZmlsdGVyPy5maWVsZCB8fCBmaWx0ZXI/LnZhbHVlID09PSB1bmRlZmluZWQgfHwgZmlsdGVyPy52YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmllbGQgPSBmaWx0ZXIuZmllbGQ7XG4gICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlci52YWx1ZTtcbiAgICAgIGNvbnN0IG9wZXJhdG9yID0gZmlsdGVyLm9wZXJhdG9yIHx8IHsgdHlwZTogJ2VxdWFsJyB9O1xuXG4gICAgICAvLyBIYW5kbGUgbG9jYXRpb24tc3BlY2lmaWMgZmllbGQgbWFwcGluZ3NcbiAgICAgIGlmIChmaWVsZCA9PT0gJ2NvdW50cnknKSB7XG4gICAgICAgIC8vIENvdW50cnkgZmlsdGVyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgIGZpZWxkOiAnY291bnRyeUlkJyxcbiAgICAgICAgICAgIG9wZXJhdG9yOiB7IHR5cGU6ICdpbicgfSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSkge1xuICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICBmaWVsZDogJ2NvdW50cnlJZCcsXG4gICAgICAgICAgICBvcGVyYXRvcjogeyB0eXBlOiAnZXF1YWwnIH0sXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZmllbGQgPT09ICdwcm92aW5jZScpIHtcbiAgICAgICAgLy8gUHJvdmluY2UvU3RhdGUgZmlsdGVyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgIGZpZWxkOiAnc3RhdGVJZCcsXG4gICAgICAgICAgICBvcGVyYXRvcjogeyB0eXBlOiAnaW4nIH0sXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgZmllbGQ6ICdzdGF0ZUlkJyxcbiAgICAgICAgICAgIG9wZXJhdG9yOiB7IHR5cGU6ICdlcXVhbCcgfSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zb2xlLmxvZygn4pyFIFtleHRyYWN0TG9jYXRpb25GaWx0ZXJzXSBBZGRlZCBwcm92aW5jZSBmaWx0ZXIgKGVxdWFsKTonLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZmllbGQgPT09ICdjaXR5Jykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICBmaWVsZDogJ2NpdHlJZCcsXG4gICAgICAgICAgICBvcGVyYXRvcjogeyB0eXBlOiAnaW4nIH0sXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgZmllbGQ6ICdjaXR5SWQnLFxuICAgICAgICAgICAgb3BlcmF0b3I6IHsgdHlwZTogJ2VxdWFsJyB9LFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEaXJlY3QgZmllbGQgbWFwcGluZ1xuICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgIGZpZWxkOiBmaWVsZCxcbiAgICAgICAgICBvcGVyYXRvcjogb3BlcmF0b3IsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVycztcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxufVxuIl19"],"names":["LocationRootConfig"],"mappings":"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"}