UNPKG

@nova-ui/bits

Version:

SolarWinds Nova Framework

121 lines 17.2 kB
// © 2022 SolarWinds Worldwide, LLC. All rights reserved. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to // deal in the Software without restriction, including without limitation the // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // sell copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. import { Injectable } from "@angular/core"; import { SelectionModel } from "./public-api"; import { SelectorService } from "../lib/selector/selector.service"; import * as i0 from "@angular/core"; import * as i1 from "../lib/selector/selector.service"; export class ListService { constructor(selectorService) { this.selectorService = selectorService; } /** * Updates the selector checkbox status, selector menu items, and the repeat selected items. * * @param {INovaFilteringOutputs} state The filtering outputs state * * @returns {INovaFilteringOutputs} The updated state */ updateSelectionState(state) { const selection = new SelectionModel(state.selector?.selection ?? {}); const itemsSource = (state.repeat && state.repeat.itemsSource) || []; const paginator = state.paginator || { total: undefined }; const selectedItems = this.selectorService.getSelectedItems(selection, itemsSource); const outputState = { ...state, repeat: { itemsSource, ...state.repeat, selectedItems, }, selector: { ...state.selector, selection, selectorState: this.selectorService.getSelectorState(selection, itemsSource.length, selectedItems.length, paginator.total, selection.include.length), }, }; return outputState; } /** * Updates the selector selection state, selector checkbox status, selector menu items, and the * selected items in the repeat based on the items in the provided list and the specified selection * mode. * * @param {any[]} selectedItems The items to select * @param {RepeatSelectionMode} selectionMode The mode to use for selection * @param {INovaFilteringOutputs} state The filtering outputs state * * @returns {INovaFilteringOutputs} The updated state */ selectItems(selectedItems, selectionMode, state) { if (!state.selector || !state.selector.selection) { throw new Error("State must contain selector property"); } if (!state.repeat) { throw new Error("State must contain repeat property"); } if (!state.paginator) { throw new Error("State must contain paginator property"); } const outputState = { ...state, selector: { ...state.selector, selection: this.selectorService.selectItems(state.selector.selection, selectedItems, state.repeat.itemsSource, selectionMode), }, }; return this.updateSelectionState(outputState); } /** * Updates the selector selection state, selector checkbox status, selector menu items, and the * selected items in the repeat based on the selection type. * * @param {SelectionType} selectionType The selection type to apply * @param {INovaFilteringOutputs} state The filtering outputs state * * @returns {INovaFilteringOutputs} The updated state */ applySelector(selectionType, state) { if (!state.selector || !state.selector.selection) { throw new Error("State must contain selector property"); } if (!state.repeat) { throw new Error("State must contain repeat property"); } if (!state.paginator) { throw new Error("State must contain paginator property"); } const outputState = { ...state, selector: { ...state.selector, selection: this.selectorService.applySelector(state.selector.selection, state.repeat.itemsSource, selectionType, state.paginator.total), }, }; return this.updateSelectionState(outputState); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ListService, deps: [{ token: i1.SelectorService }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ListService, providedIn: "root" }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ListService, decorators: [{ type: Injectable, args: [{ providedIn: "root" }] }], ctorParameters: () => [{ type: i1.SelectorService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2xpc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5REFBeUQ7QUFDekQsRUFBRTtBQUNGLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsOEVBQThFO0FBQzlFLCtFQUErRTtBQUMvRSw4RUFBOEU7QUFDOUUsNERBQTREO0FBQzVELEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsdURBQXVEO0FBQ3ZELEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsNEVBQTRFO0FBQzVFLCtFQUErRTtBQUMvRSwwRUFBMEU7QUFDMUUsaUZBQWlGO0FBQ2pGLDZFQUE2RTtBQUM3RSxpQkFBaUI7QUFFakIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRzlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7O0FBR25FLE1BQU0sT0FBTyxXQUFXO0lBQ3BCLFlBQW9CLGVBQWdDO1FBQWhDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtJQUFHLENBQUM7SUFFeEQ7Ozs7OztPQU1HO0lBQ0ksb0JBQW9CLENBQ3ZCLEtBQTRCO1FBRTVCLE1BQU0sU0FBUyxHQUFHLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyRSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBRTFELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdC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IExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyAgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG9cbi8vICBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuLy8gIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vclxuLy8gIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyAgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vICBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vICBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyAgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyAgVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuaW1wb3J0IHsgSU5vdmFGaWx0ZXJpbmdPdXRwdXRzIH0gZnJvbSBcIi4vZGF0YS1zb3VyY2UvcHVibGljLWFwaVwiO1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tIFwiLi9wdWJsaWMtYXBpXCI7XG5pbXBvcnQgeyBSZXBlYXRTZWxlY3Rpb25Nb2RlIH0gZnJvbSBcIi4uL2xpYi9yZXBlYXQvdHlwZXNcIjtcbmltcG9ydCB7IFNlbGVjdGlvblR5cGUgfSBmcm9tIFwiLi4vbGliL3NlbGVjdG9yL3B1YmxpYy1hcGlcIjtcbmltcG9ydCB7IFNlbGVjdG9yU2VydmljZSB9IGZyb20gXCIuLi9saWIvc2VsZWN0b3Ivc2VsZWN0b3Iuc2VydmljZVwiO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46IFwicm9vdFwiIH0pXG5leHBvcnQgY2xhc3MgTGlzdFNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgc2VsZWN0b3JTZXJ2aWNlOiBTZWxlY3RvclNlcnZpY2UpIHt9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBzZWxlY3RvciBjaGVja2JveCBzdGF0dXMsIHNlbGVjdG9yIG1lbnUgaXRlbXMsIGFuZCB0aGUgcmVwZWF0IHNlbGVjdGVkIGl0ZW1zLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtJTm92YUZpbHRlcmluZ091dHB1dHN9IHN0YXRlIFRoZSBmaWx0ZXJpbmcgb3V0cHV0cyBzdGF0ZVxuICAgICAqXG4gICAgICogQHJldHVybnMge0lOb3ZhRmlsdGVyaW5nT3V0cHV0c30gVGhlIHVwZGF0ZWQgc3RhdGVcbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlU2VsZWN0aW9uU3RhdGUoXG4gICAgICAgIHN0YXRlOiBJTm92YUZpbHRlcmluZ091dHB1dHNcbiAgICApOiBJTm92YUZpbHRlcmluZ091dHB1dHMge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWwoc3RhdGUuc2VsZWN0b3I/LnNlbGVjdGlvbiA/PyB7fSk7XG4gICAgICAgIGNvbnN0IGl0ZW1zU291cmNlID0gKHN0YXRlLnJlcGVhdCAmJiBzdGF0ZS5yZXBlYXQuaXRlbXNTb3VyY2UpIHx8IFtdO1xuICAgICAgICBjb25zdCBwYWdpbmF0b3IgPSBzdGF0ZS5wYWdpbmF0b3IgfHwgeyB0b3RhbDogdW5kZWZpbmVkIH07XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0b3JTZXJ2aWNlLmdldFNlbGVjdGVkSXRlbXMoXG4gICAgICAgICAgICBzZWxlY3Rpb24sXG4gICAgICAgICAgICBpdGVtc1NvdXJjZVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBvdXRwdXRTdGF0ZSA9IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgcmVwZWF0OiB7XG4gICAgICAgICAgICAgICAgaXRlbXNTb3VyY2UsXG4gICAgICAgICAgICAgICAgLi4uc3RhdGUucmVwZWF0LFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VsZWN0b3I6IHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZS5zZWxlY3RvcixcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3JTdGF0ZTogdGhpcy5zZWxlY3RvclNlcnZpY2UuZ2V0U2VsZWN0b3JTdGF0ZShcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBpdGVtc1NvdXJjZS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXMubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICBwYWdpbmF0b3IudG90YWwsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5pbmNsdWRlLmxlbmd0aFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBvdXRwdXRTdGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBzZWxlY3RvciBzZWxlY3Rpb24gc3RhdGUsIHNlbGVjdG9yIGNoZWNrYm94IHN0YXR1cywgc2VsZWN0b3IgbWVudSBpdGVtcywgYW5kIHRoZVxuICAgICAqIHNlbGVjdGVkIGl0ZW1zIGluIHRoZSByZXBlYXQgYmFzZWQgb24gdGhlIGl0ZW1zIGluIHRoZSBwcm92aWRlZCBsaXN0IGFuZCB0aGUgc3BlY2lmaWVkIHNlbGVjdGlvblxuICAgICAqIG1vZGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2FueVtdfSBzZWxlY3RlZEl0ZW1zIFRoZSBpdGVtcyB0byBzZWxlY3RcbiAgICAgKiBAcGFyYW0ge1JlcGVhdFNlbGVjdGlvbk1vZGV9IHNlbGVjdGlvbk1vZGUgVGhlIG1vZGUgdG8gdXNlIGZvciBzZWxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0lOb3ZhRmlsdGVyaW5nT3V0cHV0c30gc3RhdGUgVGhlIGZpbHRlcmluZyBvdXRwdXRzIHN0YXRlXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7SU5vdmFGaWx0ZXJpbmdPdXRwdXRzfSBUaGUgdXBkYXRlZCBzdGF0ZVxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RJdGVtcyhcbiAgICAgICAgc2VsZWN0ZWRJdGVtczogYW55W10sXG4gICAgICAgIHNlbGVjdGlvbk1vZGU6IFJlcGVhdFNlbGVjdGlvbk1vZGUsXG4gICAgICAgIHN0YXRlOiBJTm92YUZpbHRlcmluZ091dHB1dHNcbiAgICApOiBJTm92YUZpbHRlcmluZ091dHB1dHMge1xuICAgICAgICBpZiAoIXN0YXRlLnNlbGVjdG9yIHx8ICFzdGF0ZS5zZWxlY3Rvci5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0YXRlIG11c3QgY29udGFpbiBzZWxlY3RvciBwcm9wZXJ0eVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc3RhdGUucmVwZWF0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdGF0ZSBtdXN0IGNvbnRhaW4gcmVwZWF0IHByb3BlcnR5XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzdGF0ZS5wYWdpbmF0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0YXRlIG11c3QgY29udGFpbiBwYWdpbmF0b3IgcHJvcGVydHlcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvdXRwdXRTdGF0ZSA9IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgc2VsZWN0b3I6IHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZS5zZWxlY3RvcixcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb246IHRoaXMuc2VsZWN0b3JTZXJ2aWNlLnNlbGVjdEl0ZW1zKFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zZWxlY3Rvci5zZWxlY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXMsXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnJlcGVhdC5pdGVtc1NvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uTW9kZVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVNlbGVjdGlvblN0YXRlKG91dHB1dFN0YXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBzZWxlY3RvciBzZWxlY3Rpb24gc3RhdGUsIHNlbGVjdG9yIGNoZWNrYm94IHN0YXR1cywgc2VsZWN0b3IgbWVudSBpdGVtcywgYW5kIHRoZVxuICAgICAqIHNlbGVjdGVkIGl0ZW1zIGluIHRoZSByZXBlYXQgYmFzZWQgb24gdGhlIHNlbGVjdGlvbiB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTZWxlY3Rpb25UeXBlfSBzZWxlY3Rpb25UeXBlIFRoZSBzZWxlY3Rpb24gdHlwZSB0byBhcHBseVxuICAgICAqIEBwYXJhbSB7SU5vdmFGaWx0ZXJpbmdPdXRwdXRzfSBzdGF0ZSBUaGUgZmlsdGVyaW5nIG91dHB1dHMgc3RhdGVcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtJTm92YUZpbHRlcmluZ091dHB1dHN9IFRoZSB1cGRhdGVkIHN0YXRlXG4gICAgICovXG4gICAgcHVibGljIGFwcGx5U2VsZWN0b3IoXG4gICAgICAgIHNlbGVjdGlvblR5cGU6IFNlbGVjdGlvblR5cGUsXG4gICAgICAgIHN0YXRlOiBJTm92YUZpbHRlcmluZ091dHB1dHNcbiAgICApOiBJTm92YUZpbHRlcmluZ091dHB1dHMge1xuICAgICAgICBpZiAoIXN0YXRlLnNlbGVjdG9yIHx8ICFzdGF0ZS5zZWxlY3Rvci5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0YXRlIG11c3QgY29udGFpbiBzZWxlY3RvciBwcm9wZXJ0eVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc3RhdGUucmVwZWF0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdGF0ZSBtdXN0IGNvbnRhaW4gcmVwZWF0IHByb3BlcnR5XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzdGF0ZS5wYWdpbmF0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0YXRlIG11c3QgY29udGFpbiBwYWdpbmF0b3IgcHJvcGVydHlcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvdXRwdXRTdGF0ZSA9IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgc2VsZWN0b3I6IHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZS5zZWxlY3RvcixcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb246IHRoaXMuc2VsZWN0b3JTZXJ2aWNlLmFwcGx5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnNlbGVjdG9yLnNlbGVjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucmVwZWF0Lml0ZW1zU291cmNlLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25UeXBlLFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wYWdpbmF0b3IudG90YWxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVTZWxlY3Rpb25TdGF0ZShvdXRwdXRTdGF0ZSk7XG4gICAgfVxufVxuIl19