@bnsights/bbsf-controls 1.0.87 → 1.0.89
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 +6 -2
- package/bnsights-bbsf-controls-1.0.89.tgz +0 -0
- package/bnsights-bbsf-controls.d.ts +1 -1
- package/bnsights-bbsf-controls.metadata.json +1 -0
- package/bundles/bnsights-bbsf-controls.umd.js +9454 -0
- package/bundles/bnsights-bbsf-controls.umd.js.map +1 -0
- package/esm2015/bnsights-bbsf-controls.js +6 -0
- package/esm2015/lib/Shared/Directives/template-name.directive.js +18 -0
- package/esm2015/lib/Shared/Pipes/bbsf-date-time.pipe.js +20 -0
- package/esm2015/lib/Shared/Pipes/bbsf-date.pipe.js +20 -0
- package/esm2015/lib/Shared/components/app-base-component.js +202 -0
- package/esm2015/lib/Shared/components/ng-tag-input.js +323 -0
- package/esm2015/lib/Shared/default_intl.js +29 -0
- package/esm2015/lib/Shared/services/ControlUtility.js +164 -0
- package/esm2015/lib/Shared/services/GlobalSettings.service.js +28 -0
- package/esm2015/lib/Shared/services/OnPagingFiltersChange.service.js +22 -0
- package/esm2015/lib/Shared/services/render-component-service.service.js +30 -0
- package/esm2015/lib/Shared/services/validationErrorMassage.service.js +137 -0
- package/esm2015/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.js +249 -0
- package/esm2015/lib/controls/Calendar/Calendar.component.js +177 -0
- package/esm2015/lib/controls/CheckBox/CheckBox.component.js +115 -0
- package/esm2015/lib/controls/ConfirmationModal/ConfirmationModal.component.js +139 -0
- package/esm2015/lib/controls/DateTimePicker/DateTimePicker.component.js +221 -0
- package/esm2015/lib/controls/DropdownList/DropdownList.component.js +179 -0
- package/esm2015/lib/controls/FileUplaod/FileUplaod.component.js +451 -0
- package/esm2015/lib/controls/Form/Form.component.js +106 -0
- package/esm2015/lib/controls/HtmlEditor/HtmlEditor.component.js +223 -0
- package/esm2015/lib/controls/ImageUpload/ImageUpload.component.js +347 -0
- package/esm2015/lib/controls/MapAutoComplete/MapAutoComplete.component.js +325 -0
- package/esm2015/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.js +429 -0
- package/esm2015/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.js +430 -0
- package/esm2015/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.js +429 -0
- package/esm2015/lib/controls/Paging/JwPagination.component.js +129 -0
- package/esm2015/lib/controls/Paging/Paging.component.js +312 -0
- package/esm2015/lib/controls/Phone/Phone.component.js +124 -0
- package/esm2015/lib/controls/ProfileImageUploader/ProfileImageUploader.component.js +349 -0
- package/esm2015/lib/controls/RadioButton/RadioButton.component.js +108 -0
- package/esm2015/lib/controls/Recaptcha/Recaptcha.component.js +132 -0
- package/esm2015/lib/controls/Repeater/repeater/repeater.component.js +117 -0
- package/esm2015/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.js +748 -0
- package/esm2015/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.js +19 -0
- package/esm2015/lib/controls/Repeater/repeater-table/repeater-table.component.js +108 -0
- package/esm2015/lib/controls/TagsInput/TagsInput.component.js +269 -0
- package/esm2015/lib/controls/TextArea/TextArea.component.js +192 -0
- package/esm2015/lib/controls/TextBox/TextBox.component.js +263 -0
- package/esm2015/lib/controls/Toggleslide/toggleslide.component.js +84 -0
- package/esm2015/lib/controls/bbsf-controls.module.js +239 -0
- package/esm2015/lib/controls/page-header-component/page-header-component.component.js +32 -0
- package/fesm2015/{bnsights-bbsf-controls.mjs → bnsights-bbsf-controls.js} +1511 -1630
- package/fesm2015/bnsights-bbsf-controls.js.map +1 -0
- package/lib/Shared/Directives/template-name.directive.d.ts +0 -3
- package/lib/Shared/Pipes/bbsf-date-time.pipe.d.ts +0 -3
- package/lib/Shared/Pipes/bbsf-date.pipe.d.ts +0 -3
- package/lib/Shared/components/app-base-component.d.ts +1 -3
- package/lib/Shared/components/ng-tag-input.d.ts +0 -3
- package/lib/Shared/default_intl.d.ts +0 -3
- package/lib/Shared/services/ControlUtility.d.ts +0 -3
- package/lib/Shared/services/GlobalSettings.service.d.ts +0 -3
- package/lib/Shared/services/OnPagingFiltersChange.service.d.ts +0 -3
- package/lib/Shared/services/render-component-service.service.d.ts +0 -3
- package/lib/Shared/services/validationErrorMassage.service.d.ts +0 -3
- package/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.d.ts +0 -3
- package/lib/controls/Calendar/Calendar.component.d.ts +5 -9
- package/lib/controls/CheckBox/CheckBox.component.d.ts +0 -3
- package/lib/controls/ConfirmationModal/ConfirmationModal.component.d.ts +0 -3
- package/lib/controls/DateTimePicker/DateTimePicker.component.d.ts +0 -3
- package/lib/controls/DropdownList/DropdownList.component.d.ts +0 -3
- package/lib/controls/FileUplaod/FileUplaod.component.d.ts +0 -3
- package/lib/controls/Form/Form.component.d.ts +0 -3
- package/lib/controls/HtmlEditor/HtmlEditor.component.d.ts +0 -3
- package/lib/controls/ImageUpload/ImageUpload.component.d.ts +0 -3
- package/lib/controls/MapAutoComplete/MapAutoComplete.component.d.ts +0 -3
- package/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.d.ts +0 -3
- package/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.d.ts +0 -3
- package/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.d.ts +0 -3
- package/lib/controls/Paging/JwPagination.component.d.ts +0 -3
- package/lib/controls/Paging/Paging.component.d.ts +0 -3
- package/lib/controls/Phone/Phone.component.d.ts +0 -3
- package/lib/controls/ProfileImageUploader/ProfileImageUploader.component.d.ts +0 -3
- package/lib/controls/RadioButton/RadioButton.component.d.ts +0 -3
- package/lib/controls/Recaptcha/Recaptcha.component.d.ts +0 -3
- package/lib/controls/Repeater/repeater/repeater.component.d.ts +0 -3
- package/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.d.ts +0 -3
- package/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.d.ts +0 -3
- package/lib/controls/Repeater/repeater-table/repeater-table.component.d.ts +0 -3
- package/lib/controls/TagsInput/TagsInput.component.d.ts +0 -3
- package/lib/controls/TextArea/TextArea.component.d.ts +0 -3
- package/lib/controls/TextBox/TextBox.component.d.ts +0 -3
- package/lib/controls/Toggleslide/toggleslide.component.d.ts +0 -3
- package/lib/controls/bbsf-controls.module.d.ts +0 -74
- package/lib/controls/page-header-component/page-header-component.component.d.ts +0 -3
- package/package.json +15 -27
- package/bnsights-bbsf-controls-1.0.87.tgz +0 -0
- package/esm2020/bnsights-bbsf-controls.mjs +0 -5
- package/esm2020/lib/Shared/Directives/template-name.directive.mjs +0 -18
- package/esm2020/lib/Shared/Pipes/bbsf-date-time.pipe.mjs +0 -21
- package/esm2020/lib/Shared/Pipes/bbsf-date.pipe.mjs +0 -21
- package/esm2020/lib/Shared/components/app-base-component.mjs +0 -198
- package/esm2020/lib/Shared/components/ng-tag-input.mjs +0 -336
- package/esm2020/lib/Shared/default_intl.mjs +0 -29
- package/esm2020/lib/Shared/services/ControlUtility.mjs +0 -162
- package/esm2020/lib/Shared/services/GlobalSettings.service.mjs +0 -30
- package/esm2020/lib/Shared/services/OnPagingFiltersChange.service.mjs +0 -24
- package/esm2020/lib/Shared/services/render-component-service.service.mjs +0 -30
- package/esm2020/lib/Shared/services/validationErrorMassage.service.mjs +0 -137
- package/esm2020/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.mjs +0 -245
- package/esm2020/lib/controls/Calendar/Calendar.component.mjs +0 -172
- package/esm2020/lib/controls/CheckBox/CheckBox.component.mjs +0 -114
- package/esm2020/lib/controls/ConfirmationModal/ConfirmationModal.component.mjs +0 -136
- package/esm2020/lib/controls/DateTimePicker/DateTimePicker.component.mjs +0 -217
- package/esm2020/lib/controls/DropdownList/DropdownList.component.mjs +0 -179
- package/esm2020/lib/controls/FileUplaod/FileUplaod.component.mjs +0 -453
- package/esm2020/lib/controls/Form/Form.component.mjs +0 -101
- package/esm2020/lib/controls/HtmlEditor/HtmlEditor.component.mjs +0 -223
- package/esm2020/lib/controls/ImageUpload/ImageUpload.component.mjs +0 -350
- package/esm2020/lib/controls/MapAutoComplete/MapAutoComplete.component.mjs +0 -325
- package/esm2020/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.mjs +0 -427
- package/esm2020/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.mjs +0 -427
- package/esm2020/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.mjs +0 -426
- package/esm2020/lib/controls/Paging/JwPagination.component.mjs +0 -156
- package/esm2020/lib/controls/Paging/Paging.component.mjs +0 -312
- package/esm2020/lib/controls/Phone/Phone.component.mjs +0 -124
- package/esm2020/lib/controls/ProfileImageUploader/ProfileImageUploader.component.mjs +0 -354
- package/esm2020/lib/controls/RadioButton/RadioButton.component.mjs +0 -106
- package/esm2020/lib/controls/Recaptcha/Recaptcha.component.mjs +0 -132
- package/esm2020/lib/controls/Repeater/repeater/repeater.component.mjs +0 -125
- package/esm2020/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.mjs +0 -750
- package/esm2020/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.mjs +0 -21
- package/esm2020/lib/controls/Repeater/repeater-table/repeater-table.component.mjs +0 -108
- package/esm2020/lib/controls/TagsInput/TagsInput.component.mjs +0 -268
- package/esm2020/lib/controls/TextArea/TextArea.component.mjs +0 -192
- package/esm2020/lib/controls/TextBox/TextBox.component.mjs +0 -266
- package/esm2020/lib/controls/Toggleslide/toggleslide.component.mjs +0 -84
- package/esm2020/lib/controls/bbsf-controls.module.mjs +0 -401
- package/esm2020/lib/controls/page-header-component/page-header-component.component.mjs +0 -37
- package/fesm2015/bnsights-bbsf-controls.mjs.map +0 -1
- package/fesm2020/bnsights-bbsf-controls.mjs +0 -8938
- package/fesm2020/bnsights-bbsf-controls.mjs.map +0 -1
- /package/{esm2020/lib/Shared/Enums/CalendarView.mjs → esm2015/lib/Shared/Enums/CalendarView.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/ControlLayout.mjs → esm2015/lib/Shared/Enums/ControlLayout.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/Countries.mjs → esm2015/lib/Shared/Enums/Countries.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/Enums.mjs → esm2015/lib/Shared/Enums/Enums.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/FileType.mjs → esm2015/lib/Shared/Enums/FileType.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/FilterType.mjs → esm2015/lib/Shared/Enums/FilterType.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/FontSize.mjs → esm2015/lib/Shared/Enums/FontSize.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/ForceDirection.mjs → esm2015/lib/Shared/Enums/ForceDirection.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/IconPosition.mjs → esm2015/lib/Shared/Enums/IconPosition.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/ImageType.mjs → esm2015/lib/Shared/Enums/ImageType.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/InputType.mjs → esm2015/lib/Shared/Enums/InputType.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/Insert.mjs → esm2015/lib/Shared/Enums/Insert.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/LanguageMode.mjs → esm2015/lib/Shared/Enums/LanguageMode.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/LanguageValidation.mjs → esm2015/lib/Shared/Enums/LanguageValidation.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/Misc.mjs → esm2015/lib/Shared/Enums/Misc.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/PagingActionMode.mjs → esm2015/lib/Shared/Enums/PagingActionMode.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/Para.mjs → esm2015/lib/Shared/Enums/Para.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/PickerType.mjs → esm2015/lib/Shared/Enums/PickerType.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/SelectMode.mjs → esm2015/lib/Shared/Enums/SelectMode.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/StartView.mjs → esm2015/lib/Shared/Enums/StartView.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/Style.mjs → esm2015/lib/Shared/Enums/Style.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/StyleConfirmationMode.mjs → esm2015/lib/Shared/Enums/StyleConfirmationMode.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/TagInputView.mjs → esm2015/lib/Shared/Enums/TagInputView.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/menu-list-enum.mjs → esm2015/lib/Shared/Enums/menu-list-enum.js} +0 -0
- /package/{esm2020/lib/Shared/Models/Attribute.mjs → esm2015/lib/Shared/Models/Attribute.js} +0 -0
- /package/{esm2020/lib/Shared/Models/AutocompleteDTO.mjs → esm2015/lib/Shared/Models/AutocompleteDTO.js} +0 -0
- /package/{esm2020/lib/Shared/Models/AutocompleteOptions.mjs → esm2015/lib/Shared/Models/AutocompleteOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/CalendarEventDTO.mjs → esm2015/lib/Shared/Models/CalendarEventDTO.js} +0 -0
- /package/{esm2020/lib/Shared/Models/CalendarOptions.mjs → esm2015/lib/Shared/Models/CalendarOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/CancelDTO.mjs → esm2015/lib/Shared/Models/CancelDTO.js} +0 -0
- /package/{esm2020/lib/Shared/Models/CaptchaStyle.mjs → esm2015/lib/Shared/Models/CaptchaStyle.js} +0 -0
- /package/{esm2020/lib/Shared/Models/CheckBoxOptions.mjs → esm2015/lib/Shared/Models/CheckBoxOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/ConfirmationModalOptions.mjs → esm2015/lib/Shared/Models/ConfirmationModalOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/ControlOptionsBase.mjs → esm2015/lib/Shared/Models/ControlOptionsBase.js} +0 -0
- /package/{esm2020/lib/Shared/Models/CustomValidation.mjs → esm2015/lib/Shared/Models/CustomValidation.js} +0 -0
- /package/{esm2020/lib/Shared/Models/DropdownListItem.mjs → esm2015/lib/Shared/Models/DropdownListItem.js} +0 -0
- /package/{esm2020/lib/Shared/Models/DropdownOptions.mjs → esm2015/lib/Shared/Models/DropdownOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/EditPersonalImage.mjs → esm2015/lib/Shared/Models/EditPersonalImage.js} +0 -0
- /package/{esm2020/lib/Shared/Models/EnglishArabicDTO.mjs → esm2015/lib/Shared/Models/EnglishArabicDTO.js} +0 -0
- /package/{esm2020/lib/Shared/Models/FileDTO.mjs → esm2015/lib/Shared/Models/FileDTO.js} +0 -0
- /package/{esm2020/lib/Shared/Models/FileUploadModel.mjs → esm2015/lib/Shared/Models/FileUploadModel.js} +0 -0
- /package/{esm2020/lib/Shared/Models/FileUploadOptions.mjs → esm2015/lib/Shared/Models/FileUploadOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/FilterItem.mjs → esm2015/lib/Shared/Models/FilterItem.js} +0 -0
- /package/{esm2020/lib/Shared/Models/FormOptions.mjs → esm2015/lib/Shared/Models/FormOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/HtmlEditorOptions.mjs → esm2015/lib/Shared/Models/HtmlEditorOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/ImageUploadOptions.mjs → esm2015/lib/Shared/Models/ImageUploadOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/MapAutoCompleteOptions.mjs → esm2015/lib/Shared/Models/MapAutoCompleteOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/MapAutocompleteDTO.mjs → esm2015/lib/Shared/Models/MapAutocompleteDTO.js} +0 -0
- /package/{esm2020/lib/Shared/Models/MultiLingualHtmlEditorOptions.mjs → esm2015/lib/Shared/Models/MultiLingualHtmlEditorOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/MultiLingualTextAreaOptions.mjs → esm2015/lib/Shared/Models/MultiLingualTextAreaOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/MultilingualControlOptionsBase.mjs → esm2015/lib/Shared/Models/MultilingualControlOptionsBase.js} +0 -0
- /package/{esm2020/lib/Shared/Models/MultilingualTextBoxOptions.mjs → esm2015/lib/Shared/Models/MultilingualTextBoxOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/MultipleFileUploadModel.mjs → esm2015/lib/Shared/Models/MultipleFileUploadModel.js} +0 -0
- /package/{esm2020/lib/Shared/Models/PagingDTO.mjs → esm2015/lib/Shared/Models/PagingDTO.js} +0 -0
- /package/{esm2020/lib/Shared/Models/PagingOptions.mjs → esm2015/lib/Shared/Models/PagingOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/PagingPayload.mjs → esm2015/lib/Shared/Models/PagingPayload.js} +0 -0
- /package/{esm2020/lib/Shared/Models/PhoneOptions.mjs → esm2015/lib/Shared/Models/PhoneOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/ProfileImageUploadOptions.mjs → esm2015/lib/Shared/Models/ProfileImageUploadOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/ProfilePictureDTO.mjs → esm2015/lib/Shared/Models/ProfilePictureDTO.js} +0 -0
- /package/{esm2020/lib/Shared/Models/RadioButtonItem.mjs → esm2015/lib/Shared/Models/RadioButtonItem.js} +0 -0
- /package/{esm2020/lib/Shared/Models/RadioButtonOptions.mjs → esm2015/lib/Shared/Models/RadioButtonOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/RangeNumber.mjs → esm2015/lib/Shared/Models/RangeNumber.js} +0 -0
- /package/{esm2020/lib/Shared/Models/Recaptcha.mjs → esm2015/lib/Shared/Models/Recaptcha.js} +0 -0
- /package/{esm2020/lib/Shared/Models/RecaptchaOptions.mjs → esm2015/lib/Shared/Models/RecaptchaOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/RepeaterField.mjs → esm2015/lib/Shared/Models/RepeaterField.js} +0 -0
- /package/{esm2020/lib/Shared/Models/RepeaterOptions.mjs → esm2015/lib/Shared/Models/RepeaterOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/SaveDTO.mjs → esm2015/lib/Shared/Models/SaveDTO.js} +0 -0
- /package/{esm2020/lib/Shared/Models/TagsInputDTO.mjs → esm2015/lib/Shared/Models/TagsInputDTO.js} +0 -0
- /package/{esm2020/lib/Shared/Models/TagsInputOptions.mjs → esm2015/lib/Shared/Models/TagsInputOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/TextAreaOptions.mjs → esm2015/lib/Shared/Models/TextAreaOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/TextBoxOptions.mjs → esm2015/lib/Shared/Models/TextBoxOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/ToggleslideOptions.mjs → esm2015/lib/Shared/Models/ToggleslideOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/UploadPersonalImage.mjs → esm2015/lib/Shared/Models/UploadPersonalImage.js} +0 -0
- /package/{esm2020/lib/Shared/Models/bread-crumb.mjs → esm2015/lib/Shared/Models/bread-crumb.js} +0 -0
- /package/{esm2020/lib/Shared/Models/control-filter-Item.mjs → esm2015/lib/Shared/Models/control-filter-Item.js} +0 -0
- /package/{esm2020/lib/Shared/Models/datePickerOptions.mjs → esm2015/lib/Shared/Models/datePickerOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/filter-options.mjs → esm2015/lib/Shared/Models/filter-options.js} +0 -0
- /package/{esm2020/lib/Shared/Models/page-header-options.mjs → esm2015/lib/Shared/Models/page-header-options.js} +0 -0
- /package/{esm2020/lib/Shared/config/environment.mjs → esm2015/lib/Shared/config/environment.js} +0 -0
- /package/{esm2020/public-api.mjs → esm2015/public-api.js} +0 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
export class RepeaterItemFieldComponent {
|
|
3
|
+
constructor() { }
|
|
4
|
+
ngOnInit() {
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
RepeaterItemFieldComponent.decorators = [
|
|
8
|
+
{ type: Component, args: [{
|
|
9
|
+
selector: 'repeater-item-field',
|
|
10
|
+
template: "<ng-container *ngFor=\"let template of templates ; index as i\">\r\n <ng-container *ngIf=\"i==filedIndex\" [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext] ={itemIndex:itemIndex,controlIndex:i}></ng-container>\r\n </ng-container>\r\n"
|
|
11
|
+
},] }
|
|
12
|
+
];
|
|
13
|
+
RepeaterItemFieldComponent.ctorParameters = () => [];
|
|
14
|
+
RepeaterItemFieldComponent.propDecorators = {
|
|
15
|
+
templates: [{ type: Input }],
|
|
16
|
+
filedIndex: [{ type: Input }],
|
|
17
|
+
itemIndex: [{ type: Input }]
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0ZXItaXRlbS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWNvbnRyb2xzL3NyYy9saWIvY29udHJvbHMvUmVwZWF0ZXIvcmVwZWF0ZXItaXRlbS1maWVsZC9yZXBlYXRlci1pdGVtLWZpZWxkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFNdEUsTUFBTSxPQUFPLDBCQUEwQjtJQUtyQyxnQkFBZ0IsQ0FBQztJQUVqQixRQUFRO0lBQ1IsQ0FBQzs7O1lBWkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxxQkFBcUI7Z0JBQy9CLG1RQUFtRDthQUNwRDs7Ozt3QkFFRSxLQUFLO3lCQUNMLEtBQUs7d0JBQ0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncmVwZWF0ZXItaXRlbS1maWVsZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JlcGVhdGVyLWl0ZW0tZmllbGQuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXBlYXRlckl0ZW1GaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgdGVtcGxhdGVzOiAgQXJyYXk8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgQElucHV0KCkgZmlsZWRJbmRleDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGl0ZW1JbmRleDogbnVtYmVyO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { FormGroup } from '@angular/forms';
|
|
3
|
+
import { UtilityService } from '@bnsights/bbsf-utilities';
|
|
4
|
+
export class RepeaterTableComponent {
|
|
5
|
+
constructor(utilityService) {
|
|
6
|
+
this.utilityService = utilityService;
|
|
7
|
+
this.items = [];
|
|
8
|
+
this.originalItems = [];
|
|
9
|
+
}
|
|
10
|
+
ngOnInit() {
|
|
11
|
+
this.repeaterGroup = new FormGroup({});
|
|
12
|
+
this.group.addControl(this.options.Name, this.repeaterGroup);
|
|
13
|
+
if (this.options.RepeaterValue.length > 0) {
|
|
14
|
+
this.originalItems = this.options.RepeaterValue;
|
|
15
|
+
for (let index = 0; index < this.options.RepeaterValue.length; index++) {
|
|
16
|
+
this.items.push(index);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
else
|
|
20
|
+
for (let index = 0; index < this.options.MinRequiredItems; index++) {
|
|
21
|
+
this.items.push(index);
|
|
22
|
+
}
|
|
23
|
+
this.repeaterGroup.valueChanges.subscribe((res) => {
|
|
24
|
+
let result = [];
|
|
25
|
+
let rowNumber = [];
|
|
26
|
+
let addItems = [];
|
|
27
|
+
for (const key in this.repeaterGroup.controls) {
|
|
28
|
+
if (Object.prototype.hasOwnProperty.call(this.repeaterGroup.controls, key)) {
|
|
29
|
+
const keySplitArr = key.split('.');
|
|
30
|
+
let item = {
|
|
31
|
+
[keySplitArr[1]]: { [keySplitArr[0]]: this.group.controls[this.options.Name].value[key] }
|
|
32
|
+
};
|
|
33
|
+
addItems.push(item);
|
|
34
|
+
if (!rowNumber.includes(keySplitArr[1]))
|
|
35
|
+
rowNumber.push(keySplitArr[1]);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
for (let index = 0; index < rowNumber.length; index++) {
|
|
39
|
+
const row = rowNumber[index];
|
|
40
|
+
let addObject = {};
|
|
41
|
+
let filteredElements = addItems.filter(item => item[row]);
|
|
42
|
+
for (let index = 0; index < filteredElements.length; index++) {
|
|
43
|
+
const filteredElement = filteredElements[index];
|
|
44
|
+
for (const key in filteredElement) {
|
|
45
|
+
if (Object.prototype.hasOwnProperty.call(filteredElement, key)) {
|
|
46
|
+
const element = filteredElement[key];
|
|
47
|
+
for (const key in element) {
|
|
48
|
+
if (Object.prototype.hasOwnProperty.call(element, key)) {
|
|
49
|
+
const value = element[key];
|
|
50
|
+
addObject[key] = value;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
result.push(addObject);
|
|
57
|
+
}
|
|
58
|
+
this.options.RepeaterValue = result;
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
deleteItem(Index) {
|
|
62
|
+
if (this.items.length == this.options.MinRequiredItems && this.options.IsRequired)
|
|
63
|
+
return;
|
|
64
|
+
let deletedControls = [];
|
|
65
|
+
let controlNames = this.options.RepeaterStructure.map(e => e.ControlOptions.Name);
|
|
66
|
+
for (const key in this.repeaterGroup.controls) {
|
|
67
|
+
if (Object.prototype.hasOwnProperty.call(this.repeaterGroup.controls, key)) {
|
|
68
|
+
for (let index = 0; index < controlNames.length; index++) {
|
|
69
|
+
const element = controlNames[index];
|
|
70
|
+
const keySplitArr = key.split('.');
|
|
71
|
+
if (keySplitArr[0] + keySplitArr[1] == `${element}${Index}`) {
|
|
72
|
+
const element = this.repeaterGroup.controls[key];
|
|
73
|
+
deletedControls.push({ [key]: element });
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
for (let index = 0; index < deletedControls.length; index++) {
|
|
79
|
+
const element = deletedControls[index];
|
|
80
|
+
for (const key in element) {
|
|
81
|
+
if (Object.prototype.hasOwnProperty.call(element, key)) {
|
|
82
|
+
this.repeaterGroup.removeControl(key);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
this.items = this.items.filter((res) => res != this.items[Index]);
|
|
87
|
+
}
|
|
88
|
+
addItem() {
|
|
89
|
+
if (this.items.length == 0)
|
|
90
|
+
this.items.push(this.items.length);
|
|
91
|
+
else
|
|
92
|
+
this.items.push(this.items[this.items.length - 1] + 1);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
RepeaterTableComponent.decorators = [
|
|
96
|
+
{ type: Component, args: [{
|
|
97
|
+
selector: 'BBSF-repeater-table',
|
|
98
|
+
template: "<div class=\"form-group bbsf-control bbsf-repeater\">\r\n <!--table-->\r\n <div class=\"table-responsive\">\r\n <table class=\"bbsf-repeater-table table {{options.RepeaterTableExtraClasses}}\">\r\n <thead class=\"table-head\">\r\n <tr class=\"{{options.RepeaterTableRowExtraClasses}}\">\r\n <th *ngFor=\"let item of options.RepeaterStructure\" [hidden]=\"item.IsHiddenInput\">{{item.HeaderTitle}}</th>\r\n <th *ngIf=\"!options.DisableDeleteButton\" class=\"text-center\">{{utilityService.getResourceValue(options.ActionLabelKey)}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-body\">\r\n <tr *ngFor=\"let item of items ; index as i\">\r\n <td *ngFor=\"let RepeaterField of options.RepeaterStructure ; index as r\" [hidden]=\"RepeaterField.IsHiddenInput\">\r\n <repeater-field-builder [RepeaterField]=\"RepeaterField\" [itemNumber]=\"i\"\r\n [itemsValue]=\"originalItems\" [controlNumber]=\"r\" [group]=\"repeaterGroup\">\r\n </repeater-field-builder>\r\n </td>\r\n <td *ngIf=\"!options.DisableDeleteButton\" class=\"td-delete\">\r\n <button class=\"{{options.DeleteButtonExtraClasses}} btn btn-icon btn-sm btn-danger\" type=\"button\" (click)=\"deleteItem(i)\"\r\n [disabled]=\"(items.length ==options.MinRequiredItems&&options.IsRequired)\">\r\n <span [innerHTML]=\"options.DeleteButtonText\"></span>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <!--add button-->\r\n <div class=\"repeater-add-btn\" *ngIf=\"!options.DisableAddButton\">\r\n <button class=\"{{options.AddButtonExtraClasses}} btn btn-sm btn-brand\" type=\"button\" (click)=\"addItem()\">\r\n <span [innerHTML]=\"options.AddButtonText\"></span>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n\r\n"
|
|
99
|
+
},] }
|
|
100
|
+
];
|
|
101
|
+
RepeaterTableComponent.ctorParameters = () => [
|
|
102
|
+
{ type: UtilityService }
|
|
103
|
+
];
|
|
104
|
+
RepeaterTableComponent.propDecorators = {
|
|
105
|
+
group: [{ type: Input }],
|
|
106
|
+
options: [{ type: Input }]
|
|
107
|
+
};
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0ZXItdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1jb250cm9scy9zcmMvbGliL2NvbnRyb2xzL1JlcGVhdGVyL3JlcGVhdGVyLXRhYmxlL3JlcGVhdGVyLXRhYmxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBMkQsTUFBTSxlQUFlLENBQUM7QUFDMUcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQU8xRCxNQUFNLE9BQU8sc0JBQXNCO0lBT2pDLFlBQW1CLGNBQTZCO1FBQTdCLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBSmhELFVBQUssR0FBYSxFQUFFLENBQUE7UUFFcEIsa0JBQWEsR0FBUSxFQUFFLENBQUM7SUFFNEIsQ0FBQztJQUVyRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0QsSUFBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxFQUN0QztZQUNFLElBQUksQ0FBQyxhQUFhLEdBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7WUFDL0MsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDdEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FB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LElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMzRCxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsS0FBSyxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUU7Z0JBQ3pCLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRTtvQkFDdEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUE7aUJBQ3RDO2FBQ0Y7U0FDRjtRQUVELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDbkUsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQzs7WUFFbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDOzs7WUF0R0EsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxxQkFBcUI7Z0JBQy9CLHk1REFBOEM7YUFDL0M7OztZQU5RLGNBQWM7OztvQkFRcEIsS0FBSztzQkFDTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBRdWVyeUxpc3QsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFJlcGVhdGVyT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9Nb2RlbHMvUmVwZWF0ZXJPcHRpb25zJztcclxuaW1wb3J0IHsgVXRpbGl0eVNlcnZpY2UgfSBmcm9tICdAYm5zaWdodHMvYmJzZi11dGlsaXRpZXMnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnQkJTRi1yZXBlYXRlci10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JlcGVhdGVyLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlcGVhdGVyVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQgeyBcclxuICBASW5wdXQoKSBncm91cDogRm9ybUdyb3VwO1xyXG4gIEBJbnB1dCgpIG9wdGlvbnM6IFJlcGVhdGVyT3B0aW9ucztcclxuICBpdGVtczogbnVtYmVyW10gPSBbXVxyXG4gIHJlcGVhdGVyR3JvdXA6IEZvcm1Hcm91cDtcclxuICBvcmlnaW5hbEl0ZW1zOmFueSBbXT1bXTtcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIHV0aWxpdHlTZXJ2aWNlOlV0aWxpdHlTZXJ2aWNlKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlcGVhdGVyR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgIHRoaXMuZ3JvdXAuYWRkQ29udHJvbCh0aGlzLm9wdGlvbnMuTmFtZSwgdGhpcy5yZXBlYXRlckdyb3VwKTtcclxuICAgIGlmKHRoaXMub3B0aW9ucy5SZXBlYXRlclZhbHVlLmxlbmd0aD4wKVxyXG4gICAge1xyXG4gICAgICB0aGlzLm9yaWdpbmFsSXRlbXM9IHRoaXMub3B0aW9ucy5SZXBlYXRlclZhbHVlO1xyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5vcHRpb25zLlJlcGVhdGVyVmFsdWUubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGluZGV4KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICBcclxuICAgIGVsc2VcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLm9wdGlvbnMuTWluUmVxdWlyZWRJdGVtczsgaW5kZXgrKykge1xyXG4gICAgICB0aGlzLml0ZW1zLnB1c2goaW5kZXgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZXBlYXRlckdyb3VwLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICBsZXQgcmVzdWx0ID0gW107XHJcbiAgICAgIGxldCByb3dOdW1iZXIgPSBbXTtcclxuICAgICAgbGV0IGFkZEl0ZW1zID0gW107XHJcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucmVwZWF0ZXJHcm91cC5jb250cm9scykge1xyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5yZXBlYXRlckdyb3VwLmNvbnRyb2xzLCBrZXkpKSB7XHJcbiAgICAgICAgICBjb25zdCBrZXlTcGxpdEFyciA9IGtleS5zcGxpdCgnLicpXHJcbiAgICAgICAgICBsZXQgaXRlbSA9IHtcclxuICAgICAgICAgICAgW2tleVNwbGl0QXJyWzFdXTogeyBba2V5U3BsaXRBcnJbMF1dOiB0aGlzLmdyb3VwLmNvbnRyb2xzW3RoaXMub3B0aW9ucy5OYW1lXS52YWx1ZVtrZXldIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGFkZEl0ZW1zLnB1c2goaXRlbSlcclxuICAgICAgICAgIGlmICghcm93TnVtYmVyLmluY2x1ZGVzKGtleVNwbGl0QXJyWzFdKSlcclxuICAgICAgICAgICAgcm93TnVtYmVyLnB1c2goa2V5U3BsaXRBcnJbMV0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCByb3dOdW1iZXIubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgY29uc3Qgcm93ID0gcm93TnVtYmVyW2luZGV4XTtcclxuICAgICAgICBsZXQgYWRkT2JqZWN0ID0ge31cclxuICAgICAgICBsZXQgZmlsdGVyZWRFbGVtZW50cyA9IGFkZEl0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW1bcm93XSlcclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZmlsdGVyZWRFbGVtZW50cy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkRWxlbWVudCA9IGZpbHRlcmVkRWxlbWVudHNbaW5kZXhdO1xyXG4gICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZmlsdGVyZWRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZmlsdGVyZWRFbGVtZW50LCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGZpbHRlcmVkRWxlbWVudFtrZXldO1xyXG4gICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZWxlbWVudCwga2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGVsZW1lbnRba2V5XTtcclxuICAgICAgICAgICAgICAgICAgYWRkT2JqZWN0W2tleV0gPSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQucHVzaChhZGRPYmplY3QpXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5vcHRpb25zLlJlcGVhdGVyVmFsdWUgPSByZXN1bHQ7XHJcbiAgICB9KVxyXG5cclxuICB9XHJcblxyXG4gIGRlbGV0ZUl0ZW0oSW5kZXgpIHtcclxuICAgIGlmICh0aGlzLml0ZW1zLmxlbmd0aCA9PSB0aGlzLm9wdGlvbnMuTWluUmVxdWlyZWRJdGVtcyAmJiB0aGlzLm9wdGlvbnMuSXNSZXF1aXJlZClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgbGV0IGRlbGV0ZWRDb250cm9sczogYW55W10gPSBbXVxyXG4gICAgbGV0IGNvbnRyb2xOYW1lcyA9IHRoaXMub3B0aW9ucy5SZXBlYXRlclN0cnVjdHVyZS5tYXAoZSA9PiBlLkNvbnRyb2xPcHRpb25zLk5hbWUpXHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnJlcGVhdGVyR3JvdXAuY29udHJvbHMpIHtcclxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnJlcGVhdGVyR3JvdXAuY29udHJvbHMsIGtleSkpIHtcclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY29udHJvbE5hbWVzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IGNvbnRyb2xOYW1lc1tpbmRleF07XHJcbiAgICAgICAgICBjb25zdCBrZXlTcGxpdEFyciA9IGtleS5zcGxpdCgnLicpXHJcbiAgICAgICAgICBpZiAoa2V5U3BsaXRBcnJbMF0gKyBrZXlTcGxpdEFyclsxXSA9PSBgJHtlbGVtZW50fSR7SW5kZXh9YCkge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5yZXBlYXRlckdyb3VwLmNvbnRyb2xzW2tleV07XHJcbiAgICAgICAgICAgIGRlbGV0ZWRDb250cm9scy5wdXNoKHsgW2tleV06IGVsZW1lbnQgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBkZWxldGVkQ29udHJvbHMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBkZWxldGVkQ29udHJvbHNbaW5kZXhdO1xyXG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlbGVtZW50LCBrZXkpKSB7XHJcbiAgICAgICAgICB0aGlzLnJlcGVhdGVyR3JvdXAucmVtb3ZlQ29udHJvbChrZXkpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKChyZXMpID0+IHJlcyAhPSB0aGlzLml0ZW1zW0luZGV4XSlcclxuICB9XHJcblxyXG4gIGFkZEl0ZW0oKSB7XHJcbiAgICBpZih0aGlzLml0ZW1zLmxlbmd0aD09MClcclxuICAgIHRoaXMuaXRlbXMucHVzaCh0aGlzLml0ZW1zLmxlbmd0aCk7XHJcbiAgICBlbHNlXHJcbiAgICB0aGlzLml0ZW1zLnB1c2godGhpcy5pdGVtc1t0aGlzLml0ZW1zLmxlbmd0aC0xXSsxKTtcclxufVxyXG5cclxuXHJcbn1cclxuIl19
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import { Component, Input, Optional, Output, EventEmitter, ViewChild } from '@angular/core';
|
|
2
|
+
import { FormControl, Validators, FormGroup, ControlContainer, FormGroupDirective } from '@angular/forms';
|
|
3
|
+
import { ControlUtility } from '../../Shared/services/ControlUtility';
|
|
4
|
+
import { HttpClient } from '@angular/common/http';
|
|
5
|
+
import { EMPTY } from 'rxjs';
|
|
6
|
+
import { ControlValidationService, RequestHandlerService, RequestOptionsModel, UtilityService } from '@bnsights/bbsf-utilities';
|
|
7
|
+
import { GlobalSettings } from '../../Shared/services/GlobalSettings.service';
|
|
8
|
+
export class TagsInputComponent {
|
|
9
|
+
// tslint:disable-next-line: max-line-length
|
|
10
|
+
constructor(http, controlUtility, requestHandlerService, controlContainer, TagsInputControlHost, UtilityService, controlValidationService, globalSettings) {
|
|
11
|
+
this.http = http;
|
|
12
|
+
this.controlUtility = controlUtility;
|
|
13
|
+
this.requestHandlerService = requestHandlerService;
|
|
14
|
+
this.controlContainer = controlContainer;
|
|
15
|
+
this.TagsInputControlHost = TagsInputControlHost;
|
|
16
|
+
this.UtilityService = UtilityService;
|
|
17
|
+
this.controlValidationService = controlValidationService;
|
|
18
|
+
this.globalSettings = globalSettings;
|
|
19
|
+
this.OnChange = new EventEmitter();
|
|
20
|
+
// TagInputControl: AbstractControl;
|
|
21
|
+
this.SelectedId = [];
|
|
22
|
+
this.tags = [];
|
|
23
|
+
this.NewSelectionValidationKey = "";
|
|
24
|
+
this.markAllAsTouched = false;
|
|
25
|
+
this.validationRules = [];
|
|
26
|
+
this.validationRulesasync = [];
|
|
27
|
+
this.SearchResultHasItems = false;
|
|
28
|
+
this.resetError = () => {
|
|
29
|
+
this.controlValidationService.RemoveGlobalError();
|
|
30
|
+
};
|
|
31
|
+
//External Method
|
|
32
|
+
this.RemoveRequiredValidation = () => {
|
|
33
|
+
this.controlUtility.RemoveRequiredValidation(this.TagsFormControl, this.validationRules, this.options);
|
|
34
|
+
};
|
|
35
|
+
//External Method
|
|
36
|
+
this.AddRequiredValidation = () => {
|
|
37
|
+
this.controlUtility.AddRequiredValidation(this.TagsFormControl, this.validationRules, this.options);
|
|
38
|
+
};
|
|
39
|
+
//External Method
|
|
40
|
+
this.RemoveCustomValidation = (CustomValidation) => {
|
|
41
|
+
this.controlUtility.RemoveCustomValidation(this.TagsFormControl, this.validationRules, CustomValidation);
|
|
42
|
+
};
|
|
43
|
+
//External Method
|
|
44
|
+
this.AddCustomValidation = (CustomValidation) => {
|
|
45
|
+
this.controlUtility.AddCustomValidation(this.TagsFormControl, this.validationRules, CustomValidation);
|
|
46
|
+
};
|
|
47
|
+
//External Method
|
|
48
|
+
this.IsValid = () => {
|
|
49
|
+
this.controlUtility.IsValid(this.TagsFormControl);
|
|
50
|
+
};
|
|
51
|
+
TagsInputComponent.controlContainerstatic = this.controlContainer;
|
|
52
|
+
}
|
|
53
|
+
static showErrorOfInputs(errors) {
|
|
54
|
+
const controlContainerstatic = TagsInputComponent.controlContainerstatic;
|
|
55
|
+
const formGroup = controlContainerstatic.control;
|
|
56
|
+
for (const key in errors) {
|
|
57
|
+
if (errors.hasOwnProperty(key)) {
|
|
58
|
+
for (const iterator of errors[key]) {
|
|
59
|
+
const formControl = formGroup.get(key);
|
|
60
|
+
formControl.setErrors({ "FluentApi": iterator });
|
|
61
|
+
formControl.markAsTouched();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
ngOnDestroy() {
|
|
67
|
+
if (this.changeValueSubscription)
|
|
68
|
+
this.changeValueSubscription.unsubscribe();
|
|
69
|
+
}
|
|
70
|
+
ngOnInit() {
|
|
71
|
+
this.textDir = this.options.ForceDirection == 2 ? 'rtl' : 'ltr';
|
|
72
|
+
this.controlValidationService.isCreatedBefor = false;
|
|
73
|
+
this.options.DatasourceItemText = this.options.DatasourceItemText.toLowerCase();
|
|
74
|
+
this.TagsFormGroup = new FormGroup({});
|
|
75
|
+
;
|
|
76
|
+
this.TagsFormGroup.addControl("tags", new FormControl(''));
|
|
77
|
+
this.TagsFormControl = this.TagsFormGroup.controls["tags"]; // new FormControl('',validationRules);
|
|
78
|
+
this.group.addControl(this.options.Name, this.TagsFormControl);
|
|
79
|
+
if (!this.options.ViewType)
|
|
80
|
+
this.options.ViewType = this.globalSettings.ViewType;
|
|
81
|
+
if (this.options.LabelKey != null && this.options.LabelKey != "")
|
|
82
|
+
this.options.LabelValue = this.UtilityService.getResourceValue(this.options.LabelKey);
|
|
83
|
+
if (!this.options.NoResultText)
|
|
84
|
+
this.options.NoResultText = this.UtilityService.getResourceValue("NoItemsMatch");
|
|
85
|
+
// this.group.addControl(this.options.Name, new FormControl(''));
|
|
86
|
+
// this.TagInputControl = this.group.controls[this.options.Name]; // new FormControl('',validationRules);
|
|
87
|
+
this.TagsFormControl.setValue(this.options.Value);
|
|
88
|
+
if (this.options.IsRequired) {
|
|
89
|
+
this.validationRules.push(Validators.required);
|
|
90
|
+
}
|
|
91
|
+
if (this.options.CustomValidation.length > 0) {
|
|
92
|
+
let Validations = this.options.CustomValidation;
|
|
93
|
+
for (let index = 0; index < Validations.length; index++) {
|
|
94
|
+
const Validation = Validations[index];
|
|
95
|
+
this.validationRules.push(Validation.functionBody);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
this.TagsFormControl.setValidators(this.validationRules);
|
|
99
|
+
this.TagsFormControl.setAsyncValidators(this.validationRulesasync);
|
|
100
|
+
if (this.options.IsDisabled) {
|
|
101
|
+
this.TagsFormControl.disable();
|
|
102
|
+
}
|
|
103
|
+
if (this.options.Value != undefined && this.options.Value.length > 0) {
|
|
104
|
+
for (let index = 0; index < this.options.Value.length; index++) {
|
|
105
|
+
const element = this.options.Value[index];
|
|
106
|
+
this.SelectedId.push(element.id);
|
|
107
|
+
}
|
|
108
|
+
this.tags = this.options.Value;
|
|
109
|
+
this.TagsFormControl.setValue(this.options.Value);
|
|
110
|
+
}
|
|
111
|
+
this.TagsInputControlHost.ngSubmit.subscribe((value) => {
|
|
112
|
+
this.group.markAllAsTouched();
|
|
113
|
+
this.markAllAsTouched = true;
|
|
114
|
+
});
|
|
115
|
+
//Check for changing in value
|
|
116
|
+
this.changeValueSubscription = this.TagsFormControl.valueChanges.subscribe(c => {
|
|
117
|
+
var _a;
|
|
118
|
+
this.tags = this.TagsFormControl.value;
|
|
119
|
+
this.SelectedId = (_a = this.tags) === null || _a === void 0 ? void 0 : _a.filter(item => item.id).map(item => item.id);
|
|
120
|
+
if (this.tags == null) {
|
|
121
|
+
this.SearchKey.selected = "";
|
|
122
|
+
this.tags = [];
|
|
123
|
+
this.TagsFormControl.setValue([]);
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
ngAfterViewInit() {
|
|
128
|
+
if (this.options.AttributeList != null) {
|
|
129
|
+
var element = document.getElementById(this.options.Name);
|
|
130
|
+
for (let index = 0; index < this.options.AttributeList.length; index++) {
|
|
131
|
+
element.setAttribute(this.options.AttributeList[index].Key, this.options.AttributeList[index].value);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
let inputElement = document.getElementById(this.options.Name).getElementsByTagName("input")[0];
|
|
135
|
+
inputElement.setAttribute("autocomplete", "off");
|
|
136
|
+
}
|
|
137
|
+
showGlobalError() {
|
|
138
|
+
this.controlUtility.showGlobalError();
|
|
139
|
+
}
|
|
140
|
+
getErrorValidation(ErrorList) {
|
|
141
|
+
if (this.markAllAsTouched && this.group.invalid) {
|
|
142
|
+
this.showGlobalError();
|
|
143
|
+
this.markAllAsTouched = false;
|
|
144
|
+
}
|
|
145
|
+
return this.controlUtility.getErrorValidationMassage(ErrorList, this.group, this.options);
|
|
146
|
+
}
|
|
147
|
+
copyInputMessage(inputElement) {
|
|
148
|
+
this.controlUtility.CopyInputMessage(inputElement);
|
|
149
|
+
}
|
|
150
|
+
searchFunctionFactory(Text) {
|
|
151
|
+
//If no text then return empty observable
|
|
152
|
+
if (!Text)
|
|
153
|
+
return EMPTY;
|
|
154
|
+
let Url = `${this.options.ActionURL}?${this.options.QueryParamName}=${encodeURIComponent(Text)}&${this.options.SelectedItemsParamName}=${this.SelectedId}`;
|
|
155
|
+
if (this.options.ExtraFilters)
|
|
156
|
+
Url = Url + `&${this.options.ExtraFilters}`;
|
|
157
|
+
let requestOptionsModel = new RequestOptionsModel();
|
|
158
|
+
requestOptionsModel.disableBlockUI = true;
|
|
159
|
+
requestOptionsModel.disableSuccessNotification = true;
|
|
160
|
+
let Model = this.requestHandlerService.get(Url, null, null, requestOptionsModel);
|
|
161
|
+
return Model;
|
|
162
|
+
}
|
|
163
|
+
AddTag(event, key) {
|
|
164
|
+
var _a, _b;
|
|
165
|
+
//Check if input is yab press
|
|
166
|
+
if (event.key === "Tab")
|
|
167
|
+
return;
|
|
168
|
+
//Check if input is enter press
|
|
169
|
+
if (this.IsNoMatch == true && event.key == "Enter" && this.options.AllowNewSelection && key.selected) {
|
|
170
|
+
if (!(this.tags.length >= this.options.MaxNumberTags)) {
|
|
171
|
+
this.tags.push({ name: key.selected });
|
|
172
|
+
this.group.get(this.options.Name).setValue(this.tags);
|
|
173
|
+
this.group.get(this.options.Name).markAllAsTouched();
|
|
174
|
+
this.group.updateValueAndValidity();
|
|
175
|
+
if (this.group.get(this.options.Name).valid) {
|
|
176
|
+
key.selected = null;
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
else
|
|
180
|
+
this.tags.pop();
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
//Check if input is charachter
|
|
184
|
+
else if (String.fromCharCode(event.keyCode).match(/(\w|\s)/g)) {
|
|
185
|
+
if (this.IsNoMatch && !this.options.AllowNewSelection && key.selected) {
|
|
186
|
+
this.TagsFormControl.setErrors({ "errorMassage": this.options.NoResultText });
|
|
187
|
+
this.TagsFormControl.markAsTouched();
|
|
188
|
+
}
|
|
189
|
+
else if (this.IsNoMatch == false && this.options.AllowNewSelection == false) {
|
|
190
|
+
this.TagsFormControl.clearValidators();
|
|
191
|
+
this.TagsFormControl.updateValueAndValidity();
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
//Remove unmatched error incase of deleting search value
|
|
195
|
+
else if (event.key === "Backspace" && ((_a = key.selected) === null || _a === void 0 ? void 0 : _a.length) <= 1 && this.TagsFormControl.hasError('errorMassage')) {
|
|
196
|
+
this.TagsFormControl.setErrors({ "errorMassage": null });
|
|
197
|
+
this.TagsFormControl.updateValueAndValidity();
|
|
198
|
+
if (((_b = this.SelectedId) === null || _b === void 0 ? void 0 : _b.length) == 0 && this.options.IsRequired) {
|
|
199
|
+
this.TagsFormControl.setErrors({ required: "" });
|
|
200
|
+
this.TagsFormControl.markAsTouched();
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
onTagsChanged(result) {
|
|
205
|
+
//console.log(this.tags)
|
|
206
|
+
if (result["change"] == "add") {
|
|
207
|
+
this.SelectedId.push(result.tag.id);
|
|
208
|
+
}
|
|
209
|
+
if (result["change"] == "remove") {
|
|
210
|
+
this.SelectedId = this.SelectedId.filter((item) => item != result.tag.id);
|
|
211
|
+
if (this.SelectedId.length == 0 && this.options.IsRequired == true) {
|
|
212
|
+
this.TagsFormControl.setErrors({ required: "" });
|
|
213
|
+
this.TagsFormControl.markAsTouched();
|
|
214
|
+
this.TagsFormControl.invalid;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
let originalValue = this.TagsFormControl.value.map(function (a) { return a.id; });
|
|
218
|
+
if (this.options.PatchFunction && this.options.PatchPath && this.TagsFormControl.valid) {
|
|
219
|
+
this.controlUtility.patchControlValue(originalValue, this.options.PatchFunction, this.options.PatchPath);
|
|
220
|
+
}
|
|
221
|
+
this.options.Value = this.tags;
|
|
222
|
+
this.group.get(this.options.Name).setValue(this.tags);
|
|
223
|
+
this.TagsFormControl.updateValueAndValidity();
|
|
224
|
+
this.group.updateValueAndValidity();
|
|
225
|
+
this.OnChange.emit(originalValue);
|
|
226
|
+
}
|
|
227
|
+
onNoOptionsMatch(event) {
|
|
228
|
+
this.IsNoMatch = event;
|
|
229
|
+
}
|
|
230
|
+
onTagsInputBlur(SearchKey) {
|
|
231
|
+
if (SearchKey.selected && this.options.AllowNewSelection && this.IsNoMatch && this.tags.length < this.options.MaxNumberTags) {
|
|
232
|
+
this.tags.push({ name: SearchKey.selected });
|
|
233
|
+
this.group.get(this.options.Name).setValue(this.tags);
|
|
234
|
+
this.group.get(this.options.Name).markAllAsTouched();
|
|
235
|
+
this.group.updateValueAndValidity();
|
|
236
|
+
if (this.group.get(this.options.Name).valid) {
|
|
237
|
+
SearchKey.selected = null;
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
else
|
|
241
|
+
this.tags.pop();
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
TagsInputComponent.controlContainerstatic = null;
|
|
246
|
+
TagsInputComponent.decorators = [
|
|
247
|
+
{ type: Component, args: [{
|
|
248
|
+
// tslint:disable-next-line: component-selector
|
|
249
|
+
selector: 'BBSF-TagsInput',
|
|
250
|
+
template: "\r\n<div [formGroup]=\"group\">\r\n <div class=\"form-group bbsf-control bbsf-tags-input\" [formGroup]=\"TagsFormGroup\">\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 <b-tags-input type=\"text\" class=\"form-control {{options.ExtraClasses}}\"\r\n [dir]=\"textDir\" [disabled]=\"options.IsDisabled\" aria-describedby=\"email-error\"\r\n aria-invalid=\"true\" formControlName=\"tags\"\r\n [class.is-invalid]=\"TagsFormControl.invalid && TagsFormControl.touched\" placeholder=\"{{options.Placeholder}}\"\r\n id=\"{{options.Name}}\" (onTagsChanged)=\"onTagsChanged($event)\" [(ngModel)]=\"tags\"\r\n [removeLastOnBackspace]=\"options.RemoveLastOnBackspace\" (onNoOptionsMatch)=\"onNoOptionsMatch($event)\"\r\n [options]=\"searchFunctionFactory(SearchKey.selected)\" #SearchKey\r\n [scrollableOptions]=\"options.ScrollableOptions\" [scrollableOptionsInView]=\"options.MaxSearchResultsCount\"\r\n (keydown)=\"AddTag($event,SearchKey)\" [ViewMode]=\"options.TagInputMode\"\r\n [maxTags]=\"options.MaxNumberTags\" [minLengthBeforeOptions]=\"options.MinSearchLength\"\r\n [showDescription]=\"options.ShowDescription\" [defaultImageURL]=\"options.DefaultImgUrl\" name=\"tags\"\r\n (onBlurInput)=\"onTagsInputBlur(SearchKey)\">\r\n </b-tags-input>\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=\"(TagsFormControl.invalid && TagsFormControl.touched)\">\r\n {{getErrorValidation(TagsFormControl.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</div>\r\n"
|
|
251
|
+
},] }
|
|
252
|
+
];
|
|
253
|
+
TagsInputComponent.ctorParameters = () => [
|
|
254
|
+
{ type: HttpClient },
|
|
255
|
+
{ type: ControlUtility },
|
|
256
|
+
{ type: RequestHandlerService },
|
|
257
|
+
{ type: ControlContainer, decorators: [{ type: Optional }] },
|
|
258
|
+
{ type: FormGroupDirective },
|
|
259
|
+
{ type: UtilityService },
|
|
260
|
+
{ type: ControlValidationService },
|
|
261
|
+
{ type: GlobalSettings }
|
|
262
|
+
];
|
|
263
|
+
TagsInputComponent.propDecorators = {
|
|
264
|
+
group: [{ type: Input }],
|
|
265
|
+
options: [{ type: Input }],
|
|
266
|
+
OnChange: [{ type: Output }],
|
|
267
|
+
SearchKey: [{ type: ViewChild, args: ['SearchKey', { static: false },] }]
|
|
268
|
+
};
|
|
269
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFnc0lucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9UYWdzSW5wdXQvVGFnc0lucHV0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBVyxRQUFRLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBcUQsU0FBUyxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBQzVLLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBbUIsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFdEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxLQUFLLEVBQTRCLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoSSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFROUUsTUFBTSxPQUFPLGtCQUFrQjtJQUU3Qiw0Q0FBNEM7SUFDNUMsWUFBb0IsSUFBZ0IsRUFBVSxjQUE4QixFQUFVLHFCQUE0QyxFQUFzQixnQkFBa0MsRUFBUyxvQkFBd0MsRUFDak8sY0FBOEIsRUFBVSx3QkFBa0QsRUFDMUYsY0FBOEI7UUFGcEIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUFVLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFBc0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUFTLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FB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QUFDLENBQUMsS0FBSyxFQUFFO2dCQUMzQyxTQUFTLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDMUIsT0FBTzthQUNSOztnQkFFQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ25CO0lBQ0gsQ0FBQzs7QUF6UU0seUNBQXNCLEdBQUcsSUFBSSxDQUFDOztZQU50QyxTQUFTLFNBQUM7Z0JBQ1QsK0NBQStDO2dCQUMvQyxRQUFRLEVBQUUsZ0JBQWdCO2dCQUMxQixrK0VBQXlDO2FBQzFDOzs7WUFWUSxVQUFVO1lBRlYsY0FBYztZQUlZLHFCQUFxQjtZQUxNLGdCQUFnQix1QkFpQnlELFFBQVE7WUFqQi9ELGtCQUFrQjtZQUtuQixjQUFjO1lBQXBGLHdCQUF3QjtZQUN4QixjQUFjOzs7b0JBaUJwQixLQUFLO3NCQUNMLEtBQUs7dUJBQ0wsTUFBTTt3QkFDTixTQUFTLFNBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgRG9DaGVjaywgT3B0aW9uYWwsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgU2ltcGxlQ2hhbmdlLCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMsIEZvcm1Hcm91cCwgQWJzdHJhY3RDb250cm9sLCBDb250cm9sQ29udGFpbmVyLCBGb3JtR3JvdXBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENvbnRyb2xVdGlsaXR5IH0gZnJvbSAnLi4vLi4vU2hhcmVkL3NlcnZpY2VzL0NvbnRyb2xVdGlsaXR5JztcclxuaW1wb3J0IHsgVGFnc0lucHV0T3B0aW9ucyB9IGZyb20gJy4uLy4uL1NoYXJlZC9Nb2RlbHMvVGFnc0lucHV0T3B0aW9ucyc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEVNUFRZLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLCBSZXF1ZXN0SGFuZGxlclNlcnZpY2UsIFJlcXVlc3RPcHRpb25zTW9kZWwsIFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgR2xvYmFsU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9TaGFyZWQvc2VydmljZXMvR2xvYmFsU2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY29tcG9uZW50LXNlbGVjdG9yXHJcbiAgc2VsZWN0b3I6ICdCQlNGLVRhZ3NJbnB1dCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL1RhZ3NJbnB1dC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFRhZ3NJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBzdGF0aWMgY29udHJvbENvbnRhaW5lcnN0YXRpYyA9IG51bGw7XHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHByaXZhdGUgY29udHJvbFV0aWxpdHk6IENvbnRyb2xVdGlsaXR5LCBwcml2YXRlIHJlcXVlc3RIYW5kbGVyU2VydmljZTogUmVxdWVzdEhhbmRsZXJTZXJ2aWNlLCBAT3B0aW9uYWwoKSBwcml2YXRlIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsIHB1YmxpYyBUYWdzSW5wdXRDb250cm9sSG9zdDogRm9ybUdyb3VwRGlyZWN0aXZlLFxyXG4gICAgcHJpdmF0ZSBVdGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UsIHByaXZhdGUgY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlOiBDb250cm9sVmFsaWRhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGdsb2JhbFNldHRpbmdzOiBHbG9iYWxTZXR0aW5ncykge1xyXG4gICAgVGFnc0lucHV0Q29tcG9uZW50LmNvbnRyb2xDb250YWluZXJzdGF0aWMgPSB0aGlzLmNvbnRyb2xDb250YWluZXI7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBncm91cDogRm9ybUdyb3VwO1xyXG4gIEBJbnB1dCgpIG9wdGlvbnM6IFRhZ3NJbnB1dE9wdGlvbnM7XHJcbiAgQE91dHB1dCgpIE9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBWaWV3Q2hpbGQoJ1NlYXJjaEtleScsIHsgc3RhdGljOiBmYWxzZSB9KSBTZWFyY2hLZXk6IGFueTtcclxuXHJcbiAgLy8gVGFnSW5wdXRDb250cm9sOiBBYnN0cmFjdENvbnRyb2w7XHJcbiAgU2VsZWN0ZWRJZDogYW55W10gPSBbXVxyXG4gIHRhZ3MgPSBbXTtcclxuICBOZXdTZWxlY3Rpb25WYWxpZGF0aW9uS2V5OiBzdHJpbmcgPSBcIlwiO1xyXG4gIFRhZ3NGb3JtR3JvdXA6IEZvcm1Hcm91cDtcclxuICBUYWdzRm9ybUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbFxyXG4gIElzTm9NYXRjaDogYW55O1xyXG4gIG1hcmtBbGxBc1RvdWNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB2YWxpZGF0aW9uUnVsZXMgPSBbXTtcclxuICB2YWxpZGF0aW9uUnVsZXNhc3luYyA9IFtdO1xyXG4gIGNoYW5nZVZhbHVlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgU2VhcmNoUmVzdWx0SGFzSXRlbXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB0ZXh0RGlyO1xyXG4gIHN0YXRpYyBzaG93RXJyb3JPZklucHV0cyhlcnJvcnM6IGFueSkge1xyXG5cclxuICAgIGNvbnN0IGNvbnRyb2xDb250YWluZXJzdGF0aWMgPSBUYWdzSW5wdXRDb21wb25lbnQuY29udHJvbENvbnRhaW5lcnN0YXRpYztcclxuICAgIGNvbnN0IGZvcm1Hcm91cCA9IGNvbnRyb2xDb250YWluZXJzdGF0aWMuY29udHJvbCBhcyBGb3JtR3JvdXA7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBlcnJvcnMpIHtcclxuICAgICAgaWYgKGVycm9ycy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBpdGVyYXRvciBvZiBlcnJvcnNba2V5XSkge1xyXG4gICAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGtleSkgYXMgRm9ybUNvbnRyb2w7XHJcbiAgICAgICAgICBmb3JtQ29udHJvbC5zZXRFcnJvcnMoeyBcIkZsdWVudEFwaVwiOiBpdGVyYXRvciB9KTtcclxuICAgICAgICAgIGZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jaGFuZ2VWYWx1ZVN1YnNjcmlwdGlvbilcclxuICAgICAgdGhpcy5jaGFuZ2VWYWx1ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMudGV4dERpcj10aGlzLm9wdGlvbnMuRm9yY2VEaXJlY3Rpb249PTI/J3J0bCc6J2x0cic7XHJcbiAgICB0aGlzLmNvbnRyb2xWYWxpZGF0aW9uU2VydmljZS5pc0NyZWF0ZWRCZWZvciA9IGZhbHNlXHJcblxyXG4gICAgdGhpcy5vcHRpb25zLkRhdGFzb3VyY2VJdGVtVGV4dCA9IHRoaXMub3B0aW9ucy5EYXRhc291cmNlSXRlbVRleHQudG9Mb3dlckNhc2UoKTtcclxuICAgIHRoaXMuVGFnc0Zvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pOztcclxuICAgIHRoaXMuVGFnc0Zvcm1Hcm91cC5hZGRDb250cm9sKFwidGFnc1wiLCBuZXcgRm9ybUNvbnRyb2woJycpKTtcclxuICAgIHRoaXMuVGFnc0Zvcm1Db250cm9sID0gdGhpcy5UYWdzRm9ybUdyb3VwLmNvbnRyb2xzW1widGFnc1wiXTsgLy8gIG5ldyBGb3JtQ29udHJvbCgnJyx2YWxpZGF0aW9uUnVsZXMpO1xyXG4gICAgdGhpcy5ncm91cC5hZGRDb250cm9sKHRoaXMub3B0aW9ucy5OYW1lLCB0aGlzLlRhZ3NGb3JtQ29udHJvbCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuVmlld1R5cGUpXHJcbiAgICAgIHRoaXMub3B0aW9ucy5WaWV3VHlwZSA9IHRoaXMuZ2xvYmFsU2V0dGluZ3MuVmlld1R5cGU7XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5MYWJlbEtleSAhPSBudWxsICYmIHRoaXMub3B0aW9ucy5MYWJlbEtleSAhPSBcIlwiKVxyXG4gICAgICB0aGlzLm9wdGlvbnMuTGFiZWxWYWx1ZSA9IHRoaXMuVXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSh0aGlzLm9wdGlvbnMuTGFiZWxLZXkpO1xyXG5cclxuICAgIGlmICghdGhpcy5vcHRpb25zLk5vUmVzdWx0VGV4dClcclxuICAgICAgdGhpcy5vcHRpb25zLk5vUmVzdWx0VGV4dCA9IHRoaXMuVXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk5vSXRlbXNNYXRjaFwiKTtcclxuXHJcbiAgICAvLyB0aGlzLmdyb3VwLmFkZENvbnRyb2wodGhpcy5vcHRpb25zLk5hbWUsIG5ldyBGb3JtQ29udHJvbCgnJykpO1xyXG4gICAgLy8gdGhpcy5UYWdJbnB1dENvbnRyb2wgPSB0aGlzLmdyb3VwLmNvbnRyb2xzW3RoaXMub3B0aW9ucy5OYW1lXTsgLy8gIG5ldyBGb3JtQ29udHJvbCgnJyx2YWxpZGF0aW9uUnVsZXMpO1xyXG5cclxuICAgIHRoaXMuVGFnc0Zvcm1Db250cm9sLnNldFZhbHVlKHRoaXMub3B0aW9ucy5WYWx1ZSk7XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5Jc1JlcXVpcmVkKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5DdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IFZhbGlkYXRpb25zID0gdGhpcy5vcHRpb25zLkN1c3RvbVZhbGlkYXRpb25cclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IFZhbGlkYXRpb25zLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGNvbnN0IFZhbGlkYXRpb24gPSBWYWxpZGF0aW9uc1tpbmRleF07XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0aW9uLmZ1bmN0aW9uQm9keSk7XHJcbiAgICAgIH1cclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLlRhZ3NGb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHRoaXMudmFsaWRhdGlvblJ1bGVzKTtcclxuICAgIHRoaXMuVGFnc0Zvcm1Db250cm9sLnNldEFzeW5jVmFsaWRhdG9ycyh0aGlzLnZhbGlkYXRpb25SdWxlc2FzeW5jKTtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuSXNEaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLlRhZ3NGb3JtQ29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5WYWx1ZSAhPSB1bmRlZmluZWQgJiYgdGhpcy5vcHRpb25zLlZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMub3B0aW9ucy5WYWx1ZS5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5vcHRpb25zLlZhbHVlW2luZGV4XTtcclxuICAgICAgICB0aGlzLlNlbGVjdGVkSWQucHVzaChlbGVtZW50LmlkKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRhZ3MgPSB0aGlzLm9wdGlvbnMuVmFsdWVcclxuICAgICAgdGhpcy5UYWdzRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5vcHRpb25zLlZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLlRhZ3NJbnB1dENvbnRyb2xIb3N0Lm5nU3VibWl0LnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgdGhpcy5ncm91cC5tYXJrQWxsQXNUb3VjaGVkKClcclxuICAgICAgdGhpcy5tYXJrQWxsQXNUb3VjaGVkID0gdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICAvL0NoZWNrIGZvciBjaGFuZ2luZyBpbiB2YWx1ZVxyXG4gICAgdGhpcy5jaGFuZ2VWYWx1ZVN1YnNjcmlwdGlvbiA9IHRoaXMuVGFnc0Zvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoYyA9PiB7XHJcbiAgICAgIHRoaXMudGFncyA9IHRoaXMuVGFnc0Zvcm1Db250cm9sLnZhbHVlO1xyXG4gICAgICB0aGlzLlNlbGVjdGVkSWQgPSB0aGlzLnRhZ3M/LmZpbHRlcihpdGVtID0+IGl0ZW0uaWQpLm1hcChpdGVtID0+IGl0ZW0uaWQpO1xyXG4gICAgICBpZiAodGhpcy50YWdzID09IG51bGwpIHtcclxuICAgICAgICB0aGlzLlNlYXJjaEtleS5zZWxlY3RlZCA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy50YWdzID0gW107XHJcbiAgICAgICAgdGhpcy5UYWdzRm9ybUNvbnRyb2wuc2V0VmFsdWUoW10pXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLkF0dHJpYnV0ZUxpc3QgIT0gbnVsbCkge1xyXG4gICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMub3B0aW9ucy5OYW1lKTtcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMub3B0aW9ucy5BdHRyaWJ1dGVMaXN0Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKHRoaXMub3B0aW9ucy5BdHRyaWJ1dGVMaXN0W2luZGV4XS5LZXksIHRoaXMub3B0aW9ucy5BdHRyaWJ1dGVMaXN0W2luZGV4XS52YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBpbnB1dEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLm9wdGlvbnMuTmFtZSkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKVswXVxyXG4gICAgaW5wdXRFbGVtZW50LnNldEF0dHJpYnV0ZShcImF1dG9jb21wbGV0ZVwiLCBcIm9mZlwiKVxyXG4gIH1cclxuXHJcbiAgcmVzZXRFcnJvciA9ICgpID0+IHtcclxuICAgIHRoaXMuY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLlJlbW92ZUdsb2JhbEVycm9yKCk7XHJcbiAgfVxyXG5cclxuICBzaG93R2xvYmFsRXJyb3IoKSB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnNob3dHbG9iYWxFcnJvcigpXHJcbiAgfVxyXG5cclxuICBnZXRFcnJvclZhbGlkYXRpb24oRXJyb3JMaXN0KSB7XHJcbiAgICBpZiAodGhpcy5tYXJrQWxsQXNUb3VjaGVkICYmIHRoaXMuZ3JvdXAuaW52YWxpZCkge1xyXG4gICAgICB0aGlzLnNob3dHbG9iYWxFcnJvcigpXHJcbiAgICAgIHRoaXMubWFya0FsbEFzVG91Y2hlZCA9IGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuY29udHJvbFV0aWxpdHkuZ2V0RXJyb3JWYWxpZGF0aW9uTWFzc2FnZShFcnJvckxpc3QsIHRoaXMuZ3JvdXAsIHRoaXMub3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBjb3B5SW5wdXRNZXNzYWdlKGlucHV0RWxlbWVudCkge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5Db3B5SW5wdXRNZXNzYWdlKGlucHV0RWxlbWVudClcclxuICB9XHJcblxyXG4gIHNlYXJjaEZ1bmN0aW9uRmFjdG9yeShUZXh0OiBhbnkpOiBPYnNlcnZhYmxlPG9iamVjdD4ge1xyXG4gICAgLy9JZiBubyB0ZXh0IHRoZW4gcmV0dXJuIGVtcHR5IG9ic2VydmFibGVcclxuICAgIGlmICghVGV4dClcclxuICAgICAgcmV0dXJuIEVNUFRZO1xyXG5cclxuICAgIGxldCBVcmwgPSBgJHt0aGlzLm9wdGlvbnMuQWN0aW9uVVJMfT8ke3RoaXMub3B0aW9ucy5RdWVyeVBhcmFtTmFtZX09JHtlbmNvZGVVUklDb21wb25lbnQoVGV4dCl9JiR7dGhpcy5vcHRpb25zLlNlbGVjdGVkSXRlbXNQYXJhbU5hbWV9PSR7dGhpcy5TZWxlY3RlZElkfWBcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuRXh0cmFGaWx0ZXJzKVxyXG4gICAgICBVcmwgPSBVcmwgKyBgJiR7dGhpcy5vcHRpb25zLkV4dHJhRmlsdGVyc31gXHJcbiAgICBsZXQgcmVxdWVzdE9wdGlvbnNNb2RlbCA9IG5ldyBSZXF1ZXN0T3B0aW9uc01vZGVsKClcclxuICAgIHJlcXVlc3RPcHRpb25zTW9kZWwuZGlzYWJsZUJsb2NrVUkgPSB0cnVlO1xyXG4gICAgcmVxdWVzdE9wdGlvbnNNb2RlbC5kaXNhYmxlU3VjY2Vzc05vdGlmaWNhdGlvbiA9IHRydWU7XHJcbiAgICBsZXQgTW9kZWwgPSB0aGlzLnJlcXVlc3RIYW5kbGVyU2VydmljZS5nZXQoVXJsLCBudWxsLCBudWxsLCByZXF1ZXN0T3B0aW9uc01vZGVsKTtcclxuICAgIHJldHVybiBNb2RlbCBhcyBhbnk7XHJcbiAgfVxyXG5cclxuICBBZGRUYWcoZXZlbnQsIGtleSkge1xyXG4gICAgLy9DaGVjayBpZiBpbnB1dCBpcyB5YWIgcHJlc3NcclxuICAgIGlmIChldmVudC5rZXkgPT09IFwiVGFiXCIpXHJcbiAgICAgIHJldHVybjtcclxuICAgIC8vQ2hlY2sgaWYgaW5wdXQgaXMgZW50ZXIgcHJlc3NcclxuICAgIGlmICh0aGlzLklzTm9NYXRjaCA9PSB0cnVlICYmIGV2ZW50LmtleSA9PSBcIkVudGVyXCIgJiYgdGhpcy5vcHRpb25zLkFsbG93TmV3U2VsZWN0aW9uICYmIGtleS5zZWxlY3RlZCkge1xyXG4gICAgICBpZiAoISh0aGlzLnRhZ3MubGVuZ3RoID49IHRoaXMub3B0aW9ucy5NYXhOdW1iZXJUYWdzKSkge1xyXG4gICAgICAgIHRoaXMudGFncy5wdXNoKHsgbmFtZToga2V5LnNlbGVjdGVkIH0pO1xyXG4gICAgICAgIHRoaXMuZ3JvdXAuZ2V0KHRoaXMub3B0aW9ucy5OYW1lKS5zZXRWYWx1ZSh0aGlzLnRhZ3MpO1xyXG4gICAgICAgIHRoaXMuZ3JvdXAuZ2V0KHRoaXMub3B0aW9ucy5OYW1lKS5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgdGhpcy5ncm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXAuZ2V0KHRoaXMub3B0aW9ucy5OYW1lKS52YWxpZCkge1xyXG4gICAgICAgICAga2V5LnNlbGVjdGVkID0gbnVsbDtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdGhpcy50YWdzLnBvcCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvL0NoZWNrIGlmIGlucHV0IGlzIGNoYXJhY2h0ZXJcclxuICAgIGVsc2UgaWYgKFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQua2V5Q29kZSkubWF0Y2goLyhcXHd8XFxzKS9nKSkge1xyXG4gICAgICBpZiAodGhpcy5Jc05vTWF0Y2ggJiYgIXRoaXMub3B0aW9ucy5BbGxvd05ld1NlbGVjdGlvbiAmJiBrZXkuc2VsZWN0ZWQpIHtcclxuICAgICAgICB0aGlzLlRhZ3NGb3JtQ29udHJvbC5zZXRFcnJvcnMoeyBcImVycm9yTWFzc2FnZVwiOiB0aGlzLm9wdGlvbnMuTm9SZXN1bHRUZXh0IH0pO1xyXG4gICAgICAgIHRoaXMuVGFnc0Zvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLklzTm9NYXRjaCA9PSBmYWxzZSAmJiB0aGlzLm9wdGlvbnMuQWxsb3dOZXdTZWxlY3Rpb24gPT0gZmFsc2UpIHtcclxuICAgICAgICB0aGlzLlRhZ3NGb3JtQ29udHJvbC5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICB0aGlzLlRhZ3NGb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vUmVtb3ZlIHVubWF0Y2hlZCBlcnJvciBpbmNhc2Ugb2YgZGVsZXRpbmcgc2VhcmNoIHZhbHVlXHJcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09IFwiQmFja3NwYWNlXCIgJiYga2V5LnNlbGVjdGVkPy5sZW5ndGggPD0gMSAmJiB0aGlzLlRhZ3NGb3JtQ29udHJvbC5oYXNFcnJvcignZXJyb3JNYXNzYWdlJykpIHtcclxuICAgICAgdGhpcy5UYWdzRm9ybUNvbnRyb2wuc2V0RXJyb3JzKHsgXCJlcnJvck1hc3NhZ2VcIjogbnVsbCB9KTtcclxuICAgICAgdGhpcy5UYWdzRm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICBpZiAodGhpcy5TZWxlY3RlZElkPy5sZW5ndGggPT0gMCAmJiB0aGlzLm9wdGlvbnMuSXNSZXF1aXJlZCkge1xyXG4gICAgICAgIHRoaXMuVGFnc0Zvcm1Db250cm9sLnNldEVycm9ycyh7IHJlcXVpcmVkOiBcIlwiIH0pO1xyXG4gICAgICAgIHRoaXMuVGFnc0Zvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25UYWdzQ2hhbmdlZChyZXN1bHQpIHtcclxuICAgIC8vY29uc29sZS5sb2codGhpcy50YWdzKVxyXG4gICAgaWYgKHJlc3VsdFtcImNoYW5nZVwiXSA9PSBcImFkZFwiKSB7XHJcbiAgICAgIHRoaXMuU2VsZWN0ZWRJZC5wdXNoKHJlc3VsdC50YWcuaWQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHJlc3VsdFtcImNoYW5nZVwiXSA9PSBcInJlbW92ZVwiKSB7XHJcbiAgICAgIHRoaXMuU2VsZWN0ZWRJZCA9IHRoaXMuU2VsZWN0ZWRJZC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT0gcmVzdWx0LnRhZy5pZCk7XHJcbiAgICAgIGlmICh0aGlzLlNlbGVjdGVkSWQubGVuZ3RoID09IDAgJiYgdGhpcy5vcHRpb25zLklzUmVxdWlyZWQgPT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuVGFnc0Zvcm1Db250cm9sLnNldEVycm9ycyh7IHJlcXVpcmVkOiBcIlwiIH0pO1xyXG4gICAgICAgIHRoaXMuVGFnc0Zvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICB0aGlzLlRhZ3NGb3JtQ29udHJvbC5pbnZhbGlkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuVGFnc0Zvcm1Db250cm9sLnZhbHVlLm1hcChmdW5jdGlvbiAoYSkgeyByZXR1cm4gYS5pZDsgfSk7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLlBhdGNoRnVuY3Rpb24gJiYgdGhpcy5vcHRpb25zLlBhdGNoUGF0aCAmJiB0aGlzLlRhZ3NGb3JtQ29udHJvbC52YWxpZCkge1xyXG4gICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdGNoQ29udHJvbFZhbHVlKG9yaWdpbmFsVmFsdWUsIHRoaXMub3B0aW9ucy5QYXRjaEZ1bmN0aW9uLCB0aGlzLm9wdGlvbnMuUGF0Y2hQYXRoKTtcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5WYWx1ZT0gdGhpcy50YWdzXHJcbiAgICB0aGlzLmdyb3VwLmdldCh0aGlzLm9wdGlvbnMuTmFtZSkuc2V0VmFsdWUodGhpcy50YWdzKTtcclxuICAgIHRoaXMuVGFnc0Zvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuZ3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5PbkNoYW5nZS5lbWl0KG9yaWdpbmFsVmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgb25Ob09wdGlvbnNNYXRjaChldmVudCkge1xyXG4gICAgdGhpcy5Jc05vTWF0Y2ggPSBldmVudDtcclxuICB9XHJcblxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgUmVtb3ZlUmVxdWlyZWRWYWxpZGF0aW9uID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5SZW1vdmVSZXF1aXJlZFZhbGlkYXRpb24odGhpcy5UYWdzRm9ybUNvbnRyb2wsIHRoaXMudmFsaWRhdGlvblJ1bGVzLCB0aGlzLm9wdGlvbnMpXHJcbiAgfVxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgQWRkUmVxdWlyZWRWYWxpZGF0aW9uID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5BZGRSZXF1aXJlZFZhbGlkYXRpb24odGhpcy5UYWdzRm9ybUNvbnRyb2wsIHRoaXMudmFsaWRhdGlvblJ1bGVzLCB0aGlzLm9wdGlvbnMpXHJcbiAgfVxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcblxyXG4gIFJlbW92ZUN1c3RvbVZhbGlkYXRpb24gPSAoQ3VzdG9tVmFsaWRhdGlvbikgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5SZW1vdmVDdXN0b21WYWxpZGF0aW9uKHRoaXMuVGFnc0Zvcm1Db250cm9sLCB0aGlzLnZhbGlkYXRpb25SdWxlcywgQ3VzdG9tVmFsaWRhdGlvbilcclxuICB9XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBBZGRDdXN0b21WYWxpZGF0aW9uID0gKEN1c3RvbVZhbGlkYXRpb24pID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuQWRkQ3VzdG9tVmFsaWRhdGlvbih0aGlzLlRhZ3NGb3JtQ29udHJvbCwgdGhpcy52YWxpZGF0aW9uUnVsZXMsIEN1c3RvbVZhbGlkYXRpb24pXHJcbiAgfVxyXG5cclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIElzVmFsaWQgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LklzVmFsaWQodGhpcy5UYWdzRm9ybUNvbnRyb2wpXHJcbiAgfVxyXG5cclxuICBvblRhZ3NJbnB1dEJsdXIoU2VhcmNoS2V5KSB7XHJcbiAgICBpZiAoU2VhcmNoS2V5LnNlbGVjdGVkICYmIHRoaXMub3B0aW9ucy5BbGxvd05ld1NlbGVjdGlvbiAmJiB0aGlzLklzTm9NYXRjaCAmJiB0aGlzLnRhZ3MubGVuZ3RoIDwgdGhpcy5vcHRpb25zLk1heE51bWJlclRhZ3MpIHtcclxuICAgICAgdGhpcy50YWdzLnB1c2goeyBuYW1lOiBTZWFyY2hLZXkuc2VsZWN0ZWQgfSk7XHJcbiAgICAgIHRoaXMuZ3JvdXAuZ2V0KHRoaXMub3B0aW9ucy5OYW1lKS5zZXRWYWx1ZSh0aGlzLnRhZ3MpO1xyXG4gICAgICB0aGlzLmdyb3VwLmdldCh0aGlzLm9wdGlvbnMuTmFtZSkubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgICB0aGlzLmdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAuZ2V0KHRoaXMub3B0aW9ucy5OYW1lKS52YWxpZCkge1xyXG4gICAgICAgIFNlYXJjaEtleS5zZWxlY3RlZCA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0aGlzLnRhZ3MucG9wKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|