UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

117 lines 14.5 kB
import { Injectable } from '@angular/core'; import { DataGridService, gettext, ModalService, Status, UserPreferencesService } from '@c8y/ngx-components'; import { InventoryService } from '@c8y/client'; import { TranslateService } from '@ngx-translate/core'; import { DeviceTypeValueGridColumn } from './type-dashboards-list/device-type-value.grid-column'; import * as i0 from "@angular/core"; import * as i1 from "@c8y/client"; import * as i2 from "@c8y/ngx-components"; import * as i3 from "@ngx-translate/core"; export class DashboardManagerService extends DataGridService { constructor(inventory, userPreferencesService, modal, translateService) { super(userPreferencesService); this.inventory = inventory; this.userPreferencesService = userPreferencesService; this.modal = modal; this.translateService = translateService; this.baseQuery = { __filter: { __and: [ { 'c8y_Dashboard.deviceType': { __eq: true } }, { __has: 'c8y_Dashboard.deviceTypeValue' } ] } }; this.TYPE_DASHBOARDS_QUERY = '$filter=((c8y_Dashboard.deviceType eq true) and (has(c8y_Dashboard.deviceTypeValue)))'; } getColumns() { return [ { name: 'icon', header: gettext('Icon'), path: 'c8y_Dashboard.icon', sortable: false, gridTrackSize: '45px' }, { name: 'name', header: gettext('Name'), path: 'name', sortable: false, gridTrackSize: '200px' }, { name: 'description', header: gettext('Description'), path: 'c8y_Dashboard.description', sortable: false }, new DeviceTypeValueGridColumn(), { name: 'lastUpdated', header: gettext('Last update'), path: 'lastUpdated', sortable: false, gridTrackSize: '200px' } ]; } getDefaultPagination() { return { pageSize: 25, currentPage: 1 }; } async getData(columns, pagination, text) { const filters = this.getFilters(columns, pagination, text); return await this.inventory.list(filters); } async getTotal() { return (await this.inventory.list({ query: this.TYPE_DASHBOARDS_QUERY, withTotalElements: true })).paging.totalElements; } async delete(dashboard, onSuccess) { try { const msg = gettext(`You are about to delete the dashboard "{{ dashboardName }}" from all devices of type "{{ deviceType }}". Do you want to proceed?`); await this.modal.confirm(gettext('Delete dashboard'), this.translateService.instant(msg, { dashboardName: dashboard.c8y_Dashboard.name, deviceType: dashboard.c8y_Dashboard.deviceTypeValue }), Status.DANGER, { ok: gettext('Delete'), cancel: gettext('Cancel') }); await this.inventory.delete(dashboard); onSuccess(); } catch (ex) { // intended empty } } getFilters(columns, pagination, text) { return { query: this.getQueryString(columns), ...(text && { text }), pageSize: pagination.pageSize, currentPage: pagination.currentPage, withTotalPages: true, withTotalElements: true }; } getQueryString(columns) { const queryFromColumns = this.getQueryObj(columns); const fullQuery = this.queriesUtil.addAndFilter(queryFromColumns, this.baseQuery); return this.queriesUtil.buildQuery(fullQuery); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DashboardManagerService, deps: [{ token: i1.InventoryService }, { token: i2.UserPreferencesService }, { token: i2.ModalService }, { token: i3.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DashboardManagerService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DashboardManagerService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: i1.InventoryService }, { type: i2.UserPreferencesService }, { type: i2.ModalService }, { type: i3.TranslateService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLW1hbmFnZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL2Rhc2hib2FyZC1tYW5hZ2VyL2Rhc2hib2FyZC1tYW5hZ2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBRUwsZUFBZSxFQUNmLE9BQU8sRUFDUCxZQUFZLEVBRVosTUFBTSxFQUNOLHNCQUFzQixFQUN2QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBa0IsZ0JBQWdCLEVBQTRCLE1BQU0sYUFBYSxDQUFDO0FBRXpGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDOzs7OztBQU1qRyxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsZUFBZTtJQVkxRCxZQUNZLFNBQTJCLEVBQzNCLHNCQUE4QyxFQUM5QyxLQUFtQixFQUNuQixnQkFBa0M7UUFFNUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFMcEIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ25CLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFkOUMsY0FBUyxHQUFHO1lBQ1YsUUFBUSxFQUFFO2dCQUNSLEtBQUssRUFBRTtvQkFDTCxFQUFFLDBCQUEwQixFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFO29CQUM5QyxFQUFFLEtBQUssRUFBRSwrQkFBK0IsRUFBRTtpQkFDM0M7YUFDRjtTQUNGLENBQUM7UUFDTSwwQkFBcUIsR0FDM0IsdUZBQXVGLENBQUM7SUFRMUYsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPO1lBQ0w7Z0JBQ0UsSUFBSSxFQUFFLE1BQU07Z0JBQ1osTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUM7Z0JBQ3ZCLElBQUksRUFBRSxvQkFBb0I7Z0JBQzFCLFFBQVEsRUFBRSxLQUFLO2dCQUNmLGFBQWEsRUFBRSxNQUFNO2FBQ3RCO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLE1BQU07Z0JBQ1osTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUM7Z0JBQ3ZCLElBQUksRUFBRSxNQUFNO2dCQUNaLFFBQVEsRUFBRSxLQUFLO2dCQUNmLGFBQWEsRUFBRSxPQUFPO2FBQ3ZCO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLE1BQU0sRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDO2dCQUM5QixJQUFJLEVBQUUsMkJBQTJCO2dCQUNqQyxRQUFRLEVBQUUsS0FBSzthQUNoQjtZQUNELElBQUkseUJBQXlCLEVBQUU7WUFDL0I7Z0JBQ0UsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLE1BQU0sRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDO2dCQUM5QixJQUFJLEVBQUUsYUFBYTtnQkFDbkIsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsYUFBYSxFQUFFLE9BQU87YUFDdkI7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELG9CQUFvQjtRQUNsQixPQUFPO1lBQ0wsUUFBUSxFQUFFLEVBQUU7WUFDWixXQUFXLEVBQUUsQ0FBQztTQUNmLENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FDWCxPQUFpQixFQUNqQixVQUFzQixFQUN0QixJQUFhO1FBRWIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTNELE9BQU8sTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVE7UUFDWixPQUFPLENBQ0wsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztZQUN4QixLQUFLLEVBQUUsSUFBSSxDQUFDLHFCQUFxQjtZQUNqQyxpQkFBaUIsRUFBRSxJQUFJO1NBQ3hCLENBQUMsQ0FDSCxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUM7SUFDekIsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBd0MsRUFBRSxTQUFxQjtRQUMxRSxJQUFJLENBQUM7WUFDSCxNQUFNLEdBQUcsR0FBVyxPQUFPLENBQ3pCO21DQUMyQixDQUM1QixDQUFDO1lBRUYsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDdEIsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQzNCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFO2dCQUNqQyxhQUFhLEVBQUUsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJO2dCQUMzQyxVQUFVLEVBQUUsU0FBUyxDQUFDLGFBQWEsQ0FBQyxlQUFlO2FBQ3BELENBQUMsRUFDRixNQUFNLENBQUMsTUFBTSxFQUNiO2dCQUNFLEVBQUUsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDO2dCQUNyQixNQUFNLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQzthQUMxQixDQUNGLENBQUM7WUFDRixNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZDLFNBQVMsRUFBRSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDWixpQkFBaUI7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFTyxVQUFVLENBQ2hCLE9BQWlCLEVBQ2pCLFVBQXNCLEVBQ3RCLElBQWE7UUFFYixPQUFPO1lBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDO1lBQ25DLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUNyQixRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7WUFDN0IsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO1lBQ25DLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLGlCQUFpQixFQUFFLElBQUk7U0FDeEIsQ0FBQztJQUNKLENBQUM7SUFFTyxjQUFjLENBQUMsT0FBaUI7UUFDdEMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25ELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNsRixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7K0dBN0hVLHVCQUF1QjttSEFBdkIsdUJBQXVCLGNBRnRCLE1BQU07OzRGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDb2x1bW4sXG4gIERhdGFHcmlkU2VydmljZSxcbiAgZ2V0dGV4dCxcbiAgTW9kYWxTZXJ2aWNlLFxuICBQYWdpbmF0aW9uLFxuICBTdGF0dXMsXG4gIFVzZXJQcmVmZXJlbmNlc1NlcnZpY2Vcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdCwgSW52ZW50b3J5U2VydmljZSwgSVJlc3VsdExpc3QsIFF1ZXJpZXNVdGlsIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QgfSBmcm9tICcuLi9jb250ZXh0LWRhc2hib2FyZC5tb2RlbCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBEZXZpY2VUeXBlVmFsdWVHcmlkQ29sdW1uIH0gZnJvbSAnLi90eXBlLWRhc2hib2FyZHMtbGlzdC9kZXZpY2UtdHlwZS12YWx1ZS5ncmlkLWNvbHVtbic7XG5pbXBvcnQgeyBUeXBlRGFzaGJvYXJkRmlsdGVyIH0gZnJvbSAnLi9kYXNoYm9hcmQtbWFuYWdlci5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIERhc2hib2FyZE1hbmFnZXJTZXJ2aWNlIGV4dGVuZHMgRGF0YUdyaWRTZXJ2aWNlIHtcbiAgcXVlcmllc1V0aWw6IFF1ZXJpZXNVdGlsO1xuICBiYXNlUXVlcnkgPSB7XG4gICAgX19maWx0ZXI6IHtcbiAgICAgIF9fYW5kOiBbXG4gICAgICAgIHsgJ2M4eV9EYXNoYm9hcmQuZGV2aWNlVHlwZSc6IHsgX19lcTogdHJ1ZSB9IH0sXG4gICAgICAgIHsgX19oYXM6ICdjOHlfRGFzaGJvYXJkLmRldmljZVR5cGVWYWx1ZScgfVxuICAgICAgXVxuICAgIH1cbiAgfTtcbiAgcHJpdmF0ZSBUWVBFX0RBU0hCT0FSRFNfUVVFUlkgPVxuICAgICckZmlsdGVyPSgoYzh5X0Rhc2hib2FyZC5kZXZpY2VUeXBlIGVxIHRydWUpIGFuZCAoaGFzKGM4eV9EYXNoYm9hcmQuZGV2aWNlVHlwZVZhbHVlKSkpJztcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGludmVudG9yeTogSW52ZW50b3J5U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgdXNlclByZWZlcmVuY2VzU2VydmljZTogVXNlclByZWZlcmVuY2VzU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgbW9kYWw6IE1vZGFsU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZVxuICApIHtcbiAgICBzdXBlcih1c2VyUHJlZmVyZW5jZXNTZXJ2aWNlKTtcbiAgfVxuXG4gIGdldENvbHVtbnMoKTogQ29sdW1uW10ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdpY29uJyxcbiAgICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdJY29uJyksXG4gICAgICAgIHBhdGg6ICdjOHlfRGFzaGJvYXJkLmljb24nLFxuICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgIGdyaWRUcmFja1NpemU6ICc0NXB4J1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ25hbWUnLFxuICAgICAgICBoZWFkZXI6IGdldHRleHQoJ05hbWUnKSxcbiAgICAgICAgcGF0aDogJ25hbWUnLFxuICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgIGdyaWRUcmFja1NpemU6ICcyMDBweCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdkZXNjcmlwdGlvbicsXG4gICAgICAgIGhlYWRlcjogZ2V0dGV4dCgnRGVzY3JpcHRpb24nKSxcbiAgICAgICAgcGF0aDogJ2M4eV9EYXNoYm9hcmQuZGVzY3JpcHRpb24nLFxuICAgICAgICBzb3J0YWJsZTogZmFsc2VcbiAgICAgIH0sXG4gICAgICBuZXcgRGV2aWNlVHlwZVZhbHVlR3JpZENvbHVtbigpLFxuICAgICAge1xuICAgICAgICBuYW1lOiAnbGFzdFVwZGF0ZWQnLFxuICAgICAgICBoZWFkZXI6IGdldHRleHQoJ0xhc3QgdXBkYXRlJyksXG4gICAgICAgIHBhdGg6ICdsYXN0VXBkYXRlZCcsXG4gICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgZ3JpZFRyYWNrU2l6ZTogJzIwMHB4J1xuICAgICAgfVxuICAgIF07XG4gIH1cblxuICBnZXREZWZhdWx0UGFnaW5hdGlvbigpOiBQYWdpbmF0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZVNpemU6IDI1LFxuICAgICAgY3VycmVudFBhZ2U6IDFcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZ2V0RGF0YShcbiAgICBjb2x1bW5zOiBDb2x1bW5bXSxcbiAgICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uLFxuICAgIHRleHQ/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxJUmVzdWx0TGlzdDxJTWFuYWdlZE9iamVjdD4+IHtcbiAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzKGNvbHVtbnMsIHBhZ2luYXRpb24sIHRleHQpO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaW52ZW50b3J5Lmxpc3QoZmlsdGVycyk7XG4gIH1cblxuICBhc3luYyBnZXRUb3RhbCgpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiAoXG4gICAgICBhd2FpdCB0aGlzLmludmVudG9yeS5saXN0KHtcbiAgICAgICAgcXVlcnk6IHRoaXMuVFlQRV9EQVNIQk9BUkRTX1FVRVJZLFxuICAgICAgICB3aXRoVG90YWxFbGVtZW50czogdHJ1ZVxuICAgICAgfSlcbiAgICApLnBhZ2luZy50b3RhbEVsZW1lbnRzO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlKGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QsIG9uU3VjY2VzczogKCkgPT4gdm9pZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtc2c6IHN0cmluZyA9IGdldHRleHQoXG4gICAgICAgIGBZb3UgYXJlIGFib3V0IHRvIGRlbGV0ZSB0aGUgZGFzaGJvYXJkIFwie3sgZGFzaGJvYXJkTmFtZSB9fVwiIGZyb20gYWxsIGRldmljZXMgb2YgdHlwZSBcInt7IGRldmljZVR5cGUgfX1cIi5cbiAgICAgICAgICAgRG8geW91IHdhbnQgdG8gcHJvY2VlZD9gXG4gICAgICApO1xuXG4gICAgICBhd2FpdCB0aGlzLm1vZGFsLmNvbmZpcm0oXG4gICAgICAgIGdldHRleHQoJ0RlbGV0ZSBkYXNoYm9hcmQnKSxcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQobXNnLCB7XG4gICAgICAgICAgZGFzaGJvYXJkTmFtZTogZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmQubmFtZSxcbiAgICAgICAgICBkZXZpY2VUeXBlOiBkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZC5kZXZpY2VUeXBlVmFsdWVcbiAgICAgICAgfSksXG4gICAgICAgIFN0YXR1cy5EQU5HRVIsXG4gICAgICAgIHtcbiAgICAgICAgICBvazogZ2V0dGV4dCgnRGVsZXRlJyksXG4gICAgICAgICAgY2FuY2VsOiBnZXR0ZXh0KCdDYW5jZWwnKVxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5pbnZlbnRvcnkuZGVsZXRlKGRhc2hib2FyZCk7XG4gICAgICBvblN1Y2Nlc3MoKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgLy8gaW50ZW5kZWQgZW1wdHlcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEZpbHRlcnMoXG4gICAgY29sdW1uczogQ29sdW1uW10sXG4gICAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbixcbiAgICB0ZXh0Pzogc3RyaW5nXG4gICk6IFR5cGVEYXNoYm9hcmRGaWx0ZXIge1xuICAgIHJldHVybiB7XG4gICAgICBxdWVyeTogdGhpcy5nZXRRdWVyeVN0cmluZyhjb2x1bW5zKSxcbiAgICAgIC4uLih0ZXh0ICYmIHsgdGV4dCB9KSxcbiAgICAgIHBhZ2VTaXplOiBwYWdpbmF0aW9uLnBhZ2VTaXplLFxuICAgICAgY3VycmVudFBhZ2U6IHBhZ2luYXRpb24uY3VycmVudFBhZ2UsXG4gICAgICB3aXRoVG90YWxQYWdlczogdHJ1ZSxcbiAgICAgIHdpdGhUb3RhbEVsZW1lbnRzOiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UXVlcnlTdHJpbmcoY29sdW1uczogQ29sdW1uW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IHF1ZXJ5RnJvbUNvbHVtbnMgPSB0aGlzLmdldFF1ZXJ5T2JqKGNvbHVtbnMpO1xuICAgIGNvbnN0IGZ1bGxRdWVyeSA9IHRoaXMucXVlcmllc1V0aWwuYWRkQW5kRmlsdGVyKHF1ZXJ5RnJvbUNvbHVtbnMsIHRoaXMuYmFzZVF1ZXJ5KTtcbiAgICByZXR1cm4gdGhpcy5xdWVyaWVzVXRpbC5idWlsZFF1ZXJ5KGZ1bGxRdWVyeSk7XG4gIH1cbn1cbiJdfQ==