tin-spa 2.2.3 → 2.3.1
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/esm2020/lib/components/accounts/accountDialog.component.mjs +2 -2
- package/esm2020/lib/components/accounts/accounts.component.mjs +2 -2
- package/esm2020/lib/components/attach/attach.component.mjs +1 -20
- package/esm2020/lib/components/change-password/change-password.component.mjs +2 -2
- package/esm2020/lib/components/create-account/create-account.component.mjs +2 -2
- package/esm2020/lib/components/customers/customers.component.mjs +2 -2
- package/esm2020/lib/components/date/date.component.mjs +23 -16
- package/esm2020/lib/components/departments/departments.component.mjs +6 -26
- package/esm2020/lib/components/employees/employees.component.mjs +10 -53
- package/esm2020/lib/components/form/form.component.mjs +2 -2
- package/esm2020/lib/components/inventory/inventory.component.mjs +2 -2
- package/esm2020/lib/components/inventory/quantityDialog.component.mjs +2 -2
- package/esm2020/lib/components/invitations-table/invitations-table.component.mjs +2 -2
- package/esm2020/lib/components/list-dialog/list-dialog.component.mjs +2 -2
- package/esm2020/lib/components/login/login.component.mjs +2 -2
- package/esm2020/lib/components/logs/logs.component.mjs +2 -2
- package/esm2020/lib/components/membership/membership.component.mjs +2 -2
- package/esm2020/lib/components/nav-menu/nav-menu.component.mjs +2 -2
- package/esm2020/lib/components/plans/plans.component.mjs +2 -2
- package/esm2020/lib/components/positions/positions.component.mjs +13 -6
- package/esm2020/lib/components/profile/profile.component.mjs +2 -2
- package/esm2020/lib/components/recover-account/recover-account.component.mjs +2 -2
- package/esm2020/lib/components/roles/addRoleDialog.component.mjs +2 -2
- package/esm2020/lib/components/roles/roles.component.mjs +2 -2
- package/esm2020/lib/components/settings/settings.component.mjs +2 -2
- package/esm2020/lib/components/signup/signup.component.mjs +2 -2
- package/esm2020/lib/components/suppliers/suppliers.component.mjs +2 -2
- package/esm2020/lib/components/table/detailsDialog.component.mjs +72 -142
- package/esm2020/lib/components/table/table.component.mjs +151 -333
- package/esm2020/lib/components/table-action/table-action.component.mjs +46 -0
- package/esm2020/lib/components/table-header/table-header.component.mjs +52 -0
- package/esm2020/lib/components/table-internal/detailsDialog-internal.component.mjs +78 -139
- package/esm2020/lib/components/table-internal/table-internal.component.mjs +153 -334
- package/esm2020/lib/components/table-row/table-row.component.mjs +58 -0
- package/esm2020/lib/components/tasks/tasks.component.mjs +2 -2
- package/esm2020/lib/components/tenant-settings/inviteDialog.component.mjs +2 -2
- package/esm2020/lib/components/tenant-settings/tenant-settings.component.mjs +2 -2
- package/esm2020/lib/components/tenants/tenants.component.mjs +2 -2
- package/esm2020/lib/components/tiles/tiles.component.mjs +2 -2
- package/esm2020/lib/components/transactions/transactDialog.component.mjs +2 -2
- package/esm2020/lib/components/transactions/transactions.component.mjs +2 -2
- package/esm2020/lib/components/users/users.component.mjs +2 -2
- package/esm2020/lib/components/viewer/viewer.component.mjs +2 -2
- package/esm2020/lib/components/welcome/welcome.component.mjs +2 -2
- package/esm2020/lib/services/button.service.mjs +100 -0
- package/esm2020/lib/services/condition.service.mjs +32 -0
- package/esm2020/lib/services/datalib.service.mjs +387 -0
- package/esm2020/lib/services/dialog.service.mjs +38 -0
- package/esm2020/lib/services/table-config.service.mjs +26 -0
- package/esm2020/lib/tin-spa.module.mjs +6 -3
- package/esm2020/public-api.mjs +3 -2
- package/fesm2015/tin-spa.mjs +963 -1075
- package/fesm2015/tin-spa.mjs.map +1 -1
- package/fesm2020/tin-spa.mjs +970 -1070
- package/fesm2020/tin-spa.mjs.map +1 -1
- package/lib/components/accounts/accountDialog.component.d.ts +1 -1
- package/lib/components/accounts/accounts.component.d.ts +1 -1
- package/lib/components/attach/attach.component.d.ts +0 -19
- package/lib/components/change-password/change-password.component.d.ts +1 -1
- package/lib/components/create-account/create-account.component.d.ts +1 -1
- package/lib/components/customers/customers.component.d.ts +1 -1
- package/lib/components/date/date.component.d.ts +10 -9
- package/lib/components/departments/departments.component.d.ts +2 -5
- package/lib/components/employees/employees.component.d.ts +3 -14
- package/lib/components/form/form.component.d.ts +1 -1
- package/lib/components/inventory/inventory.component.d.ts +1 -1
- package/lib/components/inventory/quantityDialog.component.d.ts +1 -1
- package/lib/components/invitations-table/invitations-table.component.d.ts +1 -1
- package/lib/components/list-dialog/list-dialog.component.d.ts +1 -1
- package/lib/components/login/login.component.d.ts +1 -1
- package/lib/components/logs/logs.component.d.ts +1 -1
- package/lib/components/membership/membership.component.d.ts +1 -1
- package/lib/components/nav-menu/nav-menu.component.d.ts +1 -1
- package/lib/components/plans/plans.component.d.ts +1 -1
- package/lib/components/positions/positions.component.d.ts +5 -1
- package/lib/components/profile/profile.component.d.ts +1 -1
- package/lib/components/recover-account/recover-account.component.d.ts +1 -1
- package/lib/components/roles/addRoleDialog.component.d.ts +1 -1
- package/lib/components/roles/roles.component.d.ts +1 -1
- package/lib/components/settings/settings.component.d.ts +1 -1
- package/lib/components/signup/signup.component.d.ts +1 -1
- package/lib/components/suppliers/suppliers.component.d.ts +1 -1
- package/lib/components/table/detailsDialog.component.d.ts +11 -4
- package/lib/components/table/table.component.d.ts +28 -15
- package/lib/components/table-action/table-action.component.d.ts +22 -0
- package/lib/components/table-header/table-header.component.d.ts +22 -0
- package/lib/components/table-internal/detailsDialog-internal.component.d.ts +16 -6
- package/lib/components/table-internal/table-internal.component.d.ts +28 -15
- package/lib/components/table-row/table-row.component.d.ts +28 -0
- package/lib/components/tasks/tasks.component.d.ts +1 -1
- package/lib/components/tenant-settings/inviteDialog.component.d.ts +1 -1
- package/lib/components/tenant-settings/tenant-settings.component.d.ts +1 -1
- package/lib/components/tenants/tenants.component.d.ts +1 -1
- package/lib/components/tiles/tiles.component.d.ts +1 -1
- package/lib/components/transactions/transactDialog.component.d.ts +1 -1
- package/lib/components/transactions/transactions.component.d.ts +1 -1
- package/lib/components/users/users.component.d.ts +1 -1
- package/lib/components/viewer/viewer.component.d.ts +1 -1
- package/lib/components/welcome/welcome.component.d.ts +1 -1
- package/lib/services/button.service.d.ts +27 -0
- package/lib/services/condition.service.d.ts +10 -0
- package/lib/services/{data.service.d.ts → datalib.service.d.ts} +15 -1
- package/lib/services/dialog.service.d.ts +18 -0
- package/lib/services/table-config.service.d.ts +8 -0
- package/lib/tin-spa.module.d.ts +8 -5
- package/package.json +1 -1
- package/public-api.d.ts +2 -1
- package/esm2020/lib/services/data.service.mjs +0 -236
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { AppConfig, CapItem } from '../classes/Classes';
|
|
3
|
+
import { BehaviorSubject } from 'rxjs';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "./http.service";
|
|
6
|
+
import * as i2 from "@angular/router";
|
|
7
|
+
export class DataServiceLib {
|
|
8
|
+
constructor(httpService, router, route) {
|
|
9
|
+
this.httpService = httpService;
|
|
10
|
+
this.router = router;
|
|
11
|
+
this.route = route;
|
|
12
|
+
this.appConfig = new AppConfig();
|
|
13
|
+
this.appConfigSource = new BehaviorSubject(this.appConfig);
|
|
14
|
+
this.appConfigObserv = this.appConfigSource.asObservable();
|
|
15
|
+
this.capHome = new CapItem;
|
|
16
|
+
this.capAdmin = new CapItem;
|
|
17
|
+
this.capUsers = new CapItem;
|
|
18
|
+
this.capRoles = new CapItem;
|
|
19
|
+
this.capLogs = new CapItem;
|
|
20
|
+
this.capSettings = new CapItem;
|
|
21
|
+
this.capMultitenant = new CapItem;
|
|
22
|
+
this.capTenants = new CapItem;
|
|
23
|
+
this.capMembership = new CapItem;
|
|
24
|
+
this.capPlans = new CapItem;
|
|
25
|
+
this.capGeneral = new CapItem;
|
|
26
|
+
this.capCustomers = new CapItem;
|
|
27
|
+
this.capInventory = new CapItem;
|
|
28
|
+
this.capAccounts = new CapItem;
|
|
29
|
+
this.capSuppliers = new CapItem;
|
|
30
|
+
this.capTasks = new CapItem;
|
|
31
|
+
this.capHR = new CapItem;
|
|
32
|
+
this.capEmployees = new CapItem;
|
|
33
|
+
this.capDepartments = new CapItem;
|
|
34
|
+
this.capPositions = new CapItem;
|
|
35
|
+
this.capGrades = new CapItem;
|
|
36
|
+
this.tmpProfileuserName = "";
|
|
37
|
+
this.isProcessing = false;
|
|
38
|
+
this.genders = [
|
|
39
|
+
{ name: 'Male', value: 1 },
|
|
40
|
+
{ name: 'Female', value: 2 }
|
|
41
|
+
];
|
|
42
|
+
this.employeeFormConfig = {
|
|
43
|
+
fields: [
|
|
44
|
+
{ name: 'nationalID', type: 'text', alias: 'National ID', required: true },
|
|
45
|
+
{ name: 'gender', alias: 'Gender', type: 'select', options: this.genders, required: true },
|
|
46
|
+
{ name: 'firstName', type: 'text', required: true },
|
|
47
|
+
{ name: 'lastName', type: 'text', required: true },
|
|
48
|
+
{ name: 'dateOfBirth', type: 'date', alias: 'Date of Birth', required: true },
|
|
49
|
+
{ name: 'employmentDate', type: 'date', alias: 'Employment Date', required: true },
|
|
50
|
+
{ name: 'departmentID', alias: 'Department', type: 'select', options: [], optionDisplay: 'name', optionValue: 'departmentID' },
|
|
51
|
+
{ name: 'positionID', alias: 'Position', type: 'select', options: [], optionDisplay: 'name', optionValue: 'positionID', masterField: 'departmentID', },
|
|
52
|
+
{ name: 'employmentStatus', alias: 'Employment Status', type: 'select', options: [], optionDisplay: 'name', optionValue: 'value' },
|
|
53
|
+
{ name: 'activeStatus', alias: 'Active Status', type: 'select', options: [], optionDisplay: 'name', optionValue: 'value' },
|
|
54
|
+
{ name: 'address', type: 'text', rows: 2, span: true },
|
|
55
|
+
{ name: 'phone', type: 'text' },
|
|
56
|
+
{ name: 'email', type: 'text' },
|
|
57
|
+
{ name: 'note', type: 'text', rows: 2, span: true },
|
|
58
|
+
],
|
|
59
|
+
};
|
|
60
|
+
this.employeeTableConfig = {
|
|
61
|
+
showFilter: true,
|
|
62
|
+
minColumns: ['name', 'departmentName', 'positionName'],
|
|
63
|
+
flatButtons: true,
|
|
64
|
+
columns: [
|
|
65
|
+
{ name: 'name', type: 'text' },
|
|
66
|
+
{ name: 'genderName', type: 'text', alias: 'Gender' },
|
|
67
|
+
{ name: 'departmentName', type: 'text', alias: 'Department' },
|
|
68
|
+
{ name: 'positionName', type: 'text', alias: 'Position' },
|
|
69
|
+
{ name: 'employmentStatusName', type: 'text', alias: 'Employment Status' },
|
|
70
|
+
{ name: 'activeStatusName', type: 'text', alias: 'Active Status' },
|
|
71
|
+
],
|
|
72
|
+
buttons: [
|
|
73
|
+
{ name: 'create', display: 'Create', dialog: true, action: { url: 'general/employees?action=create', method: 'post' } },
|
|
74
|
+
{ name: 'view', dialog: true },
|
|
75
|
+
{ name: 'edit', dialog: true, action: { url: 'general/employees?action=edit', method: 'post' } },
|
|
76
|
+
{ name: 'delete', dialog: true, action: { url: 'general/employees?action=delete', method: 'post' } },
|
|
77
|
+
],
|
|
78
|
+
loadAction: { url: 'general/employees/x' },
|
|
79
|
+
formConfig: this.employeeFormConfig
|
|
80
|
+
};
|
|
81
|
+
this.positionFormConfig = {
|
|
82
|
+
fields: [
|
|
83
|
+
{ name: 'name', type: 'text', required: true },
|
|
84
|
+
// { name: 'departmentID', alias: 'Department', type: 'select', options: [], optionDisplay: 'name', optionValue: 'departmentID' },
|
|
85
|
+
{ name: 'description', type: 'text', span: true },
|
|
86
|
+
],
|
|
87
|
+
loadAction: { url: 'positions/id' },
|
|
88
|
+
};
|
|
89
|
+
this.editPositionButton = { name: 'edit', dialog: true, action: { url: 'positions?action=edit', method: 'post', successMessage: 'Edited Successfully' } };
|
|
90
|
+
this.positionTableConfig = {
|
|
91
|
+
showFilter: true,
|
|
92
|
+
minColumns: ['name', 'departmentName', 'salary'],
|
|
93
|
+
flatButtons: true,
|
|
94
|
+
columns: [
|
|
95
|
+
{ name: 'positionID', type: 'number', alias: 'ID' },
|
|
96
|
+
{ name: 'name', type: 'text' },
|
|
97
|
+
// { name: 'departmentName', type: 'text', alias: 'Department' },
|
|
98
|
+
],
|
|
99
|
+
buttons: [
|
|
100
|
+
{ name: 'create', display: 'Create', dialog: true, action: { url: 'positions?action=create', method: 'post' } },
|
|
101
|
+
{
|
|
102
|
+
name: 'view',
|
|
103
|
+
dialog: true,
|
|
104
|
+
detailsConfig: {
|
|
105
|
+
formConfig: { ...this.positionFormConfig, fields: this.positionFormConfig.fields.filter(x => x.name != 'departmentID') },
|
|
106
|
+
heroField: 'positionID',
|
|
107
|
+
buttons: [this.editPositionButton],
|
|
108
|
+
tableConfigs: [
|
|
109
|
+
{
|
|
110
|
+
...this.employeeTableConfig,
|
|
111
|
+
loadAction: { url: 'positions/employees/x' },
|
|
112
|
+
loadCriteria: 'employees',
|
|
113
|
+
loadIDField: 'positionID',
|
|
114
|
+
title: 'Employees',
|
|
115
|
+
elevation: 'none',
|
|
116
|
+
}
|
|
117
|
+
],
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
this.editPositionButton,
|
|
121
|
+
{ name: 'delete', dialog: true, action: { url: 'positions?action=delete', method: 'post' } },
|
|
122
|
+
],
|
|
123
|
+
loadAction: { url: 'positions/all/x' },
|
|
124
|
+
formConfig: this.positionFormConfig
|
|
125
|
+
};
|
|
126
|
+
//--------------------------Departments-------------------------
|
|
127
|
+
this.departmentFormConfig = {
|
|
128
|
+
fields: [
|
|
129
|
+
{ name: 'name', type: 'text', required: true },
|
|
130
|
+
],
|
|
131
|
+
loadAction: { url: 'departments/id' },
|
|
132
|
+
};
|
|
133
|
+
this.editDepartmentButton = { name: 'edit', dialog: true, action: { url: 'departments?action=edit', method: 'post', successMessage: 'Edited Successfully' } };
|
|
134
|
+
this.departmentTableConfig = {
|
|
135
|
+
showFilter: true,
|
|
136
|
+
minColumns: ['name'],
|
|
137
|
+
flatButtons: true,
|
|
138
|
+
columns: [
|
|
139
|
+
{ name: 'departmentID', type: 'number', alias: 'ID' },
|
|
140
|
+
{ name: 'name', type: 'text' },
|
|
141
|
+
],
|
|
142
|
+
buttons: [
|
|
143
|
+
{ name: 'create', display: 'Create', dialog: true, action: { url: 'departments?action=create', method: 'post' } },
|
|
144
|
+
{
|
|
145
|
+
name: 'view',
|
|
146
|
+
dialog: true,
|
|
147
|
+
detailsConfig: {
|
|
148
|
+
formConfig: this.departmentFormConfig,
|
|
149
|
+
heroField: 'departmentID',
|
|
150
|
+
buttons: [this.editDepartmentButton],
|
|
151
|
+
tableConfigs: [
|
|
152
|
+
{
|
|
153
|
+
...this.employeeTableConfig,
|
|
154
|
+
loadAction: { url: 'departments/employees/x' },
|
|
155
|
+
loadCriteria: 'employees',
|
|
156
|
+
loadIDField: 'departmentID',
|
|
157
|
+
title: 'Employees',
|
|
158
|
+
elevation: 'none',
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
...this.positionTableConfig,
|
|
162
|
+
loadAction: { url: 'departments/positions/x' },
|
|
163
|
+
loadCriteria: 'positions',
|
|
164
|
+
loadIDField: 'departmentID',
|
|
165
|
+
title: 'Positions',
|
|
166
|
+
elevation: 'none',
|
|
167
|
+
}
|
|
168
|
+
],
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
this.editDepartmentButton,
|
|
172
|
+
{ name: 'delete', dialog: true, action: { url: 'departments?action=delete', method: 'post' } },
|
|
173
|
+
],
|
|
174
|
+
loadAction: { url: 'departments/all/x' },
|
|
175
|
+
formConfig: this.departmentFormConfig
|
|
176
|
+
};
|
|
177
|
+
this.appConfig.appName = "App-Name";
|
|
178
|
+
this.appConfig.logo = "./assets/logo.png";
|
|
179
|
+
this.appConfig.ADAuth = true;
|
|
180
|
+
this.appConfig.capItems = [this.capMultitenant, this.capAdmin, this.capHome];
|
|
181
|
+
this.capHome.name = "cap1";
|
|
182
|
+
this.capHome.display = "Home";
|
|
183
|
+
this.capHome.link = "home";
|
|
184
|
+
this.capHome.icon = "home";
|
|
185
|
+
this.capAdmin.name = "cap2";
|
|
186
|
+
this.capAdmin.display = "Admin";
|
|
187
|
+
this.capAdmin.icon = "security";
|
|
188
|
+
this.capAdmin.capSubItems = [this.capUsers, this.capRoles, this.capLogs, this.capSettings];
|
|
189
|
+
this.capUsers.name = "cap3";
|
|
190
|
+
this.capUsers.display = "Users";
|
|
191
|
+
this.capUsers.link = "home/admin/users";
|
|
192
|
+
this.capUsers.icon = "group";
|
|
193
|
+
this.capRoles.name = "cap4";
|
|
194
|
+
this.capRoles.display = "Roles";
|
|
195
|
+
this.capRoles.link = "home/admin/roles";
|
|
196
|
+
this.capRoles.icon = "work";
|
|
197
|
+
this.capLogs.name = "cap5";
|
|
198
|
+
this.capLogs.display = "Logs";
|
|
199
|
+
this.capLogs.link = "home/admin/logs";
|
|
200
|
+
this.capLogs.icon = "text_snippet";
|
|
201
|
+
this.capSettings.name = "cap6";
|
|
202
|
+
this.capSettings.display = "Settings";
|
|
203
|
+
this.capSettings.link = "home/admin/settings";
|
|
204
|
+
this.capSettings.icon = "settings";
|
|
205
|
+
this.capMultitenant.name = "cap7";
|
|
206
|
+
this.capMultitenant.display = "Multitenant";
|
|
207
|
+
this.capMultitenant.icon = "apartment";
|
|
208
|
+
this.capMultitenant.capSubItems = [this.capTenants, this.capMembership, this.capPlans];
|
|
209
|
+
this.capTenants.name = "cap8";
|
|
210
|
+
this.capTenants.display = "Tenants";
|
|
211
|
+
this.capTenants.link = "home/admin/tenants";
|
|
212
|
+
this.capMembership.name = "cap9";
|
|
213
|
+
this.capMembership.display = "Membership";
|
|
214
|
+
this.capMembership.link = "home/admin/membership";
|
|
215
|
+
this.capPlans.name = "cap10";
|
|
216
|
+
this.capPlans.display = "Plans";
|
|
217
|
+
this.capPlans.link = "home/admin/plans";
|
|
218
|
+
this.capGeneral.name = "cap11";
|
|
219
|
+
this.capGeneral.display = "General";
|
|
220
|
+
this.capGeneral.capSubItems = [this.capCustomers, this.capInventory, this.capAccounts, this.capSuppliers, this.capTasks];
|
|
221
|
+
this.capCustomers.name = "cap12";
|
|
222
|
+
this.capCustomers.display = "Customers";
|
|
223
|
+
this.capCustomers.link = "home/admin/customers";
|
|
224
|
+
this.capCustomers.icon = "group";
|
|
225
|
+
this.capInventory.name = "cap13";
|
|
226
|
+
this.capInventory.display = "Inventory";
|
|
227
|
+
this.capInventory.link = "home/admin/inventory";
|
|
228
|
+
this.capInventory.icon = "storefront";
|
|
229
|
+
this.capAccounts.name = "cap14";
|
|
230
|
+
this.capAccounts.display = "Accounts";
|
|
231
|
+
this.capAccounts.link = "home/admin/accounts";
|
|
232
|
+
this.capAccounts.icon = "account_balance_wallet";
|
|
233
|
+
this.capSuppliers.name = "cap15";
|
|
234
|
+
this.capSuppliers.display = "Suppliers";
|
|
235
|
+
this.capSuppliers.link = "home/admin/suppliers";
|
|
236
|
+
this.capSuppliers.icon = "groups";
|
|
237
|
+
this.capTasks.name = "cap16";
|
|
238
|
+
this.capTasks.display = "Tasks";
|
|
239
|
+
this.capTasks.link = "home/admin/tasks";
|
|
240
|
+
this.capTasks.icon = "task_alt";
|
|
241
|
+
this.capHR.name = "cap17";
|
|
242
|
+
this.capHR.display = "HR";
|
|
243
|
+
this.capHR.link = "home/admin/hr";
|
|
244
|
+
this.capHR.icon = "diversity_3";
|
|
245
|
+
this.capHR.capSubItems = [this.capEmployees, this.capDepartments, this.capPositions];
|
|
246
|
+
this.capEmployees.name = "cap17";
|
|
247
|
+
this.capEmployees.display = "Employees";
|
|
248
|
+
this.capEmployees.link = "home/admin/employees";
|
|
249
|
+
this.capEmployees.icon = "group";
|
|
250
|
+
this.capDepartments.name = "cap17";
|
|
251
|
+
this.capDepartments.display = "Departments";
|
|
252
|
+
this.capDepartments.link = "home/admin/departments";
|
|
253
|
+
this.capDepartments.icon = "business_center";
|
|
254
|
+
this.capPositions.name = "cap17";
|
|
255
|
+
this.capPositions.display = "Positions";
|
|
256
|
+
this.capPositions.link = "home/admin/positions";
|
|
257
|
+
this.capPositions.icon = "picture_in_picture_medium";
|
|
258
|
+
}
|
|
259
|
+
UpdateAppConfig(config) {
|
|
260
|
+
this.appConfigSource.next(config);
|
|
261
|
+
this.appConfig = config;
|
|
262
|
+
}
|
|
263
|
+
//--------------------------Employees-------------------------
|
|
264
|
+
loadEmployeesMeta() {
|
|
265
|
+
this.CallApi({ url: 'general/employeesmeta/x' }, "").subscribe((apiResponse) => {
|
|
266
|
+
this.employeeFormConfig.fields.find(x => x.name == 'departmentID').options = apiResponse.data.departments;
|
|
267
|
+
this.employeeFormConfig.fields.find(x => x.name == 'positionID').masterOptions = apiResponse.data.positions;
|
|
268
|
+
this.employeeFormConfig.fields.find(x => x.name == 'employmentStatus').options = apiResponse.data.employmentStatuses;
|
|
269
|
+
this.employeeFormConfig.fields.find(x => x.name == 'activeStatus').options = apiResponse.data.activeStatuses;
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
//--------------------------Positions-------------------------
|
|
273
|
+
loadPositionMeta() {
|
|
274
|
+
// this.CallApi({ url: 'positions/meta/x' }, "").subscribe((apiResponse: ApiResponse) => {
|
|
275
|
+
// this.positionFormConfig.fields.find(x => x.name == 'departmentID').options = apiResponse.data.departments;
|
|
276
|
+
// });
|
|
277
|
+
}
|
|
278
|
+
//---------------------------Other code
|
|
279
|
+
CallApi(action, data = '') {
|
|
280
|
+
if (!action.method) {
|
|
281
|
+
return this.httpService.Get(action.url);
|
|
282
|
+
}
|
|
283
|
+
if (action.method == 'get') {
|
|
284
|
+
return this.httpService.Get(action.url);
|
|
285
|
+
}
|
|
286
|
+
else if (action.method == 'post') {
|
|
287
|
+
if (action.isFormData) {
|
|
288
|
+
return this.httpService.Post_FormData(action.url, data);
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
return this.httpService.Post(action.url, data);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
return this.httpService.Post(action.url, data);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
CheckWelcomed(path = 'home/admin/welcome') {
|
|
299
|
+
this.CallApi({ url: 'tenant/welcome/x' }).subscribe((x) => {
|
|
300
|
+
if (!x.data) {
|
|
301
|
+
this.Navigate(path);
|
|
302
|
+
}
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
Navigate(path) {
|
|
306
|
+
this.router.navigate([path]);
|
|
307
|
+
}
|
|
308
|
+
NavigateWithValue(path, value) {
|
|
309
|
+
this.router.navigate([path], {
|
|
310
|
+
queryParams: { v: value },
|
|
311
|
+
queryParamsHandling: 'merge',
|
|
312
|
+
skipLocationChange: false
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
GetNavigationValue() {
|
|
316
|
+
if (this.route.snapshot.queryParams["v"] != undefined) {
|
|
317
|
+
return this.route.snapshot.queryParams["v"];
|
|
318
|
+
}
|
|
319
|
+
else {
|
|
320
|
+
return "";
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
//Users
|
|
324
|
+
GetUser() {
|
|
325
|
+
return this.httpService.Get("User/all/x");
|
|
326
|
+
}
|
|
327
|
+
RegisterAccount(u) {
|
|
328
|
+
return this.httpService.Post("User/register", u);
|
|
329
|
+
}
|
|
330
|
+
GetUserByID(val) {
|
|
331
|
+
return this.httpService.Get(`User/id/${val}`);
|
|
332
|
+
}
|
|
333
|
+
UpdateUser(profile) {
|
|
334
|
+
return this.httpService.Post("User/edit", profile);
|
|
335
|
+
}
|
|
336
|
+
UnlockUser(user) {
|
|
337
|
+
return this.httpService.Post("User/unlock", user);
|
|
338
|
+
}
|
|
339
|
+
LockUser(user) {
|
|
340
|
+
return this.httpService.Post("User/lock", user);
|
|
341
|
+
}
|
|
342
|
+
DeleteUser(user) {
|
|
343
|
+
return this.httpService.Post("User/delete", user);
|
|
344
|
+
}
|
|
345
|
+
Login(u) {
|
|
346
|
+
return this.httpService.Post("User/login", u);
|
|
347
|
+
}
|
|
348
|
+
ChangePassword(u) {
|
|
349
|
+
return this.httpService.Post("User/changepassword-self", u);
|
|
350
|
+
}
|
|
351
|
+
ChangePasswordAdmin(u) {
|
|
352
|
+
return this.httpService.Post("User/changepassword-admin", u);
|
|
353
|
+
}
|
|
354
|
+
SelfReset(u) {
|
|
355
|
+
return this.httpService.Post("Basic/SelfReset", u);
|
|
356
|
+
}
|
|
357
|
+
//Roles
|
|
358
|
+
PostRole(role, action) {
|
|
359
|
+
return this.httpService.Post(`Role?action=${action}`, role);
|
|
360
|
+
}
|
|
361
|
+
PutRole(role) {
|
|
362
|
+
return this.httpService.Put("Role", role);
|
|
363
|
+
}
|
|
364
|
+
GetRole(by, val) {
|
|
365
|
+
return this.httpService.Get("Role/all/x");
|
|
366
|
+
}
|
|
367
|
+
//Logs
|
|
368
|
+
GetLog(by, val) {
|
|
369
|
+
return this.httpService.Get("Log/all/x");
|
|
370
|
+
}
|
|
371
|
+
//Settings
|
|
372
|
+
GetSetting(by, val) {
|
|
373
|
+
return this.httpService.Get("Setting/all/x");
|
|
374
|
+
}
|
|
375
|
+
UpdateSetting(setting, action) {
|
|
376
|
+
return this.httpService.Post(`Setting?action=${action}`, setting);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
DataServiceLib.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DataServiceLib, deps: [{ token: i1.HttpService }, { token: i2.Router }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
380
|
+
DataServiceLib.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DataServiceLib, providedIn: 'root' });
|
|
381
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DataServiceLib, decorators: [{
|
|
382
|
+
type: Injectable,
|
|
383
|
+
args: [{
|
|
384
|
+
providedIn: 'root'
|
|
385
|
+
}]
|
|
386
|
+
}], ctorParameters: function () { return [{ type: i1.HttpService }, { type: i2.Router }, { type: i2.ActivatedRoute }]; } });
|
|
387
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWxpYi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL3NlcnZpY2VzL2RhdGFsaWIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBdUIsU0FBUyxFQUFVLE9BQU8sRUFBaUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNwSCxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDOzs7O0FBT25ELE1BQU0sT0FBTyxjQUFjO0lBRXpCLFlBQW9CLFdBQXdCLEVBQVMsTUFBYyxFQUFVLEtBQXFCO1FBQTlFLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBa0hsRyxjQUFTLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNwQixvQkFBZSxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2RCxvQkFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7UUFNN0QsWUFBTyxHQUFHLElBQUksT0FBTyxDQUFDO1FBQ3RCLGFBQVEsR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUN2QixhQUFRLEdBQUcsSUFBSSxPQUFPLENBQUM7UUFDdkIsYUFBUSxHQUFHLElBQUksT0FBTyxDQUFDO1FBQ3ZCLFlBQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUN0QixnQkFBVyxHQUFHLElBQUksT0FBTyxDQUFDO1FBRTFCLG1CQUFjLEdBQUcsSUFBSSxPQUFPLENBQUM7UUFDN0IsZUFBVSxHQUFHLElBQUksT0FBTyxDQUFDO1FBQ3pCLGtCQUFhLEdBQUcsSUFBSSxPQUFPLENBQUM7UUFDNUIsYUFBUSxHQUFHLElBQUksT0FBTyxDQUFDO1FB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QUUsQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUdELE9BQU87SUFFQSxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQWM7UUFDbEMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxlQUFlLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFTSxPQUFPLENBQUMsSUFBSTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU0sT0FBTyxDQUFDLEVBQVUsRUFBRSxHQUFXO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUlELE1BQU07SUFDQyxNQUFNLENBQUMsRUFBVSxFQUFFLEdBQVc7UUFDbkMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBR0QsVUFBVTtJQUNILFVBQVUsQ0FBQyxFQUFVLEVBQUUsR0FBVztRQUN2QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTSxhQUFhLENBQUMsT0FBTyxFQUFFLE1BQWM7UUFDMUMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsTUFBTSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDcEUsQ0FBQzs7MkdBaGRVLGNBQWM7K0dBQWQsY0FBYyxjQUZiLE1BQU07MkZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3Rpb24sIEFwaVJlc3BvbnNlLCBBcHBDb25maWcsIEJ1dHRvbiwgQ2FwSXRlbSwgRm9ybUNvbmZpZywgVGFibGVDb25maWcsIFVzZXIgfSBmcm9tICcuLi9jbGFzc2VzL0NsYXNzZXMnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgSHR0cFNlcnZpY2UgfSBmcm9tICcuL2h0dHAuc2VydmljZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0YVNlcnZpY2VMaWIge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHBTZXJ2aWNlOiBIdHRwU2VydmljZSwgcHVibGljIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSkge1xyXG5cclxuICAgIHRoaXMuYXBwQ29uZmlnLmFwcE5hbWUgPSBcIkFwcC1OYW1lXCI7XHJcbiAgICB0aGlzLmFwcENvbmZpZy5sb2dvID0gXCIuL2Fzc2V0cy9sb2dvLnBuZ1wiXHJcbiAgICB0aGlzLmFwcENvbmZpZy5BREF1dGggPSB0cnVlO1xyXG4gICAgdGhpcy5hcHBDb25maWcuY2FwSXRlbXMgPSBbdGhpcy5jYXBNdWx0aXRlbmFudCwgdGhpcy5jYXBBZG1pbiwgdGhpcy5jYXBIb21lXTtcclxuXHJcblxyXG4gICAgdGhpcy5jYXBIb21lLm5hbWUgPSBcImNhcDFcIjtcclxuICAgIHRoaXMuY2FwSG9tZS5kaXNwbGF5ID0gXCJIb21lXCI7XHJcbiAgICB0aGlzLmNhcEhvbWUubGluayA9IFwiaG9tZVwiO1xyXG4gICAgdGhpcy5jYXBIb21lLmljb24gPVwiaG9tZVwiO1xyXG5cclxuXHJcbiAgICB0aGlzLmNhcEFkbWluLm5hbWUgPSBcImNhcDJcIjtcclxuICAgIHRoaXMuY2FwQWRtaW4uZGlzcGxheSA9IFwiQWRtaW5cIjtcclxuICAgIHRoaXMuY2FwQWRtaW4uaWNvbiA9IFwic2VjdXJpdHlcIlxyXG4gICAgdGhpcy5jYXBBZG1pbi5jYXBTdWJJdGVtcyA9IFt0aGlzLmNhcFVzZXJzLCB0aGlzLmNhcFJvbGVzLCB0aGlzLmNhcExvZ3MsIHRoaXMuY2FwU2V0dGluZ3NdO1xyXG5cclxuICAgIHRoaXMuY2FwVXNlcnMubmFtZSA9IFwiY2FwM1wiO1xyXG4gICAgdGhpcy5jYXBVc2Vycy5kaXNwbGF5ID0gXCJVc2Vyc1wiO1xyXG4gICAgdGhpcy5jYXBVc2Vycy5saW5rID0gXCJob21lL2FkbWluL3VzZXJzXCI7XHJcbiAgICB0aGlzLmNhcFVzZXJzLmljb24gPSBcImdyb3VwXCI7XHJcblxyXG4gICAgdGhpcy5jYXBSb2xlcy5uYW1lID0gXCJjYXA0XCJcclxuICAgIHRoaXMuY2FwUm9sZXMuZGlzcGxheSA9IFwiUm9sZXNcIjtcclxuICAgIHRoaXMuY2FwUm9sZXMubGluayA9IFwiaG9tZS9hZG1pbi9yb2xlc1wiO1xyXG4gICAgdGhpcy5jYXBSb2xlcy5pY29uID0gXCJ3b3JrXCI7XHJcblxyXG4gICAgdGhpcy5jYXBMb2dzLm5hbWUgPSBcImNhcDVcIlxyXG4gICAgdGhpcy5jYXBMb2dzLmRpc3BsYXkgPSBcIkxvZ3NcIjtcclxuICAgIHRoaXMuY2FwTG9ncy5saW5rID0gXCJob21lL2FkbWluL2xvZ3NcIjtcclxuICAgIHRoaXMuY2FwTG9ncy5pY29uID0gXCJ0ZXh0X3NuaXBwZXRcIjtcclxuXHJcbiAgICB0aGlzLmNhcFNldHRpbmdzLm5hbWUgPSBcImNhcDZcIlxyXG4gICAgdGhpcy5jYXBTZXR0aW5ncy5kaXNwbGF5ID0gXCJTZXR0aW5nc1wiO1xyXG4gICAgdGhpcy5jYXBTZXR0aW5ncy5saW5rID0gXCJob21lL2FkbWluL3NldHRpbmdzXCI7XHJcbiAgICB0aGlzLmNhcFNldHRpbmdzLmljb24gPVwic2V0dGluZ3NcIjtcclxuXHJcblxyXG4gICAgdGhpcy5jYXBNdWx0aXRlbmFudC5uYW1lID0gXCJjYXA3XCJcclxuICAgIHRoaXMuY2FwTXVsdGl0ZW5hbnQuZGlzcGxheSA9IFwiTXVsdGl0ZW5hbnRcIjtcclxuICAgIHRoaXMuY2FwTXVsdGl0ZW5hbnQuaWNvbiA9IFwiYXBhcnRtZW50XCJcclxuICAgIHRoaXMuY2FwTXVsdGl0ZW5hbnQuY2FwU3ViSXRlbXMgPSBbdGhpcy5jYXBUZW5hbnRzLCB0aGlzLmNhcE1lbWJlcnNoaXAsIHRoaXMuY2FwUGxhbnMgXTtcclxuXHJcbiAgICB0aGlzLmNhcFRlbmFudHMubmFtZSA9IFwiY2FwOFwiXHJcbiAgICB0aGlzLmNhcFRlbmFudHMuZGlzcGxheSA9IFwiVGVuYW50c1wiO1xyXG4gICAgdGhpcy5jYXBUZW5hbnRzLmxpbmsgPSBcImhvbWUvYWRtaW4vdGVuYW50c1wiO1xyXG5cclxuICAgIHRoaXMuY2FwTWVtYmVyc2hpcC5uYW1lID0gXCJjYXA5XCJcclxuICAgIHRoaXMuY2FwTWVtYmVyc2hpcC5kaXNwbGF5ID0gXCJNZW1iZXJzaGlwXCI7XHJcbiAgICB0aGlzLmNhcE1lbWJlcnNoaXAubGluayA9IFwiaG9tZS9hZG1pbi9tZW1iZXJzaGlwXCI7XHJcblxyXG4gICAgdGhpcy5jYXBQbGFucy5uYW1lID0gXCJjYXAxMFwiXHJcbiAgICB0aGlzLmNhcFBsYW5zLmRpc3BsYXkgPSBcIlBsYW5zXCI7XHJcbiAgICB0aGlzLmNhcFBsYW5zLmxpbmsgPSBcImhvbWUvYWRtaW4vcGxhbnNcIjtcclxuXHJcblxyXG4gICAgdGhpcy5jYXBHZW5lcmFsLm5hbWUgPSBcImNhcDExXCJcclxuICAgIHRoaXMuY2FwR2VuZXJhbC5kaXNwbGF5ID0gXCJHZW5lcmFsXCI7XHJcbiAgICB0aGlzLmNhcEdlbmVyYWwuY2FwU3ViSXRlbXMgPSBbdGhpcy5jYXBDdXN0b21lcnMsIHRoaXMuY2FwSW52ZW50b3J5LCB0aGlzLmNhcEFjY291bnRzLCB0aGlzLmNhcFN1cHBsaWVycywgdGhpcy5jYXBUYXNrc107XHJcblxyXG4gICAgdGhpcy5jYXBDdXN0b21lcnMubmFtZSA9IFwiY2FwMTJcIlxyXG4gICAgdGhpcy5jYXBDdXN0b21lcnMuZGlzcGxheSA9IFwiQ3VzdG9tZXJzXCI7XHJcbiAgICB0aGlzLmNhcEN1c3RvbWVycy5saW5rID0gXCJob21lL2FkbWluL2N1c3RvbWVyc1wiO1xyXG4gICAgdGhpcy5jYXBDdXN0b21lcnMuaWNvbiA9IFwiZ3JvdXBcIlxyXG5cclxuICAgIHRoaXMuY2FwSW52ZW50b3J5Lm5hbWUgPSBcImNhcDEzXCJcclxuICAgIHRoaXMuY2FwSW52ZW50b3J5LmRpc3BsYXkgPSBcIkludmVudG9yeVwiO1xyXG4gICAgdGhpcy5jYXBJbnZlbnRvcnkubGluayA9IFwiaG9tZS9hZG1pbi9pbnZlbnRvcnlcIjtcclxuICAgIHRoaXMuY2FwSW52ZW50b3J5Lmljb24gPSBcInN0b3JlZnJvbnRcIlxyXG5cclxuICAgIHRoaXMuY2FwQWNjb3VudHMubmFtZSA9IFwiY2FwMTRcIlxyXG4gICAgdGhpcy5jYXBBY2NvdW50cy5kaXNwbGF5ID0gXCJBY2NvdW50c1wiO1xyXG4gICAgdGhpcy5jYXBBY2NvdW50cy5saW5rID0gXCJob21lL2FkbWluL2FjY291bnRzXCI7XHJcbiAgICB0aGlzLmNhcEFjY291bnRzLmljb24gPSBcImFjY291bnRfYmFsYW5jZV93YWxsZXRcIlxyXG5cclxuICAgIHRoaXMuY2FwU3VwcGxpZXJzLm5hbWUgPSBcImNhcDE1XCJcclxuICAgIHRoaXMuY2FwU3VwcGxpZXJzLmRpc3BsYXkgPSBcIlN1cHBsaWVyc1wiO1xyXG4gICAgdGhpcy5jYXBTdXBwbGllcnMubGluayA9IFwiaG9tZS9hZG1pbi9zdXBwbGllcnNcIjtcclxuICAgIHRoaXMuY2FwU3VwcGxpZXJzLmljb24gPSBcImdyb3Vwc1wiXHJcblxyXG4gICAgdGhpcy5jYXBUYXNrcy5uYW1lID0gXCJjYXAxNlwiXHJcbiAgICB0aGlzLmNhcFRhc2tzLmRpc3BsYXkgPSBcIlRhc2tzXCI7XHJcbiAgICB0aGlzLmNhcFRhc2tzLmxpbmsgPSBcImhvbWUvYWRtaW4vdGFza3NcIjtcclxuICAgIHRoaXMuY2FwVGFza3MuaWNvbiA9IFwidGFza19hbHRcIlxyXG5cclxuXHJcbiAgICB0aGlzLmNhcEhSLm5hbWUgPSBcImNhcDE3XCJcclxuICAgIHRoaXMuY2FwSFIuZGlzcGxheSA9IFwiSFJcIjtcclxuICAgIHRoaXMuY2FwSFIubGluayA9IFwiaG9tZS9hZG1pbi9oclwiO1xyXG4gICAgdGhpcy5jYXBIUi5pY29uID0gXCJkaXZlcnNpdHlfM1wiXHJcbiAgICB0aGlzLmNhcEhSLmNhcFN1Ykl0ZW1zID0gW3RoaXMuY2FwRW1wbG95ZWVzLHRoaXMuY2FwRGVwYXJ0bWVudHMsdGhpcy5jYXBQb3NpdGlvbnNdXHJcblxyXG4gICAgdGhpcy5jYXBFbXBsb3llZXMubmFtZSA9IFwiY2FwMTdcIlxyXG4gICAgdGhpcy5jYXBFbXBsb3llZXMuZGlzcGxheSA9IFwiRW1wbG95ZWVzXCI7XHJcbiAgICB0aGlzLmNhcEVtcGxveWVlcy5saW5rID0gXCJob21lL2FkbWluL2VtcGxveWVlc1wiO1xyXG4gICAgdGhpcy5jYXBFbXBsb3llZXMuaWNvbiA9IFwiZ3JvdXBcIlxyXG5cclxuICAgIHRoaXMuY2FwRGVwYXJ0bWVudHMubmFtZSA9IFwiY2FwMTdcIlxyXG4gICAgdGhpcy5jYXBEZXBhcnRtZW50cy5kaXNwbGF5ID0gXCJEZXBhcnRtZW50c1wiO1xyXG4gICAgdGhpcy5jYXBEZXBhcnRtZW50cy5saW5rID0gXCJob21lL2FkbWluL2RlcGFydG1lbnRzXCI7XHJcbiAgICB0aGlzLmNhcERlcGFydG1lbnRzLmljb24gPSBcImJ1c2luZXNzX2NlbnRlclwiXHJcblxyXG4gICAgdGhpcy5jYXBQb3NpdGlvbnMubmFtZSA9IFwiY2FwMTdcIlxyXG4gICAgdGhpcy5jYXBQb3NpdGlvbnMuZGlzcGxheSA9IFwiUG9zaXRpb25zXCI7XHJcbiAgICB0aGlzLmNhcFBvc2l0aW9ucy5saW5rID0gXCJob21lL2FkbWluL3Bvc2l0aW9uc1wiO1xyXG4gICAgdGhpcy5jYXBQb3NpdGlvbnMuaWNvbiA9IFwicGljdHVyZV9pbl9waWN0dXJlX21lZGl1bVwiXHJcblxyXG5cclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgYXBwQ29uZmlnID0gbmV3IEFwcENvbmZpZygpO1xyXG4gIHByaXZhdGUgYXBwQ29uZmlnU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0aGlzLmFwcENvbmZpZyk7XHJcbiAgcHVibGljIGFwcENvbmZpZ09ic2VydiA9IHRoaXMuYXBwQ29uZmlnU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIFVwZGF0ZUFwcENvbmZpZyhjb25maWc6IEFwcENvbmZpZykge1xyXG4gICAgdGhpcy5hcHBDb25maWdTb3VyY2UubmV4dChjb25maWcpO1xyXG4gICAgdGhpcy5hcHBDb25maWcgPSBjb25maWc7XHJcbiAgfVxyXG5cclxuICBjYXBIb21lID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwQWRtaW4gPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBVc2VycyA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcFJvbGVzID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwTG9ncyA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcFNldHRpbmdzID0gbmV3IENhcEl0ZW07XHJcblxyXG4gIGNhcE11bHRpdGVuYW50ID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwVGVuYW50cyA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcE1lbWJlcnNoaXAgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBQbGFucyA9IG5ldyBDYXBJdGVtO1xyXG5cclxuICBjYXBHZW5lcmFsID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwQ3VzdG9tZXJzID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwSW52ZW50b3J5ID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwQWNjb3VudHMgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBTdXBwbGllcnMgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBUYXNrcyA9IG5ldyBDYXBJdGVtO1xyXG5cclxuICBjYXBIUiA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcEVtcGxveWVlcyA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcERlcGFydG1lbnRzID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwUG9zaXRpb25zID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwR3JhZGVzID0gbmV3IENhcEl0ZW07XHJcblxyXG4gIHB1YmxpYyB0bXBQcm9maWxldXNlck5hbWUgPSBcIlwiO1xyXG5cclxuXHJcbiAgaXNQcm9jZXNzaW5nID0gZmFsc2U7XHJcblxyXG5cclxuXHJcbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUVtcGxveWVlcy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICBsb2FkRW1wbG95ZWVzTWV0YSgpIHtcclxuICAgIHRoaXMuQ2FsbEFwaSh7IHVybDogJ2dlbmVyYWwvZW1wbG95ZWVzbWV0YS94JyB9LCBcIlwiKS5zdWJzY3JpYmUoKGFwaVJlc3BvbnNlOiBBcGlSZXNwb25zZSkgPT4ge1xyXG4gICAgICB0aGlzLmVtcGxveWVlRm9ybUNvbmZpZy5maWVsZHMuZmluZCh4ID0+IHgubmFtZSA9PSAnZGVwYXJ0bWVudElEJykub3B0aW9ucyA9IGFwaVJlc3BvbnNlLmRhdGEuZGVwYXJ0bWVudHM7XHJcbiAgICAgIHRoaXMuZW1wbG95ZWVGb3JtQ29uZmlnLmZpZWxkcy5maW5kKHggPT4geC5uYW1lID09ICdwb3NpdGlvbklEJykubWFzdGVyT3B0aW9ucyA9IGFwaVJlc3BvbnNlLmRhdGEucG9zaXRpb25zO1xyXG4gICAgICB0aGlzLmVtcGxveWVlRm9ybUNvbmZpZy5maWVsZHMuZmluZCh4ID0+IHgubmFtZSA9PSAnZW1wbG95bWVudFN0YXR1cycpLm9wdGlvbnMgPSBhcGlSZXNwb25zZS5kYXRhLmVtcGxveW1lbnRTdGF0dXNlcztcclxuICAgICAgdGhpcy5lbXBsb3llZUZvcm1Db25maWcuZmllbGRzLmZpbmQoeCA9PiB4Lm5hbWUgPT0gJ2FjdGl2ZVN0YXR1cycpLm9wdGlvbnMgPSBhcGlSZXNwb25zZS5kYXRhLmFjdGl2ZVN0YXR1c2VzO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZW5kZXJzID0gW1xyXG4gICAgeyBuYW1lOiAnTWFsZScsIHZhbHVlOiAxIH0sXHJcbiAgICB7IG5hbWU6ICdGZW1hbGUnLCB2YWx1ZTogMiB9XHJcbiAgXVxyXG5cclxuICBlbXBsb3llZUZvcm1Db25maWc6IEZvcm1Db25maWcgPSB7XHJcbiAgICBmaWVsZHM6IFtcclxuICAgICAgeyBuYW1lOiAnbmF0aW9uYWxJRCcsIHR5cGU6ICd0ZXh0JywgYWxpYXM6ICdOYXRpb25hbCBJRCcsIHJlcXVpcmVkOiB0cnVlIH0sXHJcbiAgICAgIHsgbmFtZTogJ2dlbmRlcicsIGFsaWFzOiAnR2VuZGVyJywgdHlwZTogJ3NlbGVjdCcsIG9wdGlvbnM6IHRoaXMuZ2VuZGVycywgcmVxdWlyZWQ6IHRydWUgfSxcclxuICAgICAgeyBuYW1lOiAnZmlyc3ROYW1lJywgdHlwZTogJ3RleHQnLCByZXF1aXJlZDogdHJ1ZSB9LFxyXG4gICAgICB7IG5hbWU6ICdsYXN0TmFtZScsIHR5cGU6ICd0ZXh0JywgcmVxdWlyZWQ6IHRydWUgfSxcclxuICAgICAgeyBuYW1lOiAnZGF0ZU9mQmlydGgnLCB0eXBlOiAnZGF0ZScsIGFsaWFzOiAnRGF0ZSBvZiBCaXJ0aCcsIHJlcXVpcmVkOiB0cnVlIH0sXHJcbiAgICAgIHsgbmFtZTogJ2VtcGxveW1lbnREYXRlJywgdHlwZTogJ2RhdGUnLCBhbGlhczogJ0VtcGxveW1lbnQgRGF0ZScsIHJlcXVpcmVkOiB0cnVlIH0sXHJcbiAgICAgIHsgbmFtZTogJ2RlcGFydG1lbnRJRCcsIGFsaWFzOiAnRGVwYXJ0bWVudCcsIHR5cGU6ICdzZWxlY3QnLCBvcHRpb25zOiBbXSwgb3B0aW9uRGlzcGxheTogJ25hbWUnLCBvcHRpb25WYWx1ZTogJ2RlcGFydG1lbnRJRCcgfSxcclxuICAgICAgeyBuYW1lOiAncG9zaXRpb25JRCcsIGFsaWFzOiAnUG9zaXRpb24nLCB0eXBlOiAnc2VsZWN0Jywgb3B0aW9uczogW10sIG9wdGlvbkRpc3BsYXk6ICduYW1lJywgb3B0aW9uVmFsdWU6ICdwb3NpdGlvbklEJywgbWFzdGVyRmllbGQ6ICdkZXBhcnRtZW50SUQnLCB9LFxyXG4gICAgICB7IG5hbWU6ICdlbXBsb3ltZW50U3RhdHVzJywgYWxpYXM6ICdFbXBsb3ltZW50IFN0YXR1cycsIHR5cGU6ICdzZWxlY3QnLCBvcHRpb25zOiBbXSwgb3B0aW9uRGlzcGxheTogJ25hbWUnLCBvcHRpb25WYWx1ZTogJ3ZhbHVlJyB9LFxyXG4gICAgICB7IG5hbWU6ICdhY3RpdmVTdGF0dXMnLCBhbGlhczogJ0FjdGl2ZSBTdGF0dXMnLCB0eXBlOiAnc2VsZWN0Jywgb3B0aW9uczogW10sIG9wdGlvbkRpc3BsYXk6ICduYW1lJywgb3B0aW9uVmFsdWU6ICd2YWx1ZScgfSxcclxuICAgICAgeyBuYW1lOiAnYWRkcmVzcycsIHR5cGU6ICd0ZXh0Jywgcm93czogMiwgc3BhbjogdHJ1ZSB9LFxyXG4gICAgICB7IG5hbWU6ICdwaG9uZScsIHR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgICB7IG5hbWU6ICdlbWFpbCcsIHR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgICB7IG5hbWU6ICdub3RlJywgdHlwZTogJ3RleHQnLCByb3dzOiAyLCBzcGFuOiB0cnVlIH0sXHJcbiAgICBdLFxyXG4gIH1cclxuXHJcbiAgZW1wbG95ZWVUYWJsZUNvbmZpZzogVGFibGVDb25maWcgPSB7XHJcbiAgICBzaG93RmlsdGVyOiB0cnVlLFxyXG4gICAgbWluQ29sdW1uczogWyduYW1lJywgJ2RlcGFydG1lbnROYW1lJywgJ3Bvc2l0aW9uTmFtZSddLFxyXG4gICAgZmxhdEJ1dHRvbnM6IHRydWUsXHJcbiAgICBjb2x1bW5zOiBbXHJcbiAgICAgIHsgbmFtZTogJ25hbWUnLCB0eXBlOiAndGV4dCcgfSxcclxuICAgICAgeyBuYW1lOiAnZ2VuZGVyTmFtZScsIHR5cGU6ICd0ZXh0JywgYWxpYXM6ICdHZW5kZXInIH0sXHJcbiAgICAgIHsgbmFtZTogJ2RlcGFydG1lbnROYW1lJywgdHlwZTogJ3RleHQnLCBhbGlhczogJ0RlcGFydG1lbnQnIH0sXHJcbiAgICAgIHsgbmFtZTogJ3Bvc2l0aW9uTmFtZScsIHR5cGU6ICd0ZXh0JywgYWxpYXM6ICdQb3NpdGlvbicgfSxcclxuICAgICAgeyBuYW1lOiAnZW1wbG95bWVudFN0YXR1c05hbWUnLCB0eXBlOiAndGV4dCcsIGFsaWFzOiAnRW1wbG95bWVudCBTdGF0dXMnIH0sXHJcbiAgICAgIHsgbmFtZTogJ2FjdGl2ZVN0YXR1c05hbWUnLCB0eXBlOiAndGV4dCcsIGFsaWFzOiAnQWN0aXZlIFN0YXR1cycgfSxcclxuICAgIF0sXHJcbiAgICBidXR0b25zOiBbXHJcbiAgICAgIHsgbmFtZTogJ2NyZWF0ZScsIGRpc3BsYXk6ICdDcmVhdGUnLCBkaWFsb2c6IHRydWUsIGFjdGlvbjogeyB1cmw6ICdnZW5lcmFsL2VtcGxveWVlcz9hY3Rpb249Y3JlYXRlJywgbWV0aG9kOiAncG9zdCcgfSB9LFxyXG4gICAgICB7IG5hbWU6ICd2aWV3JywgZGlhbG9nOiB0cnVlIH0sXHJcbiAgICAgIHsgbmFtZTogJ2VkaXQnLCBkaWFsb2c6IHRydWUsIGFjdGlvbjogeyB1cmw6ICdnZW5lcmFsL2VtcGxveWVlcz9hY3Rpb249ZWRpdCcsIG1ldGhvZDogJ3Bvc3QnIH0gfSxcclxuICAgICAgeyBuYW1lOiAnZGVsZXRlJywgZGlhbG9nOiB0cnVlLCBhY3Rpb246IHsgdXJsOiAnZ2VuZXJhbC9lbXBsb3llZXM/YWN0aW9uPWRlbGV0ZScsIG1ldGhvZDogJ3Bvc3QnIH0gfSxcclxuICAgIF0sXHJcbiAgICBsb2FkQWN0aW9uOiB7IHVybDogJ2dlbmVyYWwvZW1wbG95ZWVzL3gnIH0sXHJcbiAgICBmb3JtQ29uZmlnOiB0aGlzLmVtcGxveWVlRm9ybUNvbmZpZ1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1Qb3NpdGlvbnMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGxvYWRQb3NpdGlvbk1ldGEoKSB7XHJcbiAgICAvLyB0aGlzLkNhbGxBcGkoeyB1cmw6ICdwb3NpdGlvbnMvbWV0YS94JyB9LCBcIlwiKS5zdWJzY3JpYmUoKGFwaVJlc3BvbnNlOiBBcGlSZXNwb25zZSkgPT4ge1xyXG4gICAgLy8gICB0aGlzLnBvc2l0aW9uRm9ybUNvbmZpZy5maWVsZHMuZmluZCh4ID0+IHgubmFtZSA9PSAnZGVwYXJ0bWVudElEJykub3B0aW9ucyA9IGFwaVJlc3BvbnNlLmRhdGEuZGVwYXJ0bWVudHM7XHJcbiAgICAvLyB9KTtcclxuICB9XHJcblxyXG4gIHBvc2l0aW9uRm9ybUNvbmZpZzogRm9ybUNvbmZpZyA9IHtcclxuICAgIGZpZWxkczogW1xyXG4gICAgICB7IG5hbWU6ICduYW1lJywgdHlwZTogJ3RleHQnLCByZXF1aXJlZDogdHJ1ZSB9LFxyXG4gICAgICAvLyB7IG5hbWU6ICdkZXBhcnRtZW50SUQnLCBhbGlhczogJ0RlcGFydG1lbnQnLCB0eXBlOiAnc2VsZWN0Jywgb3B0aW9uczogW10sIG9wdGlvbkRpc3BsYXk6ICduYW1lJywgb3B0aW9uVmFsdWU6ICdkZXBhcnRtZW50SUQnIH0sXHJcbiAgICAgIHsgbmFtZTogJ2Rlc2NyaXB0aW9uJywgdHlwZTogJ3RleHQnLCBzcGFuOiB0cnVlIH0sXHJcblxyXG4gICAgXSxcclxuICAgIGxvYWRBY3Rpb246IHsgdXJsOiAncG9zaXRpb25zL2lkJyB9LFxyXG4gIH1cclxuXHJcbiAgZWRpdFBvc2l0aW9uQnV0dG9uOiBCdXR0b24gPSB7IG5hbWU6ICdlZGl0JywgZGlhbG9nOiB0cnVlLCBhY3Rpb246IHsgdXJsOiAncG9zaXRpb25zP2FjdGlvbj1lZGl0JywgbWV0aG9kOiAncG9zdCcsIHN1Y2Nlc3NNZXNzYWdlOiAnRWRpdGVkIFN1Y2Nlc3NmdWxseScgfSB9XHJcblxyXG4gIHBvc2l0aW9uVGFibGVDb25maWc6IFRhYmxlQ29uZmlnID0ge1xyXG4gICAgc2hvd0ZpbHRlcjogdHJ1ZSxcclxuICAgIG1pbkNvbHVtbnM6IFsnbmFtZScsICdkZXBhcnRtZW50TmFtZScsICdzYWxhcnknXSxcclxuICAgIGZsYXRCdXR0b25zOiB0cnVlLFxyXG4gICAgY29sdW1uczogW1xyXG4gICAgICB7IG5hbWU6ICdwb3NpdGlvbklEJywgdHlwZTogJ251bWJlcicsIGFsaWFzOiAnSUQnIH0sXHJcbiAgICAgIHsgbmFtZTogJ25hbWUnLCB0eXBlOiAndGV4dCcgfSxcclxuICAgICAgLy8geyBuYW1lOiAnZGVwYXJ0bWVudE5hbWUnLCB0eXBlOiAndGV4dCcsIGFsaWFzOiAnRGVwYXJ0bWVudCcgfSxcclxuICAgIF0sXHJcbiAgICBidXR0b25zOiBbXHJcbiAgICAgIHsgbmFtZTogJ2NyZWF0ZScsIGRpc3BsYXk6ICdDcmVhdGUnLCBkaWFsb2c6IHRydWUsIGFjdGlvbjogeyB1cmw6ICdwb3NpdGlvbnM/YWN0aW9uPWNyZWF0ZScsIG1ldGhvZDogJ3Bvc3QnIH0gfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICd2aWV3JyxcclxuICAgICAgICBkaWFsb2c6IHRydWUsXHJcbiAgICAgICAgZGV0YWlsc0NvbmZpZzoge1xyXG4gICAgICAgICAgZm9ybUNvbmZpZzogeyAuLi50aGlzLnBvc2l0aW9uRm9ybUNvbmZpZywgZmllbGRzOiB0aGlzLnBvc2l0aW9uRm9ybUNvbmZpZy5maWVsZHMuZmlsdGVyKHggPT4geC5uYW1lICE9ICdkZXBhcnRtZW50SUQnKSB9LFxyXG4gICAgICAgICAgaGVyb0ZpZWxkOiAncG9zaXRpb25JRCcsXHJcbiAgICAgICAgICBidXR0b25zOiBbdGhpcy5lZGl0UG9zaXRpb25CdXR0b25dLFxyXG4gICAgICAgICAgdGFibGVDb25maWdzOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAuLi50aGlzLmVtcGxveWVlVGFibGVDb25maWcsXHJcbiAgICAgICAgICAgICAgbG9hZEFjdGlvbjogeyB1cmw6ICdwb3NpdGlvbnMvZW1wbG95ZWVzL3gnIH0sXHJcbiAgICAgICAgICAgICAgbG9hZENyaXRlcmlhOiAnZW1wbG95ZWVzJyxcclxuICAgICAgICAgICAgICBsb2FkSURGaWVsZDogJ3Bvc2l0aW9uSUQnLFxyXG4gICAgICAgICAgICAgIHRpdGxlOiAnRW1wbG95ZWVzJyxcclxuICAgICAgICAgICAgICBlbGV2YXRpb246ICdub25lJyxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgXSxcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHRoaXMuZWRpdFBvc2l0aW9uQnV0dG9uLFxyXG4gICAgICB7IG5hbWU6ICdkZWxldGUnLCBkaWFsb2c6IHRydWUsIGFjdGlvbjogeyB1cmw6ICdwb3NpdGlvbnM/YWN0aW9uPWRlbGV0ZScsIG1ldGhvZDogJ3Bvc3QnIH0gfSxcclxuICAgIF0sXHJcbiAgICBsb2FkQWN0aW9uOiB7IHVybDogJ3Bvc2l0aW9ucy9hbGwveCcgfSxcclxuICAgIGZvcm1Db25maWc6IHRoaXMucG9zaXRpb25Gb3JtQ29uZmlnXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLURlcGFydG1lbnRzLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIGRlcGFydG1lbnRGb3JtQ29uZmlnOiBGb3JtQ29uZmlnID0ge1xyXG4gICAgZmllbGRzOiBbXHJcbiAgICAgIHsgbmFtZTogJ25hbWUnLCB0eXBlOiAndGV4dCcsIHJlcXVpcmVkOiB0cnVlIH0sXHJcbiAgICBdLFxyXG4gICAgbG9hZEFjdGlvbjogeyB1cmw6ICdkZXBhcnRtZW50cy9pZCcgfSxcclxuICB9XHJcblxyXG4gIGVkaXREZXBhcnRtZW50QnV0dG9uOiBCdXR0b24gPSB7IG5hbWU6ICdlZGl0JywgZGlhbG9nOiB0cnVlLCBhY3Rpb246IHsgdXJsOiAnZGVwYXJ0bWVudHM/YWN0aW9uPWVkaXQnLCBtZXRob2Q6ICdwb3N0Jywgc3VjY2Vzc01lc3NhZ2U6ICdFZGl0ZWQgU3VjY2Vzc2Z1bGx5JyB9IH1cclxuXHJcbiAgZGVwYXJ0bWVudFRhYmxlQ29uZmlnOiBUYWJsZUNvbmZpZyA9IHtcclxuICAgIHNob3dGaWx0ZXI6IHRydWUsXHJcbiAgICBtaW5Db2x1bW5zOiBbJ25hbWUnXSxcclxuICAgIGZsYXRCdXR0b25zOiB0cnVlLFxyXG4gICAgY29sdW1uczogW1xyXG4gICAgICB7IG5hbWU6ICdkZXBhcnRtZW50SUQnLCB0eXBlOiAnbnVtYmVyJywgYWxpYXM6ICdJRCcgfSxcclxuICAgICAgeyBuYW1lOiAnbmFtZScsIHR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgXSxcclxuICAgIGJ1dHRvbnM6IFtcclxuICAgICAgeyBuYW1lOiAnY3JlYXRlJywgZGlzcGxheTogJ0NyZWF0ZScsIGRpYWxvZzogdHJ1ZSwgYWN0aW9uOiB7IHVybDogJ2RlcGFydG1lbnRzP2FjdGlvbj1jcmVhdGUnLCBtZXRob2Q6ICdwb3N0JyB9IH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAndmlldycsXHJcbiAgICAgICAgZGlhbG9nOiB0cnVlLFxyXG4gICAgICAgIGRldGFpbHNDb25maWc6IHtcclxuICAgICAgICAgIGZvcm1Db25maWc6IHRoaXMuZGVwYXJ0bWVudEZvcm1Db25maWcsXHJcbiAgICAgICAgICBoZXJvRmllbGQ6ICdkZXBhcnRtZW50SUQnLFxyXG4gICAgICAgICAgYnV0dG9uczogW3RoaXMuZWRpdERlcGFydG1lbnRCdXR0b25dLFxyXG4gICAgICAgICAgdGFibGVDb25maWdzOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAuLi50aGlzLmVtcGxveWVlVGFibGVDb25maWcsXHJcbiAgICAgICAgICAgICAgbG9hZEFjdGlvbjogeyB1cmw6ICdkZXBhcnRtZW50cy9lbXBsb3llZXMveCcgfSxcclxuICAgICAgICAgICAgICBsb2FkQ3JpdGVyaWE6ICdlbXBsb3llZXMnLFxyXG4gICAgICAgICAgICAgIGxvYWRJREZpZWxkOiAnZGVwYXJ0bWVudElEJyxcclxuICAgICAgICAgICAgICB0aXRsZTogJ0VtcGxveWVlcycsXHJcbiAgICAgICAgICAgICAgZWxldmF0aW9uOiAnbm9uZScsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAuLi50aGlzLnBvc2l0aW9uVGFibGVDb25maWcsXHJcbiAgICAgICAgICAgICAgbG9hZEFjdGlvbjogeyB1cmw6ICdkZXBhcnRtZW50cy9wb3NpdGlvbnMveCcgfSxcclxuICAgICAgICAgICAgICBsb2FkQ3JpdGVyaWE6ICdwb3NpdGlvbnMnLFxyXG4gICAgICAgICAgICAgIGxvYWRJREZpZWxkOiAnZGVwYXJ0bWVudElEJyxcclxuICAgICAgICAgICAgICB0aXRsZTogJ1Bvc2l0aW9ucycsXHJcbiAgICAgICAgICAgICAgZWxldmF0aW9uOiAnbm9uZScsXHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgdGhpcy5lZGl0RGVwYXJ0bWVudEJ1dHRvbixcclxuICAgICAgeyBuYW1lOiAnZGVsZXRlJywgZGlhbG9nOiB0cnVlLCBhY3Rpb246IHsgdXJsOiAnZGVwYXJ0bWVudHM/YWN0aW9uPWRlbGV0ZScsIG1ldGhvZDogJ3Bvc3QnIH0gfSxcclxuICAgIF0sXHJcbiAgICBsb2FkQWN0aW9uOiB7IHVybDogJ2RlcGFydG1lbnRzL2FsbC94JyB9LFxyXG4gICAgZm9ybUNvbmZpZzogdGhpcy5kZXBhcnRtZW50Rm9ybUNvbmZpZ1xyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tT3RoZXIgY29kZVxyXG5cclxuICBwdWJsaWMgQ2FsbEFwaShhY3Rpb246IEFjdGlvbiwgZGF0YTogYW55ID0gJycgKSB7XHJcblxyXG4gICAgaWYgKCFhY3Rpb24ubWV0aG9kKXtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuR2V0KGFjdGlvbi51cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKGFjdGlvbi5tZXRob2QgPT0nZ2V0Jyl7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLkdldChhY3Rpb24udXJsKTtcclxuICAgIH0gZWxzZSBpZiAoYWN0aW9uLm1ldGhvZCA9PSAncG9zdCcpe1xyXG5cclxuICAgICAgaWYgKGFjdGlvbi5pc0Zvcm1EYXRhKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5Qb3N0X0Zvcm1EYXRhKGFjdGlvbi51cmwsIGRhdGEpO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5Qb3N0KGFjdGlvbi51cmwsIGRhdGEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChhY3Rpb24udXJsLCBkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgQ2hlY2tXZWxjb21lZChwYXRoOiBzdHJpbmcgPSAnaG9tZS9hZG1pbi93ZWxjb21lJykge1xyXG4gICAgdGhpcy5DYWxsQXBpKHsgdXJsOiAndGVuYW50L3dlbGNvbWUveCcgfSkuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgIGlmICgheC5kYXRhKSB7XHJcbiAgICAgICAgdGhpcy5OYXZpZ2F0ZShwYXRoKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBwdWJsaWMgTmF2aWdhdGUocGF0aDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcGF0aF0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIE5hdmlnYXRlV2l0aFZhbHVlKHBhdGg6IHN0cmluZywgdmFsdWUgOiBzdHJpbmcpe1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3BhdGhdLCB7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7IHY6IHZhbHVlIH0sXHJcbiAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXHJcbiAgICAgIHNraXBMb2NhdGlvbkNoYW5nZTogZmFsc2VcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIEdldE5hdmlnYXRpb25WYWx1ZSgpe1xyXG4gICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbXCJ2XCJdICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1tcInZcIl1cclxuICAgIH1lbHNle1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB0bXBBY2NvdW50SUQ7XHJcblxyXG5cclxuXHJcbiAgLy9Vc2Vyc1xyXG4gIHB1YmxpYyBHZXRVc2VyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuR2V0KFwiVXNlci9hbGwveFwiKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBSZWdpc3RlckFjY291bnQodSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChcIlVzZXIvcmVnaXN0ZXJcIiwgdSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgR2V0VXNlckJ5SUQodmFsOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLkdldChgVXNlci9pZC8ke3ZhbH1gKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBVcGRhdGVVc2VyKHByb2ZpbGUpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLlBvc3QoXCJVc2VyL2VkaXRcIiwgcHJvZmlsZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgVW5sb2NrVXNlcih1c2VyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5Qb3N0KFwiVXNlci91bmxvY2tcIiwgdXNlcik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgTG9ja1VzZXIodXNlcikge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChcIlVzZXIvbG9ja1wiLCB1c2VyKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBEZWxldGVVc2VyKHVzZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLlBvc3QoXCJVc2VyL2RlbGV0ZVwiLCB1c2VyKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBMb2dpbih1OiBVc2VyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5Qb3N0KFwiVXNlci9sb2dpblwiLCB1KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBDaGFuZ2VQYXNzd29yZCh1KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5Qb3N0KFwiVXNlci9jaGFuZ2VwYXNzd29yZC1zZWxmXCIsIHUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIENoYW5nZVBhc3N3b3JkQWRtaW4odSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChcIlVzZXIvY2hhbmdlcGFzc3dvcmQtYWRtaW5cIiwgdSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2VsZlJlc2V0KHU6IFVzZXIpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChcIkJhc2ljL1NlbGZSZXNldFwiLCB1KTtcclxuICB9XHJcblxyXG5cclxuICAvL1JvbGVzXHJcblxyXG4gIHB1YmxpYyBQb3N0Um9sZShyb2xlLCBhY3Rpb246IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChgUm9sZT9hY3Rpb249JHthY3Rpb259YCwgcm9sZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgUHV0Um9sZShyb2xlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5QdXQoXCJSb2xlXCIsIHJvbGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIEdldFJvbGUoYnk6IHN0cmluZywgdmFsOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLkdldChcIlJvbGUvYWxsL3hcIik7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8vTG9nc1xyXG4gIHB1YmxpYyBHZXRMb2coYnk6IHN0cmluZywgdmFsOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLkdldChcIkxvZy9hbGwveFwiKTtcclxuICB9XHJcblxyXG5cclxuICAvL1NldHRpbmdzXHJcbiAgcHVibGljIEdldFNldHRpbmcoYnk6IHN0cmluZywgdmFsOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLkdldChcIlNldHRpbmcvYWxsL3hcIik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgVXBkYXRlU2V0dGluZyhzZXR0aW5nLCBhY3Rpb246IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChgU2V0dGluZz9hY3Rpb249JHthY3Rpb259YCwgc2V0dGluZyk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/material/dialog";
|
|
4
|
+
import * as i2 from "@angular/cdk/layout";
|
|
5
|
+
export class DialogService {
|
|
6
|
+
constructor(dialog, breakpointObserver) {
|
|
7
|
+
this.dialog = dialog;
|
|
8
|
+
this.breakpointObserver = breakpointObserver;
|
|
9
|
+
this.smallScreen = false;
|
|
10
|
+
// Detect screen size changes
|
|
11
|
+
this.breakpointObserver.observe(["(max-width: 600px)"]).subscribe((result) => {
|
|
12
|
+
this.smallScreen = result.matches;
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
openDetailsDialog(config, dialogComponent) {
|
|
16
|
+
const hasTables = config.tableConfigs?.length > 0;
|
|
17
|
+
const dialogOptions = {
|
|
18
|
+
width: this.smallScreen ? '900px' : (hasTables ? '90%' : '900px'),
|
|
19
|
+
height: hasTables ? '90%' : 'auto',
|
|
20
|
+
data: config
|
|
21
|
+
};
|
|
22
|
+
const dialogRef = this.dialog.open(dialogComponent, dialogOptions);
|
|
23
|
+
return {
|
|
24
|
+
afterClosed: dialogRef.afterClosed(),
|
|
25
|
+
inputChange: dialogRef.componentInstance.inputChange,
|
|
26
|
+
dialogRef: dialogRef
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
DialogService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DialogService, deps: [{ token: i1.MatDialog }, { token: i2.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
31
|
+
DialogService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DialogService, providedIn: 'root' });
|
|
32
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DialogService, decorators: [{
|
|
33
|
+
type: Injectable,
|
|
34
|
+
args: [{
|
|
35
|
+
providedIn: 'root'
|
|
36
|
+
}]
|
|
37
|
+
}], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i2.BreakpointObserver }]; } });
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90aW4tc3BhL3NyYy9saWIvc2VydmljZXMvZGlhbG9nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQVUzQyxNQUFNLE9BQU8sYUFBYTtJQUd4QixZQUNVLE1BQWlCLEVBQ2pCLGtCQUFzQztRQUR0QyxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFKeEMsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFNMUIsNkJBQTZCO1FBQzdCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBdUIsRUFBRSxFQUFFO1lBQzVGLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxpQkFBaUIsQ0FDZixNQUEyQixFQUMzQixlQUEwQztRQU0xQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFFbEQsTUFBTSxhQUFhLEdBQUc7WUFDcEIsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ2pFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUNsQyxJQUFJLEVBQUUsTUFBTTtTQUNiLENBQUM7UUFFRixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFbkUsT0FBTztZQUNMLFdBQVcsRUFBRSxTQUFTLENBQUMsV0FBVyxFQUFFO1lBQ3BDLFdBQVcsRUFBRyxTQUFTLENBQUMsaUJBQXlCLENBQUMsV0FBVztZQUM3RCxTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDO0lBQ0osQ0FBQzs7MEdBcENVLGFBQWE7OEdBQWIsYUFBYSxjQUZaLE1BQU07MkZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBEZXRhaWxzRGlhbG9nQ29uZmlnIH0gZnJvbSAnLi4vY2xhc3Nlcy9DbGFzc2VzJztcclxuLy8gaW1wb3J0IHsgRGV0YWlsc0RpYWxvZyB9IGZyb20gJy4uL2NvbXBvbmVudHMvdGFibGUvZGV0YWlsc0RpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIsIEJyZWFrcG9pbnRTdGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRGlhbG9nU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBzbWFsbFNjcmVlbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIGJyZWFrcG9pbnRPYnNlcnZlcjogQnJlYWtwb2ludE9ic2VydmVyXHJcbiAgKSB7XHJcbiAgICAvLyBEZXRlY3Qgc2NyZWVuIHNpemUgY2hhbmdlc1xyXG4gICAgdGhpcy5icmVha3BvaW50T2JzZXJ2ZXIub2JzZXJ2ZShbXCIobWF4LXdpZHRoOiA2MDBweClcIl0pLnN1YnNjcmliZSgocmVzdWx0OiBCcmVha3BvaW50U3RhdGUpID0+IHtcclxuICAgICAgdGhpcy5zbWFsbFNjcmVlbiA9IHJlc3VsdC5tYXRjaGVzO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvcGVuRGV0YWlsc0RpYWxvZzxUPihcclxuICAgIGNvbmZpZzogRGV0YWlsc0RpYWxvZ0NvbmZpZyxcclxuICAgIGRpYWxvZ0NvbXBvbmVudDogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVFxyXG4gICk6IHtcclxuICAgIGFmdGVyQ2xvc2VkOiBPYnNlcnZhYmxlPGFueT4sXHJcbiAgICBpbnB1dENoYW5nZTogT2JzZXJ2YWJsZTxhbnk+LFxyXG4gICAgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8VD5cclxuICB9IHtcclxuICAgIGNvbnN0IGhhc1RhYmxlcyA9IGNvbmZpZy50YWJsZUNvbmZpZ3M/Lmxlbmd0aCA+IDA7XHJcblxyXG4gICAgY29uc3QgZGlhbG9nT3B0aW9ucyA9IHtcclxuICAgICAgd2lkdGg6IHRoaXMuc21hbGxTY3JlZW4gPyAnOTAwcHgnIDogKGhhc1RhYmxlcyA/ICc5MCUnIDogJzkwMHB4JyksXHJcbiAgICAgIGhlaWdodDogaGFzVGFibGVzID8gJzkwJScgOiAnYXV0bycsXHJcbiAgICAgIGRhdGE6IGNvbmZpZ1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKGRpYWxvZ0NvbXBvbmVudCwgZGlhbG9nT3B0aW9ucyk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgYWZ0ZXJDbG9zZWQ6IGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLFxyXG4gICAgICBpbnB1dENoYW5nZTogKGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZSBhcyBhbnkpLmlucHV0Q2hhbmdlLFxyXG4gICAgICBkaWFsb2dSZWY6IGRpYWxvZ1JlZlxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// table-config.service.ts
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class TableConfigService {
|
|
5
|
+
setColumns(config, smallScreen) {
|
|
6
|
+
if (!config?.columns) {
|
|
7
|
+
return [];
|
|
8
|
+
}
|
|
9
|
+
if (smallScreen && config.minColumns) {
|
|
10
|
+
return config.minColumns.filter(col => config.columns.some(x => x.name === col));
|
|
11
|
+
}
|
|
12
|
+
return config.columns.map(({ name }) => name);
|
|
13
|
+
}
|
|
14
|
+
getActionsWidth(buttons) {
|
|
15
|
+
return `${buttons?.length * 40 + 20}px`;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
TableConfigService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
19
|
+
TableConfigService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableConfigService, providedIn: 'root' });
|
|
20
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableConfigService, decorators: [{
|
|
21
|
+
type: Injectable,
|
|
22
|
+
args: [{
|
|
23
|
+
providedIn: 'root'
|
|
24
|
+
}]
|
|
25
|
+
}] });
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29uZmlnLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90aW4tc3BhL3NyYy9saWIvc2VydmljZXMvdGFibGUtY29uZmlnLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEJBQTBCO0FBQzFCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTTNDLE1BQU0sT0FBTyxrQkFBa0I7SUFFN0IsVUFBVSxDQUFDLE1BQW1CLEVBQUUsV0FBb0I7UUFFbEQsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUU7WUFDcEIsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUVELElBQUksV0FBVyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUU7WUFDcEMsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUNwQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQ3pDLENBQUM7U0FDSDtRQUVELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsZUFBZSxDQUFDLE9BQWlCO1FBQy9CLE9BQU8sR0FBRyxPQUFPLEVBQUUsTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQztJQUMxQyxDQUFDOzsrR0FuQlUsa0JBQWtCO21IQUFsQixrQkFBa0IsY0FGakIsTUFBTTsyRkFFUCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdGFibGUtY29uZmlnLnNlcnZpY2UudHNcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCdXR0b24sIFRhYmxlQ29uZmlnIH0gZnJvbSAnLi4vY2xhc3Nlcy9DbGFzc2VzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYmxlQ29uZmlnU2VydmljZSB7XHJcblxyXG4gIHNldENvbHVtbnMoY29uZmlnOiBUYWJsZUNvbmZpZywgc21hbGxTY3JlZW46IGJvb2xlYW4pOiBzdHJpbmdbXSB7XHJcblxyXG4gICAgaWYgKCFjb25maWc/LmNvbHVtbnMpIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzbWFsbFNjcmVlbiAmJiBjb25maWcubWluQ29sdW1ucykge1xyXG4gICAgICByZXR1cm4gY29uZmlnLm1pbkNvbHVtbnMuZmlsdGVyKGNvbCA9PlxyXG4gICAgICAgIGNvbmZpZy5jb2x1bW5zLnNvbWUoeCA9PiB4Lm5hbWUgPT09IGNvbClcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29uZmlnLmNvbHVtbnMubWFwKCh7IG5hbWUgfSkgPT4gbmFtZSk7XHJcbiAgfVxyXG5cclxuICBnZXRBY3Rpb25zV2lkdGgoYnV0dG9uczogQnV0dG9uW10pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGAke2J1dHRvbnM/Lmxlbmd0aCAqIDQwICsgMjB9cHhgO1xyXG4gIH1cclxufVxyXG4iXX0=
|