UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

170 lines • 25.8 kB
import { getBasicInputArrayFormFieldConfig, gettext, SearchFilters } from '@c8y/ngx-components'; import { AssetTypeGridColumn } from '@c8y/ngx-components/data-grid-columns/asset-type'; export class AssetTypeSearchGridColumn extends AssetTypeGridColumn { constructor(hideExtendedFilters, initialColumnConfig, assetSearchService, customPlaceholder) { super(initialColumnConfig); this.filterable = true; this.filteringConfig = this.getFilteringConfig(hideExtendedFilters, assetSearchService, customPlaceholder); } getFilteringConfig(hideExtendedFilters, assetSearchService, customPlaceholder) { return { fields: [ ...getBasicInputArrayFormFieldConfig({ key: 'types', label: gettext('Show items with type'), addText: gettext('Add next`type`'), tooltip: gettext('Use * as a wildcard character'), placeholder: customPlaceholder ? customPlaceholder : gettext('building`e.g. house`'), optional: !hideExtendedFilters }), { key: SearchFilters.ALL_FILTERS, type: 'checkbox', hide: hideExtendedFilters, props: { indeterminate: false, disabled: false, label: gettext('All'), click: (field, clickEvent) => { const { checked } = clickEvent.target; // Handle checked state if (checked) { field.form.get(SearchFilters.ONLY_DEVICES).setValue(true); field.form.get(SearchFilters.ONLY_GROUPS_AND_ASSETS).setValue(true); // Emit new state assetSearchService.appliedFilters$.next({ [SearchFilters.ALL_FILTERS]: checked, [SearchFilters.ONLY_DEVICES]: true, [SearchFilters.ONLY_GROUPS_AND_ASSETS]: true }); } } }, expressionProperties: { 'props.indeterminate': (model, formState, field) => { // Do nothing if (field.form.get(SearchFilters.ALL_FILTERS).value === true) { return; } // Set indeterminate state if (!field.form.get(SearchFilters.ONLY_DEVICES).value || !field.form.get(SearchFilters.ONLY_GROUPS_AND_ASSETS).value) { field.form.get(SearchFilters.ALL_FILTERS).setValue(null); return true; } return false; }, 'props.disabled': (model, formState, field) => { if (field.form.get(SearchFilters.ALL_FILTERS).value === true) { return true; } return false; } }, hooks: { onInit: field => { // Get initial state const { allFilters } = assetSearchService?.appliedFilters$?.value; field.formControl.setValue(allFilters); } } }, { key: SearchFilters.ONLY_DEVICES, type: 'checkbox', hide: hideExtendedFilters, props: { indeterminate: false, label: gettext('Show only devices'), click: (field, clickEvent) => { const oldFilterValue = assetSearchService.appliedFilters$.value; const { checked } = clickEvent.target; // Handle checked state if (checked) { field.form.get(SearchFilters.ALL_FILTERS).setValue(true); // Emit new state assetSearchService.appliedFilters$.next({ ...oldFilterValue, [SearchFilters.ALL_FILTERS]: true, [SearchFilters.ONLY_DEVICES]: checked }); return; } // Handle unchecked state field.form.get(SearchFilters.ALL_FILTERS).setValue(null); // Trigger indeterminate state field.form.get(SearchFilters.ONLY_GROUPS_AND_ASSETS).setValue(true); // Emit new state assetSearchService.appliedFilters$.next({ [SearchFilters.ALL_FILTERS]: null, [SearchFilters.ONLY_GROUPS_AND_ASSETS]: true, [SearchFilters.ONLY_DEVICES]: checked }); } }, hooks: { onInit: field => { // Get initial state const { onlyDevices } = assetSearchService?.appliedFilters$?.value; field.formControl.setValue(onlyDevices); } } }, { key: SearchFilters.ONLY_GROUPS_AND_ASSETS, type: 'checkbox', hide: hideExtendedFilters, props: { indeterminate: false, label: gettext('Show only groups and assets'), click: (field, clickEvent) => { const oldFilterValue = assetSearchService.appliedFilters$.value; const { checked } = clickEvent.target; // Handle checked state if (checked) { field.form.get(SearchFilters.ALL_FILTERS).setValue(true); // Emit new state assetSearchService.appliedFilters$.next({ ...oldFilterValue, [SearchFilters.ALL_FILTERS]: true, [SearchFilters.ONLY_GROUPS_AND_ASSETS]: checked }); return; } // Handle unchecked state field.form.get(SearchFilters.ALL_FILTERS).setValue(null); // Trigger indeterminate state field.form.get(SearchFilters.ONLY_DEVICES).setValue(true); // Emit new state assetSearchService.appliedFilters$.next({ [SearchFilters.ALL_FILTERS]: null, [SearchFilters.ONLY_GROUPS_AND_ASSETS]: checked, [SearchFilters.ONLY_DEVICES]: true }); } }, hooks: { onInit: field => { // Get initial state const { onlyGroupsAndAssets } = assetSearchService?.appliedFilters$?.value; field.formControl.setValue(onlyGroupsAndAssets); } } } ], /** * Adding devices and groups to a filter is already handled in {@link AssetSearchService#buildSearchQuery} * */ getFilter(model) { const filter = {}; const ors = []; if (model.types?.length) { ors.push({ type: { __in: model.types } }); } if (ors.length) { filter.__or = ors; } return filter; } }; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtdHlwZS1zZWFyY2gtZ3JpZC1jb2x1bW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zZWFyY2gvY29sdW1ucy9hc3NldC10eXBlLXNlYXJjaC1ncmlkLWNvbHVtbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsaUNBQWlDLEVBQ2pDLE9BQU8sRUFDUCxhQUFhLEVBQ2QsTUFBTSxxQkFBcUIsQ0FBQztBQUc3QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUV2RixNQUFNLE9BQU8seUJBQTBCLFNBQVEsbUJBQW1CO0lBQ2hFLFlBQ0UsbUJBQTRCLEVBQzVCLG1CQUFrQyxFQUNsQyxrQkFBdUMsRUFDdkMsaUJBQTBCO1FBRTFCLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBRTNCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUM1QyxtQkFBbUIsRUFDbkIsa0JBQWtCLEVBQ2xCLGlCQUFpQixDQUNsQixDQUFDO0lBQ0osQ0FBQztJQUVPLGtCQUFrQixDQUN4QixtQkFBNEIsRUFDNUIsa0JBQXNDLEVBQ3RDLGlCQUEwQjtRQUUxQixPQUFPO1lBQ0wsTUFBTSxFQUFFO2dCQUNOLEdBQUcsaUNBQWlDLENBQUM7b0JBQ25DLEdBQUcsRUFBRSxPQUFPO29CQUNaLEtBQUssRUFBRSxPQUFPLENBQUMsc0JBQXNCLENBQUM7b0JBQ3RDLE9BQU8sRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUM7b0JBQ2xDLE9BQU8sRUFBRSxPQUFPLENBQUMsK0JBQStCLENBQUM7b0JBQ2pELFdBQVcsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQztvQkFDcEYsUUFBUSxFQUFFLENBQUMsbUJBQW1CO2lCQUMvQixD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QUM7Z0JBQ3BCLENBQUM7Z0JBQ0QsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb2x1bW5Db25maWcsXG4gIGdldEJhc2ljSW5wdXRBcnJheUZvcm1GaWVsZENvbmZpZyxcbiAgZ2V0dGV4dCxcbiAgU2VhcmNoRmlsdGVyc1xufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEZvcm1seUZpZWxkQ29uZmlnIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBBc3NldFNlYXJjaFNlcnZpY2UgfSBmcm9tICcuLi9zZWFyY2guc2VydmljZSc7XG5pbXBvcnQgeyBBc3NldFR5cGVHcmlkQ29sdW1uIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9kYXRhLWdyaWQtY29sdW1ucy9hc3NldC10eXBlJztcblxuZXhwb3J0IGNsYXNzIEFzc2V0VHlwZVNlYXJjaEdyaWRDb2x1bW4gZXh0ZW5kcyBBc3NldFR5cGVHcmlkQ29sdW1uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgaGlkZUV4dGVuZGVkRmlsdGVyczogYm9vbGVhbixcbiAgICBpbml0aWFsQ29sdW1uQ29uZmlnPzogQ29sdW1uQ29uZmlnLFxuICAgIGFzc2V0U2VhcmNoU2VydmljZT86IEFzc2V0U2VhcmNoU2VydmljZSxcbiAgICBjdXN0b21QbGFjZWhvbGRlcj86IHN0cmluZ1xuICApIHtcbiAgICBzdXBlcihpbml0aWFsQ29sdW1uQ29uZmlnKTtcblxuICAgIHRoaXMuZmlsdGVyYWJsZSA9IHRydWU7XG4gICAgdGhpcy5maWx0ZXJpbmdDb25maWcgPSB0aGlzLmdldEZpbHRlcmluZ0NvbmZpZyhcbiAgICAgIGhpZGVFeHRlbmRlZEZpbHRlcnMsXG4gICAgICBhc3NldFNlYXJjaFNlcnZpY2UsXG4gICAgICBjdXN0b21QbGFjZWhvbGRlclxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldEZpbHRlcmluZ0NvbmZpZyhcbiAgICBoaWRlRXh0ZW5kZWRGaWx0ZXJzOiBib29sZWFuLFxuICAgIGFzc2V0U2VhcmNoU2VydmljZTogQXNzZXRTZWFyY2hTZXJ2aWNlLFxuICAgIGN1c3RvbVBsYWNlaG9sZGVyPzogc3RyaW5nXG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICBmaWVsZHM6IFtcbiAgICAgICAgLi4uZ2V0QmFzaWNJbnB1dEFycmF5Rm9ybUZpZWxkQ29uZmlnKHtcbiAgICAgICAgICBrZXk6ICd0eXBlcycsXG4gICAgICAgICAgbGFiZWw6IGdldHRleHQoJ1Nob3cgaXRlbXMgd2l0aCB0eXBlJyksXG4gICAgICAgICAgYWRkVGV4dDogZ2V0dGV4dCgnQWRkIG5leHRgdHlwZWAnKSxcbiAgICAgICAgICB0b29sdGlwOiBnZXR0ZXh0KCdVc2UgKiBhcyBhIHdpbGRjYXJkIGNoYXJhY3RlcicpLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiBjdXN0b21QbGFjZWhvbGRlciA/IGN1c3RvbVBsYWNlaG9sZGVyIDogZ2V0dGV4dCgnYnVpbGRpbmdgZS5nLiBob3VzZWAnKSxcbiAgICAgICAgICBvcHRpb25hbDogIWhpZGVFeHRlbmRlZEZpbHRlcnNcbiAgICAgICAgfSksXG4gICAgICAgIHtcbiAgICAgICAgICBrZXk6IFNlYXJjaEZpbHRlcnMuQUxMX0ZJTFRFUlMsXG4gICAgICAgICAgdHlwZTogJ2NoZWNrYm94JyxcbiAgICAgICAgICBoaWRlOiBoaWRlRXh0ZW5kZWRGaWx0ZXJzLFxuICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBpbmRldGVybWluYXRlOiBmYWxzZSxcbiAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdBbGwnKSxcbiAgICAgICAgICAgIGNsaWNrOiAoZmllbGQsIGNsaWNrRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgeyBjaGVja2VkIH0gPSBjbGlja0V2ZW50LnRhcmdldDtcblxuICAgICAgICAgICAgICAvLyBIYW5kbGUgY2hlY2tlZCBzdGF0ZVxuICAgICAgICAgICAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgIGZpZWxkLmZvcm0uZ2V0KFNlYXJjaEZpbHRlcnMuT05MWV9ERVZJQ0VTKS5zZXRWYWx1ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICBmaWVsZC5mb3JtLmdldChTZWFyY2hGaWx0ZXJzLk9OTFlfR1JPVVBTX0FORF9BU1NFVFMpLnNldFZhbHVlKHRydWUpO1xuXG4gICAgICAgICAgICAgICAgLy8gRW1pdCBuZXcgc3RhdGVcbiAgICAgICAgICAgICAgICBhc3NldFNlYXJjaFNlcnZpY2UuYXBwbGllZEZpbHRlcnMkLm5leHQoe1xuICAgICAgICAgICAgICAgICAgW1NlYXJjaEZpbHRlcnMuQUxMX0ZJTFRFUlNdOiBjaGVja2VkLFxuICAgICAgICAgICAgICAgICAgW1NlYXJjaEZpbHRlcnMuT05MWV9ERVZJQ0VTXTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIFtTZWFyY2hGaWx0ZXJzLk9OTFlfR1JPVVBTX0FORF9BU1NFVFNdOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4cHJlc3Npb25Qcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAncHJvcHMuaW5kZXRlcm1pbmF0ZSc6IChtb2RlbDogYW55LCBmb3JtU3RhdGU6IGFueSwgZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgIC8vIERvIG5vdGhpbmdcbiAgICAgICAgICAgICAgaWYgKGZpZWxkLmZvcm0uZ2V0KFNlYXJjaEZpbHRlcnMuQUxMX0ZJTFRFUlMpLnZhbHVlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIFNldCBpbmRldGVybWluYXRlIHN0YXRlXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhZmllbGQuZm9ybS5nZXQoU2VhcmNoRmlsdGVycy5PTkxZX0RFVklDRVMpLnZhbHVlIHx8XG4gICAgICAgICAgICAgICAgIWZpZWxkLmZvcm0uZ2V0KFNlYXJjaEZpbHRlcnMuT05MWV9HUk9VUFNfQU5EX0FTU0VUUykudmFsdWVcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuZm9ybS5nZXQoU2VhcmNoRmlsdGVycy5BTExfRklMVEVSUykuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdwcm9wcy5kaXNhYmxlZCc6IChtb2RlbDogYW55LCBmb3JtU3RhdGU6IGFueSwgZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChmaWVsZC5mb3JtLmdldChTZWFyY2hGaWx0ZXJzLkFMTF9GSUxURVJTKS52YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGhvb2tzOiB7XG4gICAgICAgICAgICBvbkluaXQ6IGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgLy8gR2V0IGluaXRpYWwgc3RhdGVcbiAgICAgICAgICAgICAgY29uc3QgeyBhbGxGaWx0ZXJzIH0gPSBhc3NldFNlYXJjaFNlcnZpY2U/LmFwcGxpZWRGaWx0ZXJzJD8udmFsdWU7XG4gICAgICAgICAgICAgIGZpZWxkLmZvcm1Db250cm9sLnNldFZhbHVlKGFsbEZpbHRlcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleTogU2VhcmNoRmlsdGVycy5PTkxZX0RFVklDRVMsXG4gICAgICAgICAgdHlwZTogJ2NoZWNrYm94JyxcbiAgICAgICAgICBoaWRlOiBoaWRlRXh0ZW5kZWRGaWx0ZXJzLFxuICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBpbmRldGVybWluYXRlOiBmYWxzZSxcbiAgICAgICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdTaG93IG9ubHkgZGV2aWNlcycpLFxuICAgICAgICAgICAgY2xpY2s6IChmaWVsZCwgY2xpY2tFdmVudCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBvbGRGaWx0ZXJWYWx1ZSA9IGFzc2V0U2VhcmNoU2VydmljZS5hcHBsaWVkRmlsdGVycyQudmFsdWU7XG4gICAgICAgICAgICAgIGNvbnN0IHsgY2hlY2tlZCB9ID0gY2xpY2tFdmVudC50YXJnZXQ7XG5cbiAgICAgICAgICAgICAgLy8gSGFuZGxlIGNoZWNrZWQgc3RhdGVcbiAgICAgICAgICAgICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC5mb3JtLmdldChTZWFyY2hGaWx0ZXJzLkFMTF9GSUxURVJTKS5zZXRWYWx1ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAvLyBFbWl0IG5ldyBzdGF0ZVxuICAgICAgICAgICAgICAgIGFzc2V0U2VhcmNoU2VydmljZS5hcHBsaWVkRmlsdGVycyQubmV4dCh7XG4gICAgICAgICAgICAgICAgICAuLi5vbGRGaWx0ZXJWYWx1ZSxcbiAgICAgICAgICAgICAgICAgIFtTZWFyY2hGaWx0ZXJzLkFMTF9GSUxURVJTXTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIFtTZWFyY2hGaWx0ZXJzLk9OTFlfREVWSUNFU106IGNoZWNrZWRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gSGFuZGxlIHVuY2hlY2tlZCBzdGF0ZVxuICAgICAgICAgICAgICBmaWVsZC5mb3JtLmdldChTZWFyY2hGaWx0ZXJzLkFMTF9GSUxURVJTKS5zZXRWYWx1ZShudWxsKTsgLy8gVHJpZ2dlciBpbmRldGVybWluYXRlIHN0YXRlXG4gICAgICAgICAgICAgIGZpZWxkLmZvcm0uZ2V0KFNlYXJjaEZpbHRlcnMuT05MWV9HUk9VUFNfQU5EX0FTU0VUUykuc2V0VmFsdWUodHJ1ZSk7XG5cbiAgICAgICAgICAgICAgLy8gRW1pdCBuZXcgc3RhdGVcbiAgICAgICAgICAgICAgYXNzZXRTZWFyY2hTZXJ2aWNlLmFwcGxpZWRGaWx0ZXJzJC5uZXh0KHtcbiAgICAgICAgICAgICAgICBbU2VhcmNoRmlsdGVycy5BTExfRklMVEVSU106IG51bGwsXG4gICAgICAgICAgICAgICAgW1NlYXJjaEZpbHRlcnMuT05MWV9HUk9VUFNfQU5EX0FTU0VUU106IHRydWUsXG4gICAgICAgICAgICAgICAgW1NlYXJjaEZpbHRlcnMuT05MWV9ERVZJQ0VTXTogY2hlY2tlZFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGhvb2tzOiB7XG4gICAgICAgICAgICBvbkluaXQ6IGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgLy8gR2V0IGluaXRpYWwgc3RhdGVcbiAgICAgICAgICAgICAgY29uc3QgeyBvbmx5RGV2aWNlcyB9ID0gYXNzZXRTZWFyY2hTZXJ2aWNlPy5hcHBsaWVkRmlsdGVycyQ/LnZhbHVlO1xuICAgICAgICAgICAgICBmaWVsZC5mb3JtQ29udHJvbC5zZXRWYWx1ZShvbmx5RGV2aWNlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5OiBTZWFyY2hGaWx0ZXJzLk9OTFlfR1JPVVBTX0FORF9BU1NFVFMsXG4gICAgICAgICAgdHlwZTogJ2NoZWNrYm94JyxcbiAgICAgICAgICBoaWRlOiBoaWRlRXh0ZW5kZWRGaWx0ZXJzLFxuICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBpbmRldGVybWluYXRlOiBmYWxzZSxcbiAgICAgICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdTaG93IG9ubHkgZ3JvdXBzIGFuZCBhc3NldHMnKSxcbiAgICAgICAgICAgIGNsaWNrOiAoZmllbGQsIGNsaWNrRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgb2xkRmlsdGVyVmFsdWUgPSBhc3NldFNlYXJjaFNlcnZpY2UuYXBwbGllZEZpbHRlcnMkLnZhbHVlO1xuICAgICAgICAgICAgICBjb25zdCB7IGNoZWNrZWQgfSA9IGNsaWNrRXZlbnQudGFyZ2V0O1xuXG4gICAgICAgICAgICAgIC8vIEhhbmRsZSBjaGVja2VkIHN0YXRlXG4gICAgICAgICAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuZm9ybS5nZXQoU2VhcmNoRmlsdGVycy5BTExfRklMVEVSUykuc2V0VmFsdWUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgLy8gRW1pdCBuZXcgc3RhdGVcbiAgICAgICAgICAgICAgICBhc3NldFNlYXJjaFNlcnZpY2UuYXBwbGllZEZpbHRlcnMkLm5leHQoe1xuICAgICAgICAgICAgICAgICAgLi4ub2xkRmlsdGVyVmFsdWUsXG4gICAgICAgICAgICAgICAgICBbU2VhcmNoRmlsdGVycy5BTExfRklMVEVSU106IHRydWUsXG4gICAgICAgICAgICAgICAgICBbU2VhcmNoRmlsdGVycy5PTkxZX0dST1VQU19BTkRfQVNTRVRTXTogY2hlY2tlZFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBIYW5kbGUgdW5jaGVja2VkIHN0YXRlXG4gICAgICAgICAgICAgIGZpZWxkLmZvcm0uZ2V0KFNlYXJjaEZpbHRlcnMuQUxMX0ZJTFRFUlMpLnNldFZhbHVlKG51bGwpOyAvLyBUcmlnZ2VyIGluZGV0ZXJtaW5hdGUgc3RhdGVcbiAgICAgICAgICAgICAgZmllbGQuZm9ybS5nZXQoU2VhcmNoRmlsdGVycy5PTkxZX0RFVklDRVMpLnNldFZhbHVlKHRydWUpO1xuXG4gICAgICAgICAgICAgIC8vIEVtaXQgbmV3IHN0YXRlXG4gICAgICAgICAgICAgIGFzc2V0U2VhcmNoU2VydmljZS5hcHBsaWVkRmlsdGVycyQubmV4dCh7XG4gICAgICAgICAgICAgICAgW1NlYXJjaEZpbHRlcnMuQUxMX0ZJTFRFUlNdOiBudWxsLFxuICAgICAgICAgICAgICAgIFtTZWFyY2hGaWx0ZXJzLk9OTFlfR1JPVVBTX0FORF9BU1NFVFNdOiBjaGVja2VkLFxuICAgICAgICAgICAgICAgIFtTZWFyY2hGaWx0ZXJzLk9OTFlfREVWSUNFU106IHRydWVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBob29rczoge1xuICAgICAgICAgICAgb25Jbml0OiBmaWVsZCA9PiB7XG4gICAgICAgICAgICAgIC8vIEdldCBpbml0aWFsIHN0YXRlXG4gICAgICAgICAgICAgIGNvbnN0IHsgb25seUdyb3Vwc0FuZEFzc2V0cyB9ID0gYXNzZXRTZWFyY2hTZXJ2aWNlPy5hcHBsaWVkRmlsdGVycyQ/LnZhbHVlO1xuICAgICAgICAgICAgICBmaWVsZC5mb3JtQ29udHJvbC5zZXRWYWx1ZShvbmx5R3JvdXBzQW5kQXNzZXRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICAvKipcbiAgICAgICAqIEFkZGluZyBkZXZpY2VzIGFuZCBncm91cHMgdG8gYSBmaWx0ZXIgaXMgYWxyZWFkeSBoYW5kbGVkIGluIHtAbGluayBBc3NldFNlYXJjaFNlcnZpY2UjYnVpbGRTZWFyY2hRdWVyeX1cbiAgICAgICAqICovXG4gICAgICBnZXRGaWx0ZXIobW9kZWw6IGFueSk6IGFueSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcjogYW55ID0ge307XG4gICAgICAgIGNvbnN0IG9ycyA9IFtdO1xuICAgICAgICBpZiAobW9kZWwudHlwZXM/Lmxlbmd0aCkge1xuICAgICAgICAgIG9ycy5wdXNoKHsgdHlwZTogeyBfX2luOiBtb2RlbC50eXBlcyB9IH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgZmlsdGVyLl9fb3IgPSBvcnM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG4iXX0=