bpm-core 0.0.104 → 0.0.105
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/esm2022/bpm-core.mjs +5 -0
- package/esm2022/lib/app/app.component.mjs +79 -0
- package/esm2022/lib/classes/form-validation.mjs +80 -0
- package/esm2022/lib/classes/index.mjs +2 -0
- package/esm2022/lib/components/app-component-sections/activities/activities.component.mjs +44 -0
- package/esm2022/lib/components/app-component-sections/approvals/approvals.component.mjs +23 -0
- package/esm2022/lib/components/app-component-sections/approvals-workflow/approvals-workflow.component.mjs +113 -0
- package/esm2022/lib/components/app-component-sections/faq-sidenav/faq-sidenav.component.mjs +25 -0
- package/esm2022/lib/components/app-component-sections/faqs/faqs.component.mjs +27 -0
- package/esm2022/lib/components/app-component-sections/faqs/index.mjs +2 -0
- package/esm2022/lib/components/app-component-sections/feedback-section/feedback-section.component.mjs +237 -0
- package/esm2022/lib/components/app-component-sections/form-section/form-section.component.mjs +255 -0
- package/esm2022/lib/components/app-component-sections/index.mjs +9 -0
- package/esm2022/lib/components/app-component-sections/layout/header/header.component.mjs +79 -0
- package/esm2022/lib/components/app-component-sections/layout/layout.component.mjs +89 -0
- package/esm2022/lib/components/app-component-sections/layout/side-nav/side-nav.component.mjs +158 -0
- package/esm2022/lib/components/app-component-sections/main-request-details/main-request-details.component.mjs +34 -0
- package/esm2022/lib/components/app-component-sections/previous-requests/previous-requests.component.mjs +345 -0
- package/esm2022/lib/components/app-component-sections/profile-section/profile-section.component.mjs +45 -0
- package/esm2022/lib/components/app-component-sections/service-header/service-header.component.mjs +271 -0
- package/esm2022/lib/components/app-component-sections/status/status.component.mjs +38 -0
- package/esm2022/lib/components/app-component-sections/workflow-section/workflow-section.component.mjs +164 -0
- package/esm2022/lib/components/shared-components/action-buttons/action-buttons.component.mjs +138 -0
- package/esm2022/lib/components/shared-components/dialogs/confirm-dialog/confirm-dialog.component.mjs +30 -0
- package/esm2022/lib/components/shared-components/dialogs/delete-dialog/delete-dialog.component.mjs +29 -0
- package/esm2022/lib/components/shared-components/dialogs/submit-dialog/submit-dialog.component.mjs +67 -0
- package/esm2022/lib/components/shared-components/form-field/add-attachment-section/add-attachment-section.component.mjs +138 -0
- package/esm2022/lib/components/shared-components/form-field/attachment-section/attachment-section.component.mjs +234 -0
- package/esm2022/lib/components/shared-components/form-field/base-component/base-component.component.mjs +198 -0
- package/esm2022/lib/components/shared-components/form-field/checkbox/checkbox.component.mjs +91 -0
- package/esm2022/lib/components/shared-components/form-field/control-value-accessor.directive.mjs +185 -0
- package/esm2022/lib/components/shared-components/form-field/custom-searchable-autocomplete/custom-searchable.component.mjs +131 -0
- package/esm2022/lib/components/shared-components/form-field/date-picker/date-format.mjs +31 -0
- package/esm2022/lib/components/shared-components/form-field/date-picker/date-picker.component.mjs +175 -0
- package/esm2022/lib/components/shared-components/form-field/date-range-picker/date-range-picker.component.mjs +186 -0
- package/esm2022/lib/components/shared-components/form-field/doc-uploader/docs-uploader.component.mjs +525 -0
- package/esm2022/lib/components/shared-components/form-field/form-label/form-label.component.mjs +33 -0
- package/esm2022/lib/components/shared-components/form-field/index.mjs +26 -0
- package/esm2022/lib/components/shared-components/form-field/info-item/info-item.component.mjs +76 -0
- package/esm2022/lib/components/shared-components/form-field/input/input.component.mjs +71 -0
- package/esm2022/lib/components/shared-components/form-field/input-autocomplete/index.mjs +3 -0
- package/esm2022/lib/components/shared-components/form-field/input-autocomplete/input-autocomplete.model.mjs +2 -0
- package/esm2022/lib/components/shared-components/form-field/input-currency/input-currency.component.mjs +73 -0
- package/esm2022/lib/components/shared-components/form-field/input-email/input-email.component.mjs +69 -0
- package/esm2022/lib/components/shared-components/form-field/input-mask/input-mask.component.mjs +61 -0
- package/esm2022/lib/components/shared-components/form-field/input-number/input-number.component.mjs +74 -0
- package/esm2022/lib/components/shared-components/form-field/input-telephone/input-telephone.component.mjs +85 -0
- package/esm2022/lib/components/shared-components/form-field/radio/radio.component.mjs +52 -0
- package/esm2022/lib/components/shared-components/form-field/repeated-list/repeated-list.component.mjs +32 -0
- package/esm2022/lib/components/shared-components/form-field/search-employee/search-employee.component.mjs +192 -0
- package/esm2022/lib/components/shared-components/form-field/select/select.component.mjs +191 -0
- package/esm2022/lib/components/shared-components/form-field/shared-imports.mjs +36 -0
- package/esm2022/lib/components/shared-components/form-field/table-list/table-list.component.mjs +116 -0
- package/esm2022/lib/components/shared-components/form-field/textarea/special-chars.directive.mjs +39 -0
- package/esm2022/lib/components/shared-components/form-field/textarea/textarea.component.mjs +57 -0
- package/esm2022/lib/components/shared-components/form-field/toggle-button/toggle-button.component.mjs +90 -0
- package/esm2022/lib/components/shared-components/form-field/validation-errors/validation-errors.component.mjs +43 -0
- package/esm2022/lib/components/shared-components/index.mjs +9 -0
- package/esm2022/lib/components/shared-components/table/table.component.mjs +243 -0
- package/esm2022/lib/components/shared-components/terms-conditions/terms-conditions.component.mjs +31 -0
- package/esm2022/lib/components/shared-components/title-section/title-section.component.mjs +31 -0
- package/esm2022/lib/constants/constants.mjs +149 -0
- package/esm2022/lib/constants/index.mjs +2 -0
- package/esm2022/lib/directives/ar.directive.mjs +54 -0
- package/esm2022/lib/directives/currency.directive.mjs +92 -0
- package/esm2022/lib/directives/en.directive.mjs +51 -0
- package/esm2022/lib/directives/number.directive.mjs +68 -0
- package/esm2022/lib/directives/skip-location.directive.mjs +28 -0
- package/esm2022/lib/enums/actions.enum.mjs +22 -0
- package/esm2022/lib/enums/colors.enum.mjs +6 -0
- package/esm2022/lib/enums/events.enum.mjs +6 -0
- package/esm2022/lib/functions/data-to-blob.mjs +12 -0
- package/esm2022/lib/functions/encode-password.mjs +14 -0
- package/esm2022/lib/functions/handel-error-response.mjs +12 -0
- package/esm2022/lib/functions/index.mjs +5 -0
- package/esm2022/lib/functions/is-valid-data.mjs +42 -0
- package/esm2022/lib/helpers/shared.helper.mjs +26 -0
- package/esm2022/lib/hooks/index.mjs +3 -0
- package/esm2022/lib/hooks/load-form.mjs +13 -0
- package/esm2022/lib/hooks/save-form.mjs +18 -0
- package/esm2022/lib/i18n/ar.mjs +200 -0
- package/esm2022/lib/i18n/en.mjs +204 -0
- package/esm2022/lib/i18n/index.mjs +3 -0
- package/esm2022/lib/interfaces/action.interface.mjs +2 -0
- package/esm2022/lib/interfaces/api-response.interface.mjs +2 -0
- package/esm2022/lib/interfaces/document-file.interface.mjs +2 -0
- package/esm2022/lib/interfaces/form-items.interface.mjs +2 -0
- package/esm2022/lib/interfaces/form.interface.mjs +150 -0
- package/esm2022/lib/interfaces/igate-user.interface.mjs +2 -0
- package/esm2022/lib/interfaces/index.mjs +8 -0
- package/esm2022/lib/interfaces/lov-list.interface.mjs +2 -0
- package/esm2022/lib/interfaces/lov.interface.mjs +2 -0
- package/esm2022/lib/interfaces/shared.interface.mjs +2 -0
- package/esm2022/lib/pipes/currency.pipe.mjs +66 -0
- package/esm2022/lib/pipes/format-as-password.pipe.mjs +19 -0
- package/esm2022/lib/pipes/index.mjs +3 -0
- package/esm2022/lib/pipes/status-style.pipe.mjs +57 -0
- package/esm2022/lib/pipes/translate.pipe.mjs +36 -0
- package/esm2022/lib/regex/index.mjs +2 -0
- package/esm2022/lib/regex/regex-patterns.mjs +4 -0
- package/esm2022/lib/services/action.service.ts.mjs +25 -0
- package/esm2022/lib/services/core.service.ts.mjs +527 -0
- package/esm2022/lib/services/feedBack.service.mjs +81 -0
- package/esm2022/lib/services/i18n.service.mjs +36 -0
- package/esm2022/lib/services/index.mjs +6 -0
- package/esm2022/lib/services/sidenav.service.mjs +36 -0
- package/esm2022/lib/testComponent/config/segment-dynamic-loader.config.mjs +8 -0
- package/esm2022/lib/testComponent/general-approver-section/general-approver-section.component.mjs +90 -0
- package/esm2022/lib/testComponent/request-details-section/request-details-section.component.mjs +482 -0
- package/esm2022/lib/testComponent/services/i18n.service.mjs +39 -0
- package/esm2022/lib/testComponent/services/segment-dynamic-loader.service.mjs +54 -0
- package/esm2022/lib/validators/id.validator.mjs +66 -0
- package/esm2022/lib/validators/index.mjs +8 -0
- package/esm2022/lib/validators/string-to-boolean.pipe.mjs +16 -0
- package/esm2022/lib/validators/text.directive.mjs +50 -0
- package/esm2022/lib/validators/timer.pipe.mjs +19 -0
- package/esm2022/public-api.mjs +19 -0
- package/fesm2022/bpm-core.mjs +244 -226
- package/fesm2022/bpm-core.mjs.map +1 -1
- package/lib/components/shared-components/form-field/checkbox/checkbox.component.d.ts +1 -2
- package/lib/components/shared-components/form-field/control-value-accessor.directive.d.ts +1 -1
- package/lib/components/shared-components/form-field/shared-imports.d.ts +2 -2
- package/lib/components/shared-components/form-field/textarea/special-chars.directive.d.ts +1 -1
- package/lib/components/shared-components/title-section/title-section.component.d.ts +1 -1
- package/lib/directives/currency.directive.d.ts +1 -0
- package/lib/pipes/currency.pipe.d.ts +1 -1
- package/lib/pipes/format-as-password.pipe.d.ts +1 -1
- package/lib/validators/string-to-boolean.pipe.d.ts +1 -1
- package/lib/validators/text.directive.d.ts +1 -1
- package/lib/validators/timer.pipe.d.ts +1 -1
- package/package.json +4 -2
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { MAT_DATE_FORMATS } from '@angular/material/core';
|
|
2
|
+
import { FormControl } from '@angular/forms';
|
|
3
|
+
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
4
|
+
import { Component, Input, Output, EventEmitter, forwardRef, Inject, } from '@angular/core';
|
|
5
|
+
import { ControlContainer, NgForm, NG_VALUE_ACCESSOR, } from '@angular/forms';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "../../../../services";
|
|
8
|
+
import * as i2 from "@angular/common/http";
|
|
9
|
+
import * as i3 from "@angular/forms";
|
|
10
|
+
import * as i4 from "@angular/material/core";
|
|
11
|
+
import * as i5 from "@angular/material/dialog";
|
|
12
|
+
import * as i6 from "../../../../pipes";
|
|
13
|
+
import * as i7 from "@angular/platform-browser";
|
|
14
|
+
import * as i8 from "../date-picker/date-format";
|
|
15
|
+
const CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR = {
|
|
16
|
+
provide: NG_VALUE_ACCESSOR,
|
|
17
|
+
useExisting: forwardRef(() => BaseComponent),
|
|
18
|
+
multi: true,
|
|
19
|
+
};
|
|
20
|
+
export class BaseComponent {
|
|
21
|
+
i18n;
|
|
22
|
+
http;
|
|
23
|
+
fb;
|
|
24
|
+
dateAdapter;
|
|
25
|
+
cdRef;
|
|
26
|
+
dialog;
|
|
27
|
+
dialogRef;
|
|
28
|
+
dialogData;
|
|
29
|
+
mycurrencyPipe;
|
|
30
|
+
dateFormat;
|
|
31
|
+
sanitizer;
|
|
32
|
+
hideOption = false;
|
|
33
|
+
// hideOption: InputSignal<boolean> = input(false);
|
|
34
|
+
type = 'text';
|
|
35
|
+
// hideOption: InputSignal<string> = input('text');
|
|
36
|
+
loading;
|
|
37
|
+
// loading: InputSignal<boolean>;
|
|
38
|
+
field;
|
|
39
|
+
// loafieldding: InputSignal<any>;
|
|
40
|
+
labelTextReadMode;
|
|
41
|
+
// labelTextReadMode: InputSignal<string>
|
|
42
|
+
labelTextWriteMode;
|
|
43
|
+
// labelTextWriteMode: InputSignal<string>
|
|
44
|
+
isReadOnly;
|
|
45
|
+
// isReadOnly: InputSignal<boolean>;
|
|
46
|
+
name;
|
|
47
|
+
// name: InputSignal<string>
|
|
48
|
+
required = true;
|
|
49
|
+
// required: InputSignal<boolean> = input(true);
|
|
50
|
+
mask;
|
|
51
|
+
// mask: InputSignal<string>
|
|
52
|
+
allowedExtensions = '';
|
|
53
|
+
// allowedExtensions: InputSignal<string> = input('');
|
|
54
|
+
link;
|
|
55
|
+
// link: InputSignal<boolean>;
|
|
56
|
+
multiple;
|
|
57
|
+
// multiple: InputSignal<boolean>;
|
|
58
|
+
insideTable;
|
|
59
|
+
// insideTable: InputSignal<boolean>;
|
|
60
|
+
showIfEmpty = false;
|
|
61
|
+
// showIfEmpty: InputSignal<boolean> = input(false);
|
|
62
|
+
showErrorMessage;
|
|
63
|
+
// showErrorMessage: InputSignal<boolean>;
|
|
64
|
+
showHint = false;
|
|
65
|
+
// showHint: InputSignal<boolean> = input(false);
|
|
66
|
+
hint = '';
|
|
67
|
+
// hint: InputSignal<string> = input('');
|
|
68
|
+
errorMessage;
|
|
69
|
+
// errorMessage: InputSignal<string>
|
|
70
|
+
placeholder;
|
|
71
|
+
// placeholder: InputSignal<string>
|
|
72
|
+
maxLength;
|
|
73
|
+
// maxLength: InputSignal<number>
|
|
74
|
+
minLength;
|
|
75
|
+
// minLength: InputSignal<number>
|
|
76
|
+
maxValue;
|
|
77
|
+
// maxValue: InputSignal<string>
|
|
78
|
+
minValue;
|
|
79
|
+
// minValue: InputSignal<string>
|
|
80
|
+
disabled = false;
|
|
81
|
+
// disabled: InputSignal<boolean> = input(false);
|
|
82
|
+
lov;
|
|
83
|
+
// lov: InputSignal<any>
|
|
84
|
+
hasLabel = true;
|
|
85
|
+
// hasLabel: InputSignal<boolean> = input(true);
|
|
86
|
+
section;
|
|
87
|
+
// section: InputSignal<Section>
|
|
88
|
+
controller = new FormControl();
|
|
89
|
+
value;
|
|
90
|
+
emitedValue = new EventEmitter();
|
|
91
|
+
filesize;
|
|
92
|
+
// public options: any;
|
|
93
|
+
randomID = Math.floor(Math.random() * (999999 - 100000)) + 100000;
|
|
94
|
+
constructor(i18n, http, fb, dateAdapter, cdRef, dialog, dialogRef, dialogData, mycurrencyPipe, dateFormat, sanitizer) {
|
|
95
|
+
this.i18n = i18n;
|
|
96
|
+
this.http = http;
|
|
97
|
+
this.fb = fb;
|
|
98
|
+
this.dateAdapter = dateAdapter;
|
|
99
|
+
this.cdRef = cdRef;
|
|
100
|
+
this.dialog = dialog;
|
|
101
|
+
this.dialogRef = dialogRef;
|
|
102
|
+
this.dialogData = dialogData;
|
|
103
|
+
this.mycurrencyPipe = mycurrencyPipe;
|
|
104
|
+
this.dateFormat = dateFormat;
|
|
105
|
+
this.sanitizer = sanitizer;
|
|
106
|
+
this.dateAdapter.setLocale(this.i18n.language);
|
|
107
|
+
this.value = this.field;
|
|
108
|
+
this.emitedValue = new EventEmitter();
|
|
109
|
+
if (this.shouldSetDateFormateInAr) {
|
|
110
|
+
dateFormat.display = { dateInput: 'YYYY/MM/DD' };
|
|
111
|
+
dateFormat.parse = { dateInput: 'YYYY/MM/DD' };
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
get shouldSetDateFormateInAr() {
|
|
115
|
+
return this.i18n.language == 'ar';
|
|
116
|
+
}
|
|
117
|
+
resetData() {
|
|
118
|
+
if (!this.isReadOnly) {
|
|
119
|
+
this.field = '';
|
|
120
|
+
this.controller.setValue(this.field);
|
|
121
|
+
this.controller.markAsUntouched();
|
|
122
|
+
this.emitedValue.emit(this.field);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: BaseComponent, deps: [{ token: i1.CoreI18nService }, { token: i2.HttpClient }, { token: i3.FormBuilder }, { token: i4.DateAdapter }, { token: i0.ChangeDetectorRef }, { token: i5.MatDialog }, { token: i5.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i6.MycurrencyPipe }, { token: MAT_DATE_FORMATS }, { token: i7.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
|
|
126
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: BaseComponent, isStandalone: true, selector: "app-base-component", inputs: { hideOption: "hideOption", type: "type", loading: "loading", field: "field", labelTextReadMode: "labelTextReadMode", labelTextWriteMode: "labelTextWriteMode", isReadOnly: "isReadOnly", name: "name", required: "required", mask: "mask", allowedExtensions: "allowedExtensions", link: "link", multiple: "multiple", insideTable: "insideTable", showIfEmpty: "showIfEmpty", showErrorMessage: "showErrorMessage", showHint: "showHint", hint: "hint", errorMessage: "errorMessage", placeholder: "placeholder", maxLength: "maxLength", minLength: "minLength", maxValue: "maxValue", minValue: "minValue", disabled: "disabled", lov: "lov", hasLabel: "hasLabel", section: "section", controller: "controller" }, outputs: { emitedValue: "emitedValue" }, providers: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR], ngImport: i0, template: '', isInline: true, styles: [""], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] });
|
|
127
|
+
}
|
|
128
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: BaseComponent, decorators: [{
|
|
129
|
+
type: Component,
|
|
130
|
+
args: [{ selector: 'app-base-component', template: '', providers: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], standalone: true }]
|
|
131
|
+
}], ctorParameters: () => [{ type: i1.CoreI18nService }, { type: i2.HttpClient }, { type: i3.FormBuilder }, { type: i4.DateAdapter }, { type: i0.ChangeDetectorRef }, { type: i5.MatDialog }, { type: i5.MatDialogRef }, { type: undefined, decorators: [{
|
|
132
|
+
type: Inject,
|
|
133
|
+
args: [MAT_DIALOG_DATA]
|
|
134
|
+
}] }, { type: i6.MycurrencyPipe }, { type: i8.CustomDateFormat, decorators: [{
|
|
135
|
+
type: Inject,
|
|
136
|
+
args: [MAT_DATE_FORMATS]
|
|
137
|
+
}] }, { type: i7.DomSanitizer }], propDecorators: { hideOption: [{
|
|
138
|
+
type: Input
|
|
139
|
+
}], type: [{
|
|
140
|
+
type: Input
|
|
141
|
+
}], loading: [{
|
|
142
|
+
type: Input
|
|
143
|
+
}], field: [{
|
|
144
|
+
type: Input
|
|
145
|
+
}], labelTextReadMode: [{
|
|
146
|
+
type: Input
|
|
147
|
+
}], labelTextWriteMode: [{
|
|
148
|
+
type: Input
|
|
149
|
+
}], isReadOnly: [{
|
|
150
|
+
type: Input
|
|
151
|
+
}], name: [{
|
|
152
|
+
type: Input
|
|
153
|
+
}], required: [{
|
|
154
|
+
type: Input
|
|
155
|
+
}], mask: [{
|
|
156
|
+
type: Input
|
|
157
|
+
}], allowedExtensions: [{
|
|
158
|
+
type: Input
|
|
159
|
+
}], link: [{
|
|
160
|
+
type: Input
|
|
161
|
+
}], multiple: [{
|
|
162
|
+
type: Input
|
|
163
|
+
}], insideTable: [{
|
|
164
|
+
type: Input
|
|
165
|
+
}], showIfEmpty: [{
|
|
166
|
+
type: Input
|
|
167
|
+
}], showErrorMessage: [{
|
|
168
|
+
type: Input
|
|
169
|
+
}], showHint: [{
|
|
170
|
+
type: Input
|
|
171
|
+
}], hint: [{
|
|
172
|
+
type: Input
|
|
173
|
+
}], errorMessage: [{
|
|
174
|
+
type: Input
|
|
175
|
+
}], placeholder: [{
|
|
176
|
+
type: Input
|
|
177
|
+
}], maxLength: [{
|
|
178
|
+
type: Input
|
|
179
|
+
}], minLength: [{
|
|
180
|
+
type: Input
|
|
181
|
+
}], maxValue: [{
|
|
182
|
+
type: Input
|
|
183
|
+
}], minValue: [{
|
|
184
|
+
type: Input
|
|
185
|
+
}], disabled: [{
|
|
186
|
+
type: Input
|
|
187
|
+
}], lov: [{
|
|
188
|
+
type: Input
|
|
189
|
+
}], hasLabel: [{
|
|
190
|
+
type: Input
|
|
191
|
+
}], section: [{
|
|
192
|
+
type: Input
|
|
193
|
+
}], controller: [{
|
|
194
|
+
type: Input
|
|
195
|
+
}], emitedValue: [{
|
|
196
|
+
type: Output
|
|
197
|
+
}] } });
|
|
198
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jb21wb25lbnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYnBtLWNvcmUvc3JjL2xpYi9jb21wb25lbnRzL3NoYXJlZC1jb21wb25lbnRzL2Zvcm0tZmllbGQvYmFzZS1jb21wb25lbnQvYmFzZS1jb21wb25lbnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQTJCLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BGLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osVUFBVSxFQUVWLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLE1BQU0sRUFDTixpQkFBaUIsR0FFbEIsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7OztBQVV4QixNQUFNLG1DQUFtQyxHQUFHO0lBQzFDLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUM7SUFDNUMsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBU0YsTUFBTSxPQUFPLGFBQWE7SUFrRWY7SUFDQTtJQUNBO0lBQ0M7SUFDRDtJQUNBO0lBQ0E7SUFDeUI7SUFDekI7SUFDMEI7SUFDMUI7SUEzRUEsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUM1QixtREFBbUQ7SUFDMUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztJQUN2QixtREFBbUQ7SUFDMUMsT0FBTyxDQUFXO0lBQzNCLGlDQUFpQztJQUN4QixLQUFLLENBQU07SUFDbkIsa0NBQWtDO0lBQzFCLGlCQUFpQixDQUFTO0lB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QUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLEdBQUc7c0JBQVgsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlQWRhcHRlciwgTUFUX0RBVEVfRk9STUFUUyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYsIE1BVF9ESUFMT0dfREFUQSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgZm9yd2FyZFJlZixcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBJbmplY3QsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQ29udHJvbENvbnRhaW5lcixcclxuICBOZ0Zvcm0sXHJcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgRm9ybUJ1aWxkZXIsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBTZWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7XHJcbiAgQ29yZUkxOG5TZXJ2aWNlXHJcbn0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBNeWN1cnJlbmN5UGlwZSB9IGZyb20gJy4uLy4uLy4uLy4uL3BpcGVzJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IEN1c3RvbURhdGVGb3JtYXQgfSBmcm9tICcuLi9kYXRlLXBpY2tlci9kYXRlLWZvcm1hdCc7XHJcblxyXG5jb25zdCBDVVNUT01fSU5QVVRfQ09OVFJPTF9WQUxVRV9BQ0NFU1NPUiA9IHtcclxuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBCYXNlQ29tcG9uZW50KSxcclxuICBtdWx0aTogdHJ1ZSxcclxufTtcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtYmFzZS1jb21wb25lbnQnLFxyXG4gIHRlbXBsYXRlOiAnJyxcclxuICBzdHlsZVVybHM6IFsnLi9iYXNlLWNvbXBvbmVudC5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW0NVU1RPTV9JTlBVVF9DT05UUk9MX1ZBTFVFX0FDQ0VTU09SXSxcclxuICB2aWV3UHJvdmlkZXJzOiBbe3Byb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBOZ0Zvcm19XSxcclxuICBzdGFuZGFsb25lOiB0cnVlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYXNlQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSBoaWRlT3B0aW9uID0gZmFsc2U7XHJcbiAgLy8gaGlkZU9wdGlvbjogSW5wdXRTaWduYWw8Ym9vbGVhbj4gPSBpbnB1dChmYWxzZSk7XHJcbiAgQElucHV0KCkgdHlwZSA9ICd0ZXh0JztcclxuICAvLyBoaWRlT3B0aW9uOiBJbnB1dFNpZ25hbDxzdHJpbmc+ID0gaW5wdXQoJ3RleHQnKTtcclxuICBASW5wdXQoKSBsb2FkaW5nITogYm9vbGVhbjtcclxuICAvLyBsb2FkaW5nOiBJbnB1dFNpZ25hbDxib29sZWFuPjtcclxuICBASW5wdXQoKSBmaWVsZDogYW55O1xyXG4gICAvLyBsb2FmaWVsZGRpbmc6IElucHV0U2lnbmFsPGFueT47XHJcbiAgQElucHV0KCkgbGFiZWxUZXh0UmVhZE1vZGU6IHN0cmluZztcclxuICAvLyBsYWJlbFRleHRSZWFkTW9kZTogSW5wdXRTaWduYWw8c3RyaW5nPlxyXG4gIEBJbnB1dCgpIGxhYmVsVGV4dFdyaXRlTW9kZTogc3RyaW5nO1xyXG4gIC8vIGxhYmVsVGV4dFdyaXRlTW9kZTogSW5wdXRTaWduYWw8c3RyaW5nPlxyXG4gIEBJbnB1dCgpIGlzUmVhZE9ubHk6IGJvb2xlYW47XHJcbiAgLy8gaXNSZWFkT25seTogSW5wdXRTaWduYWw8Ym9vbGVhbj47XHJcbiAgQElucHV0KCkgbmFtZTogc3RyaW5nO1xyXG4gIC8vIG5hbWU6IElucHV0U2lnbmFsPHN0cmluZz5cclxuICBASW5wdXQoKSByZXF1aXJlZCA9IHRydWU7XHJcbiAgLy8gcmVxdWlyZWQ6IElucHV0U2lnbmFsPGJvb2xlYW4+ID0gaW5wdXQodHJ1ZSk7XHJcbiAgQElucHV0KCkgbWFzazogc3RyaW5nO1xyXG4gIC8vIG1hc2s6IElucHV0U2lnbmFsPHN0cmluZz5cclxuICBASW5wdXQoKSBhbGxvd2VkRXh0ZW5zaW9ucyA9ICcnO1xyXG4gIC8vIGFsbG93ZWRFeHRlbnNpb25zOiBJbnB1dFNpZ25hbDxzdHJpbmc+ID0gaW5wdXQoJycpO1xyXG4gIEBJbnB1dCgpIGxpbms6IGJvb2xlYW47XHJcbiAgLy8gbGluazogSW5wdXRTaWduYWw8Ym9vbGVhbj47XHJcbiAgQElucHV0KCkgbXVsdGlwbGU6IGJvb2xlYW47XHJcbiAgLy8gbXVsdGlwbGU6IElucHV0U2lnbmFsPGJvb2xlYW4+O1xyXG4gIEBJbnB1dCgpIGluc2lkZVRhYmxlOiBib29sZWFuO1xyXG4gIC8vIGluc2lkZVRhYmxlOiBJbnB1dFNpZ25hbDxib29sZWFuPjtcclxuICBASW5wdXQoKSBzaG93SWZFbXB0eSA9IGZhbHNlO1xyXG4gIC8vIHNob3dJZkVtcHR5OiBJbnB1dFNpZ25hbDxib29sZWFuPiA9IGlucHV0KGZhbHNlKTtcclxuICBASW5wdXQoKSBzaG93RXJyb3JNZXNzYWdlOiBib29sZWFuO1xyXG4gIC8vIHNob3dFcnJvck1lc3NhZ2U6IElucHV0U2lnbmFsPGJvb2xlYW4+O1xyXG4gIEBJbnB1dCgpIHNob3dIaW50ID0gZmFsc2U7XHJcbiAgLy8gc2hvd0hpbnQ6IElucHV0U2lnbmFsPGJvb2xlYW4+ID0gaW5wdXQoZmFsc2UpO1xyXG4gIEBJbnB1dCgpIGhpbnQgPSAnJztcclxuICAvLyBoaW50OiBJbnB1dFNpZ25hbDxzdHJpbmc+ID0gaW5wdXQoJycpO1xyXG4gIEBJbnB1dCgpIGVycm9yTWVzc2FnZTogc3RyaW5nO1xyXG4gIC8vIGVycm9yTWVzc2FnZTogSW5wdXRTaWduYWw8c3RyaW5nPlxyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmdcclxuICAvLyBwbGFjZWhvbGRlcjogSW5wdXRTaWduYWw8c3RyaW5nPlxyXG4gIEBJbnB1dCgpIG1heExlbmd0aDogbnVtYmVyO1xyXG4gIC8vIG1heExlbmd0aDogSW5wdXRTaWduYWw8bnVtYmVyPlxyXG4gIEBJbnB1dCgpIG1pbkxlbmd0aDogbnVtYmVyO1xyXG4gIC8vIG1pbkxlbmd0aDogSW5wdXRTaWduYWw8bnVtYmVyPlxyXG4gIEBJbnB1dCgpIG1heFZhbHVlOiBzdHJpbmc7XHJcbiAgLy8gbWF4VmFsdWU6IElucHV0U2lnbmFsPHN0cmluZz5cclxuICBASW5wdXQoKSBtaW5WYWx1ZTogc3RyaW5nO1xyXG4gIC8vIG1pblZhbHVlOiBJbnB1dFNpZ25hbDxzdHJpbmc+XHJcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcclxuICAvLyBkaXNhYmxlZDogSW5wdXRTaWduYWw8Ym9vbGVhbj4gPSBpbnB1dChmYWxzZSk7XHJcbiAgQElucHV0KCkgbG92OiBhbnk7XHJcbiAgLy8gbG92OiBJbnB1dFNpZ25hbDxhbnk+XHJcbiAgQElucHV0KCkgaGFzTGFiZWwgPSB0cnVlO1xyXG4gIC8vIGhhc0xhYmVsOiBJbnB1dFNpZ25hbDxib29sZWFuPiA9IGlucHV0KHRydWUpO1xyXG4gIEBJbnB1dCgpIHNlY3Rpb246IFNlY3Rpb247XHJcbiAgLy8gc2VjdGlvbjogSW5wdXRTaWduYWw8U2VjdGlvbj5cclxuICBASW5wdXQoKSBjb250cm9sbGVyOiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG4gIHZhbHVlOiBhbnk7XHJcbiAgQE91dHB1dCgpIGVtaXRlZFZhbHVlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBmaWxlc2l6ZTogc3RyaW5nO1xyXG4gIC8vIHB1YmxpYyBvcHRpb25zOiBhbnk7XHJcbiAgcHVibGljIHJhbmRvbUlEOiBudW1iZXIgPVxyXG4gIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqICg5OTk5OTkgLSAxMDAwMDApKSArIDEwMDAwMDtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBpMThuOiBDb3JlSTE4blNlcnZpY2UsXHJcbiAgICBwdWJsaWMgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHB1YmxpYyBmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGRhdGVBZGFwdGVyOiBEYXRlQWRhcHRlcjxEYXRlPixcclxuICAgIHB1YmxpYyBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8YW55PixcclxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGlhbG9nRGF0YTogYW55LFxyXG4gICAgcHVibGljIG15Y3VycmVuY3lQaXBlOiBNeWN1cnJlbmN5UGlwZSxcclxuICAgIEBJbmplY3QoTUFUX0RBVEVfRk9STUFUUykgcHVibGljIGRhdGVGb3JtYXQ6IEN1c3RvbURhdGVGb3JtYXQsXHJcbiAgICBwdWJsaWMgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXJcclxuICApIHtcclxuICAgIHRoaXMuZGF0ZUFkYXB0ZXIuc2V0TG9jYWxlKHRoaXMuaTE4bi5sYW5ndWFnZSk7XHJcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5maWVsZDtcclxuICAgIHRoaXMuZW1pdGVkVmFsdWUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBpZiAodGhpcy5zaG91bGRTZXREYXRlRm9ybWF0ZUluQXIpIHtcclxuICAgICAgZGF0ZUZvcm1hdC5kaXNwbGF5ID0ge2RhdGVJbnB1dDogJ1lZWVkvTU0vREQnfTtcclxuICAgICAgZGF0ZUZvcm1hdC5wYXJzZSA9IHtkYXRlSW5wdXQ6ICdZWVlZL01NL0REJ307XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgc2hvdWxkU2V0RGF0ZUZvcm1hdGVJbkFyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaTE4bi5sYW5ndWFnZSA9PSAnYXInO1xyXG4gIH1cclxuXHJcbiAgcmVzZXREYXRhKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzUmVhZE9ubHkpIHtcclxuICAgICAgdGhpcy5maWVsZCA9ICcnO1xyXG4gICAgICB0aGlzLmNvbnRyb2xsZXIuc2V0VmFsdWUodGhpcy5maWVsZClcclxuICAgICAgdGhpcy5jb250cm9sbGVyLm1hcmtBc1VudG91Y2hlZCgpXHJcbiAgICAgIHRoaXMuZW1pdGVkVmFsdWUuZW1pdCh0aGlzLmZpZWxkKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { Component, CUSTOM_ELEMENTS_SCHEMA, DestroyRef, EventEmitter, forwardRef, inject, Input, Output } from '@angular/core';
|
|
2
|
+
import { MatCheckbox } from "@angular/material/checkbox";
|
|
3
|
+
import { FormsModule, NG_VALUE_ACCESSOR } from "@angular/forms";
|
|
4
|
+
import { ControlValueAccessorDirective } from '../control-value-accessor.directive';
|
|
5
|
+
import { TermsConditionsComponent } from '../../terms-conditions/terms-conditions.component';
|
|
6
|
+
import { MatDialog } from '@angular/material/dialog';
|
|
7
|
+
import { Shareds } from '../shared-imports';
|
|
8
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "@angular/forms";
|
|
11
|
+
import * as i2 from "../form-label/form-label.component";
|
|
12
|
+
import * as i3 from "../validation-errors/validation-errors.component";
|
|
13
|
+
import * as i4 from "@angular/common";
|
|
14
|
+
import * as i5 from "../../../../pipes/translate.pipe";
|
|
15
|
+
export class CheckBoxComponent extends ControlValueAccessorDirective {
|
|
16
|
+
containTerms;
|
|
17
|
+
termsLabel;
|
|
18
|
+
linkText;
|
|
19
|
+
hrefLink;
|
|
20
|
+
link;
|
|
21
|
+
termsBody;
|
|
22
|
+
downloadCheckBox = new EventEmitter();
|
|
23
|
+
destroyRef = inject(DestroyRef);
|
|
24
|
+
dialog = inject(MatDialog);
|
|
25
|
+
ngOnInit() {
|
|
26
|
+
super.ngOnInit();
|
|
27
|
+
if (this.control.value == 'true') {
|
|
28
|
+
this.control.setValue(true);
|
|
29
|
+
}
|
|
30
|
+
this.actionStateService.resetAction$
|
|
31
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
32
|
+
.subscribe(res => {
|
|
33
|
+
if (!this.isReadOnly && this.control.enabled) {
|
|
34
|
+
this.control.reset();
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
openUrl() {
|
|
39
|
+
window.open(this.hrefLink);
|
|
40
|
+
}
|
|
41
|
+
valueChange(event) {
|
|
42
|
+
const checked = event.checked;
|
|
43
|
+
this.control.setValue(checked);
|
|
44
|
+
}
|
|
45
|
+
openTermsPopup() {
|
|
46
|
+
const dialogRef = this.dialog.open(TermsConditionsComponent, {
|
|
47
|
+
data: this.termsBody,
|
|
48
|
+
width: '700px',
|
|
49
|
+
panelClass: ['main-popup'],
|
|
50
|
+
});
|
|
51
|
+
dialogRef.afterClosed().subscribe(() => {
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CheckBoxComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
55
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.8", type: CheckBoxComponent, isStandalone: true, selector: "app-checkbox", inputs: { containTerms: "containTerms", termsLabel: "termsLabel", linkText: "linkText", hrefLink: "hrefLink", link: "link", termsBody: "termsBody" }, outputs: { downloadCheckBox: "downloadCheckBox" }, providers: [
|
|
56
|
+
{
|
|
57
|
+
provide: NG_VALUE_ACCESSOR,
|
|
58
|
+
useExisting: forwardRef(() => CheckBoxComponent),
|
|
59
|
+
multi: true,
|
|
60
|
+
},
|
|
61
|
+
], usesInheritance: true, ngImport: i0, template: "<mat-checkbox\r\n [ngClass]=\"{'mx-3': isReadOnly}\"\r\n class=\"my-3\"\r\n [style.pointerEvents]=\"isReadOnly ? 'none' : 'auto'\"\r\n id=\"{{ name }}{{ randomID }}\"\r\n [name]=\"name\"\r\n (change)=\"valueChange($event)\"\r\n [checked]=\"control.value ? control.value : false\"\r\n [formControl]=\"control\">\r\n\r\n <div class=\"d-flex pt-1\">\r\n @if(label){\r\n <app-form-label class=\"mb-0\" [label]=\"label\" [optional]=\"required || mandatory ? false : true\" [tooltip]=\"tooltip\"></app-form-label>\r\n }\r\n @if(containTerms) {\r\n <span\r\n class=\"fs-12 fw-bold fc-coral cursor-pointer mx-1\"\r\n (click)=\"openTermsPopup(); false\">\r\n {{ termsLabel ? termsLabel : 'termsAndConditions' | translate }}\r\n </span>\r\n }\r\n </div>\r\n\r\n @if(link) {\r\n <ng-container>\r\n <span> | </span>\r\n <a\r\n class=\"fs-12 fw-bold fc-coral cursor-pointer mx-1 d-inline-flex align-items-center gap-1\"\r\n href=\"{{ hrefLink }}\"\r\n target=\"_blank\">\r\n <ds-icon icon=\"external-link\"></ds-icon>\r\n <span class=\"underline\">{{ linkText }}</span>\r\n </a>\r\n </ng-container>\r\n }\r\n</mat-checkbox>\r\n<app-validation-errors [errors]=\"control.errors\"></app-validation-errors>\r\n", styles: [".checkbox{margin-top:10px!important;position:relative;margin-bottom:0!important}.checkbox label{padding-left:30px;font-size:14px;color:#414142}.checkbox input[type=checkbox]{opacity:0}.checkbox input[type=checkbox]+label.checkboxInput{position:absolute;width:25px;height:25px;top:0;left:0;padding-left:0}@media (max-width: 768px){.checkbox input[type=checkbox]+label.checkboxInput{top:8px!important}}.checkbox input[type=checkbox]+label.checkboxInput:before{content:\"\\f096\";font-family:FontAwesome;font-size:25px;display:block;margin-top:-7px;color:#ddd}.checkbox input[type=checkbox]:checked+label.checkboxInput:before{content:\"\\f14a\";color:#da3f7b;background-color:#fff}.mat-mdc-checkbox.mat-accent .mdc-form-field>label{margin:0}.rtlCheckbox.checkbox input[type=checkbox]+label.checkboxInput{left:inherit;right:0;padding-left:0;padding-right:0}.rtlCheckbox.checkbox label{padding-left:0;padding-right:30px}.mat-mdc-checkbox label{cursor:pointer}\n"], dependencies: [{ kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i2.FormLabelComponent, selector: "app-form-label", inputs: ["tooltip", "label", "optional"] }, { kind: "component", type: i3.ValidationErrorsComponent, selector: "app-validation-errors", inputs: ["errors", "customErrorMessages"] }, { kind: "ngmodule", type: i1.ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }] });
|
|
62
|
+
}
|
|
63
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CheckBoxComponent, decorators: [{
|
|
64
|
+
type: Component,
|
|
65
|
+
args: [{ selector: 'app-checkbox', schemas: [CUSTOM_ELEMENTS_SCHEMA], imports: [
|
|
66
|
+
MatCheckbox,
|
|
67
|
+
FormsModule,
|
|
68
|
+
...Shareds
|
|
69
|
+
], standalone: true, providers: [
|
|
70
|
+
{
|
|
71
|
+
provide: NG_VALUE_ACCESSOR,
|
|
72
|
+
useExisting: forwardRef(() => CheckBoxComponent),
|
|
73
|
+
multi: true,
|
|
74
|
+
},
|
|
75
|
+
], template: "<mat-checkbox\r\n [ngClass]=\"{'mx-3': isReadOnly}\"\r\n class=\"my-3\"\r\n [style.pointerEvents]=\"isReadOnly ? 'none' : 'auto'\"\r\n id=\"{{ name }}{{ randomID }}\"\r\n [name]=\"name\"\r\n (change)=\"valueChange($event)\"\r\n [checked]=\"control.value ? control.value : false\"\r\n [formControl]=\"control\">\r\n\r\n <div class=\"d-flex pt-1\">\r\n @if(label){\r\n <app-form-label class=\"mb-0\" [label]=\"label\" [optional]=\"required || mandatory ? false : true\" [tooltip]=\"tooltip\"></app-form-label>\r\n }\r\n @if(containTerms) {\r\n <span\r\n class=\"fs-12 fw-bold fc-coral cursor-pointer mx-1\"\r\n (click)=\"openTermsPopup(); false\">\r\n {{ termsLabel ? termsLabel : 'termsAndConditions' | translate }}\r\n </span>\r\n }\r\n </div>\r\n\r\n @if(link) {\r\n <ng-container>\r\n <span> | </span>\r\n <a\r\n class=\"fs-12 fw-bold fc-coral cursor-pointer mx-1 d-inline-flex align-items-center gap-1\"\r\n href=\"{{ hrefLink }}\"\r\n target=\"_blank\">\r\n <ds-icon icon=\"external-link\"></ds-icon>\r\n <span class=\"underline\">{{ linkText }}</span>\r\n </a>\r\n </ng-container>\r\n }\r\n</mat-checkbox>\r\n<app-validation-errors [errors]=\"control.errors\"></app-validation-errors>\r\n", styles: [".checkbox{margin-top:10px!important;position:relative;margin-bottom:0!important}.checkbox label{padding-left:30px;font-size:14px;color:#414142}.checkbox input[type=checkbox]{opacity:0}.checkbox input[type=checkbox]+label.checkboxInput{position:absolute;width:25px;height:25px;top:0;left:0;padding-left:0}@media (max-width: 768px){.checkbox input[type=checkbox]+label.checkboxInput{top:8px!important}}.checkbox input[type=checkbox]+label.checkboxInput:before{content:\"\\f096\";font-family:FontAwesome;font-size:25px;display:block;margin-top:-7px;color:#ddd}.checkbox input[type=checkbox]:checked+label.checkboxInput:before{content:\"\\f14a\";color:#da3f7b;background-color:#fff}.mat-mdc-checkbox.mat-accent .mdc-form-field>label{margin:0}.rtlCheckbox.checkbox input[type=checkbox]+label.checkboxInput{left:inherit;right:0;padding-left:0;padding-right:0}.rtlCheckbox.checkbox label{padding-left:0;padding-right:30px}.mat-mdc-checkbox label{cursor:pointer}\n"] }]
|
|
76
|
+
}], propDecorators: { containTerms: [{
|
|
77
|
+
type: Input
|
|
78
|
+
}], termsLabel: [{
|
|
79
|
+
type: Input
|
|
80
|
+
}], linkText: [{
|
|
81
|
+
type: Input
|
|
82
|
+
}], hrefLink: [{
|
|
83
|
+
type: Input
|
|
84
|
+
}], link: [{
|
|
85
|
+
type: Input
|
|
86
|
+
}], termsBody: [{
|
|
87
|
+
type: Input
|
|
88
|
+
}], downloadCheckBox: [{
|
|
89
|
+
type: Output
|
|
90
|
+
}] } });
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYnBtLWNvcmUvc3JjL2xpYi9jb21wb25lbnRzL3NoYXJlZC1jb21wb25lbnRzL2Zvcm0tZmllbGQvY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYnBtLWNvcmUvc3JjL2xpYi9jb21wb25lbnRzL3NoYXJlZC1jb21wb25lbnRzL2Zvcm0tZmllbGQvY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2SSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFdBQVcsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzlELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDNUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7QUFzQmhFLE1BQU0sT0FBTyxpQkFBd0IsU0FBUSw2QkFBbUM7SUFDckUsWUFBWSxDQUFVO0lBQ3RCLFVBQVUsQ0FBUztJQUNuQixRQUFRLENBQVM7SUFDakIsUUFBUSxDQUFTO0lBQ2pCLElBQUksQ0FBUztJQUNiLFNBQVMsQ0FBTTtJQUNkLGdCQUFnQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDaEQsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNoQyxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xCLFFBQVE7UUFDZixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUE7UUFDaEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxNQUFNLEVBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM3QixDQUFDO1FBR0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVk7YUFDbkMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUN6QyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUM3QyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3ZCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUVMLENBQUM7SUFFRCxPQUFPO1FBQ0wsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDNUIsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFVO1FBQ3BCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDaEMsQ0FBQztJQUVELGNBQWM7UUFDWixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtZQUMzRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDcEIsS0FBSyxFQUFFLE9BQU87WUFDZCxVQUFVLEVBQUUsQ0FBQyxZQUFZLENBQUM7U0FDM0IsQ0FBQyxDQUFDO1FBRUgsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO3VHQTdDVSxpQkFBaUI7MkZBQWpCLGlCQUFpQixvUUFUakI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDO2dCQUNoRCxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0YsaURDMUJILCt4Q0FxQ0Escy9CRHRCSSxXQUFXLHVWQUNYLFdBQVc7OzJGQWFGLGlCQUFpQjtrQkFwQjdCLFNBQVM7K0JBQ0UsY0FBYyxXQUdmLENBQUMsc0JBQXNCLENBQUMsV0FDeEI7d0JBQ1AsV0FBVzt3QkFDWCxXQUFXO3dCQUNYLEdBQUcsT0FBTztxQkFDWCxjQUNXLElBQUksYUFDTDt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQzs0QkFDaEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7OEJBSVEsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDSSxnQkFBZ0I7c0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIERlc3Ryb3lSZWYsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtNYXRDaGVja2JveH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94XCI7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3JEaXJlY3RpdmUgfSBmcm9tICcuLi9jb250cm9sLXZhbHVlLWFjY2Vzc29yLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFRlcm1zQ29uZGl0aW9uc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL3Rlcm1zLWNvbmRpdGlvbnMvdGVybXMtY29uZGl0aW9ucy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBTaGFyZWRzIH0gZnJvbSAnLi4vc2hhcmVkLWltcG9ydHMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1jaGVja2JveCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NoZWNrYm94LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jaGVja2JveC5jb21wb25lbnQuc2NzcyddLFxyXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBNYXRDaGVja2JveCxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgLi4uU2hhcmVkc1xyXG4gIF0sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENoZWNrQm94Q29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gIF1cclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaGVja0JveENvbXBvbmVudDxUeXBlPiBleHRlbmRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yRGlyZWN0aXZlPFR5cGU+IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBjb250YWluVGVybXM6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgdGVybXNMYWJlbDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGxpbmtUZXh0OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaHJlZkxpbms6IHN0cmluZztcclxuICBASW5wdXQoKSBsaW5rOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdGVybXNCb2R5OiBhbnk7XHJcbiAgQE91dHB1dCgpIGRvd25sb2FkQ2hlY2tCb3ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcclxuICBkaWFsb2cgPSBpbmplY3QoTWF0RGlhbG9nKTtcclxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KClcclxuICAgIGlmICh0aGlzLmNvbnRyb2wudmFsdWUgPT0gJ3RydWUnKXtcclxuICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKHRydWUpXHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMuYWN0aW9uU3RhdGVTZXJ2aWNlLnJlc2V0QWN0aW9uJFxyXG4gICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXHJcbiAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5pc1JlYWRPbmx5ICYmIHRoaXMuY29udHJvbC5lbmFibGVkKSB7XHJcbiAgICAgICAgdGhpcy5jb250cm9sLnJlc2V0KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgXHJcbiAgfVxyXG5cclxuICBvcGVuVXJsKCl7XHJcbiAgICB3aW5kb3cub3Blbih0aGlzLmhyZWZMaW5rKVxyXG4gIH1cclxuXHJcbiAgdmFsdWVDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgY2hlY2tlZCA9IGV2ZW50LmNoZWNrZWQ7XHJcbiAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUoY2hlY2tlZClcclxuICB9XHJcblxyXG4gIG9wZW5UZXJtc1BvcHVwKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihUZXJtc0NvbmRpdGlvbnNDb21wb25lbnQsIHtcclxuICAgICAgZGF0YTogdGhpcy50ZXJtc0JvZHksXHJcbiAgICAgIHdpZHRoOiAnNzAwcHgnLFxyXG4gICAgICBwYW5lbENsYXNzOiBbJ21haW4tcG9wdXAnXSxcclxuICAgIH0pO1xyXG5cclxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPG1hdC1jaGVja2JveFxyXG4gIFtuZ0NsYXNzXT1cInsnbXgtMyc6IGlzUmVhZE9ubHl9XCJcclxuICBjbGFzcz1cIm15LTNcIlxyXG4gIFtzdHlsZS5wb2ludGVyRXZlbnRzXT1cImlzUmVhZE9ubHkgPyAnbm9uZScgOiAnYXV0bydcIlxyXG4gIGlkPVwie3sgbmFtZSB9fXt7IHJhbmRvbUlEIH19XCJcclxuICBbbmFtZV09XCJuYW1lXCJcclxuICAoY2hhbmdlKT1cInZhbHVlQ2hhbmdlKCRldmVudClcIlxyXG4gIFtjaGVja2VkXT1cImNvbnRyb2wudmFsdWUgPyBjb250cm9sLnZhbHVlIDogZmFsc2VcIlxyXG4gIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCI+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggcHQtMVwiPlxyXG4gICAgQGlmKGxhYmVsKXtcclxuICAgICAgPGFwcC1mb3JtLWxhYmVsIGNsYXNzPVwibWItMFwiIFtsYWJlbF09XCJsYWJlbFwiIFtvcHRpb25hbF09XCJyZXF1aXJlZCB8fCBtYW5kYXRvcnkgPyBmYWxzZSA6IHRydWVcIiBbdG9vbHRpcF09XCJ0b29sdGlwXCI+PC9hcHAtZm9ybS1sYWJlbD5cclxuICAgIH1cclxuICAgIEBpZihjb250YWluVGVybXMpIHtcclxuICAgICAgPHNwYW5cclxuICAgICAgICBjbGFzcz1cImZzLTEyIGZ3LWJvbGQgZmMtY29yYWwgY3Vyc29yLXBvaW50ZXIgbXgtMVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5UZXJtc1BvcHVwKCk7IGZhbHNlXCI+XHJcbiAgICAgICAge3sgdGVybXNMYWJlbCA/IHRlcm1zTGFiZWwgOiAndGVybXNBbmRDb25kaXRpb25zJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcblxyXG4gIEBpZihsaW5rKSB7XHJcbiAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICA8c3Bhbj4gfCA8L3NwYW4+XHJcbiAgICAgIDxhXHJcbiAgICAgICAgY2xhc3M9XCJmcy0xMiBmdy1ib2xkIGZjLWNvcmFsIGN1cnNvci1wb2ludGVyIG14LTEgZC1pbmxpbmUtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTFcIlxyXG4gICAgICAgIGhyZWY9XCJ7eyBocmVmTGluayB9fVwiXHJcbiAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCI+XHJcbiAgICAgICAgPGRzLWljb24gaWNvbj1cImV4dGVybmFsLWxpbmtcIj48L2RzLWljb24+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bmRlcmxpbmVcIj57eyBsaW5rVGV4dCB9fTwvc3Bhbj5cclxuICAgICAgPC9hPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgfVxyXG48L21hdC1jaGVja2JveD5cclxuPGFwcC12YWxpZGF0aW9uLWVycm9ycyBbZXJyb3JzXT1cImNvbnRyb2wuZXJyb3JzXCI+PC9hcHAtdmFsaWRhdGlvbi1lcnJvcnM+XHJcbiJdfQ==
|
package/esm2022/lib/components/shared-components/form-field/control-value-accessor.directive.mjs
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { Directive, Input } from '@angular/core';
|
|
2
|
+
import { FormControl, FormControlName, FormGroupDirective, NgControl, Validators, } from '@angular/forms';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../../../services";
|
|
5
|
+
import * as i2 from "ngx-toastr";
|
|
6
|
+
import * as i3 from "@angular/platform-browser";
|
|
7
|
+
import * as i4 from "@angular/forms";
|
|
8
|
+
export class ControlValueAccessorDirective {
|
|
9
|
+
injector;
|
|
10
|
+
i18n;
|
|
11
|
+
toasterService;
|
|
12
|
+
coreService;
|
|
13
|
+
sanitizer;
|
|
14
|
+
fb;
|
|
15
|
+
actionStateService;
|
|
16
|
+
tooltip;
|
|
17
|
+
isReadOnly;
|
|
18
|
+
hint = '';
|
|
19
|
+
loading;
|
|
20
|
+
placeholder;
|
|
21
|
+
type;
|
|
22
|
+
showErrorMessage;
|
|
23
|
+
showHint;
|
|
24
|
+
showIfEmpty;
|
|
25
|
+
insideTable;
|
|
26
|
+
mask;
|
|
27
|
+
label;
|
|
28
|
+
matSuffix;
|
|
29
|
+
hasTooltip = false;
|
|
30
|
+
name;
|
|
31
|
+
randomID;
|
|
32
|
+
multiple = false;
|
|
33
|
+
searchControl = new FormControl();
|
|
34
|
+
toggleButtonControl = new FormControl();
|
|
35
|
+
employeeSearchControl = new FormControl();
|
|
36
|
+
telephoneControl = new FormControl();
|
|
37
|
+
attachments = [];
|
|
38
|
+
startDateControl = new FormControl();
|
|
39
|
+
endDateControl = new FormControl();
|
|
40
|
+
Validators = Validators;
|
|
41
|
+
minDateValue;
|
|
42
|
+
maxDateValue;
|
|
43
|
+
maxDate;
|
|
44
|
+
// @ViewChild('default')
|
|
45
|
+
datepickerObj;
|
|
46
|
+
minDate;
|
|
47
|
+
customMaxDate;
|
|
48
|
+
customMinDate;
|
|
49
|
+
value;
|
|
50
|
+
control;
|
|
51
|
+
required; //hide optional label and add required validator from angular side
|
|
52
|
+
mandatory; //only hide optional label
|
|
53
|
+
maxLength;
|
|
54
|
+
isDisabled = false;
|
|
55
|
+
constructor(injector, i18n, toasterService, coreService, sanitizer, fb, actionStateService) {
|
|
56
|
+
this.injector = injector;
|
|
57
|
+
this.i18n = i18n;
|
|
58
|
+
this.toasterService = toasterService;
|
|
59
|
+
this.coreService = coreService;
|
|
60
|
+
this.sanitizer = sanitizer;
|
|
61
|
+
this.fb = fb;
|
|
62
|
+
this.actionStateService = actionStateService;
|
|
63
|
+
}
|
|
64
|
+
ngOnInit() {
|
|
65
|
+
this.setFormControl();
|
|
66
|
+
}
|
|
67
|
+
setFormControl() {
|
|
68
|
+
try {
|
|
69
|
+
const formControl = this.injector.get(NgControl);
|
|
70
|
+
switch (formControl.constructor) {
|
|
71
|
+
case FormControlName:
|
|
72
|
+
this.control = this.injector
|
|
73
|
+
.get(FormGroupDirective)
|
|
74
|
+
.getControl(formControl);
|
|
75
|
+
break;
|
|
76
|
+
default:
|
|
77
|
+
this.control = formControl
|
|
78
|
+
.form;
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
this.control = new FormControl();
|
|
84
|
+
}
|
|
85
|
+
this.setFormValidators();
|
|
86
|
+
}
|
|
87
|
+
setFormValidators() {
|
|
88
|
+
// this.required = this.control?.hasValidator(Validators.required) ?? false;
|
|
89
|
+
if (this.required) {
|
|
90
|
+
this.searchControl.setValidators(Validators.required);
|
|
91
|
+
this.employeeSearchControl.setValidators(Validators.required);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
this.searchControl.clearValidators();
|
|
95
|
+
this.employeeSearchControl.clearValidators();
|
|
96
|
+
}
|
|
97
|
+
this.searchControl.updateValueAndValidity();
|
|
98
|
+
this.employeeSearchControl.updateValueAndValidity();
|
|
99
|
+
}
|
|
100
|
+
writeValue(value) {
|
|
101
|
+
this.value = value;
|
|
102
|
+
if (!this.value) {
|
|
103
|
+
this.startDateControl.reset();
|
|
104
|
+
this.endDateControl.reset();
|
|
105
|
+
this.telephoneControl.reset();
|
|
106
|
+
this.toggleButtonControl.reset();
|
|
107
|
+
this.attachments = [];
|
|
108
|
+
this.searchControl.reset();
|
|
109
|
+
this.employeeSearchControl.reset();
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
this.startDateControl.setValue(this.value?.startDate);
|
|
113
|
+
this.endDateControl.setValue(this.value?.endDate);
|
|
114
|
+
this.toggleButtonControl.setValue(value);
|
|
115
|
+
this.searchControl.setValue(value['value']);
|
|
116
|
+
this.telephoneControl.setValue(value);
|
|
117
|
+
if (this.value['value'] === '') {
|
|
118
|
+
this.control.reset();
|
|
119
|
+
}
|
|
120
|
+
this.employeeSearchControl.setValue(value['personName']);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
registerOnChange(fn) {
|
|
124
|
+
}
|
|
125
|
+
registerOnTouched(fn) {
|
|
126
|
+
}
|
|
127
|
+
setDisabledState(isDisabled) {
|
|
128
|
+
this.isDisabled = isDisabled;
|
|
129
|
+
}
|
|
130
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ControlValueAccessorDirective, deps: [{ token: i0.Injector }, { token: i1.CoreI18nService }, { token: i2.ToastrService }, { token: i1.CoreService }, { token: i3.DomSanitizer }, { token: i4.FormBuilder }, { token: i1.ActionStateService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
131
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.8", type: ControlValueAccessorDirective, selector: "[appControlValueAccessor]", inputs: { tooltip: "tooltip", isReadOnly: "isReadOnly", hint: "hint", loading: "loading", placeholder: "placeholder", type: "type", showErrorMessage: "showErrorMessage", showHint: "showHint", showIfEmpty: "showIfEmpty", insideTable: "insideTable", mask: "mask", label: "label", matSuffix: "matSuffix", hasTooltip: "hasTooltip", name: "name", randomID: "randomID", multiple: "multiple", maxDate: "maxDate", minDate: "minDate", customMaxDate: "customMaxDate", customMinDate: "customMinDate", required: "required", mandatory: "mandatory" }, ngImport: i0 });
|
|
132
|
+
}
|
|
133
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ControlValueAccessorDirective, decorators: [{
|
|
134
|
+
type: Directive,
|
|
135
|
+
args: [{
|
|
136
|
+
selector: '[appControlValueAccessor]',
|
|
137
|
+
}]
|
|
138
|
+
}], ctorParameters: () => [{ type: i0.Injector }, { type: i1.CoreI18nService }, { type: i2.ToastrService }, { type: i1.CoreService }, { type: i3.DomSanitizer }, { type: i4.FormBuilder }, { type: i1.ActionStateService }], propDecorators: { tooltip: [{
|
|
139
|
+
type: Input
|
|
140
|
+
}], isReadOnly: [{
|
|
141
|
+
type: Input
|
|
142
|
+
}], hint: [{
|
|
143
|
+
type: Input
|
|
144
|
+
}], loading: [{
|
|
145
|
+
type: Input
|
|
146
|
+
}], placeholder: [{
|
|
147
|
+
type: Input
|
|
148
|
+
}], type: [{
|
|
149
|
+
type: Input
|
|
150
|
+
}], showErrorMessage: [{
|
|
151
|
+
type: Input
|
|
152
|
+
}], showHint: [{
|
|
153
|
+
type: Input
|
|
154
|
+
}], showIfEmpty: [{
|
|
155
|
+
type: Input
|
|
156
|
+
}], insideTable: [{
|
|
157
|
+
type: Input
|
|
158
|
+
}], mask: [{
|
|
159
|
+
type: Input
|
|
160
|
+
}], label: [{
|
|
161
|
+
type: Input
|
|
162
|
+
}], matSuffix: [{
|
|
163
|
+
type: Input
|
|
164
|
+
}], hasTooltip: [{
|
|
165
|
+
type: Input
|
|
166
|
+
}], name: [{
|
|
167
|
+
type: Input
|
|
168
|
+
}], randomID: [{
|
|
169
|
+
type: Input
|
|
170
|
+
}], multiple: [{
|
|
171
|
+
type: Input
|
|
172
|
+
}], maxDate: [{
|
|
173
|
+
type: Input
|
|
174
|
+
}], minDate: [{
|
|
175
|
+
type: Input
|
|
176
|
+
}], customMaxDate: [{
|
|
177
|
+
type: Input
|
|
178
|
+
}], customMinDate: [{
|
|
179
|
+
type: Input
|
|
180
|
+
}], required: [{
|
|
181
|
+
type: Input
|
|
182
|
+
}], mandatory: [{
|
|
183
|
+
type: Input
|
|
184
|
+
}] } });
|
|
185
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbC12YWx1ZS1hY2Nlc3Nvci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9icG0tY29yZS9zcmMvbGliL2NvbXBvbmVudHMvc2hhcmVkLWNvbXBvbmVudHMvZm9ybS1maWVsZC9jb250cm9sLXZhbHVlLWFjY2Vzc29yLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFZLEtBQUssRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQW9DLFdBQVcsRUFBd0IsZUFBZSxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxVQUFVLEdBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7O0FBU2pLLE1BQU0sT0FBTyw2QkFBNkI7SUFtRHJCO0lBQTJCO0lBQzNCO0lBQ0E7SUFBaUM7SUFDakM7SUFDQTtJQXBEVixPQUFPLENBQUM7SUFDUixVQUFVLENBQVU7SUFDcEIsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNWLE9BQU8sQ0FBVztJQUNsQixXQUFXLENBQVM7SUFDcEIsSUFBSSxDQUFTO0lBQ2IsZ0JBQWdCLENBQVM7SUFDekIsUUFBUSxDQUFTO0lBQ2pCLFdBQVcsQ0FBUztJQUNwQixXQUFXLENBQU07SUFDakIsSUFBSSxDQUFNO0lBQ1YsS0FBSyxDQUFVO0lBQ2YsU0FBUyxDQUFVO0lBQ25CLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDbkIsSUFBSSxDQUFVO0lBQ2QsUUFBUSxDQUFVO0lBQ2xCLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFDbkMsYUFBYSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFDbEMsbUJBQW1CLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUN4QyxxQkFBcUIsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQzFDLGdCQUFnQixHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFDckMsV0FBVyxH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UUFBUSxFQUFFLDJCQUEyQjtpQkFDdEM7dVBBSVUsT0FBTztzQkFBZixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFpQkcsT0FBTztzQkFBZixLQUFLO2dCQUdHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBSUcsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtQ29udHJvbERpcmVjdGl2ZSwgRm9ybUNvbnRyb2xOYW1lLCBGb3JtR3JvdXBEaXJlY3RpdmUsIE5nQ29udHJvbCwgVmFsaWRhdG9ycyx9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtBY3Rpb25TdGF0ZVNlcnZpY2UsIENvcmVJMThuU2VydmljZSwgQ29yZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHtEb21TYW5pdGl6ZXJ9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XHJcbmltcG9ydCB7VG9hc3RyU2VydmljZX0gZnJvbSBcIm5neC10b2FzdHJcIjtcclxuaW1wb3J0IHsgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2FwcENvbnRyb2xWYWx1ZUFjY2Vzc29yXScsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb250cm9sVmFsdWVBY2Nlc3NvckRpcmVjdGl2ZTxUeXBlPlxyXG4gIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdFxyXG57XHJcbiAgQElucHV0KCkgdG9vbHRpcDtcclxuICBASW5wdXQoKSBpc1JlYWRPbmx5OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGhpbnQgPSAnJztcclxuICBASW5wdXQoKSBsb2FkaW5nITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHR5cGU6IHN0cmluZztcclxuICBASW5wdXQoKSBzaG93RXJyb3JNZXNzYWdlOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc2hvd0hpbnQ6IHN0cmluZztcclxuICBASW5wdXQoKSBzaG93SWZFbXB0eTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGluc2lkZVRhYmxlOiBhbnk7XHJcbiAgQElucHV0KCkgbWFzazogYW55O1xyXG4gIEBJbnB1dCgpIGxhYmVsITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG1hdFN1ZmZpeDogYm9vbGVhbjtcclxuICBASW5wdXQoKSBoYXNUb29sdGlwID0gZmFsc2U7XHJcbiAgQElucHV0KCkgbmFtZSE6IHN0cmluZztcclxuICBASW5wdXQoKSByYW5kb21JRCE6IHN0cmluZztcclxuICBASW5wdXQoKSBtdWx0aXBsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNlYXJjaENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcclxuICB0b2dnbGVCdXR0b25Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcbiAgZW1wbG95ZWVTZWFyY2hDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcbiAgdGVsZXBob25lQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG4gIGF0dGFjaG1lbnRzID0gW107XHJcblxyXG5cclxuICBzdGFydERhdGVDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcbiAgZW5kRGF0ZUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcclxuICBWYWxpZGF0b3JzID0gVmFsaWRhdG9ycztcclxuXHJcblxyXG5cclxuXHJcbiAgbWluRGF0ZVZhbHVlOiBhbnlcclxuICBtYXhEYXRlVmFsdWU6IGFueVxyXG4gIEBJbnB1dCgpIG1heERhdGU6IHN0cmluZztcclxuICAvLyBAVmlld0NoaWxkKCdkZWZhdWx0JylcclxuICBwdWJsaWMgZGF0ZXBpY2tlck9iaiE6IGFueTtcclxuICBASW5wdXQoKSBtaW5EYXRlOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY3VzdG9tTWF4RGF0ZTogYW55XHJcbiAgQElucHV0KCkgY3VzdG9tTWluRGF0ZTogYW55XHJcblxyXG4gIHZhbHVlOiBhbnk7XHJcbiAgY29udHJvbDogRm9ybUNvbnRyb2wgfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgcmVxdWlyZWQ6IGJvb2xlYW47IC8vaGlkZSBvcHRpb25hbCBsYWJlbCBhbmQgYWRkIHJlcXVpcmVkIHZhbGlkYXRvciBmcm9tIGFuZ3VsYXIgc2lkZVxyXG4gIEBJbnB1dCgpIG1hbmRhdG9yeTogYm9vbGVhbjsgLy9vbmx5IGhpZGUgb3B0aW9uYWwgbGFiZWxcclxuICBtYXhMZW5ndGg6IGFueTtcclxuXHJcbiAgaXNEaXNhYmxlZCA9IGZhbHNlO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IsIHB1YmxpYyBpMThuOiBDb3JlSTE4blNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHVibGljIHRvYXN0ZXJTZXJ2aWNlOiBUb2FzdHJTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHB1YmxpYyBjb3JlU2VydmljZTogQ29yZVNlcnZpY2UsIHB1YmxpYyBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcclxuICAgICAgICAgICAgICBwdWJsaWMgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgICAgICAgIHB1YmxpYyBhY3Rpb25TdGF0ZVNlcnZpY2U6IEFjdGlvblN0YXRlU2VydmljZVxyXG4gICkge1xyXG5cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5zZXRGb3JtQ29udHJvbCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9ybUNvbnRyb2woKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCk7XHJcbiAgICAgIHN3aXRjaCAoZm9ybUNvbnRyb2wuY29uc3RydWN0b3IpIHtcclxuICAgICAgICBjYXNlIEZvcm1Db250cm9sTmFtZTpcclxuICAgICAgICAgIHRoaXMuY29udHJvbCA9IHRoaXMuaW5qZWN0b3JcclxuICAgICAgICAgICAgLmdldChGb3JtR3JvdXBEaXJlY3RpdmUpXHJcbiAgICAgICAgICAgIC5nZXRDb250cm9sKGZvcm1Db250cm9sIGFzIEZvcm1Db250cm9sTmFtZSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgdGhpcy5jb250cm9sID0gKGZvcm1Db250cm9sIGFzIEZvcm1Db250cm9sRGlyZWN0aXZlKVxyXG4gICAgICAgICAgICAuZm9ybSBhcyBGb3JtQ29udHJvbDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgdGhpcy5jb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldEZvcm1WYWxpZGF0b3JzKCk7XHJcbiAgfVxyXG5cclxuICBzZXRGb3JtVmFsaWRhdG9ycygpe1xyXG5cclxuICAgIC8vIHRoaXMucmVxdWlyZWQgPSB0aGlzLmNvbnRyb2w/Lmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKSA/PyBmYWxzZTtcclxuICAgIGlmICh0aGlzLnJlcXVpcmVkKXtcclxuICAgICAgdGhpcy5zZWFyY2hDb250cm9sLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgIHRoaXMuZW1wbG95ZWVTZWFyY2hDb250cm9sLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlYXJjaENvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgIHRoaXMuZW1wbG95ZWVTZWFyY2hDb250cm9sLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgfVxyXG4gICAgICB0aGlzLnNlYXJjaENvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICB0aGlzLmVtcGxveWVlU2VhcmNoQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogVHlwZSk6IHZvaWQge1xyXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgaWYoIXRoaXMudmFsdWUpe1xyXG4gICAgICB0aGlzLnN0YXJ0RGF0ZUNvbnRyb2wucmVzZXQoKTtcclxuICAgICAgdGhpcy5lbmREYXRlQ29udHJvbC5yZXNldCgpO1xyXG4gICAgICB0aGlzLnRlbGVwaG9uZUNvbnRyb2wucmVzZXQoKTtcclxuICAgICAgdGhpcy50b2dnbGVCdXR0b25Db250cm9sLnJlc2V0KCk7XHJcbiAgICAgIHRoaXMuYXR0YWNobWVudHMgPSBbXTtcclxuICAgICAgdGhpcy5zZWFyY2hDb250cm9sLnJlc2V0KCk7XHJcbiAgICAgIHRoaXMuZW1wbG95ZWVTZWFyY2hDb250cm9sLnJlc2V0KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnN0YXJ0RGF0ZUNvbnRyb2wuc2V0VmFsdWUodGhpcy52YWx1ZT8uc3RhcnREYXRlKTtcclxuICAgICAgdGhpcy5lbmREYXRlQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnZhbHVlPy5lbmREYXRlKTtcclxuICAgICAgdGhpcy50b2dnbGVCdXR0b25Db250cm9sLnNldFZhbHVlKHZhbHVlKTtcclxuICAgICAgdGhpcy5zZWFyY2hDb250cm9sLnNldFZhbHVlKHZhbHVlWyd2YWx1ZSddKTtcclxuICAgICAgdGhpcy50ZWxlcGhvbmVDb250cm9sLnNldFZhbHVlKHZhbHVlKVxyXG4gICAgICBpZih0aGlzLnZhbHVlWyd2YWx1ZSddID09PSAnJyl7XHJcbiAgICAgICAgdGhpcy5jb250cm9sLnJlc2V0KClcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmVtcGxveWVlU2VhcmNoQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZVsncGVyc29uTmFtZSddKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbDogVHlwZSB8IG51bGwpID0+IFR5cGUpOiB2b2lkIHtcclxuXHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gVHlwZSk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5pc0Rpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICB9XHJcbn1cclxuIl19
|