@sunbird-cb/access-settings 0.0.1-cbrelease-4.8.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/esm2022/lib/_common/access-control/access-control.component.mjs +561 -0
- package/esm2022/lib/_common/access-control/access-control.module.mjs +125 -0
- package/esm2022/lib/_common/dialogs/access-control-guide/access-control-guide.component.mjs +27 -0
- package/esm2022/lib/_common/dialogs/confirm-dialog/confirm-dialog.component.mjs +27 -0
- package/esm2022/lib/_common/dialogs/entity-selections/entity-selections.component.mjs +371 -0
- package/esm2022/lib/_common/dialogs/invite-users/invite-users.component.mjs +116 -0
- package/esm2022/lib/_common/pagination/pagination.component.mjs +168 -0
- package/esm2022/lib/_constants/app.constants.mjs +6 -0
- package/esm2022/lib/_directives/drag-drop.directive.mjs +53 -0
- package/esm2022/lib/_models/access-control.model.mjs +31 -0
- package/esm2022/lib/_models/pagination.model.mjs +2 -0
- package/esm2022/lib/_services/access-control.service.mjs +195 -0
- package/esm2022/lib/_services/cadre-mapping.service.mjs +164 -0
- package/esm2022/lib/access-settings.component.mjs +13 -0
- package/esm2022/lib/access-settings.module.mjs +21 -0
- package/esm2022/lib/components/bulk-upload-karmayogi/bulk-upload-karmayogi.component.mjs +391 -0
- package/esm2022/lib/components/list-table/list-table.component.mjs +148 -0
- package/esm2022/lib/components/snackbar/snackbar.component.mjs +19 -0
- package/esm2022/public-api.mjs +10 -0
- package/esm2022/sunbird-cb-access-settings.mjs +5 -0
- package/fesm2022/sunbird-cb-access-settings.mjs +2331 -0
- package/fesm2022/sunbird-cb-access-settings.mjs.map +1 -0
- package/index.d.ts +6 -0
- package/lib/_common/access-control/access-control.component.d.ts +71 -0
- package/lib/_common/access-control/access-control.component.d.ts.map +1 -0
- package/lib/_common/access-control/access-control.module.d.ts +36 -0
- package/lib/_common/access-control/access-control.module.d.ts.map +1 -0
- package/lib/_common/dialogs/access-control-guide/access-control-guide.component.d.ts +16 -0
- package/lib/_common/dialogs/access-control-guide/access-control-guide.component.d.ts.map +1 -0
- package/lib/_common/dialogs/confirm-dialog/confirm-dialog.component.d.ts +15 -0
- package/lib/_common/dialogs/confirm-dialog/confirm-dialog.component.d.ts.map +1 -0
- package/lib/_common/dialogs/entity-selections/entity-selections.component.d.ts +65 -0
- package/lib/_common/dialogs/entity-selections/entity-selections.component.d.ts.map +1 -0
- package/lib/_common/dialogs/invite-users/invite-users.component.d.ts +40 -0
- package/lib/_common/dialogs/invite-users/invite-users.component.d.ts.map +1 -0
- package/lib/_common/pagination/pagination.component.d.ts +31 -0
- package/lib/_common/pagination/pagination.component.d.ts.map +1 -0
- package/lib/_constants/app.constants.d.ts +6 -0
- package/lib/_constants/app.constants.d.ts.map +1 -0
- package/lib/_directives/drag-drop.directive.d.ts +12 -0
- package/lib/_directives/drag-drop.directive.d.ts.map +1 -0
- package/lib/_models/access-control.model.d.ts +106 -0
- package/lib/_models/access-control.model.d.ts.map +1 -0
- package/lib/_models/pagination.model.d.ts +6 -0
- package/lib/_models/pagination.model.d.ts.map +1 -0
- package/lib/_services/access-control.service.d.ts +72 -0
- package/lib/_services/access-control.service.d.ts.map +1 -0
- package/lib/_services/cadre-mapping.service.d.ts +71 -0
- package/lib/_services/cadre-mapping.service.d.ts.map +1 -0
- package/lib/access-settings.component.d.ts +9 -0
- package/lib/access-settings.component.d.ts.map +1 -0
- package/lib/access-settings.module.d.ts +12 -0
- package/lib/access-settings.module.d.ts.map +1 -0
- package/lib/components/bulk-upload-karmayogi/bulk-upload-karmayogi.component.d.ts +31 -0
- package/lib/components/bulk-upload-karmayogi/bulk-upload-karmayogi.component.d.ts.map +1 -0
- package/lib/components/list-table/list-table.component.d.ts +40 -0
- package/lib/components/list-table/list-table.component.d.ts.map +1 -0
- package/lib/components/snackbar/snackbar.component.d.ts +13 -0
- package/lib/components/snackbar/snackbar.component.d.ts.map +1 -0
- package/package.json +28 -0
- package/public-api.d.ts +7 -0
- package/public-api.d.ts.map +1 -0
- package/sunbird-cb-access-settings.d.ts.map +1 -0
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { Injectable, signal } from "@angular/core";
|
|
2
|
+
import { toNumber } from "lodash";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common/http";
|
|
5
|
+
const ENDPOINTS = {
|
|
6
|
+
SEARCH_USER_WITH_ADMIN: (query) => `/apis/proxies/v8/user/v1/autocomplete/${query}`,
|
|
7
|
+
SEARCH_USER: `/apis/proxies/v8/user/v1/admin/search`,
|
|
8
|
+
SEARCH_ORG: "/apis/proxies/v8/org/v1/admin/search",
|
|
9
|
+
VALIDATE_USER: "/apis/proxies/v8/user/v1/search",
|
|
10
|
+
GROUPS: "/apis/proxies/v8/user/v1/groups",
|
|
11
|
+
CADRE_CONFIG: "/apis/proxies/v8/data/v2/system/settings/get/cadreConfig",
|
|
12
|
+
DESIGNATION_LIST: "/apis/proxies/v8/designation/search",
|
|
13
|
+
SEARCH_V4: "/apis/proxies/v8/sunbirdigot/v4/search",
|
|
14
|
+
CREATE_USERGROUPS_CONTROL: "/apis/proxies/v8/accessSetttings/v1/upsert",
|
|
15
|
+
GET_ACCESS_CONTROL: (id) => `/apis/proxies/v8/accessSetttings/read/${id}`,
|
|
16
|
+
ACTION_CONTENT_V3: `apis/proxies/v8/action/content/v3/`
|
|
17
|
+
};
|
|
18
|
+
export class AccessControlService {
|
|
19
|
+
constructor(http) {
|
|
20
|
+
this.http = http;
|
|
21
|
+
this.accessControlConfig = signal(null);
|
|
22
|
+
this.holdServiceCadrebatch = signal({
|
|
23
|
+
service: [],
|
|
24
|
+
batch: [],
|
|
25
|
+
cadre: []
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
fetchUserListWithAdmin(queryString) {
|
|
29
|
+
return this.http.get(ENDPOINTS.SEARCH_USER_WITH_ADMIN(queryString));
|
|
30
|
+
}
|
|
31
|
+
fetchUserList(query, pagination, userIds) {
|
|
32
|
+
let request = {
|
|
33
|
+
filters: {
|
|
34
|
+
"profileDetails.profileStatus": ["VERIFIED", "NOT-VERIFIED"],
|
|
35
|
+
status: 1
|
|
36
|
+
},
|
|
37
|
+
limit: pagination.limit || 5,
|
|
38
|
+
offset: pagination.offset || 0,
|
|
39
|
+
query: query,
|
|
40
|
+
sort_by: {
|
|
41
|
+
firstName: "asc"
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
if (userIds?.length) {
|
|
45
|
+
request.filters = { ...request.filters, userId: userIds };
|
|
46
|
+
}
|
|
47
|
+
return this.http.post(ENDPOINTS.SEARCH_USER, { request: request });
|
|
48
|
+
}
|
|
49
|
+
fetchOrgList(query, pagination) {
|
|
50
|
+
const request = {
|
|
51
|
+
request: {
|
|
52
|
+
filters: {},
|
|
53
|
+
sort_by: {
|
|
54
|
+
channel: "asc"
|
|
55
|
+
},
|
|
56
|
+
fields: ["channel", "identifier"],
|
|
57
|
+
// limit: pagination.limit || 5,
|
|
58
|
+
// offset: pagination.offset || 0,
|
|
59
|
+
query: query
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
return this.http.post(ENDPOINTS.SEARCH_ORG, request);
|
|
63
|
+
}
|
|
64
|
+
validateUser(request) {
|
|
65
|
+
return this.http.post(ENDPOINTS.VALIDATE_USER, request);
|
|
66
|
+
}
|
|
67
|
+
fetchGroupsList() {
|
|
68
|
+
return this.http.get(ENDPOINTS.GROUPS);
|
|
69
|
+
}
|
|
70
|
+
fetchCadreConfig() {
|
|
71
|
+
return this.http.get(ENDPOINTS.CADRE_CONFIG);
|
|
72
|
+
}
|
|
73
|
+
fetchDesignation(query) {
|
|
74
|
+
const payload = {
|
|
75
|
+
filterCriteriaMap: {
|
|
76
|
+
status: "Active"
|
|
77
|
+
},
|
|
78
|
+
requestedFields: ["designation", "id"],
|
|
79
|
+
searchString: query
|
|
80
|
+
};
|
|
81
|
+
return this.http.post(ENDPOINTS.DESIGNATION_LIST, payload);
|
|
82
|
+
}
|
|
83
|
+
fetchDesignationsWithOrg(categories, query) {
|
|
84
|
+
const payload = {
|
|
85
|
+
request: {
|
|
86
|
+
filters: {
|
|
87
|
+
status: "Live",
|
|
88
|
+
category: "designation",
|
|
89
|
+
categories: categories,
|
|
90
|
+
objectType: "Term"
|
|
91
|
+
},
|
|
92
|
+
fields: ["identifier", "name"],
|
|
93
|
+
query: query,
|
|
94
|
+
sort_by: {
|
|
95
|
+
lastUpdatedOn: "desc",
|
|
96
|
+
objectType: "Term"
|
|
97
|
+
},
|
|
98
|
+
facets: []
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
return this.http.post(ENDPOINTS.SEARCH_V4, payload);
|
|
102
|
+
}
|
|
103
|
+
applyUserGroupAccessControl(request) {
|
|
104
|
+
return this.http.put(ENDPOINTS.CREATE_USERGROUPS_CONTROL, request);
|
|
105
|
+
}
|
|
106
|
+
fetchUserGroupAccessControl(id) {
|
|
107
|
+
return this.http.get(ENDPOINTS.GET_ACCESS_CONTROL(id));
|
|
108
|
+
}
|
|
109
|
+
updateContentV3(meta, id) {
|
|
110
|
+
return this.http.patch(`${ENDPOINTS.ACTION_CONTENT_V3}update/${id}`, meta);
|
|
111
|
+
}
|
|
112
|
+
downloadFile(data, filename = "data") {
|
|
113
|
+
const csvData = this.convertToCSV(data, ["email", "status", "mobile", "message"]);
|
|
114
|
+
const blob = new Blob([`\ufeff${csvData}`], { type: "text/csv;charset=utf-8;" });
|
|
115
|
+
const dwldLink = document.createElement("a");
|
|
116
|
+
const url = URL.createObjectURL(blob);
|
|
117
|
+
const isSafariBrowser = navigator.userAgent.indexOf("Safari") !== -1 && navigator.userAgent.indexOf("Chrome") === -1;
|
|
118
|
+
if (isSafariBrowser) {
|
|
119
|
+
// if Safari open in new window to save file with random filename.
|
|
120
|
+
dwldLink.setAttribute("target", "_blank");
|
|
121
|
+
}
|
|
122
|
+
dwldLink.setAttribute("href", url);
|
|
123
|
+
dwldLink.setAttribute("download", `${filename}.csv`);
|
|
124
|
+
dwldLink.style.visibility = "hidden";
|
|
125
|
+
document.body.appendChild(dwldLink);
|
|
126
|
+
dwldLink.click();
|
|
127
|
+
document.body.removeChild(dwldLink);
|
|
128
|
+
}
|
|
129
|
+
convertToCSV(objArray, headerList) {
|
|
130
|
+
const array = typeof objArray !== "object" ? JSON.parse(objArray) : objArray;
|
|
131
|
+
let str = "";
|
|
132
|
+
let row = "S.No,";
|
|
133
|
+
for (const index in headerList) {
|
|
134
|
+
if (headerList[index]) {
|
|
135
|
+
row += `${headerList[index]} ,`;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
row = row.slice(0, -1);
|
|
139
|
+
str += `${row}\r\n`;
|
|
140
|
+
// for (let i = 0; i < array.length; i += 1) {
|
|
141
|
+
for (const iIndex in array) {
|
|
142
|
+
if (array[iIndex]) {
|
|
143
|
+
let line = `${toNumber(iIndex) + 1} `;
|
|
144
|
+
for (const index in headerList) {
|
|
145
|
+
if (headerList[index]) {
|
|
146
|
+
const head = headerList[index];
|
|
147
|
+
line += `, ${array[iIndex][head]}`;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
str += `${line}\r\n`;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return str;
|
|
154
|
+
}
|
|
155
|
+
createRequestContent(apiResponse, accessSettingsEnabled) {
|
|
156
|
+
return {
|
|
157
|
+
request: {
|
|
158
|
+
content: {
|
|
159
|
+
appIcon: apiResponse.appIcon || "",
|
|
160
|
+
posterImage: apiResponse.posterImage || "",
|
|
161
|
+
code: apiResponse.code || "",
|
|
162
|
+
contentType: apiResponse.contentType || "",
|
|
163
|
+
createdBy: apiResponse.createdBy || "",
|
|
164
|
+
creatorContacts: apiResponse.creatorContacts || [],
|
|
165
|
+
creatorIDs: apiResponse.creatorIDs || [],
|
|
166
|
+
createdFor: apiResponse.createdFor || [],
|
|
167
|
+
creator: apiResponse.creator || "",
|
|
168
|
+
framework: apiResponse.framework || "",
|
|
169
|
+
mimeType: apiResponse.mimeType || "",
|
|
170
|
+
name: apiResponse.name || "",
|
|
171
|
+
organisation: apiResponse.organisation || [],
|
|
172
|
+
isExternal: apiResponse.isExternal || false,
|
|
173
|
+
primaryCategory: apiResponse.primaryCategory || "",
|
|
174
|
+
courseCategory: apiResponse.courseCategory || "",
|
|
175
|
+
license: apiResponse.license || "",
|
|
176
|
+
ownershipType: apiResponse.ownershipType || [],
|
|
177
|
+
cumulativeTracking: apiResponse.cumulativeTracking || false,
|
|
178
|
+
language: apiResponse.language || [],
|
|
179
|
+
accessSetting: apiResponse.accessSetting || "",
|
|
180
|
+
versionKey: apiResponse.versionKey || "",
|
|
181
|
+
accessSettingsEnabled: accessSettingsEnabled || false
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AccessControlService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
187
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AccessControlService, providedIn: "root" }); }
|
|
188
|
+
}
|
|
189
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AccessControlService, decorators: [{
|
|
190
|
+
type: Injectable,
|
|
191
|
+
args: [{
|
|
192
|
+
providedIn: "root"
|
|
193
|
+
}]
|
|
194
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
|
|
195
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWNvbnRyb2wuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi9hY2Nlc3Mtc2V0dGluZ3Mvc3JjL2xpYi9fc2VydmljZXMvYWNjZXNzLWNvbnRyb2wuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFHbkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBQVEsQ0FBQzs7O0FBRWxDLE1BQU0sU0FBUyxHQUFHO0lBQ2hCLHNCQUFzQixFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyx5Q0FBeUMsS0FBSyxFQUFFO0lBQzNGLFdBQVcsRUFBRSx1Q0FBdUM7SUFDcEQsVUFBVSxFQUFFLHNDQUFzQztJQUNsRCxhQUFhLEVBQUUsaUNBQWlDO0lBQ2hELE1BQU0sRUFBRSxpQ0FBaUM7SUFDekMsWUFBWSxFQUFFLDBEQUEwRDtJQUN4RSxnQkFBZ0IsRUFBRSxxQ0FBcUM7SUFDdkQsU0FBUyxFQUFFLHdDQUF3QztJQUNuRCx5QkFBeUIsRUFBRSw0Q0FBNEM7SUFDdkUsa0JBQWtCLEVBQUUsQ0FBQyxFQUFVLEVBQUUsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLEVBQUU7SUFDakYsaUJBQWlCLEVBQUUsb0NBQW9DO0NBQ3hELENBQUM7QUFLRixNQUFNLE9BQU8sb0JBQW9CO0lBUS9CLFlBQTZCLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDM0MsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE1BQU0sQ0FBNkMsSUFBSSxDQUFDLENBQUM7UUFDcEYsSUFBSSxDQUFDLHFCQUFxQixHQUFHLE1BQU0sQ0FBQztZQUNsQyxPQUFPLEVBQUUsRUFBRTtZQUNYLEtBQUssRUFBRSxFQUFFO1lBQ1QsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDLENBQUM7SUFDTCxDQUFD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QUksRUFBRTtvQkFDbEMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxTQUFTLElBQUksRUFBRTtvQkFDdEMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxRQUFRLElBQUksRUFBRTtvQkFDcEMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLElBQUksRUFBRTtvQkFDNUIsWUFBWSxFQUFFLFdBQVcsQ0FBQyxZQUFZLElBQUksRUFBRTtvQkFDNUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxVQUFVLElBQUksS0FBSztvQkFDM0MsZUFBZSxFQUFFLFdBQVcsQ0FBQyxlQUFlLElBQUksRUFBRTtvQkFDbEQsY0FBYyxFQUFFLFdBQVcsQ0FBQyxjQUFjLElBQUksRUFBRTtvQkFDaEQsT0FBTyxFQUFFLFdBQVcsQ0FBQyxPQUFPLElBQUksRUFBRTtvQkFDbEMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxhQUFhLElBQUksRUFBRTtvQkFDOUMsa0JBQWtCLEVBQUUsV0FBVyxDQUFDLGtCQUFrQixJQUFJLEtBQUs7b0JBQzNELFFBQVEsRUFBRSxXQUFXLENBQUMsUUFBUSxJQUFJLEVBQUU7b0JBQ3BDLGFBQWEsRUFBRSxXQUFXLENBQUMsYUFBYSxJQUFJLEVBQUU7b0JBQzlDLFVBQVUsRUFBRSxXQUFXLENBQUMsVUFBVSxJQUFJLEVBQUU7b0JBQ3hDLHFCQUFxQixFQUFFLHFCQUFxQixJQUFJLEtBQUs7aUJBQ3REO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQzsrR0E3TFUsb0JBQW9CO21IQUFwQixvQkFBb0IsY0FGbkIsTUFBTTs7NEZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCB7IEluamVjdGFibGUsIHNpZ25hbCwgV3JpdGFibGVTaWduYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBJVXNlckdyb3VwUmVxdWVzdCwgTnNBY2Nlc3NDb250cm9sQ29uZmlnIH0gZnJvbSBcIi4uL19tb2RlbHMvYWNjZXNzLWNvbnRyb2wubW9kZWxcIjtcbmltcG9ydCB7IHRvTnVtYmVyIH0gZnJvbSBcImxvZGFzaFwiO1xuXG5jb25zdCBFTkRQT0lOVFMgPSB7XG4gIFNFQVJDSF9VU0VSX1dJVEhfQURNSU46IChxdWVyeTogc3RyaW5nKSA9PiBgL2FwaXMvcHJveGllcy92OC91c2VyL3YxL2F1dG9jb21wbGV0ZS8ke3F1ZXJ5fWAsXG4gIFNFQVJDSF9VU0VSOiBgL2FwaXMvcHJveGllcy92OC91c2VyL3YxL2FkbWluL3NlYXJjaGAsXG4gIFNFQVJDSF9PUkc6IFwiL2FwaXMvcHJveGllcy92OC9vcmcvdjEvYWRtaW4vc2VhcmNoXCIsXG4gIFZBTElEQVRFX1VTRVI6IFwiL2FwaXMvcHJveGllcy92OC91c2VyL3YxL3NlYXJjaFwiLFxuICBHUk9VUFM6IFwiL2FwaXMvcHJveGllcy92OC91c2VyL3YxL2dyb3Vwc1wiLFxuICBDQURSRV9DT05GSUc6IFwiL2FwaXMvcHJveGllcy92OC9kYXRhL3YyL3N5c3RlbS9zZXR0aW5ncy9nZXQvY2FkcmVDb25maWdcIixcbiAgREVTSUdOQVRJT05fTElTVDogXCIvYXBpcy9wcm94aWVzL3Y4L2Rlc2lnbmF0aW9uL3NlYXJjaFwiLFxuICBTRUFSQ0hfVjQ6IFwiL2FwaXMvcHJveGllcy92OC9zdW5iaXJkaWdvdC92NC9zZWFyY2hcIixcbiAgQ1JFQVRFX1VTRVJHUk9VUFNfQ09OVFJPTDogXCIvYXBpcy9wcm94aWVzL3Y4L2FjY2Vzc1NldHR0aW5ncy92MS91cHNlcnRcIixcbiAgR0VUX0FDQ0VTU19DT05UUk9MOiAoaWQ6IHN0cmluZykgPT4gYC9hcGlzL3Byb3hpZXMvdjgvYWNjZXNzU2V0dHRpbmdzL3JlYWQvJHtpZH1gLFxuICBBQ1RJT05fQ09OVEVOVF9WMzogYGFwaXMvcHJveGllcy92OC9hY3Rpb24vY29udGVudC92My9gXG59O1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46IFwicm9vdFwiXG59KVxuZXhwb3J0IGNsYXNzIEFjY2Vzc0NvbnRyb2xTZXJ2aWNlIHtcbiAgYWNjZXNzQ29udHJvbENvbmZpZzogV3JpdGFibGVTaWduYWw8TnNBY2Nlc3NDb250cm9sQ29uZmlnLklBY2Nlc3NDb250cm9sQ29uZmlnPjtcbiAgaG9sZFNlcnZpY2VDYWRyZWJhdGNoOiBXcml0YWJsZVNpZ25hbDx7XG4gICAgc2VydmljZTogeyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfVtdO1xuICAgIGJhdGNoOiBudW1iZXJbXTtcbiAgICBjYWRyZTogeyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfVtdO1xuICB9PjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGh0dHA6IEh0dHBDbGllbnQpIHtcbiAgICB0aGlzLmFjY2Vzc0NvbnRyb2xDb25maWcgPSBzaWduYWw8TnNBY2Nlc3NDb250cm9sQ29uZmlnLklBY2Nlc3NDb250cm9sQ29uZmlnPihudWxsKTtcbiAgICB0aGlzLmhvbGRTZXJ2aWNlQ2FkcmViYXRjaCA9IHNpZ25hbCh7XG4gICAgICBzZXJ2aWNlOiBbXSxcbiAgICAgIGJhdGNoOiBbXSxcbiAgICAgIGNhZHJlOiBbXVxuICAgIH0pO1xuICB9XG5cbiAgZmV0Y2hVc2VyTGlzdFdpdGhBZG1pbihxdWVyeVN0cmluZzogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KEVORFBPSU5UUy5TRUFSQ0hfVVNFUl9XSVRIX0FETUlOKHF1ZXJ5U3RyaW5nKSk7XG4gIH1cblxuICBmZXRjaFVzZXJMaXN0KHF1ZXJ5OiBzdHJpbmcsIHBhZ2luYXRpb246IHsgbGltaXQ6IG51bWJlcjsgb2Zmc2V0OiBudW1iZXIgfSwgdXNlcklkcz86IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgcmVxdWVzdDogYW55ID0ge1xuICAgICAgZmlsdGVyczoge1xuICAgICAgICBcInByb2ZpbGVEZXRhaWxzLnByb2ZpbGVTdGF0dXNcIjogW1wiVkVSSUZJRURcIiwgXCJOT1QtVkVSSUZJRURcIl0sXG4gICAgICAgIHN0YXR1czogMVxuICAgICAgfSxcbiAgICAgIGxpbWl0OiBwYWdpbmF0aW9uLmxpbWl0IHx8IDUsXG4gICAgICBvZmZzZXQ6IHBhZ2luYXRpb24ub2Zmc2V0IHx8IDAsXG4gICAgICBxdWVyeTogcXVlcnksXG4gICAgICBzb3J0X2J5OiB7XG4gICAgICAgIGZpcnN0TmFtZTogXCJhc2NcIlxuICAgICAgfVxuICAgIH07XG4gICAgaWYgKHVzZXJJZHM/Lmxlbmd0aCkge1xuICAgICAgcmVxdWVzdC5maWx0ZXJzID0geyAuLi5yZXF1ZXN0LmZpbHRlcnMsIHVzZXJJZDogdXNlcklkcyB9O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihFTkRQT0lOVFMuU0VBUkNIX1VTRVIsIHsgcmVxdWVzdDogcmVxdWVzdCB9KTtcbiAgfVxuXG4gIGZldGNoT3JnTGlzdChxdWVyeTogc3RyaW5nLCBwYWdpbmF0aW9uPzogeyBsaW1pdDogbnVtYmVyOyBvZmZzZXQ6IG51bWJlciB9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgcmVxdWVzdDoge1xuICAgICAgICBmaWx0ZXJzOiB7fSxcbiAgICAgICAgc29ydF9ieToge1xuICAgICAgICAgIGNoYW5uZWw6IFwiYXNjXCJcbiAgICAgICAgfSxcbiAgICAgICAgZmllbGRzOiBbXCJjaGFubmVsXCIsIFwiaWRlbnRpZmllclwiXSxcbiAgICAgICAgLy8gbGltaXQ6IHBhZ2luYXRpb24ubGltaXQgfHwgNSxcbiAgICAgICAgLy8gb2Zmc2V0OiBwYWdpbmF0aW9uLm9mZnNldCB8fCAwLFxuICAgICAgICBxdWVyeTogcXVlcnlcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KEVORFBPSU5UUy5TRUFSQ0hfT1JHLCByZXF1ZXN0KTtcbiAgfVxuXG4gIHZhbGlkYXRlVXNlcihyZXF1ZXN0OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KEVORFBPSU5UUy5WQUxJREFURV9VU0VSLCByZXF1ZXN0KTtcbiAgfVxuXG4gIGZldGNoR3JvdXBzTGlzdCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oRU5EUE9JTlRTLkdST1VQUyk7XG4gIH1cblxuICBmZXRjaENhZHJlQ29uZmlnKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihFTkRQT0lOVFMuQ0FEUkVfQ09ORklHKTtcbiAgfVxuXG4gIGZldGNoRGVzaWduYXRpb24ocXVlcnk6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIGZpbHRlckNyaXRlcmlhTWFwOiB7XG4gICAgICAgIHN0YXR1czogXCJBY3RpdmVcIlxuICAgICAgfSxcbiAgICAgIHJlcXVlc3RlZEZpZWxkczogW1wiZGVzaWduYXRpb25cIiwgXCJpZFwiXSxcbiAgICAgIHNlYXJjaFN0cmluZzogcXVlcnlcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KEVORFBPSU5UUy5ERVNJR05BVElPTl9MSVNULCBwYXlsb2FkKTtcbiAgfVxuXG4gIGZldGNoRGVzaWduYXRpb25zV2l0aE9yZyhjYXRlZ29yaWVzOiBzdHJpbmdbXSwgcXVlcnk6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgZmlsdGVyczoge1xuICAgICAgICAgIHN0YXR1czogXCJMaXZlXCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwiZGVzaWduYXRpb25cIixcbiAgICAgICAgICBjYXRlZ29yaWVzOiBjYXRlZ29yaWVzLFxuICAgICAgICAgIG9iamVjdFR5cGU6IFwiVGVybVwiXG4gICAgICAgIH0sXG4gICAgICAgIGZpZWxkczogW1wiaWRlbnRpZmllclwiLCBcIm5hbWVcIl0sXG4gICAgICAgIHF1ZXJ5OiBxdWVyeSxcbiAgICAgICAgc29ydF9ieToge1xuICAgICAgICAgIGxhc3RVcGRhdGVkT246IFwiZGVzY1wiLFxuICAgICAgICAgIG9iamVjdFR5cGU6IFwiVGVybVwiXG4gICAgICAgIH0sXG4gICAgICAgIGZhY2V0czogW11cbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KEVORFBPSU5UUy5TRUFSQ0hfVjQsIHBheWxvYWQpO1xuICB9XG5cbiAgYXBwbHlVc2VyR3JvdXBBY2Nlc3NDb250cm9sKHJlcXVlc3Q6IElVc2VyR3JvdXBSZXF1ZXN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxhbnk+KEVORFBPSU5UUy5DUkVBVEVfVVNFUkdST1VQU19DT05UUk9MLCByZXF1ZXN0KTtcbiAgfVxuXG4gIGZldGNoVXNlckdyb3VwQWNjZXNzQ29udHJvbChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KEVORFBPSU5UUy5HRVRfQUNDRVNTX0NPTlRST0woaWQpKTtcbiAgfVxuXG4gIHVwZGF0ZUNvbnRlbnRWMyhtZXRhOiBhbnksIGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucGF0Y2g8YW55PihgJHtFTkRQT0lOVFMuQUNUSU9OX0NPTlRFTlRfVjN9dXBkYXRlLyR7aWR9YCwgbWV0YSk7XG4gIH1cblxuICBkb3dubG9hZEZpbGUoZGF0YTogYW55LCBmaWxlbmFtZSA9IFwiZGF0YVwiKSB7XG4gICAgY29uc3QgY3N2RGF0YSA9IHRoaXMuY29udmVydFRvQ1NWKGRhdGEsIFtcImVtYWlsXCIsIFwic3RhdHVzXCIsIFwibW9iaWxlXCIsIFwibWVzc2FnZVwiXSk7XG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtgXFx1ZmVmZiR7Y3N2RGF0YX1gXSwgeyB0eXBlOiBcInRleHQvY3N2O2NoYXJzZXQ9dXRmLTg7XCIgfSk7XG4gICAgY29uc3QgZHdsZExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgIGNvbnN0IGlzU2FmYXJpQnJvd3NlciA9IG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihcIlNhZmFyaVwiKSAhPT0gLTEgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKFwiQ2hyb21lXCIpID09PSAtMTtcbiAgICBpZiAoaXNTYWZhcmlCcm93c2VyKSB7XG4gICAgICAvLyBpZiBTYWZhcmkgb3BlbiBpbiBuZXcgd2luZG93IHRvIHNhdmUgZmlsZSB3aXRoIHJhbmRvbSBmaWxlbmFtZS5cbiAgICAgIGR3bGRMaW5rLnNldEF0dHJpYnV0ZShcInRhcmdldFwiLCBcIl9ibGFua1wiKTtcbiAgICB9XG4gICAgZHdsZExpbmsuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB1cmwpO1xuICAgIGR3bGRMaW5rLnNldEF0dHJpYnV0ZShcImRvd25sb2FkXCIsIGAke2ZpbGVuYW1lfS5jc3ZgKTtcbiAgICBkd2xkTGluay5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGR3bGRMaW5rKTtcbiAgICBkd2xkTGluay5jbGljaygpO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZHdsZExpbmspO1xuICB9XG5cbiAgY29udmVydFRvQ1NWKG9iakFycmF5OiBhbnksIGhlYWRlckxpc3Q6IGFueSkge1xuICAgIGNvbnN0IGFycmF5ID0gdHlwZW9mIG9iakFycmF5ICE9PSBcIm9iamVjdFwiID8gSlNPTi5wYXJzZShvYmpBcnJheSkgOiBvYmpBcnJheTtcbiAgICBsZXQgc3RyID0gXCJcIjtcbiAgICBsZXQgcm93ID0gXCJTLk5vLFwiO1xuXG4gICAgZm9yIChjb25zdCBpbmRleCBpbiBoZWFkZXJMaXN0KSB7XG4gICAgICBpZiAoaGVhZGVyTGlzdFtpbmRleF0pIHtcbiAgICAgICAgcm93ICs9IGAke2hlYWRlckxpc3RbaW5kZXhdfSAsYDtcbiAgICAgIH1cbiAgICB9XG4gICAgcm93ID0gcm93LnNsaWNlKDAsIC0xKTtcbiAgICBzdHIgKz0gYCR7cm93fVxcclxcbmA7XG4gICAgLy8gZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGZvciAoY29uc3QgaUluZGV4IGluIGFycmF5KSB7XG4gICAgICBpZiAoYXJyYXlbaUluZGV4XSkge1xuICAgICAgICBsZXQgbGluZSA9IGAke3RvTnVtYmVyKGlJbmRleCkgKyAxfSBgO1xuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IGluIGhlYWRlckxpc3QpIHtcbiAgICAgICAgICBpZiAoaGVhZGVyTGlzdFtpbmRleF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGhlYWQgPSBoZWFkZXJMaXN0W2luZGV4XTtcblxuICAgICAgICAgICAgbGluZSArPSBgLCAke2FycmF5W2lJbmRleF1baGVhZF19YDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3RyICs9IGAke2xpbmV9XFxyXFxuYDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIGNyZWF0ZVJlcXVlc3RDb250ZW50KGFwaVJlc3BvbnNlOiBhbnksIGFjY2Vzc1NldHRpbmdzRW5hYmxlZDogYm9vbGVhbikge1xuICAgIHJldHVybiB7XG4gICAgICByZXF1ZXN0OiB7XG4gICAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgICBhcHBJY29uOiBhcGlSZXNwb25zZS5hcHBJY29uIHx8IFwiXCIsXG4gICAgICAgICAgcG9zdGVySW1hZ2U6IGFwaVJlc3BvbnNlLnBvc3RlckltYWdlIHx8IFwiXCIsXG4gICAgICAgICAgY29kZTogYXBpUmVzcG9uc2UuY29kZSB8fCBcIlwiLFxuICAgICAgICAgIGNvbnRlbnRUeXBlOiBhcGlSZXNwb25zZS5jb250ZW50VHlwZSB8fCBcIlwiLFxuICAgICAgICAgIGNyZWF0ZWRCeTogYXBpUmVzcG9uc2UuY3JlYXRlZEJ5IHx8IFwiXCIsXG4gICAgICAgICAgY3JlYXRvckNvbnRhY3RzOiBhcGlSZXNwb25zZS5jcmVhdG9yQ29udGFjdHMgfHwgW10sXG4gICAgICAgICAgY3JlYXRvcklEczogYXBpUmVzcG9uc2UuY3JlYXRvcklEcyB8fCBbXSxcbiAgICAgICAgICBjcmVhdGVkRm9yOiBhcGlSZXNwb25zZS5jcmVhdGVkRm9yIHx8IFtdLFxuICAgICAgICAgIGNyZWF0b3I6IGFwaVJlc3BvbnNlLmNyZWF0b3IgfHwgXCJcIixcbiAgICAgICAgICBmcmFtZXdvcms6IGFwaVJlc3BvbnNlLmZyYW1ld29yayB8fCBcIlwiLFxuICAgICAgICAgIG1pbWVUeXBlOiBhcGlSZXNwb25zZS5taW1lVHlwZSB8fCBcIlwiLFxuICAgICAgICAgIG5hbWU6IGFwaVJlc3BvbnNlLm5hbWUgfHwgXCJcIixcbiAgICAgICAgICBvcmdhbmlzYXRpb246IGFwaVJlc3BvbnNlLm9yZ2FuaXNhdGlvbiB8fCBbXSxcbiAgICAgICAgICBpc0V4dGVybmFsOiBhcGlSZXNwb25zZS5pc0V4dGVybmFsIHx8IGZhbHNlLFxuICAgICAgICAgIHByaW1hcnlDYXRlZ29yeTogYXBpUmVzcG9uc2UucHJpbWFyeUNhdGVnb3J5IHx8IFwiXCIsXG4gICAgICAgICAgY291cnNlQ2F0ZWdvcnk6IGFwaVJlc3BvbnNlLmNvdXJzZUNhdGVnb3J5IHx8IFwiXCIsXG4gICAgICAgICAgbGljZW5zZTogYXBpUmVzcG9uc2UubGljZW5zZSB8fCBcIlwiLFxuICAgICAgICAgIG93bmVyc2hpcFR5cGU6IGFwaVJlc3BvbnNlLm93bmVyc2hpcFR5cGUgfHwgW10sXG4gICAgICAgICAgY3VtdWxhdGl2ZVRyYWNraW5nOiBhcGlSZXNwb25zZS5jdW11bGF0aXZlVHJhY2tpbmcgfHwgZmFsc2UsXG4gICAgICAgICAgbGFuZ3VhZ2U6IGFwaVJlc3BvbnNlLmxhbmd1YWdlIHx8IFtdLFxuICAgICAgICAgIGFjY2Vzc1NldHRpbmc6IGFwaVJlc3BvbnNlLmFjY2Vzc1NldHRpbmcgfHwgXCJcIixcbiAgICAgICAgICB2ZXJzaW9uS2V5OiBhcGlSZXNwb25zZS52ZXJzaW9uS2V5IHx8IFwiXCIsXG4gICAgICAgICAgYWNjZXNzU2V0dGluZ3NFbmFibGVkOiBhY2Nlc3NTZXR0aW5nc0VuYWJsZWQgfHwgZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { Injectable } from "@angular/core";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class CadreMappingService {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.allCadres = new Map();
|
|
6
|
+
this.allServices = new Map();
|
|
7
|
+
this.cadreToServiceMap = new Map();
|
|
8
|
+
this.serviceToCadresMap = new Map();
|
|
9
|
+
this.batchYearToCadresMap = new Map();
|
|
10
|
+
this.batchYearToServicesMap = new Map();
|
|
11
|
+
}
|
|
12
|
+
addToMapSet(map, key, value) {
|
|
13
|
+
if (!map.has(key)) {
|
|
14
|
+
map.set(key, new Set());
|
|
15
|
+
}
|
|
16
|
+
map.get(key)?.add(value);
|
|
17
|
+
}
|
|
18
|
+
initialize(data) {
|
|
19
|
+
// Clear existing data
|
|
20
|
+
this.allCadres.clear();
|
|
21
|
+
this.allServices.clear();
|
|
22
|
+
this.cadreToServiceMap.clear();
|
|
23
|
+
this.serviceToCadresMap.clear();
|
|
24
|
+
this.batchYearToCadresMap.clear();
|
|
25
|
+
this.batchYearToServicesMap.clear();
|
|
26
|
+
// Build lookups
|
|
27
|
+
data?.civilServiceType?.civilServiceTypeList.forEach(cst => {
|
|
28
|
+
if (cst) {
|
|
29
|
+
cst.serviceList.forEach(service => {
|
|
30
|
+
const { id: serviceId, commonBatchStartYear, commonBatchEndYear } = service;
|
|
31
|
+
this.allServices.set(serviceId, service);
|
|
32
|
+
// Add years to service-batch map
|
|
33
|
+
for (let y = commonBatchStartYear; y <= commonBatchEndYear; y++) {
|
|
34
|
+
this.addToMapSet(this.batchYearToServicesMap, y, serviceId);
|
|
35
|
+
}
|
|
36
|
+
service.cadreList?.forEach(cadre => {
|
|
37
|
+
const { id: cadreId, startBatchYear, endBatchYear } = cadre;
|
|
38
|
+
this.allCadres.set(cadreId, cadre);
|
|
39
|
+
// Map cadre <-> service
|
|
40
|
+
this.addToMapSet(this.cadreToServiceMap, cadreId, serviceId);
|
|
41
|
+
this.addToMapSet(this.serviceToCadresMap, serviceId, cadreId);
|
|
42
|
+
// Add years to cadre-batch map
|
|
43
|
+
for (let y = startBatchYear; y <= endBatchYear; y++) {
|
|
44
|
+
this.addToMapSet(this.batchYearToCadresMap, y, cadreId);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
getAllBatchYears() {
|
|
52
|
+
return Array.from(this.batchYearToCadresMap.keys()).sort((a, b) => a - b);
|
|
53
|
+
}
|
|
54
|
+
getAllCadres() {
|
|
55
|
+
return Array.from(this.allCadres.values()).map(c => ({
|
|
56
|
+
id: c.id,
|
|
57
|
+
name: c.name
|
|
58
|
+
}));
|
|
59
|
+
}
|
|
60
|
+
getAllServices() {
|
|
61
|
+
return Array.from(this.allServices.values()).map(s => ({
|
|
62
|
+
id: s.id,
|
|
63
|
+
name: s.name
|
|
64
|
+
}));
|
|
65
|
+
}
|
|
66
|
+
getServicesByCadres(cadreIds) {
|
|
67
|
+
const serviceIdsSet = new Set();
|
|
68
|
+
cadreIds.forEach(cadreId => {
|
|
69
|
+
const services = this.cadreToServiceMap.get(cadreId) || new Set();
|
|
70
|
+
services.forEach(serviceId => serviceIdsSet.add(serviceId));
|
|
71
|
+
});
|
|
72
|
+
return Array.from(serviceIdsSet).map(id => {
|
|
73
|
+
const s = this.allServices.get(id);
|
|
74
|
+
return { id: s.id, name: s.name };
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
getCadresByServices(serviceIds) {
|
|
78
|
+
const cadreIdsSet = new Set();
|
|
79
|
+
serviceIds.forEach(serviceId => {
|
|
80
|
+
const cadres = this.serviceToCadresMap.get(serviceId) || new Set();
|
|
81
|
+
cadres.forEach(cadreId => cadreIdsSet.add(cadreId));
|
|
82
|
+
});
|
|
83
|
+
return Array.from(cadreIdsSet).map(id => {
|
|
84
|
+
const c = this.allCadres.get(id);
|
|
85
|
+
return { id: c.id, name: c.name };
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
getCadresByBatchYears(years) {
|
|
89
|
+
const cadreIdsSet = new Set();
|
|
90
|
+
years.forEach(year => {
|
|
91
|
+
const cadres = this.batchYearToCadresMap.get(year) || new Set();
|
|
92
|
+
cadres.forEach(cadreId => cadreIdsSet.add(cadreId));
|
|
93
|
+
});
|
|
94
|
+
return Array.from(cadreIdsSet).map(id => {
|
|
95
|
+
const c = this.allCadres.get(id);
|
|
96
|
+
return { id: c.id, name: c.name };
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
getServicesByBatchYears(years) {
|
|
100
|
+
const serviceIdsSet = new Set();
|
|
101
|
+
years.forEach(year => {
|
|
102
|
+
const services = this.batchYearToServicesMap.get(year) || new Set();
|
|
103
|
+
services.forEach(serviceId => serviceIdsSet.add(serviceId));
|
|
104
|
+
});
|
|
105
|
+
return Array.from(serviceIdsSet).map(id => {
|
|
106
|
+
const s = this.allServices.get(id);
|
|
107
|
+
return { id: s.id, name: s.name };
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
getServicesByCadresAndBatch(cadreIds, year) {
|
|
111
|
+
const services = this.getServicesByCadres(cadreIds);
|
|
112
|
+
return services.filter(service => {
|
|
113
|
+
const fullService = this.allServices.get(service.id);
|
|
114
|
+
return year >= fullService.commonBatchStartYear && year <= fullService.commonBatchEndYear;
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
getCadresByServicesAndBatch(serviceIds, year) {
|
|
118
|
+
const cadres = this.getCadresByServices(serviceIds);
|
|
119
|
+
return cadres.filter(cadre => {
|
|
120
|
+
const fullCadre = this.allCadres.get(cadre.id);
|
|
121
|
+
return year >= fullCadre.startBatchYear && year <= fullCadre.endBatchYear;
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
getBatchYearsByCadres(cadreIds) {
|
|
125
|
+
const batchYearsSet = new Set();
|
|
126
|
+
cadreIds.forEach(cadreId => {
|
|
127
|
+
const cadre = this.allCadres.get(cadreId);
|
|
128
|
+
if (cadre) {
|
|
129
|
+
for (let y = cadre.startBatchYear; y <= cadre.endBatchYear; y++) {
|
|
130
|
+
batchYearsSet.add(y);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
return Array.from(batchYearsSet).sort((a, b) => a - b);
|
|
135
|
+
}
|
|
136
|
+
getBatchYearsByServices(serviceIds) {
|
|
137
|
+
const batchYearsSet = new Set();
|
|
138
|
+
serviceIds.forEach(serviceId => {
|
|
139
|
+
const service = this.allServices.get(serviceId);
|
|
140
|
+
if (service) {
|
|
141
|
+
for (let y = service.commonBatchStartYear; y <= service.commonBatchEndYear; y++) {
|
|
142
|
+
batchYearsSet.add(y);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
return Array.from(batchYearsSet).sort((a, b) => a - b);
|
|
147
|
+
}
|
|
148
|
+
getBatchYearsByServicesAndCadres(serviceIds, cadreIds) {
|
|
149
|
+
const serviceYears = this.getBatchYearsByServices(serviceIds);
|
|
150
|
+
const cadreYears = this.getBatchYearsByCadres(cadreIds);
|
|
151
|
+
// Find intersection of years
|
|
152
|
+
const commonYears = serviceYears.filter(year => cadreYears.includes(year));
|
|
153
|
+
return commonYears.sort((a, b) => a - b);
|
|
154
|
+
}
|
|
155
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CadreMappingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
156
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CadreMappingService, providedIn: "root" }); }
|
|
157
|
+
}
|
|
158
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CadreMappingService, decorators: [{
|
|
159
|
+
type: Injectable,
|
|
160
|
+
args: [{
|
|
161
|
+
providedIn: "root"
|
|
162
|
+
}]
|
|
163
|
+
}] });
|
|
164
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FkcmUtbWFwcGluZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2FjY2Vzcy1zZXR0aW5ncy9zcmMvbGliL19zZXJ2aWNlcy9jYWRyZS1tYXBwaW5nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUF5QjNDLE1BQU0sT0FBTyxtQkFBbUI7SUFIaEM7UUFJVSxjQUFTLEdBQUcsSUFBSSxHQUFHLEVBQWUsQ0FBQztRQUNuQyxnQkFBVyxHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7UUFDckMsc0JBQWlCLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7UUFDbkQsdUJBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7UUFDcEQseUJBQW9CLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7UUFDdEQsMkJBQXNCLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7S0F3S2pFO0lBdEtTLFdBQVcsQ0FBQyxHQUF1QixFQUFFLEdBQVEsRUFBRSxLQUFVO1FBQy9ELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2pCLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztTQUN6QjtRQUNELEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBc0I7UUFDL0Isc0JBQXNCO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFD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O1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxnQ0FBZ0MsQ0FBQyxVQUFvQixFQUFFLFFBQWtCO1FBQ3ZFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5RCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFeEQsNkJBQTZCO1FBQzdCLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDM0UsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7K0dBN0tVLG1CQUFtQjttSEFBbkIsbUJBQW1CLGNBRmxCLE1BQU07OzRGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmludGVyZmFjZSBDaXZpbFNlcnZpY2VEYXRhIHtcbiAgY2l2aWxTZXJ2aWNlVHlwZToge1xuICAgIGNpdmlsU2VydmljZVR5cGVMaXN0OiBBcnJheTx7XG4gICAgICBpZDogc3RyaW5nO1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgc2VydmljZUxpc3Q6IEFycmF5PHtcbiAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICBjb21tb25CYXRjaFN0YXJ0WWVhcjogbnVtYmVyO1xuICAgICAgICBjb21tb25CYXRjaEVuZFllYXI6IG51bWJlcjtcbiAgICAgICAgY2FkcmVMaXN0PzogQXJyYXk8e1xuICAgICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICAgIHN0YXJ0QmF0Y2hZZWFyOiBudW1iZXI7XG4gICAgICAgICAgZW5kQmF0Y2hZZWFyOiBudW1iZXI7XG4gICAgICAgIH0+O1xuICAgICAgfT47XG4gICAgfT47XG4gIH07XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogXCJyb290XCJcbn0pXG5leHBvcnQgY2xhc3MgQ2FkcmVNYXBwaW5nU2VydmljZSB7XG4gIHByaXZhdGUgYWxsQ2FkcmVzID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgcHJpdmF0ZSBhbGxTZXJ2aWNlcyA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gIHByaXZhdGUgY2FkcmVUb1NlcnZpY2VNYXAgPSBuZXcgTWFwPHN0cmluZywgU2V0PHN0cmluZz4+KCk7XG4gIHByaXZhdGUgc2VydmljZVRvQ2FkcmVzTWFwID0gbmV3IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PigpO1xuICBwcml2YXRlIGJhdGNoWWVhclRvQ2FkcmVzTWFwID0gbmV3IE1hcDxudW1iZXIsIFNldDxzdHJpbmc+PigpO1xuICBwcml2YXRlIGJhdGNoWWVhclRvU2VydmljZXNNYXAgPSBuZXcgTWFwPG51bWJlciwgU2V0PHN0cmluZz4+KCk7XG5cbiAgcHJpdmF0ZSBhZGRUb01hcFNldChtYXA6IE1hcDxhbnksIFNldDxhbnk+Piwga2V5OiBhbnksIHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoIW1hcC5oYXMoa2V5KSkge1xuICAgICAgbWFwLnNldChrZXksIG5ldyBTZXQoKSk7XG4gICAgfVxuICAgIG1hcC5nZXQoa2V5KT8uYWRkKHZhbHVlKTtcbiAgfVxuXG4gIGluaXRpYWxpemUoZGF0YTogQ2l2aWxTZXJ2aWNlRGF0YSkge1xuICAgIC8vIENsZWFyIGV4aXN0aW5nIGRhdGFcbiAgICB0aGlzLmFsbENhZHJlcy5jbGVhcigpO1xuICAgIHRoaXMuYWxsU2VydmljZXMuY2xlYXIoKTtcbiAgICB0aGlzLmNhZHJlVG9TZXJ2aWNlTWFwLmNsZWFyKCk7XG4gICAgdGhpcy5zZXJ2aWNlVG9DYWRyZXNNYXAuY2xlYXIoKTtcbiAgICB0aGlzLmJhdGNoWWVhclRvQ2FkcmVzTWFwLmNsZWFyKCk7XG4gICAgdGhpcy5iYXRjaFllYXJUb1NlcnZpY2VzTWFwLmNsZWFyKCk7XG5cbiAgICAvLyBCdWlsZCBsb29rdXBzXG4gICAgZGF0YT8uY2l2aWxTZXJ2aWNlVHlwZT8uY2l2aWxTZXJ2aWNlVHlwZUxpc3QuZm9yRWFjaChjc3QgPT4ge1xuICAgICAgaWYgKGNzdCkge1xuICAgICAgICBjc3Quc2VydmljZUxpc3QuZm9yRWFjaChzZXJ2aWNlID0+IHtcbiAgICAgICAgICBjb25zdCB7IGlkOiBzZXJ2aWNlSWQsIGNvbW1vbkJhdGNoU3RhcnRZZWFyLCBjb21tb25CYXRjaEVuZFllYXIgfSA9IHNlcnZpY2U7XG4gICAgICAgICAgdGhpcy5hbGxTZXJ2aWNlcy5zZXQoc2VydmljZUlkLCBzZXJ2aWNlKTtcbiAgXG4gICAgICAgICAgLy8gQWRkIHllYXJzIHRvIHNlcnZpY2UtYmF0Y2ggbWFwXG4gICAgICAgICAgZm9yIChsZXQgeSA9IGNvbW1vbkJhdGNoU3RhcnRZZWFyOyB5IDw9IGNvbW1vbkJhdGNoRW5kWWVhcjsgeSsrKSB7XG4gICAgICAgICAgICB0aGlzLmFkZFRvTWFwU2V0KHRoaXMuYmF0Y2hZZWFyVG9TZXJ2aWNlc01hcCwgeSwgc2VydmljZUlkKTtcbiAgICAgICAgICB9XG4gIFxuICAgICAgICAgIHNlcnZpY2UuY2FkcmVMaXN0Py5mb3JFYWNoKGNhZHJlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgaWQ6IGNhZHJlSWQsIHN0YXJ0QmF0Y2hZZWFyLCBlbmRCYXRjaFllYXIgfSA9IGNhZHJlO1xuICAgICAgICAgICAgdGhpcy5hbGxDYWRyZXMuc2V0KGNhZHJlSWQsIGNhZHJlKTtcbiAgXG4gICAgICAgICAgICAvLyBNYXAgY2FkcmUgPC0+IHNlcnZpY2VcbiAgICAgICAgICAgIHRoaXMuYWRkVG9NYXBTZXQodGhpcy5jYWRyZVRvU2VydmljZU1hcCwgY2FkcmVJZCwgc2VydmljZUlkKTtcbiAgICAgICAgICAgIHRoaXMuYWRkVG9NYXBTZXQodGhpcy5zZXJ2aWNlVG9DYWRyZXNNYXAsIHNlcnZpY2VJZCwgY2FkcmVJZCk7XG4gIFxuICAgICAgICAgICAgLy8gQWRkIHllYXJzIHRvIGNhZHJlLWJhdGNoIG1hcFxuICAgICAgICAgICAgZm9yIChsZXQgeSA9IHN0YXJ0QmF0Y2hZZWFyOyB5IDw9IGVuZEJhdGNoWWVhcjsgeSsrKSB7XG4gICAgICAgICAgICAgIHRoaXMuYWRkVG9NYXBTZXQodGhpcy5iYXRjaFllYXJUb0NhZHJlc01hcCwgeSwgY2FkcmVJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0QWxsQmF0Y2hZZWFycygpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5iYXRjaFllYXJUb0NhZHJlc01hcC5rZXlzKCkpLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgfVxuXG4gIGdldEFsbENhZHJlcygpOiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9PiB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5hbGxDYWRyZXMudmFsdWVzKCkpLm1hcChjID0+ICh7XG4gICAgICBpZDogYy5pZCxcbiAgICAgIG5hbWU6IGMubmFtZVxuICAgIH0pKTtcbiAgfVxuXG4gIGdldEFsbFNlcnZpY2VzKCk6IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH0+IHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmFsbFNlcnZpY2VzLnZhbHVlcygpKS5tYXAocyA9PiAoe1xuICAgICAgaWQ6IHMuaWQsXG4gICAgICBuYW1lOiBzLm5hbWVcbiAgICB9KSk7XG4gIH1cblxuICBnZXRTZXJ2aWNlc0J5Q2FkcmVzKGNhZHJlSWRzOiBzdHJpbmdbXSk6IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH0+IHtcbiAgICBjb25zdCBzZXJ2aWNlSWRzU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY2FkcmVJZHMuZm9yRWFjaChjYWRyZUlkID0+IHtcbiAgICAgIGNvbnN0IHNlcnZpY2VzID0gdGhpcy5jYWRyZVRvU2VydmljZU1hcC5nZXQoY2FkcmVJZCkgfHwgbmV3IFNldCgpO1xuICAgICAgc2VydmljZXMuZm9yRWFjaChzZXJ2aWNlSWQgPT4gc2VydmljZUlkc1NldC5hZGQoc2VydmljZUlkKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShzZXJ2aWNlSWRzU2V0KS5tYXAoaWQgPT4ge1xuICAgICAgY29uc3QgcyA9IHRoaXMuYWxsU2VydmljZXMuZ2V0KGlkKTtcbiAgICAgIHJldHVybiB7IGlkOiBzLmlkLCBuYW1lOiBzLm5hbWUgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldENhZHJlc0J5U2VydmljZXMoc2VydmljZUlkczogc3RyaW5nW10pOiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9PiB7XG4gICAgY29uc3QgY2FkcmVJZHNTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBzZXJ2aWNlSWRzLmZvckVhY2goc2VydmljZUlkID0+IHtcbiAgICAgIGNvbnN0IGNhZHJlcyA9IHRoaXMuc2VydmljZVRvQ2FkcmVzTWFwLmdldChzZXJ2aWNlSWQpIHx8IG5ldyBTZXQoKTtcbiAgICAgIGNhZHJlcy5mb3JFYWNoKGNhZHJlSWQgPT4gY2FkcmVJZHNTZXQuYWRkKGNhZHJlSWQpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBBcnJheS5mcm9tKGNhZHJlSWRzU2V0KS5tYXAoaWQgPT4ge1xuICAgICAgY29uc3QgYyA9IHRoaXMuYWxsQ2FkcmVzLmdldChpZCk7XG4gICAgICByZXR1cm4geyBpZDogYy5pZCwgbmFtZTogYy5uYW1lIH07XG4gICAgfSk7XG4gIH1cblxuICBnZXRDYWRyZXNCeUJhdGNoWWVhcnMoeWVhcnM6IG51bWJlcltdKTogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IGNhZHJlSWRzU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgeWVhcnMuZm9yRWFjaCh5ZWFyID0+IHtcbiAgICAgIGNvbnN0IGNhZHJlcyA9IHRoaXMuYmF0Y2hZZWFyVG9DYWRyZXNNYXAuZ2V0KHllYXIpIHx8IG5ldyBTZXQoKTtcbiAgICAgIGNhZHJlcy5mb3JFYWNoKGNhZHJlSWQgPT4gY2FkcmVJZHNTZXQuYWRkKGNhZHJlSWQpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBBcnJheS5mcm9tKGNhZHJlSWRzU2V0KS5tYXAoaWQgPT4ge1xuICAgICAgY29uc3QgYyA9IHRoaXMuYWxsQ2FkcmVzLmdldChpZCk7XG4gICAgICByZXR1cm4geyBpZDogYy5pZCwgbmFtZTogYy5uYW1lIH07XG4gICAgfSk7XG4gIH1cblxuICBnZXRTZXJ2aWNlc0J5QmF0Y2hZZWFycyh5ZWFyczogbnVtYmVyW10pOiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9PiB7XG4gICAgY29uc3Qgc2VydmljZUlkc1NldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIHllYXJzLmZvckVhY2goeWVhciA9PiB7XG4gICAgICBjb25zdCBzZXJ2aWNlcyA9IHRoaXMuYmF0Y2hZZWFyVG9TZXJ2aWNlc01hcC5nZXQoeWVhcikgfHwgbmV3IFNldCgpO1xuICAgICAgc2VydmljZXMuZm9yRWFjaChzZXJ2aWNlSWQgPT4gc2VydmljZUlkc1NldC5hZGQoc2VydmljZUlkKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShzZXJ2aWNlSWRzU2V0KS5tYXAoaWQgPT4ge1xuICAgICAgY29uc3QgcyA9IHRoaXMuYWxsU2VydmljZXMuZ2V0KGlkKTtcbiAgICAgIHJldHVybiB7IGlkOiBzLmlkLCBuYW1lOiBzLm5hbWUgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFNlcnZpY2VzQnlDYWRyZXNBbmRCYXRjaChjYWRyZUlkczogc3RyaW5nW10sIHllYXI6IG51bWJlcik6IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH0+IHtcbiAgICBjb25zdCBzZXJ2aWNlcyA9IHRoaXMuZ2V0U2VydmljZXNCeUNhZHJlcyhjYWRyZUlkcyk7XG4gICAgcmV0dXJuIHNlcnZpY2VzLmZpbHRlcihzZXJ2aWNlID0+IHtcbiAgICAgIGNvbnN0IGZ1bGxTZXJ2aWNlID0gdGhpcy5hbGxTZXJ2aWNlcy5nZXQoc2VydmljZS5pZCk7XG4gICAgICByZXR1cm4geWVhciA+PSBmdWxsU2VydmljZS5jb21tb25CYXRjaFN0YXJ0WWVhciAmJiB5ZWFyIDw9IGZ1bGxTZXJ2aWNlLmNvbW1vbkJhdGNoRW5kWWVhcjtcbiAgICB9KTtcbiAgfVxuXG4gIGdldENhZHJlc0J5U2VydmljZXNBbmRCYXRjaChzZXJ2aWNlSWRzOiBzdHJpbmdbXSwgeWVhcjogbnVtYmVyKTogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IGNhZHJlcyA9IHRoaXMuZ2V0Q2FkcmVzQnlTZXJ2aWNlcyhzZXJ2aWNlSWRzKTtcbiAgICByZXR1cm4gY2FkcmVzLmZpbHRlcihjYWRyZSA9PiB7XG4gICAgICBjb25zdCBmdWxsQ2FkcmUgPSB0aGlzLmFsbENhZHJlcy5nZXQoY2FkcmUuaWQpO1xuICAgICAgcmV0dXJuIHllYXIgPj0gZnVsbENhZHJlLnN0YXJ0QmF0Y2hZZWFyICYmIHllYXIgPD0gZnVsbENhZHJlLmVuZEJhdGNoWWVhcjtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEJhdGNoWWVhcnNCeUNhZHJlcyhjYWRyZUlkczogc3RyaW5nW10pOiBudW1iZXJbXSB7XG4gICAgY29uc3QgYmF0Y2hZZWFyc1NldCA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICAgIGNhZHJlSWRzLmZvckVhY2goY2FkcmVJZCA9PiB7XG4gICAgICBjb25zdCBjYWRyZSA9IHRoaXMuYWxsQ2FkcmVzLmdldChjYWRyZUlkKTtcbiAgICAgIGlmIChjYWRyZSkge1xuICAgICAgICBmb3IgKGxldCB5ID0gY2FkcmUuc3RhcnRCYXRjaFllYXI7IHkgPD0gY2FkcmUuZW5kQmF0Y2hZZWFyOyB5KyspIHtcbiAgICAgICAgICBiYXRjaFllYXJzU2V0LmFkZCh5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBBcnJheS5mcm9tKGJhdGNoWWVhcnNTZXQpLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgfVxuXG4gIGdldEJhdGNoWWVhcnNCeVNlcnZpY2VzKHNlcnZpY2VJZHM6IHN0cmluZ1tdKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IGJhdGNoWWVhcnNTZXQgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgICBzZXJ2aWNlSWRzLmZvckVhY2goc2VydmljZUlkID0+IHtcbiAgICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLmFsbFNlcnZpY2VzLmdldChzZXJ2aWNlSWQpO1xuICAgICAgaWYgKHNlcnZpY2UpIHtcbiAgICAgICAgZm9yIChsZXQgeSA9IHNlcnZpY2UuY29tbW9uQmF0Y2hTdGFydFllYXI7IHkgPD0gc2VydmljZS5jb21tb25CYXRjaEVuZFllYXI7IHkrKykge1xuICAgICAgICAgIGJhdGNoWWVhcnNTZXQuYWRkKHkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oYmF0Y2hZZWFyc1NldCkuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICB9XG5cbiAgZ2V0QmF0Y2hZZWFyc0J5U2VydmljZXNBbmRDYWRyZXMoc2VydmljZUlkczogc3RyaW5nW10sIGNhZHJlSWRzOiBzdHJpbmdbXSk6IG51bWJlcltdIHtcbiAgICBjb25zdCBzZXJ2aWNlWWVhcnMgPSB0aGlzLmdldEJhdGNoWWVhcnNCeVNlcnZpY2VzKHNlcnZpY2VJZHMpO1xuICAgIGNvbnN0IGNhZHJlWWVhcnMgPSB0aGlzLmdldEJhdGNoWWVhcnNCeUNhZHJlcyhjYWRyZUlkcyk7XG5cbiAgICAvLyBGaW5kIGludGVyc2VjdGlvbiBvZiB5ZWFyc1xuICAgIGNvbnN0IGNvbW1vblllYXJzID0gc2VydmljZVllYXJzLmZpbHRlcih5ZWFyID0+IGNhZHJlWWVhcnMuaW5jbHVkZXMoeWVhcikpO1xuICAgIHJldHVybiBjb21tb25ZZWFycy5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Component } from "@angular/core";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class AccessSettingsComponent {
|
|
4
|
+
constructor() { }
|
|
5
|
+
ngOnInit() { }
|
|
6
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AccessSettingsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AccessSettingsComponent, selector: "sb-uic-access-settings", ngImport: i0, template: ` <p>access settings works!</p> `, isInline: true, styles: ["::ng-deep .mdc-tooltip{--mdc-plain-tooltip-container-color: #616161;--mdc-plain-tooltip-supporting-text-color: #ffffff;--mdc-plain-tooltip-container-shape: 4px;--mdc-plain-tooltip-container-size: 340px;--mdc-plain-tooltip-supporting-text-padding: 8px}\n"] }); }
|
|
8
|
+
}
|
|
9
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AccessSettingsComponent, decorators: [{
|
|
10
|
+
type: Component,
|
|
11
|
+
args: [{ selector: "sb-uic-access-settings", template: ` <p>access settings works!</p> `, styles: ["::ng-deep .mdc-tooltip{--mdc-plain-tooltip-container-color: #616161;--mdc-plain-tooltip-supporting-text-color: #ffffff;--mdc-plain-tooltip-container-shape: 4px;--mdc-plain-tooltip-container-size: 340px;--mdc-plain-tooltip-supporting-text-padding: 8px}\n"] }]
|
|
12
|
+
}], ctorParameters: function () { return []; } });
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLXNldHRpbmdzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi9hY2Nlc3Mtc2V0dGluZ3Mvc3JjL2xpYi9hY2Nlc3Mtc2V0dGluZ3MuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7O0FBZWxELE1BQU0sT0FBTyx1QkFBdUI7SUFDbEMsZ0JBQWUsQ0FBQztJQUVoQixRQUFRLEtBQUksQ0FBQzsrR0FIRix1QkFBdUI7bUdBQXZCLHVCQUF1Qiw4REFYeEIsaUNBQWlDOzs0RkFXaEMsdUJBQXVCO2tCQWJuQyxTQUFTOytCQUNFLHdCQUF3QixZQUN4QixpQ0FBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJzYi11aWMtYWNjZXNzLXNldHRpbmdzXCIsXG4gIHRlbXBsYXRlOiBgIDxwPmFjY2VzcyBzZXR0aW5ncyB3b3JrcyE8L3A+IGAsXG4gIHN0eWxlczogW2BcbiAgICA6Om5nLWRlZXAgLm1kYy10b29sdGlwIHtcbiAgICAgIC0tbWRjLXBsYWluLXRvb2x0aXAtY29udGFpbmVyLWNvbG9yOiAjNjE2MTYxO1xuICAgICAgLS1tZGMtcGxhaW4tdG9vbHRpcC1zdXBwb3J0aW5nLXRleHQtY29sb3I6ICNmZmZmZmY7XG4gICAgICAtLW1kYy1wbGFpbi10b29sdGlwLWNvbnRhaW5lci1zaGFwZTogNHB4O1xuICAgICAgLS1tZGMtcGxhaW4tdG9vbHRpcC1jb250YWluZXItc2l6ZTogMzQwcHg7XG4gICAgICAtLW1kYy1wbGFpbi10b29sdGlwLXN1cHBvcnRpbmctdGV4dC1wYWRkaW5nOiA4cHg7XG4gICAgfVxuICBgXVxufSlcbmV4cG9ydCBjbGFzcyBBY2Nlc3NTZXR0aW5nc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBuZ09uSW5pdCgpIHt9XG59XG4iXX0=
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { NgModule } from "@angular/core";
|
|
2
|
+
import { AccessSettingsComponent } from "./access-settings.component";
|
|
3
|
+
import { SnackbarComponent } from "./components/snackbar/snackbar.component";
|
|
4
|
+
import { MatIconModule } from "@angular/material/icon";
|
|
5
|
+
import { CommonModule } from "@angular/common";
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export class AccessSettingsModule {
|
|
8
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AccessSettingsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
9
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: AccessSettingsModule, declarations: [AccessSettingsComponent, SnackbarComponent], imports: [MatIconModule, CommonModule], exports: [AccessSettingsComponent] }); }
|
|
10
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AccessSettingsModule, imports: [MatIconModule, CommonModule] }); }
|
|
11
|
+
}
|
|
12
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AccessSettingsModule, decorators: [{
|
|
13
|
+
type: NgModule,
|
|
14
|
+
args: [{
|
|
15
|
+
declarations: [AccessSettingsComponent, SnackbarComponent],
|
|
16
|
+
imports: [MatIconModule, CommonModule],
|
|
17
|
+
exports: [AccessSettingsComponent]
|
|
18
|
+
}]
|
|
19
|
+
}] });
|
|
20
|
+
export * from "./access-settings.component";
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLXNldHRpbmdzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi9hY2Nlc3Mtc2V0dGluZ3Mvc3JjL2xpYi9hY2Nlc3Mtc2V0dGluZ3MubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFNL0MsTUFBTSxPQUFPLG9CQUFvQjsrR0FBcEIsb0JBQW9CO2dIQUFwQixvQkFBb0IsaUJBSmhCLHVCQUF1QixFQUFFLGlCQUFpQixhQUMvQyxhQUFhLEVBQUUsWUFBWSxhQUMzQix1QkFBdUI7Z0hBRXRCLG9CQUFvQixZQUhyQixhQUFhLEVBQUUsWUFBWTs7NEZBRzFCLG9CQUFvQjtrQkFMaEMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxpQkFBaUIsQ0FBQztvQkFDMUQsT0FBTyxFQUFFLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQztvQkFDdEMsT0FBTyxFQUFFLENBQUMsdUJBQXVCLENBQUM7aUJBQ25DOztBQUVELGNBQWMsNkJBQTZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBBY2Nlc3NTZXR0aW5nc0NvbXBvbmVudCB9IGZyb20gXCIuL2FjY2Vzcy1zZXR0aW5ncy5jb21wb25lbnRcIjtcbmltcG9ydCB7IFNuYWNrYmFyQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9zbmFja2Jhci9zbmFja2Jhci5jb21wb25lbnRcIjtcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvblwiO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbQWNjZXNzU2V0dGluZ3NDb21wb25lbnQsIFNuYWNrYmFyQ29tcG9uZW50XSxcbiAgaW1wb3J0czogW01hdEljb25Nb2R1bGUsIENvbW1vbk1vZHVsZV0sXG4gIGV4cG9ydHM6IFtBY2Nlc3NTZXR0aW5nc0NvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgQWNjZXNzU2V0dGluZ3NNb2R1bGUge31cbmV4cG9ydCAqIGZyb20gXCIuL2FjY2Vzcy1zZXR0aW5ncy5jb21wb25lbnRcIjtcbiJdfQ==
|