@bnsights/bbsf-controls 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/README.md +24 -0
  2. package/bnsights-bbsf-controls.d.ts +26 -0
  3. package/bnsights-bbsf-controls.metadata.json +1 -0
  4. package/bundles/bnsights-bbsf-controls.umd.js +6375 -0
  5. package/bundles/bnsights-bbsf-controls.umd.js.map +1 -0
  6. package/esm2015/bnsights-bbsf-controls.js +27 -0
  7. package/esm2015/lib/Shared/Enums/CalendarView.js +8 -0
  8. package/esm2015/lib/Shared/Enums/ControlLayout.js +6 -0
  9. package/esm2015/lib/Shared/Enums/Countries.js +247 -0
  10. package/esm2015/lib/Shared/Enums/FileType.js +22 -0
  11. package/esm2015/lib/Shared/Enums/FilterType.js +11 -0
  12. package/esm2015/lib/Shared/Enums/FontSize.js +7 -0
  13. package/esm2015/lib/Shared/Enums/ForceDirection.js +6 -0
  14. package/esm2015/lib/Shared/Enums/IconPosition.js +6 -0
  15. package/esm2015/lib/Shared/Enums/ImageType.js +10 -0
  16. package/esm2015/lib/Shared/Enums/InputType.js +9 -0
  17. package/esm2015/lib/Shared/Enums/Insert.js +9 -0
  18. package/esm2015/lib/Shared/Enums/LanguageMode.js +11 -0
  19. package/esm2015/lib/Shared/Enums/Misc.js +7 -0
  20. package/esm2015/lib/Shared/Enums/PagingActionMode.js +6 -0
  21. package/esm2015/lib/Shared/Enums/Para.js +9 -0
  22. package/esm2015/lib/Shared/Enums/PickerType.js +7 -0
  23. package/esm2015/lib/Shared/Enums/SelectMode.js +6 -0
  24. package/esm2015/lib/Shared/Enums/StartView.js +7 -0
  25. package/esm2015/lib/Shared/Enums/Style.js +8 -0
  26. package/esm2015/lib/Shared/Enums/menu-list-enum.js +6 -0
  27. package/esm2015/lib/Shared/Models/Attribute.js +3 -0
  28. package/esm2015/lib/Shared/Models/AutocompleteDTO.js +7 -0
  29. package/esm2015/lib/Shared/Models/AutocompleteOptions.js +29 -0
  30. package/esm2015/lib/Shared/Models/CalendarEventDTO.js +3 -0
  31. package/esm2015/lib/Shared/Models/CalendarOptions.js +17 -0
  32. package/esm2015/lib/Shared/Models/CancelDTO.js +7 -0
  33. package/esm2015/lib/Shared/Models/CheckBoxOptions.js +12 -0
  34. package/esm2015/lib/Shared/Models/CustomValidation.js +14 -0
  35. package/esm2015/lib/Shared/Models/DropdownListItem.js +3 -0
  36. package/esm2015/lib/Shared/Models/DropdownOptions.js +18 -0
  37. package/esm2015/lib/Shared/Models/EditPersonalImage.js +7 -0
  38. package/esm2015/lib/Shared/Models/EnglishArabicDTO.js +3 -0
  39. package/esm2015/lib/Shared/Models/FileDTO.js +2 -0
  40. package/esm2015/lib/Shared/Models/FileUploadModel.js +3 -0
  41. package/esm2015/lib/Shared/Models/FileUploadOptions.js +15 -0
  42. package/esm2015/lib/Shared/Models/FilterItem.js +8 -0
  43. package/esm2015/lib/Shared/Models/FormOptions.js +26 -0
  44. package/esm2015/lib/Shared/Models/HtmlEditorOptions.js +16 -0
  45. package/esm2015/lib/Shared/Models/ImageUploadOptions.js +18 -0
  46. package/esm2015/lib/Shared/Models/MapAutoCompleteOptions.js +11 -0
  47. package/esm2015/lib/Shared/Models/MapAutocompleteDTO.js +3 -0
  48. package/esm2015/lib/Shared/Models/MultiLingualHtmlEditorOptions.js +19 -0
  49. package/esm2015/lib/Shared/Models/MultiLingualTextAreaOptions.js +19 -0
  50. package/esm2015/lib/Shared/Models/MultilingualTextBoxOptions.js +22 -0
  51. package/esm2015/lib/Shared/Models/MultipleFileUploadModel.js +9 -0
  52. package/esm2015/lib/Shared/Models/PagingDTO.js +13 -0
  53. package/esm2015/lib/Shared/Models/PagingOptions.js +43 -0
  54. package/esm2015/lib/Shared/Models/PhoneOptions.js +15 -0
  55. package/esm2015/lib/Shared/Models/ProfileImageUploadOptions.js +15 -0
  56. package/esm2015/lib/Shared/Models/ProfilePictureDTO.js +3 -0
  57. package/esm2015/lib/Shared/Models/RadioButtonItem.js +3 -0
  58. package/esm2015/lib/Shared/Models/RadioButtonOptions.js +10 -0
  59. package/esm2015/lib/Shared/Models/RangeNumber.js +3 -0
  60. package/esm2015/lib/Shared/Models/SaveDTO.js +7 -0
  61. package/esm2015/lib/Shared/Models/TagsInputDTO.js +3 -0
  62. package/esm2015/lib/Shared/Models/TagsInputOptions.js +45 -0
  63. package/esm2015/lib/Shared/Models/TextAreaOptions.js +14 -0
  64. package/esm2015/lib/Shared/Models/TextBoxOptions.js +21 -0
  65. package/esm2015/lib/Shared/Models/ToggleslideOptions.js +9 -0
  66. package/esm2015/lib/Shared/Models/UploadPersonalImage.js +7 -0
  67. package/esm2015/lib/Shared/Models/datePickerOptions.js +24 -0
  68. package/esm2015/lib/Shared/config/environment.js +12 -0
  69. package/esm2015/lib/Shared/services/ControlUtility.js +114 -0
  70. package/esm2015/lib/Shared/services/OnPagingFiltersChange.service.js +22 -0
  71. package/esm2015/lib/Shared/services/validationErrorMassage.service.js +122 -0
  72. package/esm2015/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.js +236 -0
  73. package/esm2015/lib/controls/Calendar/Calendar.component.js +176 -0
  74. package/esm2015/lib/controls/CheckBox/CheckBox.component.js +111 -0
  75. package/esm2015/lib/controls/DateTimePicker/DateTimePicker.component.js +148 -0
  76. package/esm2015/lib/controls/DropdownList/DropdownList.component.js +172 -0
  77. package/esm2015/lib/controls/FileUplaod/FileUplaod.component.js +319 -0
  78. package/esm2015/lib/controls/Form/Form.component.js +82 -0
  79. package/esm2015/lib/controls/HtmlEditor/HtmlEditor.component.js +202 -0
  80. package/esm2015/lib/controls/ImageUpload/ImageUpload.component.js +304 -0
  81. package/esm2015/lib/controls/MapAutoComplete/MapAutoComplete.component.js +283 -0
  82. package/esm2015/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.js +383 -0
  83. package/esm2015/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.js +325 -0
  84. package/esm2015/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.js +326 -0
  85. package/esm2015/lib/controls/Paging/JwPagination.component.js +127 -0
  86. package/esm2015/lib/controls/Paging/Paging.component.js +215 -0
  87. package/esm2015/lib/controls/Phone/Phone.component.js +114 -0
  88. package/esm2015/lib/controls/ProfileImageUploader/ProfileImageUploader.component.js +326 -0
  89. package/esm2015/lib/controls/RadioButton/RadioButton.component.js +98 -0
  90. package/esm2015/lib/controls/TagsInput/TagsInput.component.js +205 -0
  91. package/esm2015/lib/controls/TextArea/TextArea.component.js +148 -0
  92. package/esm2015/lib/controls/TextBox/TextBox.component.js +217 -0
  93. package/esm2015/lib/controls/Toggleslide/toggleslide.component.js +71 -0
  94. package/esm2015/lib/controls/bbsf-controls.module.js +208 -0
  95. package/esm2015/public-api.js +101 -0
  96. package/fesm2015/bnsights-bbsf-controls.js +5794 -0
  97. package/fesm2015/bnsights-bbsf-controls.js.map +1 -0
  98. package/lib/Shared/Enums/CalendarView.d.ts +6 -0
  99. package/lib/Shared/Enums/ControlLayout.d.ts +4 -0
  100. package/lib/Shared/Enums/Countries.d.ts +245 -0
  101. package/lib/Shared/Enums/FileType.d.ts +20 -0
  102. package/lib/Shared/Enums/FilterType.d.ts +9 -0
  103. package/lib/Shared/Enums/FontSize.d.ts +5 -0
  104. package/lib/Shared/Enums/ForceDirection.d.ts +4 -0
  105. package/lib/Shared/Enums/IconPosition.d.ts +4 -0
  106. package/lib/Shared/Enums/ImageType.d.ts +8 -0
  107. package/lib/Shared/Enums/InputType.d.ts +7 -0
  108. package/lib/Shared/Enums/Insert.d.ts +7 -0
  109. package/lib/Shared/Enums/LanguageMode.d.ts +9 -0
  110. package/lib/Shared/Enums/Misc.d.ts +5 -0
  111. package/lib/Shared/Enums/PagingActionMode.d.ts +4 -0
  112. package/lib/Shared/Enums/Para.d.ts +7 -0
  113. package/lib/Shared/Enums/PickerType.d.ts +5 -0
  114. package/lib/Shared/Enums/SelectMode.d.ts +4 -0
  115. package/lib/Shared/Enums/StartView.d.ts +5 -0
  116. package/lib/Shared/Enums/Style.d.ts +6 -0
  117. package/lib/Shared/Enums/menu-list-enum.d.ts +4 -0
  118. package/lib/Shared/Models/Attribute.d.ts +4 -0
  119. package/lib/Shared/Models/AutocompleteDTO.d.ts +4 -0
  120. package/lib/Shared/Models/AutocompleteOptions.d.ts +74 -0
  121. package/lib/Shared/Models/CalendarEventDTO.d.ts +8 -0
  122. package/lib/Shared/Models/CalendarOptions.d.ts +29 -0
  123. package/lib/Shared/Models/CancelDTO.d.ts +5 -0
  124. package/lib/Shared/Models/CheckBoxOptions.d.ts +38 -0
  125. package/lib/Shared/Models/CustomValidation.d.ts +10 -0
  126. package/lib/Shared/Models/DropdownListItem.d.ts +4 -0
  127. package/lib/Shared/Models/DropdownOptions.d.ts +67 -0
  128. package/lib/Shared/Models/EditPersonalImage.d.ts +5 -0
  129. package/lib/Shared/Models/EnglishArabicDTO.d.ts +4 -0
  130. package/lib/Shared/Models/FileDTO.d.ts +19 -0
  131. package/lib/Shared/Models/FileUploadModel.d.ts +4 -0
  132. package/lib/Shared/Models/FileUploadOptions.d.ts +56 -0
  133. package/lib/Shared/Models/FilterItem.d.ts +13 -0
  134. package/lib/Shared/Models/FormOptions.d.ts +15 -0
  135. package/lib/Shared/Models/HtmlEditorOptions.d.ts +66 -0
  136. package/lib/Shared/Models/ImageUploadOptions.d.ts +59 -0
  137. package/lib/Shared/Models/MapAutoCompleteOptions.d.ts +44 -0
  138. package/lib/Shared/Models/MapAutocompleteDTO.d.ts +7 -0
  139. package/lib/Shared/Models/MultiLingualHtmlEditorOptions.d.ts +97 -0
  140. package/lib/Shared/Models/MultiLingualTextAreaOptions.d.ts +85 -0
  141. package/lib/Shared/Models/MultilingualTextBoxOptions.d.ts +83 -0
  142. package/lib/Shared/Models/MultipleFileUploadModel.d.ts +7 -0
  143. package/lib/Shared/Models/PagingDTO.d.ts +11 -0
  144. package/lib/Shared/Models/PagingOptions.d.ts +51 -0
  145. package/lib/Shared/Models/PhoneOptions.d.ts +56 -0
  146. package/lib/Shared/Models/ProfileImageUploadOptions.d.ts +64 -0
  147. package/lib/Shared/Models/ProfilePictureDTO.d.ts +12 -0
  148. package/lib/Shared/Models/RadioButtonItem.d.ts +4 -0
  149. package/lib/Shared/Models/RadioButtonOptions.d.ts +44 -0
  150. package/lib/Shared/Models/RangeNumber.d.ts +4 -0
  151. package/lib/Shared/Models/SaveDTO.d.ts +5 -0
  152. package/lib/Shared/Models/TagsInputDTO.d.ts +4 -0
  153. package/lib/Shared/Models/TagsInputOptions.d.ts +91 -0
  154. package/lib/Shared/Models/TextAreaOptions.d.ts +60 -0
  155. package/lib/Shared/Models/TextBoxOptions.d.ts +70 -0
  156. package/lib/Shared/Models/ToggleslideOptions.d.ts +36 -0
  157. package/lib/Shared/Models/UploadPersonalImage.d.ts +5 -0
  158. package/lib/Shared/Models/datePickerOptions.d.ts +65 -0
  159. package/lib/Shared/config/environment.d.ts +1 -0
  160. package/lib/Shared/services/ControlUtility.d.ts +23 -0
  161. package/lib/Shared/services/OnPagingFiltersChange.service.d.ts +7 -0
  162. package/lib/Shared/services/validationErrorMassage.service.d.ts +13 -0
  163. package/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.d.ts +51 -0
  164. package/lib/controls/Calendar/Calendar.component.d.ts +40 -0
  165. package/lib/controls/CheckBox/CheckBox.component.d.ts +33 -0
  166. package/lib/controls/DateTimePicker/DateTimePicker.component.d.ts +41 -0
  167. package/lib/controls/DropdownList/DropdownList.component.d.ts +47 -0
  168. package/lib/controls/FileUplaod/FileUplaod.component.d.ts +49 -0
  169. package/lib/controls/Form/Form.component.d.ts +15 -0
  170. package/lib/controls/HtmlEditor/HtmlEditor.component.d.ts +44 -0
  171. package/lib/controls/ImageUpload/ImageUpload.component.d.ts +64 -0
  172. package/lib/controls/MapAutoComplete/MapAutoComplete.component.d.ts +52 -0
  173. package/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.d.ts +58 -0
  174. package/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.d.ts +59 -0
  175. package/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.d.ts +57 -0
  176. package/lib/controls/Paging/JwPagination.component.d.ts +24 -0
  177. package/lib/controls/Paging/Paging.component.d.ts +44 -0
  178. package/lib/controls/Phone/Phone.component.d.ts +37 -0
  179. package/lib/controls/ProfileImageUploader/ProfileImageUploader.component.d.ts +65 -0
  180. package/lib/controls/RadioButton/RadioButton.component.d.ts +31 -0
  181. package/lib/controls/TagsInput/TagsInput.component.d.ts +47 -0
  182. package/lib/controls/TextArea/TextArea.component.d.ts +41 -0
  183. package/lib/controls/TextBox/TextBox.component.d.ts +50 -0
  184. package/lib/controls/Toggleslide/toggleslide.component.d.ts +26 -0
  185. package/lib/controls/bbsf-controls.module.d.ts +10 -0
  186. package/package.json +85 -0
  187. package/public-api.d.ts +66 -0
  188. package/src/lib/assets/Style.css +1149 -0
  189. package/src/lib/assets/i18n/ar.json +29 -0
  190. package/src/lib/assets/i18n/en.json +24 -0
  191. package/src/lib/assets/images/imagenotfound.png +0 -0
  192. package/src/lib/assets/images/uploadimg.png +0 -0
  193. package/src/lib/assets/images/userimg.png +0 -0
