@bnsights/bbsf-controls 1.0.86 → 1.0.87
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -0
- package/bnsights-bbsf-controls-1.0.87.tgz +0 -0
- package/bnsights-bbsf-controls.d.ts +1 -1
- package/esm2020/bnsights-bbsf-controls.mjs +5 -0
- package/esm2020/lib/Shared/Directives/template-name.directive.mjs +18 -0
- package/{esm2015/lib/Shared/Enums/CalendarView.js → esm2020/lib/Shared/Enums/CalendarView.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/ControlLayout.js → esm2020/lib/Shared/Enums/ControlLayout.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/Countries.js → esm2020/lib/Shared/Enums/Countries.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/Enums.js → esm2020/lib/Shared/Enums/Enums.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/FileType.js → esm2020/lib/Shared/Enums/FileType.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/FilterType.js → esm2020/lib/Shared/Enums/FilterType.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/FontSize.js → esm2020/lib/Shared/Enums/FontSize.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/ForceDirection.js → esm2020/lib/Shared/Enums/ForceDirection.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/IconPosition.js → esm2020/lib/Shared/Enums/IconPosition.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/ImageType.js → esm2020/lib/Shared/Enums/ImageType.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/InputType.js → esm2020/lib/Shared/Enums/InputType.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/Insert.js → esm2020/lib/Shared/Enums/Insert.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/LanguageMode.js → esm2020/lib/Shared/Enums/LanguageMode.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/LanguageValidation.js → esm2020/lib/Shared/Enums/LanguageValidation.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/Misc.js → esm2020/lib/Shared/Enums/Misc.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/PagingActionMode.js → esm2020/lib/Shared/Enums/PagingActionMode.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/Para.js → esm2020/lib/Shared/Enums/Para.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/PickerType.js → esm2020/lib/Shared/Enums/PickerType.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/SelectMode.js → esm2020/lib/Shared/Enums/SelectMode.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/StartView.js → esm2020/lib/Shared/Enums/StartView.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/Style.js → esm2020/lib/Shared/Enums/Style.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/StyleConfirmationMode.js → esm2020/lib/Shared/Enums/StyleConfirmationMode.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/TagInputView.js → esm2020/lib/Shared/Enums/TagInputView.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/menu-list-enum.js → esm2020/lib/Shared/Enums/menu-list-enum.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/Attribute.js → esm2020/lib/Shared/Models/Attribute.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/AutocompleteDTO.js → esm2020/lib/Shared/Models/AutocompleteDTO.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/AutocompleteOptions.js → esm2020/lib/Shared/Models/AutocompleteOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/CalendarEventDTO.js → esm2020/lib/Shared/Models/CalendarEventDTO.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/CalendarOptions.js → esm2020/lib/Shared/Models/CalendarOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/CancelDTO.js → esm2020/lib/Shared/Models/CancelDTO.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/CaptchaStyle.js → esm2020/lib/Shared/Models/CaptchaStyle.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/CheckBoxOptions.js → esm2020/lib/Shared/Models/CheckBoxOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/ConfirmationModalOptions.js → esm2020/lib/Shared/Models/ConfirmationModalOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/ControlOptionsBase.js → esm2020/lib/Shared/Models/ControlOptionsBase.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/CustomValidation.js → esm2020/lib/Shared/Models/CustomValidation.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/DropdownListItem.js → esm2020/lib/Shared/Models/DropdownListItem.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/DropdownOptions.js → esm2020/lib/Shared/Models/DropdownOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/EditPersonalImage.js → esm2020/lib/Shared/Models/EditPersonalImage.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/EnglishArabicDTO.js → esm2020/lib/Shared/Models/EnglishArabicDTO.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/FileDTO.js → esm2020/lib/Shared/Models/FileDTO.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/FileUploadModel.js → esm2020/lib/Shared/Models/FileUploadModel.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/FileUploadOptions.js → esm2020/lib/Shared/Models/FileUploadOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/FilterItem.js → esm2020/lib/Shared/Models/FilterItem.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/FormOptions.js → esm2020/lib/Shared/Models/FormOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/HtmlEditorOptions.js → esm2020/lib/Shared/Models/HtmlEditorOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/ImageUploadOptions.js → esm2020/lib/Shared/Models/ImageUploadOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/MapAutoCompleteOptions.js → esm2020/lib/Shared/Models/MapAutoCompleteOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/MapAutocompleteDTO.js → esm2020/lib/Shared/Models/MapAutocompleteDTO.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/MultiLingualHtmlEditorOptions.js → esm2020/lib/Shared/Models/MultiLingualHtmlEditorOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/MultiLingualTextAreaOptions.js → esm2020/lib/Shared/Models/MultiLingualTextAreaOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/MultilingualControlOptionsBase.js → esm2020/lib/Shared/Models/MultilingualControlOptionsBase.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/MultilingualTextBoxOptions.js → esm2020/lib/Shared/Models/MultilingualTextBoxOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/MultipleFileUploadModel.js → esm2020/lib/Shared/Models/MultipleFileUploadModel.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/PagingDTO.js → esm2020/lib/Shared/Models/PagingDTO.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/PagingOptions.js → esm2020/lib/Shared/Models/PagingOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/PagingPayload.js → esm2020/lib/Shared/Models/PagingPayload.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/PhoneOptions.js → esm2020/lib/Shared/Models/PhoneOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/ProfileImageUploadOptions.js → esm2020/lib/Shared/Models/ProfileImageUploadOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/ProfilePictureDTO.js → esm2020/lib/Shared/Models/ProfilePictureDTO.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/RadioButtonItem.js → esm2020/lib/Shared/Models/RadioButtonItem.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/RadioButtonOptions.js → esm2020/lib/Shared/Models/RadioButtonOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/RangeNumber.js → esm2020/lib/Shared/Models/RangeNumber.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/Recaptcha.js → esm2020/lib/Shared/Models/Recaptcha.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/RecaptchaOptions.js → esm2020/lib/Shared/Models/RecaptchaOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/RepeaterField.js → esm2020/lib/Shared/Models/RepeaterField.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/RepeaterOptions.js → esm2020/lib/Shared/Models/RepeaterOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/SaveDTO.js → esm2020/lib/Shared/Models/SaveDTO.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/TagsInputDTO.js → esm2020/lib/Shared/Models/TagsInputDTO.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/TagsInputOptions.js → esm2020/lib/Shared/Models/TagsInputOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/TextAreaOptions.js → esm2020/lib/Shared/Models/TextAreaOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/TextBoxOptions.js → esm2020/lib/Shared/Models/TextBoxOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/ToggleslideOptions.js → esm2020/lib/Shared/Models/ToggleslideOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/UploadPersonalImage.js → esm2020/lib/Shared/Models/UploadPersonalImage.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/bread-crumb.js → esm2020/lib/Shared/Models/bread-crumb.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/control-filter-Item.js → esm2020/lib/Shared/Models/control-filter-Item.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/datePickerOptions.js → esm2020/lib/Shared/Models/datePickerOptions.mjs} +1 -1
- package/{esm2015/lib/Shared/Models/filter-options.js → esm2020/lib/Shared/Models/filter-options.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/page-header-options.js → esm2020/lib/Shared/Models/page-header-options.mjs} +0 -0
- package/esm2020/lib/Shared/Pipes/bbsf-date-time.pipe.mjs +21 -0
- package/esm2020/lib/Shared/Pipes/bbsf-date.pipe.mjs +21 -0
- package/esm2020/lib/Shared/components/app-base-component.mjs +198 -0
- package/esm2020/lib/Shared/components/ng-tag-input.mjs +336 -0
- package/{esm2015/lib/Shared/config/environment.js → esm2020/lib/Shared/config/environment.mjs} +0 -0
- package/esm2020/lib/Shared/default_intl.mjs +29 -0
- package/esm2020/lib/Shared/services/ControlUtility.mjs +162 -0
- package/esm2020/lib/Shared/services/GlobalSettings.service.mjs +30 -0
- package/esm2020/lib/Shared/services/OnPagingFiltersChange.service.mjs +24 -0
- package/esm2020/lib/Shared/services/render-component-service.service.mjs +30 -0
- package/esm2020/lib/Shared/services/validationErrorMassage.service.mjs +137 -0
- package/esm2020/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.mjs +245 -0
- package/esm2020/lib/controls/Calendar/Calendar.component.mjs +172 -0
- package/esm2020/lib/controls/CheckBox/CheckBox.component.mjs +114 -0
- package/esm2020/lib/controls/ConfirmationModal/ConfirmationModal.component.mjs +136 -0
- package/esm2020/lib/controls/DateTimePicker/DateTimePicker.component.mjs +217 -0
- package/esm2020/lib/controls/DropdownList/DropdownList.component.mjs +179 -0
- package/esm2020/lib/controls/FileUplaod/FileUplaod.component.mjs +453 -0
- package/esm2020/lib/controls/Form/Form.component.mjs +101 -0
- package/esm2020/lib/controls/HtmlEditor/HtmlEditor.component.mjs +223 -0
- package/esm2020/lib/controls/ImageUpload/ImageUpload.component.mjs +350 -0
- package/esm2020/lib/controls/MapAutoComplete/MapAutoComplete.component.mjs +325 -0
- package/esm2020/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.mjs +427 -0
- package/esm2020/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.mjs +427 -0
- package/esm2020/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.mjs +426 -0
- package/esm2020/lib/controls/Paging/JwPagination.component.mjs +156 -0
- package/esm2020/lib/controls/Paging/Paging.component.mjs +312 -0
- package/esm2020/lib/controls/Phone/Phone.component.mjs +124 -0
- package/esm2020/lib/controls/ProfileImageUploader/ProfileImageUploader.component.mjs +354 -0
- package/esm2020/lib/controls/RadioButton/RadioButton.component.mjs +106 -0
- package/esm2020/lib/controls/Recaptcha/Recaptcha.component.mjs +132 -0
- package/esm2020/lib/controls/Repeater/repeater/repeater.component.mjs +125 -0
- package/esm2020/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.mjs +750 -0
- package/esm2020/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.mjs +21 -0
- package/esm2020/lib/controls/Repeater/repeater-table/repeater-table.component.mjs +108 -0
- package/esm2020/lib/controls/TagsInput/TagsInput.component.mjs +268 -0
- package/esm2020/lib/controls/TextArea/TextArea.component.mjs +192 -0
- package/esm2020/lib/controls/TextBox/TextBox.component.mjs +266 -0
- package/esm2020/lib/controls/Toggleslide/toggleslide.component.mjs +84 -0
- package/esm2020/lib/controls/bbsf-controls.module.mjs +401 -0
- package/esm2020/lib/controls/page-header-component/page-header-component.component.mjs +37 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
- package/fesm2015/{bnsights-bbsf-controls.js → bnsights-bbsf-controls.mjs} +1787 -1644
- package/fesm2015/bnsights-bbsf-controls.mjs.map +1 -0
- package/fesm2020/bnsights-bbsf-controls.mjs +8938 -0
- package/fesm2020/bnsights-bbsf-controls.mjs.map +1 -0
- package/lib/Shared/Directives/template-name.directive.d.ts +3 -0
- package/lib/Shared/Models/datePickerOptions.d.ts +1 -1
- package/lib/Shared/Pipes/bbsf-date-time.pipe.d.ts +3 -0
- package/lib/Shared/Pipes/bbsf-date.pipe.d.ts +3 -0
- package/lib/Shared/components/app-base-component.d.ts +3 -0
- package/lib/Shared/components/ng-tag-input.d.ts +3 -0
- package/lib/Shared/default_intl.d.ts +3 -0
- package/lib/Shared/services/ControlUtility.d.ts +3 -0
- package/lib/Shared/services/GlobalSettings.service.d.ts +3 -0
- package/lib/Shared/services/OnPagingFiltersChange.service.d.ts +3 -0
- package/lib/Shared/services/render-component-service.service.d.ts +3 -0
- package/lib/Shared/services/validationErrorMassage.service.d.ts +3 -0
- package/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.d.ts +4 -0
- package/lib/controls/Calendar/Calendar.component.d.ts +3 -0
- package/lib/controls/CheckBox/CheckBox.component.d.ts +4 -0
- package/lib/controls/ConfirmationModal/ConfirmationModal.component.d.ts +3 -0
- package/lib/controls/DateTimePicker/DateTimePicker.component.d.ts +8 -2
- package/lib/controls/DropdownList/DropdownList.component.d.ts +4 -0
- package/lib/controls/FileUplaod/FileUplaod.component.d.ts +3 -0
- package/lib/controls/Form/Form.component.d.ts +3 -0
- package/lib/controls/HtmlEditor/HtmlEditor.component.d.ts +4 -0
- package/lib/controls/ImageUpload/ImageUpload.component.d.ts +3 -0
- package/lib/controls/MapAutoComplete/MapAutoComplete.component.d.ts +3 -0
- package/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.d.ts +3 -0
- package/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.d.ts +3 -0
- package/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.d.ts +3 -0
- package/lib/controls/Paging/JwPagination.component.d.ts +3 -0
- package/lib/controls/Paging/Paging.component.d.ts +3 -0
- package/lib/controls/Phone/Phone.component.d.ts +7 -1
- package/lib/controls/ProfileImageUploader/ProfileImageUploader.component.d.ts +3 -0
- package/lib/controls/RadioButton/RadioButton.component.d.ts +3 -0
- package/lib/controls/Recaptcha/Recaptcha.component.d.ts +4 -0
- package/lib/controls/Repeater/repeater/repeater.component.d.ts +3 -0
- package/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.d.ts +3 -0
- package/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.d.ts +3 -0
- package/lib/controls/Repeater/repeater-table/repeater-table.component.d.ts +3 -0
- package/lib/controls/TagsInput/TagsInput.component.d.ts +4 -0
- package/lib/controls/TextArea/TextArea.component.d.ts +4 -0
- package/lib/controls/TextBox/TextBox.component.d.ts +4 -0
- package/lib/controls/Toggleslide/toggleslide.component.d.ts +4 -0
- package/lib/controls/bbsf-controls.module.d.ts +74 -0
- package/lib/controls/page-header-component/page-header-component.component.d.ts +3 -0
- package/package.json +20 -8
- package/bnsights-bbsf-controls-1.0.86.tgz +0 -0
- package/bnsights-bbsf-controls.metadata.json +0 -1
- package/bundles/bnsights-bbsf-controls.umd.js +0 -9430
- package/bundles/bnsights-bbsf-controls.umd.js.map +0 -1
- package/esm2015/bnsights-bbsf-controls.js +0 -6
- package/esm2015/lib/Shared/Directives/template-name.directive.js +0 -18
- package/esm2015/lib/Shared/Pipes/bbsf-date-time.pipe.js +0 -20
- package/esm2015/lib/Shared/Pipes/bbsf-date.pipe.js +0 -20
- package/esm2015/lib/Shared/components/app-base-component.js +0 -198
- package/esm2015/lib/Shared/components/ng-tag-input.js +0 -323
- package/esm2015/lib/Shared/default_intl.js +0 -29
- package/esm2015/lib/Shared/services/ControlUtility.js +0 -164
- package/esm2015/lib/Shared/services/GlobalSettings.service.js +0 -28
- package/esm2015/lib/Shared/services/OnPagingFiltersChange.service.js +0 -22
- package/esm2015/lib/Shared/services/render-component-service.service.js +0 -30
- package/esm2015/lib/Shared/services/validationErrorMassage.service.js +0 -137
- package/esm2015/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.js +0 -248
- package/esm2015/lib/controls/Calendar/Calendar.component.js +0 -176
- package/esm2015/lib/controls/CheckBox/CheckBox.component.js +0 -114
- package/esm2015/lib/controls/ConfirmationModal/ConfirmationModal.component.js +0 -139
- package/esm2015/lib/controls/DateTimePicker/DateTimePicker.component.js +0 -215
- package/esm2015/lib/controls/DropdownList/DropdownList.component.js +0 -178
- package/esm2015/lib/controls/FileUplaod/FileUplaod.component.js +0 -451
- package/esm2015/lib/controls/Form/Form.component.js +0 -106
- package/esm2015/lib/controls/HtmlEditor/HtmlEditor.component.js +0 -222
- package/esm2015/lib/controls/ImageUpload/ImageUpload.component.js +0 -347
- package/esm2015/lib/controls/MapAutoComplete/MapAutoComplete.component.js +0 -325
- package/esm2015/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.js +0 -429
- package/esm2015/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.js +0 -430
- package/esm2015/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.js +0 -429
- package/esm2015/lib/controls/Paging/JwPagination.component.js +0 -129
- package/esm2015/lib/controls/Paging/Paging.component.js +0 -312
- package/esm2015/lib/controls/Phone/Phone.component.js +0 -119
- package/esm2015/lib/controls/ProfileImageUploader/ProfileImageUploader.component.js +0 -349
- package/esm2015/lib/controls/RadioButton/RadioButton.component.js +0 -108
- package/esm2015/lib/controls/Recaptcha/Recaptcha.component.js +0 -131
- package/esm2015/lib/controls/Repeater/repeater/repeater.component.js +0 -117
- package/esm2015/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.js +0 -748
- package/esm2015/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.js +0 -19
- package/esm2015/lib/controls/Repeater/repeater-table/repeater-table.component.js +0 -108
- package/esm2015/lib/controls/TagsInput/TagsInput.component.js +0 -268
- package/esm2015/lib/controls/TextArea/TextArea.component.js +0 -191
- package/esm2015/lib/controls/TextBox/TextBox.component.js +0 -262
- package/esm2015/lib/controls/Toggleslide/toggleslide.component.js +0 -83
- package/esm2015/lib/controls/bbsf-controls.module.js +0 -243
- package/esm2015/lib/controls/page-header-component/page-header-component.component.js +0 -32
- package/fesm2015/bnsights-bbsf-controls.js.map +0 -1
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import { Component, Input, Optional, Output, EventEmitter } from '@angular/core';
|
|
2
|
-
import { FormControl, Validators, ControlContainer, FormGroupDirective } from '@angular/forms';
|
|
3
|
-
import { ControlUtility } from '../../Shared/services/ControlUtility';
|
|
4
|
-
import { ControlValidationService, UtilityService } from '@bnsights/bbsf-utilities';
|
|
5
|
-
import { GlobalSettings } from '../../Shared/services/GlobalSettings.service';
|
|
6
|
-
export class RadioButtonComponent {
|
|
7
|
-
// tslint:disable-next-line: max-line-length
|
|
8
|
-
constructor(controlUtility, controlContainer, RadioButtonControlHost, UtilityService, controlValidationService, globalSettings) {
|
|
9
|
-
this.controlUtility = controlUtility;
|
|
10
|
-
this.controlContainer = controlContainer;
|
|
11
|
-
this.RadioButtonControlHost = RadioButtonControlHost;
|
|
12
|
-
this.UtilityService = UtilityService;
|
|
13
|
-
this.controlValidationService = controlValidationService;
|
|
14
|
-
this.globalSettings = globalSettings;
|
|
15
|
-
this.OnChange = new EventEmitter();
|
|
16
|
-
this.markAllAsTouched = false;
|
|
17
|
-
this.validationRules = [];
|
|
18
|
-
this.validationRulesasync = [];
|
|
19
|
-
this.resetError = () => {
|
|
20
|
-
this.controlValidationService.RemoveGlobalError();
|
|
21
|
-
};
|
|
22
|
-
//External Method
|
|
23
|
-
this.RemoveRequiredValidation = () => {
|
|
24
|
-
this.controlUtility.RemoveRequiredValidation(this.RadioButtonFormControl, this.validationRules, this.options);
|
|
25
|
-
};
|
|
26
|
-
//External Method
|
|
27
|
-
this.AddRequiredValidation = () => {
|
|
28
|
-
this.controlUtility.AddRequiredValidation(this.RadioButtonFormControl, this.validationRules, this.options);
|
|
29
|
-
};
|
|
30
|
-
//External Method
|
|
31
|
-
this.RemoveCustomValidation = (CustomValidation) => {
|
|
32
|
-
this.controlUtility.RemoveCustomValidation(this.RadioButtonFormControl, this.validationRules, CustomValidation);
|
|
33
|
-
};
|
|
34
|
-
//External Method
|
|
35
|
-
this.AddCustomValidation = (CustomValidation) => {
|
|
36
|
-
this.controlUtility.AddCustomValidation(this.RadioButtonFormControl, this.validationRules, CustomValidation);
|
|
37
|
-
};
|
|
38
|
-
//External Method
|
|
39
|
-
this.IsValid = () => {
|
|
40
|
-
this.controlUtility.IsValid(this.RadioButtonFormControl);
|
|
41
|
-
};
|
|
42
|
-
RadioButtonComponent.controlContainerstatic = this.controlContainer;
|
|
43
|
-
}
|
|
44
|
-
ngOnInit() {
|
|
45
|
-
this.group.addControl(this.options.Name, new FormControl(''));
|
|
46
|
-
this.RadioButtonFormControl = this.group.controls[this.options.Name]; // new FormControl('',validationRules);
|
|
47
|
-
if (!this.options.ViewType)
|
|
48
|
-
this.options.ViewType = this.globalSettings.ViewType;
|
|
49
|
-
if (this.options.IsRequired) {
|
|
50
|
-
this.validationRules.push(Validators.required);
|
|
51
|
-
}
|
|
52
|
-
this.RadioButtonFormControl.setValidators(this.validationRules);
|
|
53
|
-
this.RadioButtonFormControl.setAsyncValidators(this.validationRulesasync);
|
|
54
|
-
if (this.options.IsDisabled) {
|
|
55
|
-
this.RadioButtonFormControl.disable();
|
|
56
|
-
}
|
|
57
|
-
if (this.options.LabelKey != null && this.options.LabelKey != "")
|
|
58
|
-
this.options.LabelValue = this.UtilityService.getResourceValue(this.options.LabelKey);
|
|
59
|
-
this.RadioButtonControlHost.ngSubmit.subscribe((value) => {
|
|
60
|
-
this.group.markAllAsTouched();
|
|
61
|
-
this.markAllAsTouched = true;
|
|
62
|
-
});
|
|
63
|
-
if (this.options.Value) {
|
|
64
|
-
this.RadioButtonFormControl.setValue(this.options.Value.Value);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
showGlobalError() {
|
|
68
|
-
this.controlUtility.showGlobalError();
|
|
69
|
-
}
|
|
70
|
-
getErrorValidation(ErrorList) {
|
|
71
|
-
if (this.markAllAsTouched && this.group.invalid) {
|
|
72
|
-
this.showGlobalError();
|
|
73
|
-
this.markAllAsTouched = false;
|
|
74
|
-
}
|
|
75
|
-
return this.controlUtility.getErrorValidationMassage(ErrorList, this.group, this.options);
|
|
76
|
-
}
|
|
77
|
-
onValueChanged() {
|
|
78
|
-
let originalValue = this.RadioButtonFormControl.value;
|
|
79
|
-
if (this.options.PatchFunction && this.options.PatchPath && this.RadioButtonFormControl.valid) {
|
|
80
|
-
this.controlUtility.patchControlValue(originalValue, this.options.PatchFunction, this.options.PatchPath);
|
|
81
|
-
}
|
|
82
|
-
//Use this line to enable two way binding.
|
|
83
|
-
this.options.Value = originalValue;
|
|
84
|
-
this.OnChange.emit(originalValue);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
RadioButtonComponent.controlContainerstatic = null;
|
|
88
|
-
RadioButtonComponent.decorators = [
|
|
89
|
-
{ type: Component, args: [{
|
|
90
|
-
// tslint:disable-next-line: component-selector
|
|
91
|
-
selector: 'BBSF-RadioButton',
|
|
92
|
-
template: "<div class=\"form-group bbsf-control bbsf-radio-button\" [formGroup]=\"group\">\r\n <div [ngClass]=\"(options.ViewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label [hidden]=\"options.HideLabel\" class=\"bbsf-label {{options.LabelExtraClasses}}\">\r\n {{options.LabelValue}}\r\n <!--Asterisk-->\r\n <span *ngIf=\"(options.ShowAsterisk&&options.IsRequired)||(options.IsRequired)\" class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"bbsf-input-container\">\r\n <!--input-->\r\n <div class=\"radio-container\" *ngFor=\"let item of options.Items\">\r\n <input type=\"radio\" id=\"{{options.Name}}{{item.Value}}\"\r\n class=\"{{options.ExtraClasses}}\"\r\n [value]=\"item.Value\" checked=\"{{(options.Value!=null)&&(options.Value.Value == item.Value)}}\"\r\n (change)=\"onValueChanged()\"\r\n aria-describedby=\"email-error\"\r\n aria-invalid=\"true\" [(ngModel)]=\"options.Value\"\r\n formControlName=\"{{options.Name}}\">\r\n <label class=\"radio-input-label\" for=\"{{options.Name}}{{item.Value}}\">{{item.Text}}</label>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"subtext-container\">\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\" *ngIf=\"options.LabelDescription!=null\">{{options.LabelDescription}}</div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\" *ngIf=\"(RadioButtonFormControl.invalid && RadioButtonFormControl.touched)\">\r\n {{getErrorValidation(RadioButtonFormControl.errors|keyvalue)}}\r\n </div>\r\n </div>\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty) \">{{resetError()}}</div>\r\n</div>\r\n\r\n"
|
|
93
|
-
},] }
|
|
94
|
-
];
|
|
95
|
-
RadioButtonComponent.ctorParameters = () => [
|
|
96
|
-
{ type: ControlUtility },
|
|
97
|
-
{ type: ControlContainer, decorators: [{ type: Optional }] },
|
|
98
|
-
{ type: FormGroupDirective },
|
|
99
|
-
{ type: UtilityService },
|
|
100
|
-
{ type: ControlValidationService },
|
|
101
|
-
{ type: GlobalSettings }
|
|
102
|
-
];
|
|
103
|
-
RadioButtonComponent.propDecorators = {
|
|
104
|
-
group: [{ type: Input }],
|
|
105
|
-
options: [{ type: Input }],
|
|
106
|
-
OnChange: [{ type: Output }]
|
|
107
|
-
};
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFkaW9CdXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1jb250cm9scy9zcmMvbGliL2NvbnRyb2xzL1JhZGlvQnV0dG9uL1JhZGlvQnV0dG9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RixPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBOEIsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFdEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLGNBQWMsRUFBRSxNQUFPLDBCQUEwQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQVE5RSxNQUFNLE9BQU8sb0JBQW9CO0lBSS9CLDRDQUE0QztJQUM1QyxZQUFvQixjQUE4QixFQUFzQixnQkFBa0MsRUFDakcsc0JBQTBDLEVBQVUsY0FBOEIsRUFDakYsd0JBQWtELEVBQVUsY0FBOEI7UUFGaEYsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQXNCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDakcsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUFvQjtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUNqRiw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBSzFGLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBR3hDLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUNsQyxvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUNyQix5QkFBb0IsR0FBRyxFQUFF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MUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUUsYUFBYSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQ25DLENBQUM7O0FBeEVNLDJDQUFzQixHQUFHLElBQUksQ0FBQzs7WUFSdEMsU0FBUyxTQUFDO2dCQUNULCtDQUErQztnQkFDL0MsUUFBUSxFQUFFLGtCQUFrQjtnQkFDNUIsK3hEQUEyQzthQUM1Qzs7O1lBVlEsY0FBYztZQUR1QyxnQkFBZ0IsdUJBaUJ2QixRQUFRO1lBakJpQixrQkFBa0I7WUFHL0QsY0FBYztZQUF4Qyx3QkFBd0I7WUFDeEIsY0FBYzs7O29CQWtCcEIsS0FBSztzQkFDTCxLQUFLO3VCQUNMLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE9wdGlvbmFsLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycywgRm9ybUdyb3VwLCBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xDb250YWluZXIsIEZvcm1Hcm91cERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ29udHJvbFV0aWxpdHkgfSBmcm9tICcuLi8uLi9TaGFyZWQvc2VydmljZXMvQ29udHJvbFV0aWxpdHknO1xyXG5pbXBvcnQgeyBSYWRpb0J1dHRvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi9TaGFyZWQvTW9kZWxzL1JhZGlvQnV0dG9uT3B0aW9ucyc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWxpZGF0aW9uU2VydmljZSwgVXRpbGl0eVNlcnZpY2UgfSBmcm9tICAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgR2xvYmFsU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9TaGFyZWQvc2VydmljZXMvR2xvYmFsU2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY29tcG9uZW50LXNlbGVjdG9yXHJcbiAgc2VsZWN0b3I6ICdCQlNGLVJhZGlvQnV0dG9uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vUmFkaW9CdXR0b24uY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSYWRpb0J1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG5cclxuICBzdGF0aWMgY29udHJvbENvbnRhaW5lcnN0YXRpYyA9IG51bGw7XHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbnRyb2xVdGlsaXR5OiBDb250cm9sVXRpbGl0eSwgQE9wdGlvbmFsKCkgcHJpdmF0ZSBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxyXG4gICAgcHVibGljIFJhZGlvQnV0dG9uQ29udHJvbEhvc3Q6IEZvcm1Hcm91cERpcmVjdGl2ZSwgcHJpdmF0ZSBVdGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbnRyb2xWYWxpZGF0aW9uU2VydmljZTogQ29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLCBwcml2YXRlIGdsb2JhbFNldHRpbmdzOiBHbG9iYWxTZXR0aW5ncykge1xyXG4gICAgUmFkaW9CdXR0b25Db21wb25lbnQuY29udHJvbENvbnRhaW5lcnN0YXRpYyA9IHRoaXMuY29udHJvbENvbnRhaW5lcjtcclxuICB9XHJcbiAgQElucHV0KCkgZ3JvdXA6IEZvcm1Hcm91cDtcclxuICBASW5wdXQoKSBvcHRpb25zOiBSYWRpb0J1dHRvbk9wdGlvbnM7XHJcbiAgQE91dHB1dCgpIE9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBSYWRpb0J1dHRvbkZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2w7XHJcbiAgbWFya0FsbEFzVG91Y2hlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHZhbGlkYXRpb25SdWxlcyA9IFtdO1xyXG4gIHZhbGlkYXRpb25SdWxlc2FzeW5jID0gW107XHJcbiAgbmdPbkluaXQoKSB7XHJcblxyXG4gICAgdGhpcy5ncm91cC5hZGRDb250cm9sKHRoaXMub3B0aW9ucy5OYW1lLCBuZXcgRm9ybUNvbnRyb2woJycpKTtcclxuICAgIHRoaXMuUmFkaW9CdXR0b25Gb3JtQ29udHJvbCA9IHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5vcHRpb25zLk5hbWVdOyAvLyAgbmV3IEZvcm1Db250cm9sKCcnLHZhbGlkYXRpb25SdWxlcyk7XHJcblxyXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuVmlld1R5cGUpXHJcbiAgICAgIHRoaXMub3B0aW9ucy5WaWV3VHlwZSA9IHRoaXMuZ2xvYmFsU2V0dGluZ3MuVmlld1R5cGU7XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5Jc1JlcXVpcmVkKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLlJhZGlvQnV0dG9uRm9ybUNvbnRyb2wuc2V0VmFsaWRhdG9ycyh0aGlzLnZhbGlkYXRpb25SdWxlcyk7XHJcbiAgICB0aGlzLlJhZGlvQnV0dG9uRm9ybUNvbnRyb2wuc2V0QXN5bmNWYWxpZGF0b3JzKHRoaXMudmFsaWRhdGlvblJ1bGVzYXN5bmMpO1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5Jc0Rpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMuUmFkaW9CdXR0b25Gb3JtQ29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5MYWJlbEtleSAhPSBudWxsICYmIHRoaXMub3B0aW9ucy5MYWJlbEtleSAhPSBcIlwiKVxyXG4gICAgICB0aGlzLm9wdGlvbnMuTGFiZWxWYWx1ZSA9IHRoaXMuVXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSh0aGlzLm9wdGlvbnMuTGFiZWxLZXkpO1xyXG5cclxuXHJcbiAgICB0aGlzLlJhZGlvQnV0dG9uQ29udHJvbEhvc3QubmdTdWJtaXQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICB0aGlzLmdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKVxyXG4gICAgICB0aGlzLm1hcmtBbGxBc1RvdWNoZWQgPSB0cnVlXHJcbiAgICB9KVxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuVmFsdWUpIHtcclxuICAgICAgdGhpcy5SYWRpb0J1dHRvbkZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMub3B0aW9ucy5WYWx1ZS5WYWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcmVzZXRFcnJvciA9ICgpID0+IHtcclxuICAgIHRoaXMuY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLlJlbW92ZUdsb2JhbEVycm9yKCk7XHJcbiAgfVxyXG5cclxuICBzaG93R2xvYmFsRXJyb3IoKSB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnNob3dHbG9iYWxFcnJvcigpXHJcbiAgfVxyXG5cclxuICBnZXRFcnJvclZhbGlkYXRpb24oRXJyb3JMaXN0KSB7XHJcbiAgICBpZiAodGhpcy5tYXJrQWxsQXNUb3VjaGVkICYmIHRoaXMuZ3JvdXAuaW52YWxpZCkge1xyXG4gICAgICB0aGlzLnNob3dHbG9iYWxFcnJvcigpXHJcbiAgICAgIHRoaXMubWFya0FsbEFzVG91Y2hlZCA9IGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuY29udHJvbFV0aWxpdHkuZ2V0RXJyb3JWYWxpZGF0aW9uTWFzc2FnZShFcnJvckxpc3QsIHRoaXMuZ3JvdXAsIHRoaXMub3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBvblZhbHVlQ2hhbmdlZCgpIHtcclxuICAgIGxldCBvcmlnaW5hbFZhbHVlID0gdGhpcy5SYWRpb0J1dHRvbkZvcm1Db250cm9sLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5QYXRjaEZ1bmN0aW9uICYmIHRoaXMub3B0aW9ucy5QYXRjaFBhdGggJiYgdGhpcy5SYWRpb0J1dHRvbkZvcm1Db250cm9sLnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuY29udHJvbFV0aWxpdHkucGF0Y2hDb250cm9sVmFsdWUob3JpZ2luYWxWYWx1ZSx0aGlzLm9wdGlvbnMuUGF0Y2hGdW5jdGlvbiAsdGhpcy5vcHRpb25zLlBhdGNoUGF0aClcclxuICAgIH1cclxuICAgIC8vVXNlIHRoaXMgbGluZSB0byBlbmFibGUgdHdvIHdheSBiaW5kaW5nLlxyXG4gICAgdGhpcy5vcHRpb25zLlZhbHVlPSBvcmlnaW5hbFZhbHVlO1xyXG4gICAgdGhpcy5PbkNoYW5nZS5lbWl0KG9yaWdpbmFsVmFsdWUpXHJcbiAgfVxyXG5cclxuXHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBSZW1vdmVSZXF1aXJlZFZhbGlkYXRpb24gPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LlJlbW92ZVJlcXVpcmVkVmFsaWRhdGlvbih0aGlzLlJhZGlvQnV0dG9uRm9ybUNvbnRyb2wsIHRoaXMudmFsaWRhdGlvblJ1bGVzLCB0aGlzLm9wdGlvbnMpXHJcbiAgfVxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgQWRkUmVxdWlyZWRWYWxpZGF0aW9uID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5BZGRSZXF1aXJlZFZhbGlkYXRpb24odGhpcy5SYWRpb0J1dHRvbkZvcm1Db250cm9sLCB0aGlzLnZhbGlkYXRpb25SdWxlcywgdGhpcy5vcHRpb25zKVxyXG4gIH1cclxuXHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBSZW1vdmVDdXN0b21WYWxpZGF0aW9uID0gKEN1c3RvbVZhbGlkYXRpb24pID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuUmVtb3ZlQ3VzdG9tVmFsaWRhdGlvbih0aGlzLlJhZGlvQnV0dG9uRm9ybUNvbnRyb2wsIHRoaXMudmFsaWRhdGlvblJ1bGVzLCBDdXN0b21WYWxpZGF0aW9uKVxyXG4gIH1cclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIEFkZEN1c3RvbVZhbGlkYXRpb24gPSAoQ3VzdG9tVmFsaWRhdGlvbikgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5BZGRDdXN0b21WYWxpZGF0aW9uKHRoaXMuUmFkaW9CdXR0b25Gb3JtQ29udHJvbCwgdGhpcy52YWxpZGF0aW9uUnVsZXMsIEN1c3RvbVZhbGlkYXRpb24pXHJcbiAgfVxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgSXNWYWxpZCA9ICgpID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuSXNWYWxpZCh0aGlzLlJhZGlvQnV0dG9uRm9ybUNvbnRyb2wpXHJcbiAgfVxyXG59XHJcblxyXG5cclxuIl19
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
-
import { FormControl, Validators, FormGroupDirective } from '@angular/forms';
|
|
3
|
-
import { ControlUtility } from '../../Shared/services/ControlUtility';
|
|
4
|
-
import { ControlValidationService, RequestHandlerService, RequestOptionsModel, UtilityService } from '@bnsights/bbsf-utilities';
|
|
5
|
-
import { GlobalSettings } from '../../Shared/services/GlobalSettings.service';
|
|
6
|
-
import { RecaptchaModel } from '../../Shared/Models/Recaptcha';
|
|
7
|
-
import { CaptchaStyle } from '../../Shared/Models/CaptchaStyle';
|
|
8
|
-
export class RecaptchaComponent {
|
|
9
|
-
constructor(controlUtility, requestHandlerService, recaptchaControlHost, UtilityService, controlValidationService, globalSettings) {
|
|
10
|
-
this.controlUtility = controlUtility;
|
|
11
|
-
this.requestHandlerService = requestHandlerService;
|
|
12
|
-
this.recaptchaControlHost = recaptchaControlHost;
|
|
13
|
-
this.UtilityService = UtilityService;
|
|
14
|
-
this.controlValidationService = controlValidationService;
|
|
15
|
-
this.globalSettings = globalSettings;
|
|
16
|
-
this.OnChange = new EventEmitter();
|
|
17
|
-
this.validationRules = [];
|
|
18
|
-
this.validationRulesAsync = [];
|
|
19
|
-
this.recaptchaModel = new RecaptchaModel();
|
|
20
|
-
this.resetError = () => {
|
|
21
|
-
this.controlValidationService.RemoveGlobalError();
|
|
22
|
-
};
|
|
23
|
-
//External Method
|
|
24
|
-
this.RemoveRequiredValidation = () => {
|
|
25
|
-
this.controlUtility.RemoveRequiredValidation(this.ReCaptchaFormControl, this.validationRules, this.options);
|
|
26
|
-
};
|
|
27
|
-
//External Method
|
|
28
|
-
this.AddRequiredValidation = () => {
|
|
29
|
-
this.controlUtility.AddRequiredValidation(this.ReCaptchaFormControl, this.validationRules, this.options);
|
|
30
|
-
};
|
|
31
|
-
//External Method
|
|
32
|
-
this.RemoveCustomValidation = (CustomValidation) => {
|
|
33
|
-
this.controlUtility.RemoveCustomValidation(this.ReCaptchaFormControl, this.validationRules, CustomValidation);
|
|
34
|
-
};
|
|
35
|
-
//External Method
|
|
36
|
-
this.AddCustomValidation = (CustomValidation) => {
|
|
37
|
-
this.controlUtility.AddCustomValidation(this.ReCaptchaFormControl, this.validationRules, CustomValidation);
|
|
38
|
-
};
|
|
39
|
-
//External Method
|
|
40
|
-
this.IsValid = () => {
|
|
41
|
-
this.controlUtility.IsValid(this.ReCaptchaFormControl);
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
ngOnInit() {
|
|
45
|
-
this.controlValidationService.isCreatedBefor = false;
|
|
46
|
-
this.loadImage();
|
|
47
|
-
if (!this.options.ViewType)
|
|
48
|
-
this.options.ViewType = this.globalSettings.ViewType;
|
|
49
|
-
this.group.addControl(this.options.Name, new FormControl(''));
|
|
50
|
-
this.ReCaptchaFormControl = this.group.controls[this.options.Name]; // new FormControl('',validationRules);
|
|
51
|
-
if (this.options.LabelKey != null && this.options.LabelKey != "")
|
|
52
|
-
this.options.LabelValue = this.UtilityService.getResourceValue(this.options.LabelKey);
|
|
53
|
-
if (this.options.IsRequired) {
|
|
54
|
-
this.validationRules.push(Validators.required);
|
|
55
|
-
}
|
|
56
|
-
if (this.options.CustomValidation.length > 0) {
|
|
57
|
-
let Validations = this.options.CustomValidation;
|
|
58
|
-
for (let index = 0; index < Validations.length; index++) {
|
|
59
|
-
const Validation = Validations[index];
|
|
60
|
-
this.validationRules.push(Validation.functionBody);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
this.ReCaptchaFormControl.setValidators(this.validationRules);
|
|
64
|
-
this.ReCaptchaFormControl.setAsyncValidators(this.validationRulesAsync);
|
|
65
|
-
if (this.options.IsDisabled) {
|
|
66
|
-
this.ReCaptchaFormControl.disable();
|
|
67
|
-
}
|
|
68
|
-
this.recaptchaControlHost.ngSubmit.subscribe((value) => {
|
|
69
|
-
this.group.markAllAsTouched();
|
|
70
|
-
this.markAllAsTouched = true;
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
loadImage() {
|
|
74
|
-
let style = new CaptchaStyle();
|
|
75
|
-
style.BackgroundColorPrimary = this.options.BackgroundColorPrimary;
|
|
76
|
-
style.BackgroundColorSecondary = this.options.BackgroundColorSecondary;
|
|
77
|
-
style.TextColorPrimary = this.options.TextColorPrimary;
|
|
78
|
-
style.TextColorSecondary = this.options.TextColorSecondary;
|
|
79
|
-
style.FontSize = this.options.FontSize;
|
|
80
|
-
let requestOptionsModel = new RequestOptionsModel();
|
|
81
|
-
requestOptionsModel.disableBlockUI = true;
|
|
82
|
-
requestOptionsModel.disableSuccessNotification = true;
|
|
83
|
-
this.requestHandlerService.post(this.options.ActionURL, style, null, null, requestOptionsModel).subscribe((res) => {
|
|
84
|
-
let model = res;
|
|
85
|
-
this.recaptchaModel.ID = model.id;
|
|
86
|
-
this.recaptchaModel.EncryptedText = model.encryptedText;
|
|
87
|
-
this.recaptchaModel.ImageJpeg = model.imageJpeg;
|
|
88
|
-
this.image = 'data:image/jpeg;base64,' + this.recaptchaModel.ImageJpeg;
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
ngAfterViewInit() {
|
|
92
|
-
this.controlUtility.setAttributeForControl(this.options);
|
|
93
|
-
}
|
|
94
|
-
showGlobalError() {
|
|
95
|
-
this.controlUtility.showGlobalError();
|
|
96
|
-
}
|
|
97
|
-
getErrorValidation(ErrorList) {
|
|
98
|
-
if (this.markAllAsTouched && this.group.invalid) {
|
|
99
|
-
this.showGlobalError();
|
|
100
|
-
this.markAllAsTouched = false;
|
|
101
|
-
}
|
|
102
|
-
return this.controlUtility.getErrorValidationMassage(ErrorList, this.group, this.options);
|
|
103
|
-
}
|
|
104
|
-
onTextChange(valueText) {
|
|
105
|
-
let value = valueText.target.value;
|
|
106
|
-
this.recaptchaModel.Text = value;
|
|
107
|
-
this.group.get(this.options.Name).setValue(this.recaptchaModel);
|
|
108
|
-
this.options.Value = this.recaptchaModel;
|
|
109
|
-
this.OnChange.emit(this.ReCaptchaFormControl.value);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
RecaptchaComponent.decorators = [
|
|
113
|
-
{ type: Component, args: [{
|
|
114
|
-
selector: 'BBSF-Recaptcha',
|
|
115
|
-
template: "<div class=\"form-group bbsf-control bbsf-recaptcha\" [formGroup]=\"group\">\r\n <img class=\"h-100 w-100\" [src]=\"image\" />\r\n <button class=\"btn btn-sm btn-icon\" type=\"button\" ngbTooltip=\"{{UtilityService.getResourceValue('ReloadCaptcha')}}\"\r\n (click)=\"loadImage()\">\r\n <i class=\"fas fa-refresh\"></i>\r\n </button>\r\n <div [ngClass]=\"(options.ViewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label *ngIf=\"!options.HideLabel\" class=\"bbsf-label {{options.LabelExtraClasses}}\">\r\n {{options.LabelValue}}\r\n <!--Asterisk-->\r\n <span *ngIf=\"(options.ShowAsterisk&&options.IsRequired)||(options.IsRequired)\" class=\"text-danger\">*</span>\r\n </label>\r\n <!--input-->\r\n <div class=\"bbsf-input-container\">\r\n <input class=\"form-control {{options.ExtraClasses}}\"\r\n dir=\"{{options.ForceDirection==2?'rtl':''}}\"\r\n aria-describedby=\"email-error\" value=\"{{options.Value.Text}}\"\r\n aria-invalid=\"true\" formControlName=\"{{options.Name}}\" type=\"text\"\r\n [class.is-invalid]=\"ReCaptchaFormControl.invalid && ReCaptchaFormControl.touched\"\r\n placeholder=\"{{options.Placeholder}}\" id=\"{{options.Name}}\" autocomplete=\"{{options.AutoComplete}}\"\r\n (change)=\"onTextChange($event)\" [readonly]=\"options.IsReadonly\" />\r\n\r\n </div>\r\n </div>\r\n <div class=\"subtext-container\">\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\" *ngIf=\"options.LabelDescription!=null\">{{options.LabelDescription}}</div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\"\r\n dir=\"{{options.ForceDirection==2?'rtl':''}}\"\r\n *ngIf=\"(ReCaptchaFormControl.invalid && ReCaptchaFormControl.touched)\">\r\n {{getErrorValidation(ReCaptchaFormControl.errors|keyvalue)}}\r\n </div>\r\n </div>\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty) \">{{resetError()}}</div>\r\n</div>\r\n"
|
|
116
|
-
},] }
|
|
117
|
-
];
|
|
118
|
-
RecaptchaComponent.ctorParameters = () => [
|
|
119
|
-
{ type: ControlUtility },
|
|
120
|
-
{ type: RequestHandlerService },
|
|
121
|
-
{ type: FormGroupDirective },
|
|
122
|
-
{ type: UtilityService },
|
|
123
|
-
{ type: ControlValidationService },
|
|
124
|
-
{ type: GlobalSettings }
|
|
125
|
-
];
|
|
126
|
-
RecaptchaComponent.propDecorators = {
|
|
127
|
-
group: [{ type: Input }],
|
|
128
|
-
options: [{ type: Input }],
|
|
129
|
-
OnChange: [{ type: Output }]
|
|
130
|
-
};
|
|
131
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjYXB0Y2hhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9SZWNhcHRjaGEvUmVjYXB0Y2hhLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBWSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFnRCxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEksT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRTlFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFNaEUsTUFBTSxPQUFPLGtCQUFrQjtJQUU3QixZQUFvQixjQUE4QixFQUFVLHFCQUE0QyxFQUMvRixvQkFBd0MsRUFBUyxjQUE4QixFQUM5RSx3QkFBa0QsRUFBVSxjQUE4QjtRQUZoRixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFBVSwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQy9GLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBb0I7UUFBUyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUUsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUkxRixhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUd4QyxvQkFB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Y0FBYyxDQUFDLHlCQUF5QixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBR0QsWUFBWSxDQUFDLFNBQVM7UUFDcEIsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDbkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0RCxDQUFDOzs7WUF4R0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxnQkFBZ0I7Z0JBQzFCLDRpRUFBeUM7YUFDMUM7OztZQVZRLGNBQWM7WUFDWSxxQkFBcUI7WUFGd0Isa0JBQWtCO1lBRW5CLGNBQWM7WUFBcEYsd0JBQXdCO1lBQ3hCLGNBQWM7OztvQkFlcEIsS0FBSztzQkFDTCxLQUFLO3VCQUNMLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE9wdGlvbmFsLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycywgRm9ybUdyb3VwLCBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xDb250YWluZXIsIEZvcm1Hcm91cERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ29udHJvbFV0aWxpdHkgfSBmcm9tICcuLi8uLi9TaGFyZWQvc2VydmljZXMvQ29udHJvbFV0aWxpdHknO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsaWRhdGlvblNlcnZpY2UsIFJlcXVlc3RIYW5kbGVyU2VydmljZSwgUmVxdWVzdE9wdGlvbnNNb2RlbCwgVXRpbGl0eVNlcnZpY2UgfSBmcm9tICdAYm5zaWdodHMvYmJzZi11dGlsaXRpZXMnO1xyXG5pbXBvcnQgeyBHbG9iYWxTZXR0aW5ncyB9IGZyb20gJy4uLy4uL1NoYXJlZC9zZXJ2aWNlcy9HbG9iYWxTZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVjYXB0Y2hhT3B0aW9ucyB9IGZyb20gJy4uLy4uL1NoYXJlZC9Nb2RlbHMvUmVjYXB0Y2hhT3B0aW9ucyc7XHJcbmltcG9ydCB7IFJlY2FwdGNoYU1vZGVsIH0gZnJvbSAnLi4vLi4vU2hhcmVkL01vZGVscy9SZWNhcHRjaGEnO1xyXG5pbXBvcnQgeyBDYXB0Y2hhU3R5bGUgfSBmcm9tICcuLi8uLi9TaGFyZWQvTW9kZWxzL0NhcHRjaGFTdHlsZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ0JCU0YtUmVjYXB0Y2hhJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vUmVjYXB0Y2hhLmNvbXBvbmVudC5odG1sJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlY2FwdGNoYUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgbWFya0FsbEFzVG91Y2hlZDogYm9vbGVhbjtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbnRyb2xVdGlsaXR5OiBDb250cm9sVXRpbGl0eSwgcHJpdmF0ZSByZXF1ZXN0SGFuZGxlclNlcnZpY2U6IFJlcXVlc3RIYW5kbGVyU2VydmljZSxcclxuICAgIHB1YmxpYyByZWNhcHRjaGFDb250cm9sSG9zdDogRm9ybUdyb3VwRGlyZWN0aXZlLCBwdWJsaWMgVXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb250cm9sVmFsaWRhdGlvblNlcnZpY2U6IENvbnRyb2xWYWxpZGF0aW9uU2VydmljZSwgcHJpdmF0ZSBnbG9iYWxTZXR0aW5nczogR2xvYmFsU2V0dGluZ3MpIHtcclxuICB9XHJcbiAgQElucHV0KCkgZ3JvdXA6IEZvcm1Hcm91cDtcclxuICBASW5wdXQoKSBvcHRpb25zOiBSZWNhcHRjaGFPcHRpb25zO1xyXG4gIEBPdXRwdXQoKSBPbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgUmVDYXB0Y2hhRm9ybUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcclxuICB2YWxpZGF0aW9uUnVsZXMgPSBbXTtcclxuICB2YWxpZGF0aW9uUnVsZXNBc3luYyA9IFtdO1xyXG4gIGltYWdlOiBzdHJpbmdcclxuICByZWNhcHRjaGFNb2RlbDogUmVjYXB0Y2hhTW9kZWwgPSBuZXcgUmVjYXB0Y2hhTW9kZWwoKTtcclxuICBuZ09uSW5pdCgpIHtcclxuXHJcbiAgICB0aGlzLmNvbnRyb2xWYWxpZGF0aW9uU2VydmljZS5pc0NyZWF0ZWRCZWZvciA9IGZhbHNlXHJcblxyXG4gICAgIHRoaXMubG9hZEltYWdlKCk7XHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5WaWV3VHlwZSlcclxuICAgICAgdGhpcy5vcHRpb25zLlZpZXdUeXBlID0gdGhpcy5nbG9iYWxTZXR0aW5ncy5WaWV3VHlwZTtcclxuXHJcbiAgICB0aGlzLmdyb3VwLmFkZENvbnRyb2wodGhpcy5vcHRpb25zLk5hbWUsIG5ldyBGb3JtQ29udHJvbCgnJykpO1xyXG4gICAgdGhpcy5SZUNhcHRjaGFGb3JtQ29udHJvbCA9IHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5vcHRpb25zLk5hbWVdOyAvLyAgbmV3IEZvcm1Db250cm9sKCcnLHZhbGlkYXRpb25SdWxlcyk7XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5MYWJlbEtleSAhPSBudWxsICYmIHRoaXMub3B0aW9ucy5MYWJlbEtleSAhPSBcIlwiKVxyXG4gICAgICB0aGlzLm9wdGlvbnMuTGFiZWxWYWx1ZSA9IHRoaXMuVXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSh0aGlzLm9wdGlvbnMuTGFiZWxLZXkpO1xyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuSXNSZXF1aXJlZCkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5DdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IFZhbGlkYXRpb25zID0gdGhpcy5vcHRpb25zLkN1c3RvbVZhbGlkYXRpb25cclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IFZhbGlkYXRpb25zLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGNvbnN0IFZhbGlkYXRpb24gPSBWYWxpZGF0aW9uc1tpbmRleF07XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0aW9uLmZ1bmN0aW9uQm9keSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLlJlQ2FwdGNoYUZvcm1Db250cm9sLnNldFZhbGlkYXRvcnModGhpcy52YWxpZGF0aW9uUnVsZXMpO1xyXG4gICAgdGhpcy5SZUNhcHRjaGFGb3JtQ29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnModGhpcy52YWxpZGF0aW9uUnVsZXNBc3luYyk7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLklzRGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5SZUNhcHRjaGFGb3JtQ29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZWNhcHRjaGFDb250cm9sSG9zdC5uZ1N1Ym1pdC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgIHRoaXMuZ3JvdXAubWFya0FsbEFzVG91Y2hlZCgpXHJcbiAgICAgIHRoaXMubWFya0FsbEFzVG91Y2hlZCA9IHRydWVcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBsb2FkSW1hZ2UoKSB7XHJcbiAgICBsZXQgc3R5bGU6IENhcHRjaGFTdHlsZSA9IG5ldyBDYXB0Y2hhU3R5bGUoKTtcclxuICAgIHN0eWxlLkJhY2tncm91bmRDb2xvclByaW1hcnkgPSB0aGlzLm9wdGlvbnMuQmFja2dyb3VuZENvbG9yUHJpbWFyeTtcclxuICAgIHN0eWxlLkJhY2tncm91bmRDb2xvclNlY29uZGFyeSA9IHRoaXMub3B0aW9ucy5CYWNrZ3JvdW5kQ29sb3JTZWNvbmRhcnk7XHJcbiAgICBzdHlsZS5UZXh0Q29sb3JQcmltYXJ5PSB0aGlzLm9wdGlvbnMuVGV4dENvbG9yUHJpbWFyeTtcclxuICAgIHN0eWxlLlRleHRDb2xvclNlY29uZGFyeSA9IHRoaXMub3B0aW9ucy5UZXh0Q29sb3JTZWNvbmRhcnk7XHJcbiAgICBzdHlsZS5Gb250U2l6ZSA9IHRoaXMub3B0aW9ucy5Gb250U2l6ZTtcclxuICAgIGxldCByZXF1ZXN0T3B0aW9uc01vZGVsID0gbmV3IFJlcXVlc3RPcHRpb25zTW9kZWwoKVxyXG4gICAgcmVxdWVzdE9wdGlvbnNNb2RlbC5kaXNhYmxlQmxvY2tVSSA9IHRydWU7XHJcbiAgICByZXF1ZXN0T3B0aW9uc01vZGVsLmRpc2FibGVTdWNjZXNzTm90aWZpY2F0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMucmVxdWVzdEhhbmRsZXJTZXJ2aWNlLnBvc3QodGhpcy5vcHRpb25zLkFjdGlvblVSTCwgc3R5bGUsIG51bGwsIG51bGwsIHJlcXVlc3RPcHRpb25zTW9kZWwpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgIGxldCBtb2RlbCA9IHJlcyBhcyBhbnlcclxuICAgICAgdGhpcy5yZWNhcHRjaGFNb2RlbC5JRCA9IG1vZGVsLmlkO1xyXG4gICAgICB0aGlzLnJlY2FwdGNoYU1vZGVsLkVuY3J5cHRlZFRleHQgPSBtb2RlbC5lbmNyeXB0ZWRUZXh0O1xyXG4gICAgICB0aGlzLnJlY2FwdGNoYU1vZGVsLkltYWdlSnBlZyA9IG1vZGVsLmltYWdlSnBlZztcclxuICAgICAgdGhpcy5pbWFnZSA9ICdkYXRhOmltYWdlL2pwZWc7YmFzZTY0LCcgKyB0aGlzLnJlY2FwdGNoYU1vZGVsLkltYWdlSnBlZztcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnNldEF0dHJpYnV0ZUZvckNvbnRyb2wodGhpcy5vcHRpb25zKVxyXG4gIH1cclxuXHJcbiAgcmVzZXRFcnJvciA9ICgpID0+IHtcclxuICAgIHRoaXMuY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLlJlbW92ZUdsb2JhbEVycm9yKCk7XHJcbiAgfVxyXG5cclxuICBzaG93R2xvYmFsRXJyb3IoKSB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnNob3dHbG9iYWxFcnJvcigpXHJcbiAgfVxyXG5cclxuICBnZXRFcnJvclZhbGlkYXRpb24oRXJyb3JMaXN0KSB7XHJcblxyXG4gICAgaWYgKHRoaXMubWFya0FsbEFzVG91Y2hlZCAmJiB0aGlzLmdyb3VwLmludmFsaWQpIHtcclxuICAgICAgdGhpcy5zaG93R2xvYmFsRXJyb3IoKVxyXG4gICAgICB0aGlzLm1hcmtBbGxBc1RvdWNoZWQgPSBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmNvbnRyb2xVdGlsaXR5LmdldEVycm9yVmFsaWRhdGlvbk1hc3NhZ2UoRXJyb3JMaXN0LCB0aGlzLmdyb3VwLCB0aGlzLm9wdGlvbnMpO1xyXG4gIH1cclxuXHJcblxyXG4gIG9uVGV4dENoYW5nZSh2YWx1ZVRleHQpIHtcclxuICAgIGxldCB2YWx1ZSA9IHZhbHVlVGV4dC50YXJnZXQudmFsdWU7XHJcbiAgICB0aGlzLnJlY2FwdGNoYU1vZGVsLlRleHQgPSB2YWx1ZTtcclxuICAgIHRoaXMuZ3JvdXAuZ2V0KHRoaXMub3B0aW9ucy5OYW1lKS5zZXRWYWx1ZSh0aGlzLnJlY2FwdGNoYU1vZGVsKTtcclxuICAgIHRoaXMub3B0aW9ucy5WYWx1ZSA9IHRoaXMucmVjYXB0Y2hhTW9kZWw7XHJcbiAgICB0aGlzLk9uQ2hhbmdlLmVtaXQodGhpcy5SZUNhcHRjaGFGb3JtQ29udHJvbC52YWx1ZSk7XHJcbiAgfVxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgUmVtb3ZlUmVxdWlyZWRWYWxpZGF0aW9uID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5SZW1vdmVSZXF1aXJlZFZhbGlkYXRpb24odGhpcy5SZUNhcHRjaGFGb3JtQ29udHJvbCwgdGhpcy52YWxpZGF0aW9uUnVsZXMsIHRoaXMub3B0aW9ucylcclxuICB9XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBBZGRSZXF1aXJlZFZhbGlkYXRpb24gPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LkFkZFJlcXVpcmVkVmFsaWRhdGlvbih0aGlzLlJlQ2FwdGNoYUZvcm1Db250cm9sLCB0aGlzLnZhbGlkYXRpb25SdWxlcywgdGhpcy5vcHRpb25zKVxyXG4gIH1cclxuXHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBSZW1vdmVDdXN0b21WYWxpZGF0aW9uID0gKEN1c3RvbVZhbGlkYXRpb24pID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuUmVtb3ZlQ3VzdG9tVmFsaWRhdGlvbih0aGlzLlJlQ2FwdGNoYUZvcm1Db250cm9sLCB0aGlzLnZhbGlkYXRpb25SdWxlcywgQ3VzdG9tVmFsaWRhdGlvbilcclxuICB9XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBBZGRDdXN0b21WYWxpZGF0aW9uID0gKEN1c3RvbVZhbGlkYXRpb24pID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuQWRkQ3VzdG9tVmFsaWRhdGlvbih0aGlzLlJlQ2FwdGNoYUZvcm1Db250cm9sLCB0aGlzLnZhbGlkYXRpb25SdWxlcywgQ3VzdG9tVmFsaWRhdGlvbilcclxuICB9XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBJc1ZhbGlkID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5Jc1ZhbGlkKHRoaXMuUmVDYXB0Y2hhRm9ybUNvbnRyb2wpXHJcbiAgfVxyXG59XHJcblxyXG5cclxuIl19
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import { Component, Input, ViewChild, ViewChildren } from '@angular/core';
|
|
2
|
-
import { FormGroup } from '@angular/forms';
|
|
3
|
-
import { NgTemplateNameDirective } from '../../../Shared/Directives/template-name.directive';
|
|
4
|
-
export class RepeaterComponent {
|
|
5
|
-
constructor() {
|
|
6
|
-
this.templateRefs = [];
|
|
7
|
-
this.items = [];
|
|
8
|
-
this.originalItems = [];
|
|
9
|
-
this.repeaterContext = { index: 0, delete: null, elements: null };
|
|
10
|
-
}
|
|
11
|
-
ngOnInit() {
|
|
12
|
-
this.currentTemplate = this.initialTemplate;
|
|
13
|
-
this.repeaterGroup = new FormGroup({});
|
|
14
|
-
this.group.addControl(this.options.Name, this.repeaterGroup);
|
|
15
|
-
if (this.options.RepeaterValue.length > 0) {
|
|
16
|
-
this.originalItems = this.options.RepeaterValue;
|
|
17
|
-
for (let index = 0; index < this.options.RepeaterValue.length; index++) {
|
|
18
|
-
this.items.push(index + 1);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
else
|
|
22
|
-
for (let index = 0; index < this.options.MinRequiredItems; index++) {
|
|
23
|
-
this.items.push(index);
|
|
24
|
-
}
|
|
25
|
-
this.repeaterGroup.valueChanges.subscribe((res) => {
|
|
26
|
-
let result = [];
|
|
27
|
-
let rowNumber = [];
|
|
28
|
-
let addItems = [];
|
|
29
|
-
for (const key in this.repeaterGroup.controls) {
|
|
30
|
-
if (Object.prototype.hasOwnProperty.call(this.repeaterGroup.controls, key)) {
|
|
31
|
-
const keySplitArr = key.split('.');
|
|
32
|
-
let item = {
|
|
33
|
-
[keySplitArr[1]]: { [keySplitArr[0]]: this.group.controls[this.options.Name].value[key] }
|
|
34
|
-
};
|
|
35
|
-
addItems.push(item);
|
|
36
|
-
if (!rowNumber.includes(keySplitArr[1]))
|
|
37
|
-
rowNumber.push(keySplitArr[1]);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
for (let index = 0; index < rowNumber.length; index++) {
|
|
41
|
-
const row = rowNumber[index];
|
|
42
|
-
let addObject = {};
|
|
43
|
-
let filteredElements = addItems.filter(item => item[row]);
|
|
44
|
-
for (let index = 0; index < filteredElements.length; index++) {
|
|
45
|
-
const filteredElement = filteredElements[index];
|
|
46
|
-
for (const key in filteredElement) {
|
|
47
|
-
if (Object.prototype.hasOwnProperty.call(filteredElement, key)) {
|
|
48
|
-
const element = filteredElement[key];
|
|
49
|
-
for (const key in element) {
|
|
50
|
-
if (Object.prototype.hasOwnProperty.call(element, key)) {
|
|
51
|
-
const value = element[key];
|
|
52
|
-
addObject[key] = value;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
result.push(addObject);
|
|
59
|
-
}
|
|
60
|
-
this.options.RepeaterValue = result;
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
deleteItem(Index) {
|
|
64
|
-
if (this.items.length == this.options.MinRequiredItems && this.options.IsRequired)
|
|
65
|
-
return;
|
|
66
|
-
let deletedControls = [];
|
|
67
|
-
let controlNames = this.options.RepeaterStructure.map(e => e.ControlOptions.Name);
|
|
68
|
-
for (const key in this.repeaterGroup.controls) {
|
|
69
|
-
if (Object.prototype.hasOwnProperty.call(this.repeaterGroup.controls, key)) {
|
|
70
|
-
for (let index = 0; index < controlNames.length; index++) {
|
|
71
|
-
const element = controlNames[index];
|
|
72
|
-
const keySplitArr = key.split('.');
|
|
73
|
-
if (keySplitArr[0] + keySplitArr[1] == `${element}${Index}`) {
|
|
74
|
-
const element = this.repeaterGroup.controls[key];
|
|
75
|
-
deletedControls.push({ [key]: element });
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
for (let index = 0; index < deletedControls.length; index++) {
|
|
81
|
-
const element = deletedControls[index];
|
|
82
|
-
for (const key in element) {
|
|
83
|
-
if (Object.prototype.hasOwnProperty.call(element, key)) {
|
|
84
|
-
this.repeaterGroup.removeControl(key);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
this.items = this.items.filter((res) => res != this.items[Index]);
|
|
89
|
-
}
|
|
90
|
-
addItem() {
|
|
91
|
-
this.items.push(this.items.length);
|
|
92
|
-
}
|
|
93
|
-
ngAfterViewInit() {
|
|
94
|
-
let templateRefs = this._templates["_results"].map((item) => item["template"]);
|
|
95
|
-
this.templateRefs = templateRefs;
|
|
96
|
-
this.repeaterContext.elements = this.templateRefs;
|
|
97
|
-
this.repeaterContext.delete = this.delete;
|
|
98
|
-
}
|
|
99
|
-
setCurrentIndex(i) {
|
|
100
|
-
this.repeaterContext.index = i;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
RepeaterComponent.decorators = [
|
|
104
|
-
{ type: Component, args: [{
|
|
105
|
-
selector: 'BBSF-repeater',
|
|
106
|
-
template: "<ng-container *ngFor='let item of items ; index as i'>\r\n {{setCurrentIndex(i)}}\r\n <ng-container *ngTemplateOutlet=\"currentTemplate; context: repeaterContext\">\r\n </ng-container>\r\n\r\n</ng-container>\r\n\r\n<ng-container *ngTemplateOutlet=\"add\">\r\n</ng-container>\r\n\r\n<ng-template *ngFor=\"let RepeaterField of options.RepeaterStructure ; index as i\" name=\"R{{i}}\" let-Index=\"itemIndex\"\r\n let-control=\"controlIndex\">\r\n <repeater-field-builder *ngIf=\"RepeaterField\" [RepeaterField]=\"RepeaterField\" [itemNumber]=\"Index\"\r\n [itemsValue]=\"originalItems\" [controlNumber]=\"control\" [group]=\"repeaterGroup\">\r\n </repeater-field-builder>\r\n</ng-template>\r\n\r\n<ng-template #delete let-item=\"itemIndex\">\r\n <button class=\"{{options.DeleteButtonExtraClasses}}\" type=\"button\" (click)=\"deleteItem(item)\"\r\n [disabled]=\"items.length ==options.MinRequiredItems&&options.IsRequired\">\r\n <span [innerHTML]=\"options.DeleteButtonText\"></span>\r\n </button>\r\n</ng-template>\r\n\r\n<ng-template #add>\r\n <button class=\"{{options.AddButtonExtraClasses}}\" type=\"button\" (click)=\"addItem()\">\r\n <span [innerHTML]=\"options.AddButtonText\"></span>\r\n </button>\r\n</ng-template>\r\n\r\n"
|
|
107
|
-
},] }
|
|
108
|
-
];
|
|
109
|
-
RepeaterComponent.ctorParameters = () => [];
|
|
110
|
-
RepeaterComponent.propDecorators = {
|
|
111
|
-
group: [{ type: Input }],
|
|
112
|
-
options: [{ type: Input }],
|
|
113
|
-
initialTemplate: [{ type: Input }],
|
|
114
|
-
_templates: [{ type: ViewChildren, args: [NgTemplateNameDirective,] }],
|
|
115
|
-
delete: [{ type: ViewChild, args: ['delete', { static: false },] }]
|
|
116
|
-
};
|
|
117
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1jb250cm9scy9zcmMvbGliL2NvbnRyb2xzL1JlcGVhdGVyL3JlcGVhdGVyL3JlcGVhdGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBa0MsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFPN0YsTUFBTSxPQUFPLGlCQUFpQjtJQWE1QjtRQVBBLGlCQUFZLEdBQTRCLEVBQUUsQ0FBQztRQUMzQyxVQUFLLEdBQWEsRUFBRSxDQUFBO1FBQ3BCLGtCQUFhLEdBQVUsRUFBRSxDQUFDO1FBRzFCLG9CQUFlLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO0lBRTdDLENBQUM7SUFFakIsUUFBUTtRQUNOLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUM1QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM3RCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDekMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQztZQUNoRCxLQUFLLElBQUks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QUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQTtJQUUzQyxDQUFDO0lBRUQsZUFBZSxDQUFDLENBQVM7UUFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7OztZQXJIRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGVBQWU7Z0JBQ3pCLHV4Q0FBd0M7YUFDekM7Ozs7b0JBRUUsS0FBSztzQkFDTCxLQUFLOzhCQUNMLEtBQUs7eUJBQ0wsWUFBWSxTQUFDLHVCQUF1QjtxQkFDcEMsU0FBUyxTQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIFF1ZXJ5TGlzdCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUmVwZWF0ZXJPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL01vZGVscy9SZXBlYXRlck9wdGlvbnMnO1xyXG5pbXBvcnQgeyBOZ1RlbXBsYXRlTmFtZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9EaXJlY3RpdmVzL3RlbXBsYXRlLW5hbWUuZGlyZWN0aXZlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ0JCU0YtcmVwZWF0ZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXBlYXRlci5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlcGVhdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBncm91cDogRm9ybUdyb3VwO1xyXG4gIEBJbnB1dCgpIG9wdGlvbnM6IFJlcGVhdGVyT3B0aW9ucztcclxuICBASW5wdXQoKSBpbml0aWFsVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZHJlbihOZ1RlbXBsYXRlTmFtZURpcmVjdGl2ZSkgcHJpdmF0ZSBfdGVtcGxhdGVzOiBRdWVyeUxpc3Q8TmdUZW1wbGF0ZU5hbWVEaXJlY3RpdmU+O1xyXG4gIEBWaWV3Q2hpbGQoJ2RlbGV0ZScsIHsgc3RhdGljOiBmYWxzZSB9KSBkZWxldGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgdGVtcGxhdGVSZWZzOiBBcnJheTxUZW1wbGF0ZVJlZjxhbnk+PiA9IFtdO1xyXG4gIGl0ZW1zOiBudW1iZXJbXSA9IFtdXHJcbiAgb3JpZ2luYWxJdGVtczogYW55W10gPSBbXTtcclxuICByZXBlYXRlckdyb3VwOiBGb3JtR3JvdXA7XHJcbiAgY3VycmVudFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIHJlcGVhdGVyQ29udGV4dCA9IHsgaW5kZXg6IDAsIGRlbGV0ZTogbnVsbCwgZWxlbWVudHM6IG51bGwgfTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmN1cnJlbnRUZW1wbGF0ZSA9IHRoaXMuaW5pdGlhbFRlbXBsYXRlO1xyXG4gICAgdGhpcy5yZXBlYXRlckdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgICB0aGlzLmdyb3VwLmFkZENvbnRyb2wodGhpcy5vcHRpb25zLk5hbWUsIHRoaXMucmVwZWF0ZXJHcm91cCk7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLlJlcGVhdGVyVmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLm9yaWdpbmFsSXRlbXMgPSB0aGlzLm9wdGlvbnMuUmVwZWF0ZXJWYWx1ZTtcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMub3B0aW9ucy5SZXBlYXRlclZhbHVlLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIHRoaXMuaXRlbXMucHVzaChpbmRleCArIDEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLm9wdGlvbnMuTWluUmVxdWlyZWRJdGVtczsgaW5kZXgrKykge1xyXG4gICAgICAgIHRoaXMuaXRlbXMucHVzaChpbmRleCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB0aGlzLnJlcGVhdGVyR3JvdXAudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgIGxldCByZXN1bHQgPSBbXTtcclxuICAgICAgbGV0IHJvd051bWJlciA9IFtdO1xyXG4gICAgICBsZXQgYWRkSXRlbXMgPSBbXTtcclxuICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5yZXBlYXRlckdyb3VwLmNvbnRyb2xzKSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnJlcGVhdGVyR3JvdXAuY29udHJvbHMsIGtleSkpIHtcclxuICAgICAgICAgIGNvbnN0IGtleVNwbGl0QXJyID0ga2V5LnNwbGl0KCcuJylcclxuICAgICAgICAgIGxldCBpdGVtID0ge1xyXG4gICAgICAgICAgICBba2V5U3BsaXRBcnJbMV1dOiB7IFtrZXlTcGxpdEFyclswXV06IHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5vcHRpb25zLk5hbWVdLnZhbHVlW2tleV0gfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYWRkSXRlbXMucHVzaChpdGVtKVxyXG4gICAgICAgICAgaWYgKCFyb3dOdW1iZXIuaW5jbHVkZXMoa2V5U3BsaXRBcnJbMV0pKVxyXG4gICAgICAgICAgICByb3dOdW1iZXIucHVzaChrZXlTcGxpdEFyclsxXSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHJvd051bWJlci5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCByb3cgPSByb3dOdW1iZXJbaW5kZXhdO1xyXG4gICAgICAgIGxldCBhZGRPYmplY3QgPSB7fVxyXG4gICAgICAgIGxldCBmaWx0ZXJlZEVsZW1lbnRzID0gYWRkSXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbVtyb3ddKVxyXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBmaWx0ZXJlZEVsZW1lbnRzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgY29uc3QgZmlsdGVyZWRFbGVtZW50ID0gZmlsdGVyZWRFbGVtZW50c1tpbmRleF07XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBmaWx0ZXJlZEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmaWx0ZXJlZEVsZW1lbnQsIGtleSkpIHtcclxuICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZmlsdGVyZWRFbGVtZW50W2tleV07XHJcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlbGVtZW50LCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZWxlbWVudFtrZXldO1xyXG4gICAgICAgICAgICAgICAgICBhZGRPYmplY3Rba2V5XSA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3VsdC5wdXNoKGFkZE9iamVjdClcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm9wdGlvbnMuUmVwZWF0ZXJWYWx1ZSA9IHJlc3VsdDtcclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgZGVsZXRlSXRlbShJbmRleCkge1xyXG4gICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoID09IHRoaXMub3B0aW9ucy5NaW5SZXF1aXJlZEl0ZW1zICYmIHRoaXMub3B0aW9ucy5Jc1JlcXVpcmVkKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBsZXQgZGVsZXRlZENvbnRyb2xzOiBhbnlbXSA9IFtdXHJcbiAgICBsZXQgY29udHJvbE5hbWVzID0gdGhpcy5vcHRpb25zLlJlcGVhdGVyU3RydWN0dXJlLm1hcChlID0+IGUuQ29udHJvbE9wdGlvbnMuTmFtZSlcclxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucmVwZWF0ZXJHcm91cC5jb250cm9scykge1xyXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMucmVwZWF0ZXJHcm91cC5jb250cm9scywga2V5KSkge1xyXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjb250cm9sTmFtZXMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gY29udHJvbE5hbWVzW2luZGV4XTtcclxuICAgICAgICAgIGNvbnN0IGtleVNwbGl0QXJyID0ga2V5LnNwbGl0KCcuJylcclxuICAgICAgICAgIGlmIChrZXlTcGxpdEFyclswXSArIGtleVNwbGl0QXJyWzFdID09IGAke2VsZW1lbnR9JHtJbmRleH1gKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnJlcGVhdGVyR3JvdXAuY29udHJvbHNba2V5XTtcclxuICAgICAgICAgICAgZGVsZXRlZENvbnRyb2xzLnB1c2goeyBba2V5XTogZWxlbWVudCB9KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRlbGV0ZWRDb250cm9scy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY29uc3QgZWxlbWVudCA9IGRlbGV0ZWRDb250cm9sc1tpbmRleF07XHJcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGVsZW1lbnQsIGtleSkpIHtcclxuICAgICAgICAgIHRoaXMucmVwZWF0ZXJHcm91cC5yZW1vdmVDb250cm9sKGtleSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuaXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcigocmVzKSA9PiByZXMgIT0gdGhpcy5pdGVtc1tJbmRleF0pXHJcbiAgfVxyXG5cclxuXHJcbiAgYWRkSXRlbSgpIHtcclxuICAgIHRoaXMuaXRlbXMucHVzaCh0aGlzLml0ZW1zLmxlbmd0aCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBsZXQgdGVtcGxhdGVSZWZzID0gKHRoaXMuX3RlbXBsYXRlc1tcIl9yZXN1bHRzXCJdIGFzIGFueVtdKS5tYXAoKGl0ZW0pID0+IGl0ZW1bXCJ0ZW1wbGF0ZVwiXSlcclxuICAgIHRoaXMudGVtcGxhdGVSZWZzID0gdGVtcGxhdGVSZWZzXHJcbiAgICB0aGlzLnJlcGVhdGVyQ29udGV4dC5lbGVtZW50cyA9IHRoaXMudGVtcGxhdGVSZWZzXHJcbiAgICB0aGlzLnJlcGVhdGVyQ29udGV4dC5kZWxldGUgPSB0aGlzLmRlbGV0ZVxyXG5cclxuICB9XHJcblxyXG4gIHNldEN1cnJlbnRJbmRleChpOiBudW1iZXIpIHtcclxuICAgIHRoaXMucmVwZWF0ZXJDb250ZXh0LmluZGV4ID0gaTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|