UNPKG

igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

283 lines • 26.7 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { GridBaseAPIService } from '../api.service'; import { DataUtil } from '../../data-operations/data-util'; import { cloneArray } from '../../core/utils'; var IgxGridAPIService = /** @class */ (function (_super) { tslib_1.__extends(IgxGridAPIService, _super); function IgxGridAPIService() { return _super !== null && _super.apply(this, arguments) || this; } /** * @param {?} expression * @return {?} */ IgxGridAPIService.prototype.groupBy = /** * @param {?} expression * @return {?} */ function (expression) { /** @type {?} */ var groupingState = cloneArray(this.grid.groupingExpressions); /** @type {?} */ var sortingState = cloneArray(this.grid.sortingExpressions); this.prepare_sorting_expression([sortingState, groupingState], expression); this.grid.groupingExpressions = groupingState; this.arrange_sorting_expressions(); }; /** * @param {?} expressions * @return {?} */ IgxGridAPIService.prototype.groupBy_multiple = /** * @param {?} expressions * @return {?} */ function (expressions) { var e_1, _a; /** @type {?} */ var groupingState = cloneArray(this.grid.groupingExpressions); /** @type {?} */ var sortingState = cloneArray(this.grid.sortingExpressions); try { for (var expressions_1 = tslib_1.__values(expressions), expressions_1_1 = expressions_1.next(); !expressions_1_1.done; expressions_1_1 = expressions_1.next()) { var each = expressions_1_1.value; this.prepare_sorting_expression([sortingState, groupingState], each); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (expressions_1_1 && !expressions_1_1.done && (_a = expressions_1.return)) _a.call(expressions_1); } finally { if (e_1) throw e_1.error; } } this.grid.groupingExpressions = groupingState; this.arrange_sorting_expressions(); }; /** * @param {?=} name * @return {?} */ IgxGridAPIService.prototype.clear_groupby = /** * @param {?=} name * @return {?} */ function (name) { var _this = this; var e_2, _a; /** @type {?} */ var groupingState = cloneArray(this.grid.groupingExpressions); /** @type {?} */ var sortingState = cloneArray(this.grid.sortingExpressions); if (name) { /** @type {?} */ var names_1 = typeof name === 'string' ? [name] : name; /** @type {?} */ var groupedCols = groupingState.filter(function (state) { return names_1.indexOf(state.fieldName) < 0; }); /** @type {?} */ var newSortingExpr = sortingState.filter(function (state) { return names_1.indexOf(state.fieldName) < 0; }); this.grid.groupingExpressions = groupedCols; this.grid.sortingExpressions = newSortingExpr; names_1.forEach(function (colName) { /** @type {?} */ var grExprIndex = groupingState.findIndex(function (exp) { return exp.fieldName === colName; }); /** @type {?} */ var grpExpandState = _this.grid.groupingExpansionState; /* remove expansion states related to the cleared group and all with deeper hierarchy than the cleared group */ _this.grid.groupingExpansionState = grpExpandState .filter(function (val) { return val.hierarchy && val.hierarchy.length <= grExprIndex; }); }); } else { // clear all this.grid.groupingExpressions = []; this.grid.groupingExpansionState = []; var _loop_1 = function (grExpr) { /** @type {?} */ var sortExprIndex = sortingState.findIndex(function (exp) { return exp.fieldName === grExpr.fieldName; }); if (sortExprIndex > -1) { sortingState.splice(sortExprIndex, 1); } }; try { for (var groupingState_1 = tslib_1.__values(groupingState), groupingState_1_1 = groupingState_1.next(); !groupingState_1_1.done; groupingState_1_1 = groupingState_1.next()) { var grExpr = groupingState_1_1.value; _loop_1(grExpr); } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (groupingState_1_1 && !groupingState_1_1.done && (_a = groupingState_1.return)) _a.call(groupingState_1); } finally { if (e_2) throw e_2.error; } } this.grid.sortingExpressions = sortingState; } }; /** * @param {?} groupRow * @return {?} */ IgxGridAPIService.prototype.groupBy_get_expanded_for_group = /** * @param {?} groupRow * @return {?} */ function (groupRow) { /** @type {?} */ var grState = this.grid.groupingExpansionState; /** @type {?} */ var hierarchy = DataUtil.getHierarchy(groupRow); return grState.find(function (state) { return DataUtil.isHierarchyMatch(state.hierarchy || [{ fieldName: groupRow.expression.fieldName, value: groupRow.value }], hierarchy); }); }; /** * @param {?} groupRow * @param {?} rowID * @return {?} */ IgxGridAPIService.prototype.groupBy_is_row_in_group = /** * @param {?} groupRow * @param {?} rowID * @return {?} */ function (groupRow, rowID) { /** @type {?} */ var grid = this.grid; /** @type {?} */ var rowInGroup = false; groupRow.records.forEach(function (row) { if (grid.primaryKey ? row[grid.primaryKey] === rowID : row === rowID) { rowInGroup = true; } }); return rowInGroup; }; /** * @param {?} groupRow * @return {?} */ IgxGridAPIService.prototype.groupBy_toggle_group = /** * @param {?} groupRow * @return {?} */ function (groupRow) { /** @type {?} */ var grid = this.grid; /** @type {?} */ var expansionState = grid.groupingExpansionState; /** @type {?} */ var toggleRowEditingOverlay; /** @type {?} */ var isEditRowInGroup = false; if (grid.rowEditable) { /** @type {?} */ var rowState = this.grid.crudService.row; // Toggle only row editing overlays that are inside current expanded/collapsed group. isEditRowInGroup = rowState ? this.groupBy_is_row_in_group(groupRow, rowState.id) : false; } /** @type {?} */ var state = this.groupBy_get_expanded_for_group(groupRow); if (state) { state.expanded = !state.expanded; if (isEditRowInGroup) { toggleRowEditingOverlay = state.expanded; } } else { expansionState.push({ expanded: !grid.groupsExpanded, hierarchy: DataUtil.getHierarchy(groupRow) }); if (isEditRowInGroup) { toggleRowEditingOverlay = false; } } this.grid.groupingExpansionState = expansionState; if (grid.rowEditable) { grid.repositionRowEditingOverlay(grid.rowInEditMode); } }; /** * @protected * @param {?} fieldName * @return {?} */ IgxGridAPIService.prototype.remove_grouping_expression = /** * @protected * @param {?} fieldName * @return {?} */ function (fieldName) { /** @type {?} */ var groupingExpressions = this.grid.groupingExpressions; /** @type {?} */ var index = groupingExpressions.findIndex(function (expr) { return expr.fieldName === fieldName; }); if (index !== -1) { groupingExpressions.splice(index, 1); } }; /** * @return {?} */ IgxGridAPIService.prototype.arrange_sorting_expressions = /** * @return {?} */ function () { /** @type {?} */ var groupingState = this.grid.groupingExpressions; this.grid.sortingExpressions.sort(function (a, b) { /** @type {?} */ var groupExprA = groupingState.find(function (expr) { return expr.fieldName === a.fieldName; }); /** @type {?} */ var groupExprB = groupingState.find(function (expr) { return expr.fieldName === b.fieldName; }); if (groupExprA && groupExprB) { return groupingState.indexOf(groupExprA) > groupingState.indexOf(groupExprB) ? 1 : -1; } else if (groupExprA) { return -1; } else if (groupExprB) { return 1; } else { return 0; } }); }; /** * @param {?} gRow * @return {?} */ IgxGridAPIService.prototype.get_groupBy_record_id = /** * @param {?} gRow * @return {?} */ function (gRow) { /** @type {?} */ var recordId = '{ '; /** @type {?} */ var hierrarchy = DataUtil.getHierarchy(gRow); for (var i = 0; i < hierrarchy.length; i++) { /** @type {?} */ var groupByKey = hierrarchy[i]; recordId += "'" + groupByKey.fieldName + "': '" + groupByKey.value + "'"; if (i < hierrarchy.length - 1) { recordId += ', '; } } recordId += ' }'; return recordId; }; return IgxGridAPIService; }(GridBaseAPIService)); export { IgxGridAPIService }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1hcGkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvZ3JpZHMvZ3JpZC9ncmlkLWFwaS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUc5QztJQUF1Qyw2Q0FBb0M7SUFBM0U7O0lBb0pBLENBQUM7Ozs7O0lBbEpVLG1DQUFPOzs7O0lBQWQsVUFBZSxVQUErQjs7WUFDcEMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDOztZQUN6RCxZQUFZLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFDN0QsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsYUFBYSxDQUFDO1FBQzlDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7Ozs7O0lBRU0sNENBQWdCOzs7O0lBQXZCLFVBQXdCLFdBQWtDOzs7WUFDaEQsYUFBYSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDOztZQUN6RCxZQUFZLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7O1lBRTdELEtBQW1CLElBQUEsZ0JBQUEsaUJBQUEsV0FBVyxDQUFBLHdDQUFBLGlFQUFFO2dCQUEzQixJQUFNLElBQUksd0JBQUE7Z0JBQ1gsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ3hFOzs7Ozs7Ozs7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGFBQWEsQ0FBQztRQUM5QyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztJQUN2QyxDQUFDOzs7OztJQUVNLHlDQUFhOzs7O0lBQXBCLFVBQXFCLElBQTZCO1FBQWxELGlCQWdDQzs7O1lBL0JTLGFBQWEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQzs7WUFDekQsWUFBWSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1FBRTdELElBQUksSUFBSSxFQUFFOztnQkFDQSxPQUFLLEdBQUcsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBRSxDQUFDLENBQUMsQ0FBQyxJQUFJOztnQkFDbEQsV0FBVyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsVUFBQyxLQUFLLElBQUssT0FBQSxPQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQWxDLENBQWtDLENBQUM7O2dCQUNqRixjQUFjLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxVQUFDLEtBQUssSUFBSyxPQUFBLE9BQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBbEMsQ0FBa0MsQ0FBQztZQUN6RixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFdBQVcsQ0FBQztZQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGNBQWMsQ0FBQztZQUM5QyxPQUFLLENBQUMsT0FBTyxDQUFDLFVBQUMsT0FBTzs7b0JBQ1osV0FBVyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsVUFBQyxHQUFHLElBQUssT0FBQSxHQUFHLENBQUMsU0FBUyxLQUFLLE9BQU8sRUFBekIsQ0FBeUIsQ0FBQzs7b0JBQ3pFLGNBQWMsR0FBRyxLQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQjtnQkFDdkQ7dUVBQ3VEO2dCQUN2RCxLQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLGNBQWM7cUJBQzVDLE1BQU0sQ0FBQyxVQUFDLEdBQUc7b0JBQ1IsT0FBTyxHQUFHLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLFdBQVcsQ0FBQztnQkFDaEUsQ0FBQyxDQUFDLENBQUM7WUFDWCxDQUFDLENBQUMsQ0FBQztTQUNOO2FBQU07WUFDSCxZQUFZO1lBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxFQUFFLENBQUM7b0NBQzNCLE1BQU07O29CQUNQLGFBQWEsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLFVBQUMsR0FBRyxJQUFLLE9BQUEsR0FBRyxDQUFDLFNBQVMsS0FBSyxNQUFNLENBQUMsU0FBUyxFQUFsQyxDQUFrQyxDQUFDO2dCQUN6RixJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDcEIsWUFBWSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ3pDOzs7Z0JBSkwsS0FBcUIsSUFBQSxrQkFBQSxpQkFBQSxhQUFhLENBQUEsNENBQUE7b0JBQTdCLElBQU0sTUFBTSwwQkFBQTs0QkFBTixNQUFNO2lCQUtoQjs7Ozs7Ozs7O1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxZQUFZLENBQUM7U0FDL0M7SUFDTCxDQUFDOzs7OztJQUVNLDBEQUE4Qjs7OztJQUFyQyxVQUFzQyxRQUF3Qjs7WUFDcEQsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCOztZQUMxQyxTQUFTLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUM7UUFDakQsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQUMsS0FBSztZQUN0QixPQUFBLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQztRQUE5SCxDQUE4SCxDQUFDLENBQUM7SUFDeEksQ0FBQzs7Ozs7O0lBRU0sbURBQXVCOzs7OztJQUE5QixVQUErQixRQUF3QixFQUFFLEtBQUs7O1lBQ3BELElBQUksR0FBRyxJQUFJLENBQUMsSUFBSTs7WUFDbEIsVUFBVSxHQUFHLEtBQUs7UUFDdEIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBQSxHQUFHO1lBQ3hCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxLQUFLLEVBQUU7Z0JBQ2xFLFVBQVUsR0FBRyxJQUFJLENBQUM7YUFDckI7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7Ozs7O0lBRU0sZ0RBQW9COzs7O0lBQTNCLFVBQTRCLFFBQXdCOztZQUMxQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUk7O1lBQ2hCLGNBQWMsR0FBRyxJQUFJLENBQUMsc0JBQXNCOztZQUM5Qyx1QkFBZ0M7O1lBQ2hDLGdCQUFnQixHQUFHLEtBQUs7UUFDNUIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFOztnQkFDWixRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRztZQUUxQyxxRkFBcUY7WUFDckYsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1NBQzdGOztZQUNLLEtBQUssR0FBd0IsSUFBSSxDQUFDLDhCQUE4QixDQUFDLFFBQVEsQ0FBQztRQUNoRixJQUFJLEtBQUssRUFBRTtZQUNQLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO1lBQ2pDLElBQUksZ0JBQWdCLEVBQUU7Z0JBQ2xCLHVCQUF1QixHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7YUFDNUM7U0FDSjthQUFNO1lBQ0gsY0FBYyxDQUFDLElBQUksQ0FBQztnQkFDaEIsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWM7Z0JBQzlCLFNBQVMsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQzthQUM3QyxDQUFDLENBQUM7WUFDSCxJQUFJLGdCQUFnQixFQUFFO2dCQUNsQix1QkFBdUIsR0FBRyxLQUFLLENBQUM7YUFDbkM7U0FDSjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsY0FBYyxDQUFDO1FBQ2xELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNsQixJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3hEO0lBQ0wsQ0FBQzs7Ozs7O0lBRVMsc0RBQTBCOzs7OztJQUFwQyxVQUFxQyxTQUFTOztZQUNwQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQjs7WUFDbkQsS0FBSyxHQUFHLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxVQUFDLElBQUksSUFBSyxPQUFBLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUE1QixDQUE0QixDQUFDO1FBQ25GLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ2QsbUJBQW1CLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztTQUN4QztJQUNMLENBQUM7Ozs7SUFFTSx1REFBMkI7OztJQUFsQzs7WUFDVSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUI7UUFDbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBQyxDQUFDLEVBQUUsQ0FBQzs7Z0JBQzdCLFVBQVUsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQUMsSUFBSSxJQUFLLE9BQUEsSUFBSSxDQUFDLFNBQVMsS0FBSyxDQUFDLENBQUMsU0FBUyxFQUE5QixDQUE4QixDQUFDOztnQkFDekUsVUFBVSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBQyxJQUFJLElBQUssT0FBQSxJQUFJLENBQUMsU0FBUyxLQUFLLENBQUMsQ0FBQyxTQUFTLEVBQTlCLENBQThCLENBQUM7WUFDL0UsSUFBSSxVQUFVLElBQUksVUFBVSxFQUFFO2dCQUMxQixPQUFPLGFBQWEsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN6RjtpQkFBTSxJQUFJLFVBQVUsRUFBRTtnQkFDbkIsT0FBTyxDQUFDLENBQUMsQ0FBQzthQUNiO2lCQUFNLElBQUksVUFBVSxFQUFFO2dCQUNuQixPQUFPLENBQUMsQ0FBQzthQUNaO2lCQUFNO2dCQUNILE9BQU8sQ0FBQyxDQUFDO2FBQ1o7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Ozs7O0lBRU0saURBQXFCOzs7O0lBQTVCLFVBQTZCLElBQW9COztZQUN6QyxRQUFRLEdBQUcsSUFBSTs7WUFDYixVQUFVLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7UUFFOUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7O2dCQUNsQyxVQUFVLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUNoQyxRQUFRLElBQUksTUFBSSxVQUFVLENBQUMsU0FBUyxZQUFPLFVBQVUsQ0FBQyxLQUFLLE1BQUcsQ0FBQztZQUUvRCxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDM0IsUUFBUSxJQUFJLElBQUksQ0FBQzthQUNwQjtTQUNKO1FBQ0QsUUFBUSxJQUFJLElBQUksQ0FBQztRQUVqQixPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBRUwsd0JBQUM7QUFBRCxDQUFDLEFBcEpELENBQXVDLGtCQUFrQixHQW9KeEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHcmlkQmFzZUFQSVNlcnZpY2UgfSBmcm9tICcuLi9hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi9ncmlkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJR3JvdXBCeVJlY29yZCB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9ncm91cGJ5LXJlY29yZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUdyb3VwQnlFeHBhbmRTdGF0ZSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9ncm91cGJ5LWV4cGFuZC1zdGF0ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRGF0YVV0aWwgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7IGNsb25lQXJyYXkgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IElHcm91cGluZ0V4cHJlc3Npb24gfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBpbmctZXhwcmVzc2lvbi5pbnRlcmZhY2UnO1xuXG5leHBvcnQgY2xhc3MgSWd4R3JpZEFQSVNlcnZpY2UgZXh0ZW5kcyBHcmlkQmFzZUFQSVNlcnZpY2U8SWd4R3JpZENvbXBvbmVudD4ge1xuXG4gICAgcHVibGljIGdyb3VwQnkoZXhwcmVzc2lvbjogSUdyb3VwaW5nRXhwcmVzc2lvbik6IHZvaWQge1xuICAgICAgICBjb25zdCBncm91cGluZ1N0YXRlID0gY2xvbmVBcnJheSh0aGlzLmdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucyk7XG4gICAgICAgIGNvbnN0IHNvcnRpbmdTdGF0ZSA9IGNsb25lQXJyYXkodGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9ucyk7XG4gICAgICAgIHRoaXMucHJlcGFyZV9zb3J0aW5nX2V4cHJlc3Npb24oW3NvcnRpbmdTdGF0ZSwgZ3JvdXBpbmdTdGF0ZV0sIGV4cHJlc3Npb24pO1xuICAgICAgICB0aGlzLmdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucyA9IGdyb3VwaW5nU3RhdGU7XG4gICAgICAgIHRoaXMuYXJyYW5nZV9zb3J0aW5nX2V4cHJlc3Npb25zKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdyb3VwQnlfbXVsdGlwbGUoZXhwcmVzc2lvbnM6IElHcm91cGluZ0V4cHJlc3Npb25bXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBncm91cGluZ1N0YXRlID0gY2xvbmVBcnJheSh0aGlzLmdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucyk7XG4gICAgICAgIGNvbnN0IHNvcnRpbmdTdGF0ZSA9IGNsb25lQXJyYXkodGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9ucyk7XG5cbiAgICAgICAgZm9yIChjb25zdCBlYWNoIG9mIGV4cHJlc3Npb25zKSB7XG4gICAgICAgICAgICB0aGlzLnByZXBhcmVfc29ydGluZ19leHByZXNzaW9uKFtzb3J0aW5nU3RhdGUsIGdyb3VwaW5nU3RhdGVdLCBlYWNoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zID0gZ3JvdXBpbmdTdGF0ZTtcbiAgICAgICAgdGhpcy5hcnJhbmdlX3NvcnRpbmdfZXhwcmVzc2lvbnMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJfZ3JvdXBieShuYW1lPzogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPikge1xuICAgICAgICBjb25zdCBncm91cGluZ1N0YXRlID0gY2xvbmVBcnJheSh0aGlzLmdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucyk7XG4gICAgICAgIGNvbnN0IHNvcnRpbmdTdGF0ZSA9IGNsb25lQXJyYXkodGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9ucyk7XG5cbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWVzID0gdHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnID8gWyBuYW1lIF0gOiBuYW1lO1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBlZENvbHMgPSBncm91cGluZ1N0YXRlLmZpbHRlcigoc3RhdGUpID0+IG5hbWVzLmluZGV4T2Yoc3RhdGUuZmllbGROYW1lKSA8IDApO1xuICAgICAgICAgICAgY29uc3QgbmV3U29ydGluZ0V4cHIgPSBzb3J0aW5nU3RhdGUuZmlsdGVyKChzdGF0ZSkgPT4gbmFtZXMuaW5kZXhPZihzdGF0ZS5maWVsZE5hbWUpIDwgMCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucyA9IGdyb3VwZWRDb2xzO1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9ucyA9IG5ld1NvcnRpbmdFeHByO1xuICAgICAgICAgICAgbmFtZXMuZm9yRWFjaCgoY29sTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyRXhwckluZGV4ID0gZ3JvdXBpbmdTdGF0ZS5maW5kSW5kZXgoKGV4cCkgPT4gZXhwLmZpZWxkTmFtZSA9PT0gY29sTmFtZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JwRXhwYW5kU3RhdGUgPSB0aGlzLmdyaWQuZ3JvdXBpbmdFeHBhbnNpb25TdGF0ZTtcbiAgICAgICAgICAgICAgICAvKiByZW1vdmUgZXhwYW5zaW9uIHN0YXRlcyByZWxhdGVkIHRvIHRoZSBjbGVhcmVkIGdyb3VwXG4gICAgICAgICAgICAgICAgYW5kIGFsbCB3aXRoIGRlZXBlciBoaWVyYXJjaHkgdGhhbiB0aGUgY2xlYXJlZCBncm91cCAqL1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5ncm91cGluZ0V4cGFuc2lvblN0YXRlID0gZ3JwRXhwYW5kU3RhdGVcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigodmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsLmhpZXJhcmNoeSAmJiB2YWwuaGllcmFyY2h5Lmxlbmd0aCA8PSBnckV4cHJJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGNsZWFyIGFsbFxuICAgICAgICAgICAgdGhpcy5ncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5ncm91cGluZ0V4cGFuc2lvblN0YXRlID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGdyRXhwciBvZiBncm91cGluZ1N0YXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc29ydEV4cHJJbmRleCA9IHNvcnRpbmdTdGF0ZS5maW5kSW5kZXgoKGV4cCkgPT4gZXhwLmZpZWxkTmFtZSA9PT0gZ3JFeHByLmZpZWxkTmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKHNvcnRFeHBySW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICBzb3J0aW5nU3RhdGUuc3BsaWNlKHNvcnRFeHBySW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMgPSBzb3J0aW5nU3RhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ3JvdXBCeV9nZXRfZXhwYW5kZWRfZm9yX2dyb3VwKGdyb3VwUm93OiBJR3JvdXBCeVJlY29yZCk6IElHcm91cEJ5RXhwYW5kU3RhdGUge1xuICAgICAgICBjb25zdCBnclN0YXRlID0gdGhpcy5ncmlkLmdyb3VwaW5nRXhwYW5zaW9uU3RhdGU7XG4gICAgICAgIGNvbnN0IGhpZXJhcmNoeSA9IERhdGFVdGlsLmdldEhpZXJhcmNoeShncm91cFJvdyk7XG4gICAgICAgIHJldHVybiBnclN0YXRlLmZpbmQoKHN0YXRlKSA9PlxuICAgICAgICAgICAgRGF0YVV0aWwuaXNIaWVyYXJjaHlNYXRjaChzdGF0ZS5oaWVyYXJjaHkgfHwgW3sgZmllbGROYW1lOiBncm91cFJvdy5leHByZXNzaW9uLmZpZWxkTmFtZSwgdmFsdWU6IGdyb3VwUm93LnZhbHVlIH1dLCBoaWVyYXJjaHkpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ3JvdXBCeV9pc19yb3dfaW5fZ3JvdXAoZ3JvdXBSb3c6IElHcm91cEJ5UmVjb3JkLCByb3dJRCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkO1xuICAgICAgICBsZXQgcm93SW5Hcm91cCA9IGZhbHNlO1xuICAgICAgICBncm91cFJvdy5yZWNvcmRzLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgIGlmIChncmlkLnByaW1hcnlLZXkgPyByb3dbZ3JpZC5wcmltYXJ5S2V5XSA9PT0gcm93SUQgOiByb3cgPT09IHJvd0lEKSB7XG4gICAgICAgICAgICAgICAgcm93SW5Hcm91cCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcm93SW5Hcm91cDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ3JvdXBCeV90b2dnbGVfZ3JvdXAoZ3JvdXBSb3c6IElHcm91cEJ5UmVjb3JkKSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIGNvbnN0IGV4cGFuc2lvblN0YXRlID0gZ3JpZC5ncm91cGluZ0V4cGFuc2lvblN0YXRlO1xuICAgICAgICBsZXQgdG9nZ2xlUm93RWRpdGluZ092ZXJsYXk6IGJvb2xlYW47XG4gICAgICAgIGxldCBpc0VkaXRSb3dJbkdyb3VwID0gZmFsc2U7XG4gICAgICAgIGlmIChncmlkLnJvd0VkaXRhYmxlKSB7XG4gICAgICAgICAgICBjb25zdCByb3dTdGF0ZSA9IHRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3c7XG5cbiAgICAgICAgICAgIC8vIFRvZ2dsZSBvbmx5IHJvdyBlZGl0aW5nIG92ZXJsYXlzIHRoYXQgYXJlIGluc2lkZSBjdXJyZW50IGV4cGFuZGVkL2NvbGxhcHNlZCBncm91cC5cbiAgICAgICAgICAgIGlzRWRpdFJvd0luR3JvdXAgPSByb3dTdGF0ZSA/IHRoaXMuZ3JvdXBCeV9pc19yb3dfaW5fZ3JvdXAoZ3JvdXBSb3csIHJvd1N0YXRlLmlkKSA6IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXRlOiBJR3JvdXBCeUV4cGFuZFN0YXRlID0gdGhpcy5ncm91cEJ5X2dldF9leHBhbmRlZF9mb3JfZ3JvdXAoZ3JvdXBSb3cpO1xuICAgICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgICAgIHN0YXRlLmV4cGFuZGVkID0gIXN0YXRlLmV4cGFuZGVkO1xuICAgICAgICAgICAgaWYgKGlzRWRpdFJvd0luR3JvdXApIHtcbiAgICAgICAgICAgICAgICB0b2dnbGVSb3dFZGl0aW5nT3ZlcmxheSA9IHN0YXRlLmV4cGFuZGVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwYW5zaW9uU3RhdGUucHVzaCh7XG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6ICFncmlkLmdyb3Vwc0V4cGFuZGVkLFxuICAgICAgICAgICAgICAgIGhpZXJhcmNoeTogRGF0YVV0aWwuZ2V0SGllcmFyY2h5KGdyb3VwUm93KVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoaXNFZGl0Um93SW5Hcm91cCkge1xuICAgICAgICAgICAgICAgIHRvZ2dsZVJvd0VkaXRpbmdPdmVybGF5ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkLmdyb3VwaW5nRXhwYW5zaW9uU3RhdGUgPSBleHBhbnNpb25TdGF0ZTtcbiAgICAgICAgaWYgKGdyaWQucm93RWRpdGFibGUpIHtcbiAgICAgICAgICAgIGdyaWQucmVwb3NpdGlvblJvd0VkaXRpbmdPdmVybGF5KGdyaWQucm93SW5FZGl0TW9kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVtb3ZlX2dyb3VwaW5nX2V4cHJlc3Npb24oZmllbGROYW1lKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwaW5nRXhwcmVzc2lvbnMgPSB0aGlzLmdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucztcbiAgICAgICAgY29uc3QgaW5kZXggPSBncm91cGluZ0V4cHJlc3Npb25zLmZpbmRJbmRleCgoZXhwcikgPT4gZXhwci5maWVsZE5hbWUgPT09IGZpZWxkTmFtZSk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGdyb3VwaW5nRXhwcmVzc2lvbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhcnJhbmdlX3NvcnRpbmdfZXhwcmVzc2lvbnMoKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwaW5nU3RhdGUgPSB0aGlzLmdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucztcbiAgICAgICAgdGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9ucy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBncm91cEV4cHJBID0gZ3JvdXBpbmdTdGF0ZS5maW5kKChleHByKSA9PiBleHByLmZpZWxkTmFtZSA9PT0gYS5maWVsZE5hbWUpO1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBFeHByQiA9IGdyb3VwaW5nU3RhdGUuZmluZCgoZXhwcikgPT4gZXhwci5maWVsZE5hbWUgPT09IGIuZmllbGROYW1lKTtcbiAgICAgICAgICAgIGlmIChncm91cEV4cHJBICYmIGdyb3VwRXhwckIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ3JvdXBpbmdTdGF0ZS5pbmRleE9mKGdyb3VwRXhwckEpID4gZ3JvdXBpbmdTdGF0ZS5pbmRleE9mKGdyb3VwRXhwckIpID8gMSA6IC0xO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChncm91cEV4cHJBKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChncm91cEV4cHJCKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0X2dyb3VwQnlfcmVjb3JkX2lkKGdSb3c6IElHcm91cEJ5UmVjb3JkKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHJlY29yZElkID0gJ3sgJztcbiAgICAgICAgY29uc3QgaGllcnJhcmNoeSA9IERhdGFVdGlsLmdldEhpZXJhcmNoeShnUm93KTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhpZXJyYXJjaHkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwQnlLZXkgPSBoaWVycmFyY2h5W2ldO1xuICAgICAgICAgICAgcmVjb3JkSWQgKz0gYCcke2dyb3VwQnlLZXkuZmllbGROYW1lfSc6ICcke2dyb3VwQnlLZXkudmFsdWV9J2A7XG5cbiAgICAgICAgICAgIGlmIChpIDwgaGllcnJhcmNoeS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgcmVjb3JkSWQgKz0gJywgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZWNvcmRJZCArPSAnIH0nO1xuXG4gICAgICAgIHJldHVybiByZWNvcmRJZDtcbiAgICB9XG5cbn1cbiJdfQ==