@@ -0,0 +1,236 @@
1
+ import { __awaiter } from "tslib";
2
+ import { Component, Input, Optional, Output, EventEmitter } from '@angular/core';
3
+ import { FormControl, Validators, ControlContainer, FormGroupDirective } from '@angular/forms';
4
+ import { ErrorMassageValidation } from '../../Shared/services/validationErrorMassage.service';
5
+ import { ControlUtility } from '../../Shared/services/ControlUtility';
6
+ import { AutocompleteDTO } from '../../Shared/Models/AutocompleteDTO';
7
+ import { noop, Observable, of } from 'rxjs';
8
+ import { map, switchMap, tap } from 'rxjs/operators';
9
+ import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
10
+ import { BBSFTranslateService, ControlValidationService, UtilityService } from '@bnsights/bbsf-utilities';
11
+ export class AutocompleteTextBoxComponent {
12
+ // tslint:disable-next-line: max-line-length
13
+ constructor(http, ErrorHandler, controlUtility, controlContainer, AutocompleteTextBoxControlHost, UtilityService, translate, controlValidationService) {
14
+ this.http = http;
15
+ this.ErrorHandler = ErrorHandler;
16
+ this.controlUtility = controlUtility;
17
+ this.controlContainer = controlContainer;
18
+ this.AutocompleteTextBoxControlHost = AutocompleteTextBoxControlHost;
19
+ this.UtilityService = UtilityService;
20
+ this.translate = translate;
21
+ this.controlValidationService = controlValidationService;
22
+ this.OnChange = new EventEmitter();
23
+ this.keyword = 'value';
24
+ this.Search = '';
25
+ this.Key = '';
26
+ this.Api = 'http';
27
+ this.Value = 'value';
28
+ this.NewSelectionValidationKey = '';
29
+ this.markAllAsTouched = false;
30
+ this.validationRules = [];
31
+ this.validationRulesasync = [];
32
+ this.dataList = [];
33
+ this.SelectedValue = "";
34
+ this.resetError = () => {
35
+ this.controlValidationService.RemoveGlobalError();
36
+ };
37
+ // onFocused(e) {
38
+ // // do something
39
+ // }
40
+ // onBlur(Value) {
41
+ // if (this.options.AllowNewSelection == true) {
42
+ // if (typeof (Value) == 'object') {
43
+ // this.AutocompleteTextBoxControl.setValue(Value);
44
+ // this.AutocompleteTextBoxControl.updateValueAndValidity()
45
+ // }
46
+ // else {
47
+ // let AutocompleteModel = new AutocompleteDTO();
48
+ // AutocompleteModel.value = Value;
49
+ // let model = new TypeaheadMatch(AutocompleteModel,Value);
50
+ // this.AutocompleteTextBoxControl.setValue(model);
51
+ // this.AutocompleteTextBoxControl.updateValueAndValidity()
52
+ // }
53
+ // }
54
+ // else {
55
+ // if (this.AutocompleteTextBoxControl.value == Value) {
56
+ // this.AutocompleteTextBoxControl.setErrors({ NewSelectionValidationKey: this.NewSelectionValidationKey });
57
+ // this.AutocompleteTextBoxControl.markAsTouched();
58
+ // this.AutocompleteTextBoxControl.invalid;
59
+ // return;
60
+ // }
61
+ // }
62
+ // }
63
+ // handleResultSelected(result) {
64
+ // this.AutocompleteTextBoxControl.setValue(result);
65
+ // this.AutocompleteTextBoxControl.updateValueAndValidity()
66
+ // this.OnChange.emit(this.AutocompleteTextBoxControl.value)
67
+ // this.Search = this.AutocompleteTextBoxControl.value.value
68
+ // }
69
+ //External Method
70
+ this.RemoveRequiredValidation = () => {
71
+ this.controlUtility.RemoveRequiredValidation(this.AutocompleteTextBoxControl, this.validationRules, this.options);
72
+ };
73
+ //External Method
74
+ this.AddRequiredValidation = () => {
75
+ this.controlUtility.AddRequiredValidation(this.AutocompleteTextBoxControl, this.validationRules, this.options);
76
+ };
77
+ //External Method
78
+ this.RemoveCustomValidation = (CustomValidation) => {
79
+ this.controlUtility.RemoveCustomValidation(this.AutocompleteTextBoxControl, this.validationRules, CustomValidation);
80
+ };
81
+ //External Method
82
+ this.AddCustomValidation = (CustomValidation) => {
83
+ this.controlUtility.AddCustomValidation(this.AutocompleteTextBoxControl, this.validationRules, CustomValidation);
84
+ };
85
+ //External Method
86
+ this.IsValid = () => {
87
+ this.controlUtility.IsValid(this.AutocompleteTextBoxControl);
88
+ };
89
+ AutocompleteTextBoxComponent.controlContainerstatic = this.controlContainer;
90
+ }
91
+ ngOnInit() {
92
+ this.controlValidationService.isCreatedBefor = false;
93
+ this.group.addControl(this.options.Name, new FormControl(''));
94
+ this.AutocompleteTextBoxControl = this.group.controls[this.options.Name]; // new FormControl('',validationRules);
95
+ if (this.options.LabelKey != null && this.options.LabelKey != "")
96
+ this.options.LabelValue = this.UtilityService.getResourceValue(this.options.LabelKey);
97
+ // this.AutocompleteTextBoxControl.setValue(this.options.Value);
98
+ if (this.options.CustomValidation.length > 0) {
99
+ let Validations = this.options.CustomValidation;
100
+ for (let index = 0; index < Validations.length; index++) {
101
+ const Validation = Validations[index];
102
+ this.validationRules.push(Validation.functionBody);
103
+ }
104
+ }
105
+ if (this.options.IsRequired) {
106
+ this.validationRules.push(Validators.required);
107
+ }
108
+ this.AutocompleteTextBoxControl.setValidators(this.validationRules);
109
+ this.AutocompleteTextBoxControl.setAsyncValidators(this.validationRulesasync);
110
+ if (this.options.IsDisabled) {
111
+ this.AutocompleteTextBoxControl.disable();
112
+ }
113
+ if (this.options.SelectedValue != undefined && this.options.SelectedValue != null) {
114
+ this.SelectedValue = this.options.SelectedValue;
115
+ }
116
+ this.AutocompleteTextBoxControlHost.ngSubmit.subscribe((value) => {
117
+ if (this.AutocompleteTextBoxControl.value == this.Search && this.options.AllowNewSelection == false) {
118
+ this.AutocompleteTextBoxControl.setErrors({ NewSelectionValidationKey: this.NewSelectionValidationKey });
119
+ this.AutocompleteTextBoxControl.markAsTouched();
120
+ this.AutocompleteTextBoxControl.invalid;
121
+ }
122
+ this.group.markAllAsTouched();
123
+ this.markAllAsTouched = true;
124
+ });
125
+ const httpOptions = {
126
+ headers: new HttpHeaders({
127
+ 'Content-Type': 'application/json',
128
+ 'Authorization': this.options.ValidationToken
129
+ }),
130
+ };
131
+ this.suggestions$ = new Observable((observer) => {
132
+ observer.next(this.Search);
133
+ }).pipe(switchMap((query) => {
134
+ if (query) {
135
+ let params = new HttpParams();
136
+ params = params.append(this.options.QueryParam, query);
137
+ // using github public api to get users by name
138
+ return this.http.get(this.options.ActionURL, { headers: httpOptions.headers,
139
+ params: params
140
+ }).pipe(map((data) => data || []), tap(() => noop, err => {
141
+ // in case of http error
142
+ this.errorMessage = err && err.message || 'Something goes wrong';
143
+ }));
144
+ }
145
+ return of([]);
146
+ }));
147
+ }
148
+ ngAfterViewInit() {
149
+ this.controlUtility.setAttributeForControl(this.options);
150
+ }
151
+ showGlobalError() {
152
+ this.controlUtility.showGlobalError();
153
+ }
154
+ getErrorValidation(ErrorList) {
155
+ if (this.markAllAsTouched && this.group.invalid) {
156
+ this.showGlobalError();
157
+ this.markAllAsTouched = false;
158
+ }
159
+ return this.controlUtility.getErrorValidationMassage(ErrorList, this.group, this.options);
160
+ }
161
+ copyInputMessage(inputElement) {
162
+ this.controlUtility.CopyInputMessage(inputElement);
163
+ }
164
+ selectEvent(item) {
165
+ if (this.options.AllowNewSelection == true) {
166
+ if (typeof (item) == 'object') {
167
+ this.AutocompleteTextBoxControl.setValue(item);
168
+ this.AutocompleteTextBoxControl.updateValueAndValidity();
169
+ }
170
+ else {
171
+ let AutocompleteModel = new AutocompleteDTO();
172
+ AutocompleteModel.value = item;
173
+ this.AutocompleteTextBoxControl.setValue(AutocompleteModel);
174
+ this.AutocompleteTextBoxControl.updateValueAndValidity();
175
+ }
176
+ }
177
+ else {
178
+ if (this.AutocompleteTextBoxControl.value == item.value) {
179
+ this.AutocompleteTextBoxControl.setErrors({ NewSelectionValidationKey: this.NewSelectionValidationKey });
180
+ this.AutocompleteTextBoxControl.markAsTouched();
181
+ this.AutocompleteTextBoxControl.invalid;
182
+ return;
183
+ }
184
+ else {
185
+ this.AutocompleteTextBoxControl.setValue(item);
186
+ this.AutocompleteTextBoxControl.updateValueAndValidity();
187
+ this.OnChange.emit(this.AutocompleteTextBoxControl.value);
188
+ }
189
+ }
190
+ }
191
+ onChangeSearch(search) {
192
+ return __awaiter(this, void 0, void 0, function* () {
193
+ debugger;
194
+ this.Search = search;
195
+ this.SelectedValue = "";
196
+ yield this.suggestions$.subscribe((result) => {
197
+ if ((result == null || result == [] || result.length == 0) && this.options.AllowNewSelection == true) {
198
+ this.dataList = [
199
+ {
200
+ key: 0,
201
+ value: this.Search
202
+ }
203
+ ];
204
+ }
205
+ else {
206
+ this.dataList = result;
207
+ }
208
+ });
209
+ });
210
+ }
211
+ }
212
+ AutocompleteTextBoxComponent.controlContainerstatic = null;
213
+ AutocompleteTextBoxComponent.decorators = [
214
+ { type: Component, args: [{
215
+ // tslint:disable-next-line: component-selector
216
+ selector: 'BBSF-AutocompleteTextBox',
217
+ template: "<div class=\"b-control b-auto-complete-textbox\">\r\n <div class=\"form-group row validate is-invalid\" [formGroup]=\"group\">\r\n\r\n <label class=\"b-label col-form-label col-sm-12 \" [ngClass]=\"(options.ViewType==1)?'col-md-12':'col-md-3'\"\r\n [hidden]=\"options.HideLabel\">\r\n {{options.LabelValue}}\r\n <span *ngIf=\"(options.ShowAsterisk&&options.IsRequired)||(options.IsRequired)\" class=\"text-danger Required-text\"\r\n aria-required=\"true\">*</span>\r\n </label>\r\n\r\n <div class=\"col-sm-12\" [ngClass]=\"(options.ViewType==1)?'':'col-md-9'\">\r\n \r\n <!-- <input \r\n[(ngModel)]=\"Search\"\r\n value=\"{{Search}}\" \r\n autocomplete=\"off\"\r\n class=\"form-control bnsights-control {{options.ExtraClasses}}\"\r\n dir=\"{{options.ForceDirection==2?'rtl':''}}\"\r\n aria-describedby=\"email-error\" aria-invalid=\"true\" formControlName=\"{{options.Name}}\"\r\n [class.is-invalid]=\"AutocompleteTextBoxControl.invalid && AutocompleteTextBoxControl.touched\"\r\n typeaheadOptionField=\"{{Value}}\"\r\n [typeahead]=\"suggestions$\"\r\n [typeaheadAsync]=\"true\"\r\n placeholder=\"{{options.Placeholder}}\" id=\"{{options.Name}}\" (typeaheadOnSelect)=\"handleResultSelected($event)\" (blur)=\"onBlur($event.target.value)\" /> -->\r\n<!-- \r\n <input ngxTypeahead autocomplete=\"off\"\r\n value=\"{{Search}}\"\r\n class=\"form-control bnsights-control {{options.ExtraClasses}}\"\r\n dir=\"{{options.ForceDirection==2?'rtl':''}}\"\r\n aria-describedby=\"email-error\" aria-invalid=\"true\" formControlName=\"{{options.Name}}\"\r\n [class.is-invalid]=\"AutocompleteTextBoxControl.invalid && AutocompleteTextBoxControl.touched\"\r\n placeholder=\"{{options.Placeholder}}\" id=\"{{options.Name}}\" [taUrl]=\"options.ActionURL\"\r\n [taParams]=\"options.Params\" taQueryParam=\"{{QueryParam}}\" taApi=\"{{Api}}\" taListItemLabel=\"{{Value}}\" (taSelected)=\"handleResultSelected($event)\"> -->\r\n\r\n\r\n \r\n <ng-autocomplete\r\n *ngIf=\"!options.AllowNewSelection\"\r\n [data]=\"dataList\"\r\n [initialValue]=\"SelectedValue\"\r\n [searchKeyword]=\"keyword\"\r\n placeholder=\"{{options.Placeholder}}\"\r\n (selected)='selectEvent($event)'\r\n (inputChanged)='onChangeSearch($event)'\r\n historyIdentifier=\"dataList\"\r\n [itemTemplate]=\"itemTemplate\"\r\n [notFoundTemplate]=\"notFoundTemplate\"\r\n class=\"form-control bnsights-control {{options.ExtraClasses}}\"\r\n dir=\"{{options.ForceDirection==2?'rtl':''}}\"\r\n formControlName=\"{{options.Name}}\"\r\n aria-describedby=\"email-error\" aria-invalid=\"true\"\r\n [class.is-invalid]=\"AutocompleteTextBoxControl.invalid && AutocompleteTextBoxControl.touched\"\r\n >\r\n </ng-autocomplete>\r\n <ng-autocomplete\r\n *ngIf=\"options.AllowNewSelection\"\r\n [data]=\"dataList\"\r\n [initialValue]=\"SelectedValue\"\r\n [searchKeyword]=\"keyword\"\r\n placeholder=\"{{options.Placeholder}}\"\r\n (selected)='selectEvent($event)'\r\n (inputChanged)='onChangeSearch($event)'\r\n historyIdentifier=\"dataList\"\r\n [itemTemplate]=\"itemTemplate\"\r\n class=\"form-control bnsights-control {{options.ExtraClasses}}\"\r\n dir=\"{{options.ForceDirection==2?'rtl':''}}\"\r\n formControlName=\"{{options.Name}}\"\r\n aria-describedby=\"email-error\" aria-invalid=\"true\"\r\n [class.is-invalid]=\"AutocompleteTextBoxControl.invalid && AutocompleteTextBoxControl.touched\"\r\n >\r\n </ng-autocomplete>\r\n\r\n \r\n \r\n <ng-template #itemTemplate let-item>\r\n <a [innerHTML]=\"item.value\"></a>\r\n </ng-template>\r\n \r\n <ng-template #notFoundTemplate let-notFound >\r\n <div [innerHTML]=\"notFound\"></div>\r\n </ng-template>\r\n\r\n <div class=\"text-danger Required-text\"\r\n *ngIf=\"(AutocompleteTextBoxControl.invalid && AutocompleteTextBoxControl.touched)\">\r\n {{getErrorValidation(AutocompleteTextBoxControl.errors|keyvalue)}}\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <div class=\"control-desc text-dark\">{{options.LabelDescription}}</div>\r\n </div>\r\n\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty) \">{{resetError()}}</div>\r\n\r\n </div>\r\n </div>\r\n</div>\r\n",
218
+ styles: [""]
219
+ },] }
220
+ ];
221
+ AutocompleteTextBoxComponent.ctorParameters = () => [
222
+ { type: HttpClient },
223
+ { type: ErrorMassageValidation },
224
+ { type: ControlUtility },
225
+ { type: ControlContainer, decorators: [{ type: Optional }] },
226
+ { type: FormGroupDirective },
227
+ { type: UtilityService },
228
+ { type: BBSFTranslateService },
229
+ { type: ControlValidationService }
230
+ ];
231
+ AutocompleteTextBoxComponent.propDecorators = {
232
+ group: [{ type: Input }],
233
+ options: [{ type: Input }],
234
+ OnChange: [{ type: Output }]
235
+ };
236
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXV0b2NvbXBsZXRlVGV4dEJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWNvbnRyb2xzL3NyYy9saWIvY29udHJvbHMvQXV0b2NvbXBsZXRlVGV4dEJveC9BdXRvY29tcGxldGVUZXh0Qm94LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQVcsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDN0csT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQThCLGdCQUFnQixFQUFFLGtCQUFrQixFQUFpQyxNQUFNLGdCQUFnQixDQUFDO0FBQzFKLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBRzlGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUV0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQVksRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTNFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSx3QkFBd0IsRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQVExRyxNQUFNLE9BQU8sNEJBQTRCO0lBSXZDLDRDQUE0QztJQUM1QyxZQUFvQixJQUFnQixFQUFTLFlBQW9DLEVBQVUsY0FBOEIsRUFBc0IsZ0JBQWtDLEVBQVMsOEJBQWtELEVBQVMsY0FBNkIsRUFBUyxTQUErQixFQUFTLHdCQUFpRDtR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LFFBQVEsR0FBQyxNQUFNLENBQUE7aUJBQ3JCO1lBQ0gsQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDO0tBQUE7O0FBekxNLG1EQUFzQixHQUFHLElBQUksQ0FBQzs7WUFUdEMsU0FBUyxTQUFDO2dCQUNULCtDQUErQztnQkFDL0MsUUFBUSxFQUFFLDBCQUEwQjtnQkFDcEMsMDJKQUFtRDs7YUFFcEQ7OztZQVRRLFVBQVU7WUFSVixzQkFBc0I7WUFHdEIsY0FBYztZQUp1QyxnQkFBZ0IsdUJBd0JnRCxRQUFRO1lBeEJ0RCxrQkFBa0I7WUFXekMsY0FBYztZQUE5RCxvQkFBb0I7WUFBRSx3QkFBd0I7OztvQkFnQnBELEtBQUs7c0JBQ0wsS0FBSzt1QkFDTCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBEb0NoZWNrLCBPcHRpb25hbCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEF0dHJpYnV0ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycywgRm9ybUdyb3VwLCBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xDb250YWluZXIsIEZvcm1Hcm91cERpcmVjdGl2ZSwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEVycm9yTWFzc2FnZVZhbGlkYXRpb24gfSBmcm9tICcuLi8uLi9TaGFyZWQvc2VydmljZXMvdmFsaWRhdGlvbkVycm9yTWFzc2FnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGV4dEJveE9wdGlvbnMgfSBmcm9tICcuLi8uLi9TaGFyZWQvTW9kZWxzL1RleHRCb3hPcHRpb25zJztcclxuaW1wb3J0IHsgSW5wdXRUeXBlIH0gZnJvbSAnLi4vLi4vU2hhcmVkL0VudW1zL0lucHV0VHlwZSc7XHJcbmltcG9ydCB7IENvbnRyb2xVdGlsaXR5IH0gZnJvbSAnLi4vLi4vU2hhcmVkL3NlcnZpY2VzL0NvbnRyb2xVdGlsaXR5JztcclxuaW1wb3J0IHsgQXV0b2NvbXBsZXRlT3B0aW9ucyB9IGZyb20gJy4uLy4uL1NoYXJlZC9Nb2RlbHMvQXV0b2NvbXBsZXRlT3B0aW9ucyc7XHJcbmltcG9ydCB7IEF1dG9jb21wbGV0ZURUTyB9IGZyb20gJy4uLy4uL1NoYXJlZC9Nb2RlbHMvQXV0b2NvbXBsZXRlRFRPJztcclxuaW1wb3J0IHsgbm9vcCwgT2JzZXJ2YWJsZSwgT2JzZXJ2ZXIsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBUeXBlYWhlYWRNYXRjaCB9IGZyb20gJ25neC1ib290c3RyYXAvdHlwZWFoZWFkJztcclxuaW1wb3J0IHsgQkJTRlRyYW5zbGF0ZVNlcnZpY2UsIENvbnRyb2xWYWxpZGF0aW9uU2VydmljZSwgVXRpbGl0eVNlcnZpY2UgfSBmcm9tICdAYm5zaWdodHMvYmJzZi11dGlsaXRpZXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjb21wb25lbnQtc2VsZWN0b3JcclxuICBzZWxlY3RvcjogJ0JCU0YtQXV0b2NvbXBsZXRlVGV4dEJveCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL0F1dG9jb21wbGV0ZVRleHRCb3guY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL0F1dG9jb21wbGV0ZVRleHRCb3guY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXV0b2NvbXBsZXRlVGV4dEJveENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG5cclxuICBzdGF0aWMgY29udHJvbENvbnRhaW5lcnN0YXRpYyA9IG51bGw7XHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQscHJpdmF0ZSBFcnJvckhhbmRsZXI6IEVycm9yTWFzc2FnZVZhbGlkYXRpb24sIHByaXZhdGUgY29udHJvbFV0aWxpdHk6IENvbnRyb2xVdGlsaXR5LCBAT3B0aW9uYWwoKSBwcml2YXRlIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsIHB1YmxpYyBBdXRvY29tcGxldGVUZXh0Qm94Q29udHJvbEhvc3Q6IEZvcm1Hcm91cERpcmVjdGl2ZSxwcml2YXRlIFV0aWxpdHlTZXJ2aWNlOlV0aWxpdHlTZXJ2aWNlLHByaXZhdGUgdHJhbnNsYXRlOiBCQlNGVHJhbnNsYXRlU2VydmljZSxwcml2YXRlIGNvbnRyb2xWYWxpZGF0aW9uU2VydmljZTpDb250cm9sVmFsaWRhdGlvblNlcnZpY2UpIHtcclxuICAgIEF1dG9jb21wbGV0ZVRleHRCb3hDb21wb25lbnQuY29udHJvbENvbnRhaW5lcnN0YXRpYyA9IHRoaXMuY29udHJvbENvbnRhaW5lcjtcclxuICB9XHJcbiAgQElucHV0KCkgZ3JvdXA6IEZvcm1Hcm91cDtcclxuICBASW5wdXQoKSBvcHRpb25zOiBBdXRvY29tcGxldGVPcHRpb25zO1xyXG4gIEBPdXRwdXQoKSBPbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBrZXl3b3JkOiBzdHJpbmcgPSAndmFsdWUnXHJcbiAgQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcclxuICBTZWFyY2g6IHN0cmluZyA9ICcnXHJcbiAgS2V5OiBzdHJpbmcgPSAnJ1xyXG4gXHJcbiAgQXBpOiBzdHJpbmcgPSAnaHR0cCc7XHJcbiAgVmFsdWU6IHN0cmluZyA9ICd2YWx1ZSdcclxuICBOZXdTZWxlY3Rpb25WYWxpZGF0aW9uS2V5OiBzdHJpbmcgPSAnJztcclxuICBtYXJrQWxsQXNUb3VjaGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdmFsaWRhdGlvblJ1bGVzID0gW107XHJcbiAgdmFsaWRhdGlvblJ1bGVzYXN5bmMgPSBbXTtcclxuICBkYXRhU291cmNlOiBPYnNlcnZhYmxlPGFueT47XHJcbiAgc3VnZ2VzdGlvbnMkOiBPYnNlcnZhYmxlPGFueVtdPjtcclxuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcclxuICBkYXRhTGlzdDphbnlbXT1bXTtcclxuICBTZWxlY3RlZFZhbHVlOnN0cmluZz1cIlwiXHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG5cclxuICAgIHRoaXMuY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLmlzQ3JlYXRlZEJlZm9yID0gZmFsc2VcclxuICAgIHRoaXMuZ3JvdXAuYWRkQ29udHJvbCh0aGlzLm9wdGlvbnMuTmFtZSwgbmV3IEZvcm1Db250cm9sKCcnKSk7XHJcbiAgICB0aGlzLkF1dG9jb21wbGV0ZVRleHRCb3hDb250cm9sID0gdGhpcy5ncm91cC5jb250cm9sc1t0aGlzLm9wdGlvbnMuTmFtZV07IC8vICBuZXcgRm9ybUNvbnRyb2woJycsdmFsaWRhdGlvblJ1bGVzKTtcclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLkxhYmVsS2V5ICE9IG51bGwgJiYgdGhpcy5vcHRpb25zLkxhYmVsS2V5ICE9IFwiXCIpXHJcbiAgICAgIHRoaXMub3B0aW9ucy5MYWJlbFZhbHVlID0gdGhpcy5VdGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKHRoaXMub3B0aW9ucy5MYWJlbEtleSk7XHJcblxyXG4gICAgLy8gdGhpcy5BdXRvY29tcGxldGVUZXh0Qm94Q29udHJvbC5zZXRWYWx1ZSh0aGlzLm9wdGlvbnMuVmFsdWUpO1xyXG5cclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLkN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgVmFsaWRhdGlvbnMgPSB0aGlzLm9wdGlvbnMuQ3VzdG9tVmFsaWRhdGlvblxyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgVmFsaWRhdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgY29uc3QgVmFsaWRhdGlvbiA9IFZhbGlkYXRpb25zW2luZGV4XTtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRpb24uZnVuY3Rpb25Cb2R5KTtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuSXNSZXF1aXJlZCkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5BdXRvY29tcGxldGVUZXh0Qm94Q29udHJvbC5zZXRWYWxpZGF0b3JzKHRoaXMudmFsaWRhdGlvblJ1bGVzKTtcclxuICAgIHRoaXMuQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2wuc2V0QXN5bmNWYWxpZGF0b3JzKHRoaXMudmFsaWRhdGlvblJ1bGVzYXN5bmMpO1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5Jc0Rpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMuQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2wuZGlzYWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICBcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuU2VsZWN0ZWRWYWx1ZSAhPSB1bmRlZmluZWQgJiYgdGhpcy5vcHRpb25zLlNlbGVjdGVkVmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLlNlbGVjdGVkVmFsdWU9dGhpcy5vcHRpb25zLlNlbGVjdGVkVmFsdWU7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMuQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2xIb3N0Lm5nU3VibWl0LnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgaWYgKHRoaXMuQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2wudmFsdWUgPT0gdGhpcy5TZWFyY2gmJnRoaXMub3B0aW9ucy5BbGxvd05ld1NlbGVjdGlvbj09ZmFsc2UpIHtcclxuICAgICAgICB0aGlzLkF1dG9jb21wbGV0ZVRleHRCb3hDb250cm9sLnNldEVycm9ycyh7IE5ld1NlbGVjdGlvblZhbGlkYXRpb25LZXk6IHRoaXMuTmV3U2VsZWN0aW9uVmFsaWRhdGlvbktleSB9KTtcclxuICAgICAgICB0aGlzLkF1dG9jb21wbGV0ZVRleHRCb3hDb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICB0aGlzLkF1dG9jb21wbGV0ZVRleHRCb3hDb250cm9sLmludmFsaWQ7XHJcbiAgICB9XHJcbiAgICAgIHRoaXMuZ3JvdXAubWFya0FsbEFzVG91Y2hlZCgpXHJcbiAgICAgIHRoaXMubWFya0FsbEFzVG91Y2hlZCA9IHRydWVcclxuICAgIH0pXHJcblxyXG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPSB7XHJcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICAgJ0F1dGhvcml6YXRpb24nOiB0aGlzLm9wdGlvbnMuVmFsaWRhdGlvblRva2VuXHJcbiAgICAgIH0pLFxyXG4gICAgfTtcclxuICAgXHJcbiAgXHJcbiAgIFxyXG4gICAgXHJcbiAgICB0aGlzLnN1Z2dlc3Rpb25zJCA9IG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcjogT2JzZXJ2ZXI8c3RyaW5nPikgPT4ge1xyXG4gICAgICBvYnNlcnZlci5uZXh0KHRoaXMuU2VhcmNoKTtcclxuICAgIH0pLnBpcGUoXHJcbiAgICAgIHN3aXRjaE1hcCgocXVlcnk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmIChxdWVyeSkge1xyXG4gICAgICAgICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKHRoaXMub3B0aW9ucy5RdWVyeVBhcmFtLCAgcXVlcnkpO1xyXG4gICAgICAgICAgLy8gdXNpbmcgZ2l0aHViIHB1YmxpYyBhcGkgdG8gZ2V0IHVzZXJzIGJ5IG5hbWVcclxuICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMub3B0aW9ucy5BY3Rpb25VUkwsIHtoZWFkZXJzOmh0dHBPcHRpb25zLmhlYWRlcnMsXHJcbiAgICAgICAgICAgIHBhcmFtczpwYXJhbXNcclxuICAgICAgICAgIH0pLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoZGF0YSkgPT4gZGF0YSBhcyBBdHRyaWJ1dGVbXSB8fCBbXSksXHJcbiAgICAgICAgICAgIHRhcCgoKSA9PiBub29wLCBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgIC8vIGluIGNhc2Ugb2YgaHR0cCBlcnJvclxyXG4gICAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyICYmIGVyci5tZXNzYWdlIHx8ICdTb21ldGhpbmcgZ29lcyB3cm9uZyc7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuIFxyXG4gICAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuc2V0QXR0cmlidXRlRm9yQ29udHJvbCh0aGlzLm9wdGlvbnMpXHJcbiAgfVxyXG4gIHJlc2V0RXJyb3IgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xWYWxpZGF0aW9uU2VydmljZS5SZW1vdmVHbG9iYWxFcnJvcigpO1xyXG4gIH1cclxuXHJcbiAgc2hvd0dsb2JhbEVycm9yKCkge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5zaG93R2xvYmFsRXJyb3IoKVxyXG4gIH1cclxuXHJcblxyXG4gIGdldEVycm9yVmFsaWRhdGlvbihFcnJvckxpc3QpIHtcclxuXHJcbiAgICBpZiAodGhpcy5tYXJrQWxsQXNUb3VjaGVkICYmIHRoaXMuZ3JvdXAuaW52YWxpZCkge1xyXG4gICAgICB0aGlzLnNob3dHbG9iYWxFcnJvcigpXHJcbiAgICAgIHRoaXMubWFya0FsbEFzVG91Y2hlZCA9IGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuY29udHJvbFV0aWxpdHkuZ2V0RXJyb3JWYWxpZGF0aW9uTWFzc2FnZShFcnJvckxpc3QsIHRoaXMuZ3JvdXAsIHRoaXMub3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBjb3B5SW5wdXRNZXNzYWdlKGlucHV0RWxlbWVudCkge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5Db3B5SW5wdXRNZXNzYWdlKGlucHV0RWxlbWVudClcclxuICB9XHJcblxyXG5cclxuICBzZWxlY3RFdmVudChpdGVtKSB7XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5BbGxvd05ld1NlbGVjdGlvbiA9PSB0cnVlKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgKGl0ZW0pID09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgdGhpcy5BdXRvY29tcGxldGVUZXh0Qm94Q29udHJvbC5zZXRWYWx1ZShpdGVtKTtcclxuICAgICAgICB0aGlzLkF1dG9jb21wbGV0ZVRleHRCb3hDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxyXG5cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBsZXQgQXV0b2NvbXBsZXRlTW9kZWwgPSBuZXcgQXV0b2NvbXBsZXRlRFRPKCk7XHJcbiAgICAgICAgQXV0b2NvbXBsZXRlTW9kZWwudmFsdWUgPSBpdGVtO1xyXG4gICAgICAgIHRoaXMuQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2wuc2V0VmFsdWUoQXV0b2NvbXBsZXRlTW9kZWwpO1xyXG4gICAgICAgIHRoaXMuQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICB9ICBcclxuICAgIGVsc2Uge1xyXG5cclxuICAgICAgaWYgKHRoaXMuQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2wudmFsdWUgPT0gaXRlbS52YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2wuc2V0RXJyb3JzKHsgTmV3U2VsZWN0aW9uVmFsaWRhdGlvbktleTogdGhpcy5OZXdTZWxlY3Rpb25WYWxpZGF0aW9uS2V5IH0pO1xyXG4gICAgICAgIHRoaXMuQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICAgIHRoaXMuQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2wuaW52YWxpZDtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgZWxzZXtcclxuICAgICAgICB0aGlzLkF1dG9jb21wbGV0ZVRleHRCb3hDb250cm9sLnNldFZhbHVlKGl0ZW0pO1xyXG4gICAgICAgIHRoaXMuQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXHJcbiAgICAgICAgdGhpcy5PbkNoYW5nZS5lbWl0KHRoaXMuQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2wudmFsdWUpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIG9uQ2hhbmdlU2VhcmNoKHNlYXJjaDogc3RyaW5nKSB7XHJcbiAgICBkZWJ1Z2dlcjtcclxuICAgIHRoaXMuU2VhcmNoPXNlYXJjaDtcclxuICAgIHRoaXMuU2VsZWN0ZWRWYWx1ZT1cIlwiO1xyXG4gICAgYXdhaXQgdGhpcy5zdWdnZXN0aW9ucyQuc3Vic2NyaWJlKChyZXN1bHQpPT57XHJcbiAgICAgIGlmICgocmVzdWx0PT1udWxsfHxyZXN1bHQ9PVtdfHxyZXN1bHQubGVuZ3RoPT0wKSYmdGhpcy5vcHRpb25zLkFsbG93TmV3U2VsZWN0aW9uPT10cnVlKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhTGlzdCA9IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAga2V5OjAsXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLlNlYXJjaFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgIHtcclxuICAgICAgICB0aGlzLmRhdGFMaXN0PXJlc3VsdFxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLy8gb25Gb2N1c2VkKGUpIHtcclxuICAvLyAgIC8vIGRvIHNvbWV0aGluZ1xyXG4gIC8vIH1cclxuXHJcbiBcclxuICAvLyBvbkJsdXIoVmFsdWUpIHtcclxuICAvLyAgIGlmICh0aGlzLm9wdGlvbnMuQWxsb3dOZXdTZWxlY3Rpb24gPT0gdHJ1ZSkge1xyXG5cclxuICAvLyAgICAgaWYgKHR5cGVvZiAoVmFsdWUpID09ICdvYmplY3QnKSB7XHJcbiAgLy8gICAgICAgdGhpcy5BdXRvY29tcGxldGVUZXh0Qm94Q29udHJvbC5zZXRWYWx1ZShWYWx1ZSk7XHJcbiAgLy8gICAgICAgdGhpcy5BdXRvY29tcGxldGVUZXh0Qm94Q29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcclxuXHJcbiAgLy8gICAgIH1cclxuICAvLyAgICAgZWxzZSB7XHJcbiAgLy8gICAgICAgbGV0IEF1dG9jb21wbGV0ZU1vZGVsID0gbmV3IEF1dG9jb21wbGV0ZURUTygpO1xyXG4gIC8vICAgICAgIEF1dG9jb21wbGV0ZU1vZGVsLnZhbHVlID0gVmFsdWU7XHJcbiAgLy8gICAgICAgbGV0IG1vZGVsID0gbmV3IFR5cGVhaGVhZE1hdGNoKEF1dG9jb21wbGV0ZU1vZGVsLFZhbHVlKTtcclxuICAvLyAgICAgICB0aGlzLkF1dG9jb21wbGV0ZVRleHRCb3hDb250cm9sLnNldFZhbHVlKG1vZGVsKTtcclxuICAvLyAgICAgICB0aGlzLkF1dG9jb21wbGV0ZVRleHRCb3hDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxyXG5cclxuICAvLyAgICAgfVxyXG4gIC8vICAgfSBcclxuXHJcbiAgLy8gICBlbHNlIHtcclxuXHJcbiAgLy8gICAgIGlmICh0aGlzLkF1dG9jb21wbGV0ZVRleHRCb3hDb250cm9sLnZhbHVlID09IFZhbHVlKSB7XHJcbiAgLy8gICAgICAgdGhpcy5BdXRvY29tcGxldGVUZXh0Qm94Q29udHJvbC5zZXRFcnJvcnMoeyBOZXdTZWxlY3Rpb25WYWxpZGF0aW9uS2V5OiB0aGlzLk5ld1NlbGVjdGlvblZhbGlkYXRpb25LZXkgfSk7XHJcbiAgLy8gICAgICAgdGhpcy5BdXRvY29tcGxldGVUZXh0Qm94Q29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgLy8gICAgICAgdGhpcy5BdXRvY29tcGxldGVUZXh0Qm94Q29udHJvbC5pbnZhbGlkO1xyXG4gIC8vICAgICAgIHJldHVybjtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vICB9XHJcblxyXG5cclxuICAvLyBoYW5kbGVSZXN1bHRTZWxlY3RlZChyZXN1bHQpIHtcclxuICBcclxuICAvLyAgIHRoaXMuQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2wuc2V0VmFsdWUocmVzdWx0KTtcclxuICAvLyAgIHRoaXMuQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXHJcbiAgLy8gICB0aGlzLk9uQ2hhbmdlLmVtaXQodGhpcy5BdXRvY29tcGxldGVUZXh0Qm94Q29udHJvbC52YWx1ZSlcclxuICAvLyAgIHRoaXMuU2VhcmNoID0gdGhpcy5BdXRvY29tcGxldGVUZXh0Qm94Q29udHJvbC52YWx1ZS52YWx1ZVxyXG4gICBcclxuXHJcblxyXG4gIC8vIH1cclxuIFxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgUmVtb3ZlUmVxdWlyZWRWYWxpZGF0aW9uID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5SZW1vdmVSZXF1aXJlZFZhbGlkYXRpb24odGhpcy5BdXRvY29tcGxldGVUZXh0Qm94Q29udHJvbCwgdGhpcy52YWxpZGF0aW9uUnVsZXMsIHRoaXMub3B0aW9ucylcclxuICB9XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBBZGRSZXF1aXJlZFZhbGlkYXRpb24gPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LkFkZFJlcXVpcmVkVmFsaWRhdGlvbih0aGlzLkF1dG9jb21wbGV0ZVRleHRCb3hDb250cm9sLCB0aGlzLnZhbGlkYXRpb25SdWxlcywgdGhpcy5vcHRpb25zKVxyXG4gIH1cclxuXHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBSZW1vdmVDdXN0b21WYWxpZGF0aW9uID0gKEN1c3RvbVZhbGlkYXRpb24pID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuUmVtb3ZlQ3VzdG9tVmFsaWRhdGlvbih0aGlzLkF1dG9jb21wbGV0ZVRleHRCb3hDb250cm9sLCB0aGlzLnZhbGlkYXRpb25SdWxlcywgQ3VzdG9tVmFsaWRhdGlvbilcclxuICB9XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBBZGRDdXN0b21WYWxpZGF0aW9uID0gKEN1c3RvbVZhbGlkYXRpb24pID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuQWRkQ3VzdG9tVmFsaWRhdGlvbih0aGlzLkF1dG9jb21wbGV0ZVRleHRCb3hDb250cm9sLCB0aGlzLnZhbGlkYXRpb25SdWxlcywgQ3VzdG9tVmFsaWRhdGlvbilcclxuICB9XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBJc1ZhbGlkID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5Jc1ZhbGlkKHRoaXMuQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2wpXHJcbiAgfVxyXG5cclxufVxyXG5cclxuXHJcbiJdfQ==
@@ -0,0 +1,176 @@
1
+ import { __awaiter } from "tslib";
2
+ import dayGridPlugin from '@fullcalendar/daygrid';
3
+ import timeGrigPlugin from '@fullcalendar/timegrid';
4
+ import interactionPlugin from '@fullcalendar/interaction'; // for dateClick
5
+ import timeGridPlugin from '@fullcalendar/timegrid';
6
+ import listPlugin from '@fullcalendar/list';
7
+ import { Component, Input, Optional, ViewChild } from '@angular/core';
8
+ import { FormControl, ControlContainer, FormGroupDirective } from '@angular/forms';
9
+ import { ErrorMassageValidation } from '../../Shared/services/validationErrorMassage.service';
10
+ import { ControlUtility } from '../../Shared/services/ControlUtility';
11
+ import { CalendarView } from '../../Shared/Enums/CalendarView';
12
+ import enGbLocale from '@fullcalendar/core/locales/en-gb';
13
+ import ArLocale from '@fullcalendar/core/locales/ar';
14
+ import { BBSFTranslateService, ControlValidationService, UtilityService } from '@bnsights/bbsf-utilities';
15
+ export class CalendarComponent {
16
+ // tslint:disable-next-line: max-line-length
17
+ constructor(ErrorHandler, controlUtility, controlContainer, PhoneControlHost, UtilityService, translate, controlValidationService) {
18
+ this.ErrorHandler = ErrorHandler;
19
+ this.controlUtility = controlUtility;
20
+ this.controlContainer = controlContainer;
21
+ this.PhoneControlHost = PhoneControlHost;
22
+ this.UtilityService = UtilityService;
23
+ this.translate = translate;
24
+ this.controlValidationService = controlValidationService;
25
+ this.calendarVisible = true;
26
+ this.currentEvents = [];
27
+ this.calendarPlugins = [dayGridPlugin, timeGrigPlugin, interactionPlugin, listPlugin];
28
+ this.calendarWeekends = true;
29
+ this.calendarEvents = [];
30
+ this.DefaultView = "";
31
+ this.CalendarViews = '';
32
+ this.locales = [];
33
+ this.CurrentLanguage = "";
34
+ this.resetError = () => {
35
+ this.controlValidationService.RemoveGlobalError();
36
+ };
37
+ CalendarComponent.controlContainerstatic = this.controlContainer;
38
+ }
39
+ ngOnInit() {
40
+ return __awaiter(this, void 0, void 0, function* () {
41
+ switch (yield this.UtilityService.getCurrentLanguage()) {
42
+ case 'ar':
43
+ this.locales = [ArLocale];
44
+ this.CurrentLanguage = "Ar";
45
+ break;
46
+ case 'en':
47
+ this.locales = [enGbLocale];
48
+ this.CurrentLanguage = "En";
49
+ break;
50
+ default:
51
+ break;
52
+ }
53
+ this.translate.onLangChange.subscribe((event) => {
54
+ switch (event.lang) {
55
+ case 'ar':
56
+ this.locales = [ArLocale];
57
+ this.CurrentLanguage = "Ar";
58
+ break;
59
+ case 'en':
60
+ this.locales = [enGbLocale];
61
+ this.CurrentLanguage = "En";
62
+ break;
63
+ default:
64
+ break;
65
+ }
66
+ });
67
+ this.calendarEvents = this.options.EventList;
68
+ this.calendarWeekends = this.options.AllowCalendarWeekends;
69
+ switch (this.options.DefaultView) {
70
+ case CalendarView.Month:
71
+ this.DefaultView = "dayGridMonth";
72
+ break;
73
+ case CalendarView.Weekly:
74
+ this.DefaultView = "timeGridWeek";
75
+ break;
76
+ case CalendarView.Daily:
77
+ this.DefaultView = "timeGridDay";
78
+ break;
79
+ default:
80
+ break;
81
+ }
82
+ if (this.options.CalendarViews != null && this.options.CalendarViews.length > 0)
83
+ for (let index = 0; index < this.options.CalendarViews.length; index++) {
84
+ const element = this.options.CalendarViews[index];
85
+ switch (element) {
86
+ case CalendarView.Agenda:
87
+ this.CalendarViews += "listWeek,";
88
+ break;
89
+ case CalendarView.Daily:
90
+ this.CalendarViews += "timeGridDay,";
91
+ break;
92
+ case CalendarView.Weekly:
93
+ this.CalendarViews += "timeGridWeek,";
94
+ break;
95
+ case CalendarView.Month:
96
+ this.CalendarViews += "dayGridMonth,";
97
+ break;
98
+ default:
99
+ break;
100
+ }
101
+ }
102
+ this.group.addControl(this.options.Name, new FormControl(''));
103
+ this.CalendarFormControl = this.group.controls[this.options.Name]; // new FormControl('',validationRules);
104
+ this.calendarOptions = {
105
+ plugins: [
106
+ dayGridPlugin,
107
+ timeGridPlugin,
108
+ listPlugin,
109
+ interactionPlugin
110
+ ],
111
+ headerToolbar: {
112
+ left: 'prev,next today',
113
+ center: 'title',
114
+ right: this.CalendarViews.substring(0, this.CalendarViews.length - 1)
115
+ },
116
+ locales: this.locales,
117
+ locale: this.CurrentLanguage,
118
+ initialView: this.CalendarViews.split(',')[0],
119
+ initialEvents: this.calendarEvents,
120
+ initialDate: this.options.DefaultDate,
121
+ weekends: this.options.AllowCalendarWeekends,
122
+ editable: this.options.Eventeditable,
123
+ selectable: this.options.Eventselectable,
124
+ // selectMirror: true,
125
+ dayMaxEvents: this.options.dayMaxEvents,
126
+ select: this.OnDayClickFunction.bind(this),
127
+ eventClick: this.OnEventClickFunction.bind(this),
128
+ // eventsSet: this.handleEvents.bind(this)
129
+ /* you can update a remote database when these fire:
130
+ eventAdd:
131
+ eventChange:
132
+ eventRemove:
133
+ */
134
+ };
135
+ });
136
+ }
137
+ ngAfterViewInit() {
138
+ }
139
+ getErrorValidation(Errorsitem) {
140
+ }
141
+ OnDayClickFunction(arg) {
142
+ if (this.options.OnDayClickFunction != null) {
143
+ let DayClickFunction = this.options.OnDayClickFunction;
144
+ DayClickFunction(arg);
145
+ }
146
+ }
147
+ OnEventClickFunction(arg) {
148
+ if (this.options.OnEventClickFunction != null) {
149
+ let EventClickFunction = this.options.OnEventClickFunction;
150
+ EventClickFunction(arg.event);
151
+ }
152
+ }
153
+ }
154
+ CalendarComponent.controlContainerstatic = null;
155
+ CalendarComponent.decorators = [
156
+ { type: Component, args: [{
157
+ selector: 'BBSF-Calendar',
158
+ template: "\r\n<div class=\"b-control b-calendar\">\r\n <div class=\"form-group validate is-invalid\" [formGroup]=\"group\">\r\n <!-- <full-calendar #calendar\r\n [defaultDate]=\"options.DefaultDate\"\r\n [defaultView]=\"DefaultView\"\r\n [header]=\"{\r\n left: 'prev,next today',\r\n center: 'title',\r\n right: CalendarViews\r\n }\"\r\n ngDefaultControl\r\n formControlName=\"{{options.Name}}\"\r\n [locales]=\"locales\"\r\n [plugins]=\"calendarPlugins\"\r\n [weekends]=\"calendarWeekends\"\r\n [events]=\"calendarEvents\"\r\n (dateClick)=\"OnDayClickFunction($event)\"\r\n (eventClick)=\"OnEventClickFunction($event)\"\r\n id=\"{{options.Name}}\"></full-calendar> -->\r\n\r\n\r\n <full-calendar\r\n *ngIf=\"options.CalendarVisible\"\r\n [options]='calendarOptions'\r\n id=\"{{options.Name}}\"\r\n ngDefaultControl\r\n formControlName=\"{{options.Name}}\"\r\n ></full-calendar>\r\n\r\n </div>\r\n</div>\r\n",
159
+ styles: [""]
160
+ },] }
161
+ ];
162
+ CalendarComponent.ctorParameters = () => [
163
+ { type: ErrorMassageValidation },
164
+ { type: ControlUtility },
165
+ { type: ControlContainer, decorators: [{ type: Optional }] },
166
+ { type: FormGroupDirective },
167
+ { type: UtilityService },
168
+ { type: BBSFTranslateService },
169
+ { type: ControlValidationService }
170
+ ];
171
+ CalendarComponent.propDecorators = {
172
+ group: [{ type: Input }],
173
+ options: [{ type: Input }],
174
+ calendarComponent: [{ type: ViewChild, args: ['calendar', { static: false },] }]
175
+ };
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1jb250cm9scy9zcmMvbGliL2NvbnRyb2xzL0NhbGVuZGFyL0NhbGVuZGFyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxhQUFhLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxjQUFjLE1BQU0sd0JBQXdCLENBQUM7QUFDcEQsT0FBTyxpQkFBaUIsTUFBTSwyQkFBMkIsQ0FBQyxDQUFDLGdCQUFnQjtBQUMzRSxPQUFPLGNBQWMsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLFVBQVUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBVyxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxXQUFXLEVBQTBDLGdCQUFnQixFQUFFLGtCQUFrQixFQUFpQyxNQUFNLGdCQUFnQixDQUFDO0FBQzFKLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUV0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFL0QsT0FBTyxVQUFVLE1BQU0sa0NBQWtDLENBQUM7QUFDMUQsT0FBTyxRQUFRLE1BQU0sK0JBQStCLENBQUM7QUFFckQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHdCQUF3QixFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBTzFHLE1BQU0sT0FBTyxpQkFBaUI7SUFJNUIsNENBQTRDO0lBQzVDLFlBQW9CLFlBQW9DLEVBQVUsY0FBOEIsRUFBc0IsZ0JBQWtDLEVBQVMsZ0JBQW9DLEVBQVMsY0FBNkIsRUFBUyxTQUErQixFQUFTLHdCQUFpRDtRQUF6VCxp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QUMsR0FBRztRQUN0QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLElBQUksSUFBSSxFQUFFO1lBQzdDLElBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztZQUMzRCxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDL0I7SUFFSCxDQUFDOztBQTNKTSx3Q0FBc0IsR0FBRyxJQUFJLENBQUM7O1lBUnRDLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsZUFBZTtnQkFDekIsZ3pDQUF3Qzs7YUFFekM7OztZQWRRLHNCQUFzQjtZQUN0QixjQUFjO1lBRnVDLGdCQUFnQix1QkFxQnVCLFFBQVE7WUFyQjdCLGtCQUFrQjtZQVN6QyxjQUFjO1lBQTlELG9CQUFvQjtZQUFFLHdCQUF3Qjs7O29CQWVwRCxLQUFLO3NCQUNMLEtBQUs7Z0NBRUwsU0FBUyxTQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGdWxsQ2FsZW5kYXJDb21wb25lbnQgfSBmcm9tICdAZnVsbGNhbGVuZGFyL2FuZ3VsYXInO1xyXG5pbXBvcnQgeyBFdmVudElucHV0IH0gZnJvbSAnQGZ1bGxjYWxlbmRhci9jb3JlJztcclxuaW1wb3J0IGRheUdyaWRQbHVnaW4gZnJvbSAnQGZ1bGxjYWxlbmRhci9kYXlncmlkJztcclxuaW1wb3J0IHRpbWVHcmlnUGx1Z2luIGZyb20gJ0BmdWxsY2FsZW5kYXIvdGltZWdyaWQnO1xyXG5pbXBvcnQgaW50ZXJhY3Rpb25QbHVnaW4gZnJvbSAnQGZ1bGxjYWxlbmRhci9pbnRlcmFjdGlvbic7IC8vIGZvciBkYXRlQ2xpY2tcclxuaW1wb3J0IHRpbWVHcmlkUGx1Z2luIGZyb20gJ0BmdWxsY2FsZW5kYXIvdGltZWdyaWQnO1xyXG5pbXBvcnQgbGlzdFBsdWdpbiBmcm9tICdAZnVsbGNhbGVuZGFyL2xpc3QnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIERvQ2hlY2ssIE9wdGlvbmFsLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMsIEZvcm1Hcm91cCwgQWJzdHJhY3RDb250cm9sLCBDb250cm9sQ29udGFpbmVyLCBGb3JtR3JvdXBEaXJlY3RpdmUsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBFcnJvck1hc3NhZ2VWYWxpZGF0aW9uIH0gZnJvbSAnLi4vLi4vU2hhcmVkL3NlcnZpY2VzL3ZhbGlkYXRpb25FcnJvck1hc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbnRyb2xVdGlsaXR5IH0gZnJvbSAnLi4vLi4vU2hhcmVkL3NlcnZpY2VzL0NvbnRyb2xVdGlsaXR5JztcclxuaW1wb3J0IHsgQ2FsZW5kYXJPcHRpb25zIH0gZnJvbSAnLi4vLi4vU2hhcmVkL01vZGVscy9DYWxlbmRhck9wdGlvbnMnO1xyXG5pbXBvcnQgeyBDYWxlbmRhclZpZXcgfSBmcm9tICcuLi8uLi9TaGFyZWQvRW51bXMvQ2FsZW5kYXJWaWV3JztcclxuaW1wb3J0IHsgQ2FsZW5kYXJPcHRpb25zIGFzIENhbGVuZGFyT3B0aW9uc01vZGVsLCBEYXRlU2VsZWN0QXJnLCBFdmVudEFwaSwgRXZlbnRDbGlja0FyZyB9IGZyb20gJ0BmdWxsY2FsZW5kYXIvYW5ndWxhcic7XHJcbmltcG9ydCBlbkdiTG9jYWxlIGZyb20gJ0BmdWxsY2FsZW5kYXIvY29yZS9sb2NhbGVzL2VuLWdiJztcclxuaW1wb3J0IEFyTG9jYWxlIGZyb20gJ0BmdWxsY2FsZW5kYXIvY29yZS9sb2NhbGVzL2FyJztcclxuaW1wb3J0IHsgTGFuZ0NoYW5nZUV2ZW50IH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLCBDb250cm9sVmFsaWRhdGlvblNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnQkJTRi1DYWxlbmRhcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL0NhbGVuZGFyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9DYWxlbmRhci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYWxlbmRhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG5cclxuICBzdGF0aWMgY29udHJvbENvbnRhaW5lcnN0YXRpYyA9IG51bGw7XHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIEVycm9ySGFuZGxlcjogRXJyb3JNYXNzYWdlVmFsaWRhdGlvbiwgcHJpdmF0ZSBjb250cm9sVXRpbGl0eTogQ29udHJvbFV0aWxpdHksIEBPcHRpb25hbCgpIHByaXZhdGUgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lciwgcHVibGljIFBob25lQ29udHJvbEhvc3Q6IEZvcm1Hcm91cERpcmVjdGl2ZSxwcml2YXRlIFV0aWxpdHlTZXJ2aWNlOlV0aWxpdHlTZXJ2aWNlLHByaXZhdGUgdHJhbnNsYXRlOiBCQlNGVHJhbnNsYXRlU2VydmljZSxwcml2YXRlIGNvbnRyb2xWYWxpZGF0aW9uU2VydmljZTpDb250cm9sVmFsaWRhdGlvblNlcnZpY2UpIHtcclxuICAgIENhbGVuZGFyQ29tcG9uZW50LmNvbnRyb2xDb250YWluZXJzdGF0aWMgPSB0aGlzLmNvbnRyb2xDb250YWluZXI7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGdyb3VwOiBGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgb3B0aW9uczogQ2FsZW5kYXJPcHRpb25zO1xyXG4gIENhbGVuZGFyRm9ybUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcclxuICBAVmlld0NoaWxkKCdjYWxlbmRhcicsIHsgc3RhdGljOiBmYWxzZSB9KSBjYWxlbmRhckNvbXBvbmVudDogRnVsbENhbGVuZGFyQ29tcG9uZW50OyAvLyB0aGUgI2NhbGVuZGFyIGluIHRoZSB0ZW1wbGF0ZVxyXG5cclxuXHJcblxyXG4gIGNhbGVuZGFyVmlzaWJsZSA9IHRydWU7XHJcbiAgY2FsZW5kYXJPcHRpb25zOiBDYWxlbmRhck9wdGlvbnNNb2RlbDtcclxuICBjdXJyZW50RXZlbnRzOiBFdmVudEFwaVtdID0gW107XHJcbiAgY2FsZW5kYXJQbHVnaW5zID0gW2RheUdyaWRQbHVnaW4sIHRpbWVHcmlnUGx1Z2luLCBpbnRlcmFjdGlvblBsdWdpbiwgbGlzdFBsdWdpbl07XHJcbiAgY2FsZW5kYXJXZWVrZW5kcyA9IHRydWU7XHJcbiAgY2FsZW5kYXJFdmVudHM6IEV2ZW50SW5wdXRbXSA9IFtdO1xyXG4gIERlZmF1bHRWaWV3ID0gXCJcIlxyXG4gIENhbGVuZGFyVmlld3MgPSAnJ1xyXG4gIGxvY2FsZXMgPSBbXTtcclxuICBDdXJyZW50TGFuZ3VhZ2UgPSBcIlwiXHJcbiAgYXN5bmMgbmdPbkluaXQoKSB7XHJcbiAgICBzd2l0Y2ggKGF3YWl0IHRoaXMuVXRpbGl0eVNlcnZpY2UuZ2V0Q3VycmVudExhbmd1YWdlKCkpIHtcclxuICAgICAgY2FzZSAnYXInOlxyXG4gICAgICAgIHRoaXMubG9jYWxlcyA9IFtBckxvY2FsZV1cclxuICAgICAgICB0aGlzLkN1cnJlbnRMYW5ndWFnZSA9IFwiQXJcIlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdlbic6XHJcbiAgICAgICAgdGhpcy5sb2NhbGVzID0gW2VuR2JMb2NhbGVdXHJcbiAgICAgICAgdGhpcy5DdXJyZW50TGFuZ3VhZ2UgPSBcIkVuXCJcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYW5zbGF0ZS5vbkxhbmdDaGFuZ2Uuc3Vic2NyaWJlKChldmVudDogTGFuZ0NoYW5nZUV2ZW50KSA9PiB7XHJcbiAgICAgIHN3aXRjaCAoZXZlbnQubGFuZykge1xyXG4gICAgICAgIGNhc2UgJ2FyJzpcclxuICAgICAgICAgIHRoaXMubG9jYWxlcyA9IFtBckxvY2FsZV1cclxuICAgICAgICAgIHRoaXMuQ3VycmVudExhbmd1YWdlID0gXCJBclwiXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdlbic6XHJcbiAgICAgICAgICB0aGlzLmxvY2FsZXMgPSBbZW5HYkxvY2FsZV1cclxuICAgICAgICAgIHRoaXMuQ3VycmVudExhbmd1YWdlID0gXCJFblwiXHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNhbGVuZGFyRXZlbnRzID0gdGhpcy5vcHRpb25zLkV2ZW50TGlzdFxyXG4gICAgdGhpcy5jYWxlbmRhcldlZWtlbmRzID0gdGhpcy5vcHRpb25zLkFsbG93Q2FsZW5kYXJXZWVrZW5kc1xyXG4gICAgc3dpdGNoICh0aGlzLm9wdGlvbnMuRGVmYXVsdFZpZXcpIHtcclxuICAgICAgY2FzZSBDYWxlbmRhclZpZXcuTW9udGg6XHJcbiAgICAgICAgdGhpcy5EZWZhdWx0VmlldyA9IFwiZGF5R3JpZE1vbnRoXCJcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDYWxlbmRhclZpZXcuV2Vla2x5OlxyXG4gICAgICAgIHRoaXMuRGVmYXVsdFZpZXcgPSBcInRpbWVHcmlkV2Vla1wiXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3LkRhaWx5OlxyXG4gICAgICAgIHRoaXMuRGVmYXVsdFZpZXcgPSBcInRpbWVHcmlkRGF5XCJcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuQ2FsZW5kYXJWaWV3cyAhPSBudWxsICYmIHRoaXMub3B0aW9ucy5DYWxlbmRhclZpZXdzLmxlbmd0aCA+IDApXHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLm9wdGlvbnMuQ2FsZW5kYXJWaWV3cy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5vcHRpb25zLkNhbGVuZGFyVmlld3NbaW5kZXhdO1xyXG4gICAgICAgIHN3aXRjaCAoZWxlbWVudCkge1xyXG4gICAgICAgICAgY2FzZSBDYWxlbmRhclZpZXcuQWdlbmRhOlxyXG4gICAgICAgICAgICB0aGlzLkNhbGVuZGFyVmlld3MgKz0gXCJsaXN0V2VlayxcIlxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3LkRhaWx5OlxyXG4gICAgICAgICAgICB0aGlzLkNhbGVuZGFyVmlld3MgKz0gXCJ0aW1lR3JpZERheSxcIlxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3LldlZWtseTpcclxuICAgICAgICAgICAgdGhpcy5DYWxlbmRhclZpZXdzICs9IFwidGltZUdyaWRXZWVrLFwiXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBDYWxlbmRhclZpZXcuTW9udGg6XHJcbiAgICAgICAgICAgIHRoaXMuQ2FsZW5kYXJWaWV3cyArPSBcImRheUdyaWRNb250aCxcIlxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB0aGlzLmdyb3VwLmFkZENvbnRyb2wodGhpcy5vcHRpb25zLk5hbWUsIG5ldyBGb3JtQ29udHJvbCgnJykpO1xyXG4gICAgdGhpcy5DYWxlbmRhckZvcm1Db250cm9sID0gdGhpcy5ncm91cC5jb250cm9sc1t0aGlzLm9wdGlvbnMuTmFtZV07IC8vICBuZXcgRm9ybUNvbnRyb2woJycsdmFsaWRhdGlvblJ1bGVzKTtcclxuXHJcblxyXG4gICAgdGhpcy5jYWxlbmRhck9wdGlvbnMgPSB7XHJcbiAgICAgIHBsdWdpbnM6IFtcclxuICAgICAgICBkYXlHcmlkUGx1Z2luLFxyXG4gICAgICAgIHRpbWVHcmlkUGx1Z2luLFxyXG4gICAgICAgIGxpc3RQbHVnaW4sXHJcbiAgICAgICAgaW50ZXJhY3Rpb25QbHVnaW5cclxuICAgICAgXSxcclxuICAgICAgaGVhZGVyVG9vbGJhcjoge1xyXG4gICAgICAgIGxlZnQ6ICdwcmV2LG5leHQgdG9kYXknLFxyXG4gICAgICAgIGNlbnRlcjogJ3RpdGxlJyxcclxuICAgICAgICByaWdodDogdGhpcy5DYWxlbmRhclZpZXdzLnN1YnN0cmluZygwLCB0aGlzLkNhbGVuZGFyVmlld3MubGVuZ3RoIC0gMSlcclxuICAgICAgfSxcclxuICAgICAgbG9jYWxlczogdGhpcy5sb2NhbGVzLFxyXG4gICAgICBsb2NhbGU6IHRoaXMuQ3VycmVudExhbmd1YWdlLFxyXG4gICAgICBpbml0aWFsVmlldzogdGhpcy5DYWxlbmRhclZpZXdzLnNwbGl0KCcsJylbMF0sXHJcbiAgICAgIGluaXRpYWxFdmVudHM6IHRoaXMuY2FsZW5kYXJFdmVudHMsXHJcbiAgICAgIGluaXRpYWxEYXRlOiB0aGlzLm9wdGlvbnMuRGVmYXVsdERhdGUsXHJcbiAgICAgIHdlZWtlbmRzOiB0aGlzLm9wdGlvbnMuQWxsb3dDYWxlbmRhcldlZWtlbmRzLFxyXG4gICAgICBlZGl0YWJsZTogdGhpcy5vcHRpb25zLkV2ZW50ZWRpdGFibGUsXHJcbiAgICAgIHNlbGVjdGFibGU6IHRoaXMub3B0aW9ucy5FdmVudHNlbGVjdGFibGUsXHJcbiAgICAgIC8vIHNlbGVjdE1pcnJvcjogdHJ1ZSxcclxuICAgICAgZGF5TWF4RXZlbnRzOiB0aGlzLm9wdGlvbnMuZGF5TWF4RXZlbnRzLFxyXG4gICAgICBzZWxlY3Q6IHRoaXMuT25EYXlDbGlja0Z1bmN0aW9uLmJpbmQodGhpcyksXHJcbiAgICAgIGV2ZW50Q2xpY2s6IHRoaXMuT25FdmVudENsaWNrRnVuY3Rpb24uYmluZCh0aGlzKSxcclxuICAgICAgLy8gZXZlbnRzU2V0OiB0aGlzLmhhbmRsZUV2ZW50cy5iaW5kKHRoaXMpXHJcbiAgICAgIC8qIHlvdSBjYW4gdXBkYXRlIGEgcmVtb3RlIGRhdGFiYXNlIHdoZW4gdGhlc2UgZmlyZTpcclxuICAgICAgZXZlbnRBZGQ6XHJcbiAgICAgIGV2ZW50Q2hhbmdlOlxyXG4gICAgICBldmVudFJlbW92ZTpcclxuICAgICAgKi9cclxuICAgIH07XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuXHJcblxyXG4gIH1cclxuXHJcbiAgcmVzZXRFcnJvciA9ICgpID0+IHtcclxuICAgIHRoaXMuY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLlJlbW92ZUdsb2JhbEVycm9yKCk7XHJcbiAgfVxyXG5cclxuICBnZXRFcnJvclZhbGlkYXRpb24oRXJyb3JzaXRlbTogYW55W10pIHtcclxuICB9XHJcblxyXG5cclxuICBPbkRheUNsaWNrRnVuY3Rpb24oYXJnKSB7XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5PbkRheUNsaWNrRnVuY3Rpb24gIT0gbnVsbCkge1xyXG4gICAgICBsZXQgRGF5Q2xpY2tGdW5jdGlvbiA9IHRoaXMub3B0aW9ucy5PbkRheUNsaWNrRnVuY3Rpb247XHJcbiAgICAgIERheUNsaWNrRnVuY3Rpb24oYXJnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIE9uRXZlbnRDbGlja0Z1bmN0aW9uKGFyZykge1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5PbkV2ZW50Q2xpY2tGdW5jdGlvbiAhPSBudWxsKSB7XHJcbiAgICAgIGxldCBFdmVudENsaWNrRnVuY3Rpb24gPSB0aGlzLm9wdGlvbnMuT25FdmVudENsaWNrRnVuY3Rpb247XHJcbiAgICAgIEV2ZW50Q2xpY2tGdW5jdGlvbihhcmcuZXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgLy8gaGFuZGxlRGF0ZVNlbGVjdChzZWxlY3RJbmZvOiBEYXRlU2VsZWN0QXJnKSB7XHJcbiAgLy8gICBjb25zdCB0aXRsZSA9IHByb21wdCgnUGxlYXNlIGVudGVyIGEgbmV3IHRpdGxlIGZvciB5b3VyIGV2ZW50Jyk7XHJcbiAgLy8gICBjb25zdCBjYWxlbmRhckFwaSA9IHNlbGVjdEluZm8udmlldy5jYWxlbmRhcjtcclxuXHJcbiAgLy8gICBjYWxlbmRhckFwaS51bnNlbGVjdCgpOyAvLyBjbGVhciBkYXRlIHNlbGVjdGlvblxyXG5cclxuICAvLyAgIGlmICh0aXRsZSkge1xyXG4gIC8vICAgICBjYWxlbmRhckFwaS5hZGRFdmVudCh7XHJcbiAgLy8gICAgICAgaWQ6IFwiMVwiLFxyXG4gIC8vICAgICAgIHRpdGxlLFxyXG4gIC8vICAgICAgIHN0YXJ0OiBzZWxlY3RJbmZvLnN0YXJ0U3RyLFxyXG4gIC8vICAgICAgIGVuZDogc2VsZWN0SW5mby5lbmRTdHIsXHJcbiAgLy8gICAgICAgYWxsRGF5OiBzZWxlY3RJbmZvLmFsbERheVxyXG4gIC8vICAgICB9KTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIC8vIGhhbmRsZUV2ZW50Q2xpY2soY2xpY2tJbmZvOiBFdmVudENsaWNrQXJnKSB7XHJcbiAgLy8gICBpZiAoY29uZmlybShgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgZXZlbnQgJyR7Y2xpY2tJbmZvLmV2ZW50LnRpdGxlfSdgKSkge1xyXG4gIC8vICAgICBjbGlja0luZm8uZXZlbnQucmVtb3ZlKCk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICAvLyBoYW5kbGVFdmVudHMoZXZlbnRzOiBFdmVudEFwaVtdKSB7XHJcbiAgLy8gICB0aGlzLmN1cnJlbnRFdmVudHMgPSBldmVudHM7XHJcbiAgLy8gfVxyXG5cclxuXHJcblxyXG5cclxufVxyXG5cclxuXHJcbiJdfQ==