UNPKG

custom-app

Version:

ITIMS��Ʒ�鿪��ר��React���,�Dz��ý��ּ�dhcc-app���������

210 lines (169 loc) 20.6 kB
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } import { useMemo } from "react"; import { getFirstDefined, getBy } from "../utils"; export var useColumns = function useColumns(props) { var debug = props.debug, userColumns = props.columns, _props$state = _slicedToArray(props.state, 1), groupBy = _props$state[0].groupBy; var _useMemo = useMemo(function () { if (debug) console.info("getColumns"); // Decorate All the columns var columnTree = decorateColumnTree(userColumns); // Get the flat list of all columns var columns = flattenBy(columnTree, "columns"); columns = [].concat(_toConsumableArray(groupBy.map(function (g) { return columns.find(function (col) { return col.id === g; }); })), _toConsumableArray(columns.filter(function (col) { return !groupBy.includes(col.id); }))); // Get headerGroups var headerGroups = makeHeaderGroups(columns, findMaxDepth(columnTree)); var headers = flattenBy(headerGroups, "headers"); return { columns: columns, headerGroups: headerGroups, headers: headers }; }, [groupBy, userColumns]), columns = _useMemo.columns, headerGroups = _useMemo.headerGroups, headers = _useMemo.headers; return _extends({}, props, { columns: columns, headerGroups: headerGroups, headers: headers }); // Find the depth of the columns function findMaxDepth(columns) { var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; return columns.reduce(function (prev, curr) { if (curr.columns) { return Math.max(prev, findMaxDepth(curr.columns, depth + 1)); } return depth; }, 0); } function decorateColumn(column, parent) { // First check for string accessor var _column = column, id = _column.id, accessor = _column.accessor, Header = _column.Header; if (typeof accessor === "string") { id = id || accessor; var accessorString = accessor; accessor = function accessor(row) { return getBy(row, accessorString); }; } if (!id && typeof Header === "string") { id = Header; } if (!id) { // Accessor, but no column id? This is bad. console.error(column); throw new Error("A column id is required!"); } column = _extends({ Header: "", Cell: function Cell(cell) { return cell.value; }, show: true }, column, { id: id, accessor: accessor, parent: parent }); return column; } // Build the visible columns, headers and flat column list function decorateColumnTree(columns, parent) { var depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; return columns.map(function (column) { column = decorateColumn(column, parent); if (column.columns) { column.columns = decorateColumnTree(column.columns, column, depth + 1); } return column; }); } function flattenBy(columns, childKey) { var flatColumns = []; var recurse = function recurse(columns) { columns.forEach(function (d) { if (!d[childKey]) { flatColumns.push(d); } else { recurse(d[childKey]); } }); }; recurse(columns); return flatColumns; } // Build the header groups from the bottom up function makeHeaderGroups(columns, maxDepth) { var headerGroups = []; var removeChildColumns = function removeChildColumns(column) { delete column.columns; if (column.parent) { removeChildColumns(column.parent); } }; columns.forEach(removeChildColumns); var buildGroup = function buildGroup(columns) { var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; var headerGroup = { headers: [] }; var parentColumns = []; var hasParents = columns.some(function (col) { return col.parent; }); columns.forEach(function (column) { var isFirst = !parentColumns.length; var latestParentColumn = [].concat(parentColumns).reverse()[0]; // If the column has a parent, add it if necessary if (column.parent) { if (isFirst || latestParentColumn.originalID !== column.parent.id) { parentColumns.push(_extends({}, column.parent, { originalID: column.parent.id, id: [column.parent.id, parentColumns.length].join("_") })); } } else if (hasParents) { // If other columns have parents, add a place holder if necessary var placeholderColumn = decorateColumn({ originalID: [column.id, "placeholder", maxDepth - depth].join("_"), id: [column.id, "placeholder", maxDepth - depth, parentColumns.length].join("_") }); if (isFirst || latestParentColumn.originalID !== placeholderColumn.originalID) { parentColumns.push(placeholderColumn); } } // Establish the new columns[] relationship on the parent if (column.parent || hasParents) { latestParentColumn = [].concat(parentColumns).reverse()[0]; latestParentColumn.columns = latestParentColumn.columns || []; if (!latestParentColumn.columns.includes(column)) { latestParentColumn.columns.push(column); } } headerGroup.headers.push(column); }); headerGroups.push(headerGroup); if (parentColumns.length) { buildGroup(parentColumns); } }; buildGroup(columns); return headerGroups.reverse(); } }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VDb2x1bW5zLmpzIl0sIm5hbWVzIjpbInVzZU1lbW8iLCJnZXRGaXJzdERlZmluZWQiLCJnZXRCeSIsInVzZUNvbHVtbnMiLCJkZWJ1ZyIsInByb3BzIiwidXNlckNvbHVtbnMiLCJjb2x1bW5zIiwic3RhdGUiLCJncm91cEJ5IiwiY29uc29sZSIsImluZm8iLCJjb2x1bW5UcmVlIiwiZGVjb3JhdGVDb2x1bW5UcmVlIiwiZmxhdHRlbkJ5IiwibWFwIiwiZmluZCIsImNvbCIsImlkIiwiZyIsImZpbHRlciIsImluY2x1ZGVzIiwiaGVhZGVyR3JvdXBzIiwibWFrZUhlYWRlckdyb3VwcyIsImZpbmRNYXhEZXB0aCIsImhlYWRlcnMiLCJkZXB0aCIsInJlZHVjZSIsInByZXYiLCJjdXJyIiwiTWF0aCIsIm1heCIsImRlY29yYXRlQ29sdW1uIiwiY29sdW1uIiwicGFyZW50IiwiYWNjZXNzb3IiLCJIZWFkZXIiLCJhY2Nlc3NvclN0cmluZyIsInJvdyIsImVycm9yIiwiRXJyb3IiLCJDZWxsIiwiY2VsbCIsInZhbHVlIiwic2hvdyIsImNoaWxkS2V5IiwiZmxhdENvbHVtbnMiLCJyZWN1cnNlIiwiZm9yRWFjaCIsImQiLCJwdXNoIiwibWF4RGVwdGgiLCJyZW1vdmVDaGlsZENvbHVtbnMiLCJidWlsZEdyb3VwIiwiaGVhZGVyR3JvdXAiLCJwYXJlbnRDb2x1bW5zIiwiaGFzUGFyZW50cyIsInNvbWUiLCJpc0ZpcnN0IiwibGVuZ3RoIiwibGF0ZXN0UGFyZW50Q29sdW1uIiwicmV2ZXJzZSIsIm9yaWdpbmFsSUQiLCJqb2luIiwicGxhY2Vob2xkZXJDb2x1bW4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLFNBQVNBLE9BQVQsUUFBd0IsT0FBeEI7O0FBRUEsU0FBU0MsZUFBVCxFQUEwQkMsS0FBMUIsUUFBdUMsVUFBdkM7O0FBRUEsT0FBTyxJQUFNQyxhQUFhLFNBQWJBLFVBQWEsUUFBUztBQUFBLE1BRS9CQyxLQUYrQixHQUs3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QUxIO0FBRm1DLFdBQWYsQ0FBMUI7QUFTQSxjQUNFTCxXQUNBRSxtQkFBbUJFLFVBQW5CLEtBQWtDRSxrQkFBa0JGLFVBRnRELEVBR0U7QUFDQVAsMEJBQWNMLElBQWQsQ0FBbUJjLGlCQUFuQjtBQUNEO0FBQ0Y7O0FBRUQ7QUFDQSxZQUFJL0IsT0FBT0MsTUFBUCxJQUFpQnNCLFVBQXJCLEVBQWlDO0FBQy9CSSwrQkFBcUIsVUFBSUwsYUFBSixFQUFtQk0sT0FBbkIsR0FBNkIsQ0FBN0IsQ0FBckI7QUFDQUQsNkJBQW1CckQsT0FBbkIsR0FBNkJxRCxtQkFBbUJyRCxPQUFuQixJQUE4QixFQUEzRDtBQUNBLGNBQUksQ0FBQ3FELG1CQUFtQnJELE9BQW5CLENBQTJCYyxRQUEzQixDQUFvQ1ksTUFBcEMsQ0FBTCxFQUFrRDtBQUNoRDJCLCtCQUFtQnJELE9BQW5CLENBQTJCMkMsSUFBM0IsQ0FBZ0NqQixNQUFoQztBQUNEO0FBQ0Y7O0FBRURxQixvQkFBWTdCLE9BQVosQ0FBb0J5QixJQUFwQixDQUF5QmpCLE1BQXpCO0FBQ0QsT0ExQ0Q7O0FBNENBWCxtQkFBYTRCLElBQWIsQ0FBa0JJLFdBQWxCOztBQUVBLFVBQUlDLGNBQWNJLE1BQWxCLEVBQTBCO0FBQ3hCTixtQkFBV0UsYUFBWDtBQUNEO0FBQ0YsS0ExREQ7O0FBNERBRixlQUFXOUMsT0FBWDs7QUFFQSxXQUFPZSxhQUFhdUMsT0FBYixFQUFQO0FBQ0Q7QUFDRixDQTlMTSIsImZpbGUiOiJ1c2VDb2x1bW5zLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBnZXRGaXJzdERlZmluZWQsIGdldEJ5IH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmV4cG9ydCBjb25zdCB1c2VDb2x1bW5zID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgZGVidWcsXG4gICAgY29sdW1uczogdXNlckNvbHVtbnMsXG4gICAgc3RhdGU6IFt7IGdyb3VwQnkgfV1cbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHsgY29sdW1ucywgaGVhZGVyR3JvdXBzLCBoZWFkZXJzIH0gPSB1c2VNZW1vKFxuICAgICgpID0+IHtcbiAgICAgIGlmIChkZWJ1ZykgY29uc29sZS5pbmZvKFwiZ2V0Q29sdW1uc1wiKTtcblxuICAgICAgLy8gRGVjb3JhdGUgQWxsIHRoZSBjb2x1bW5zXG4gICAgICBsZXQgY29sdW1uVHJlZSA9IGRlY29yYXRlQ29sdW1uVHJlZSh1c2VyQ29sdW1ucyk7XG5cbiAgICAgIC8vIEdldCB0aGUgZmxhdCBsaXN0IG9mIGFsbCBjb2x1bW5zXG4gICAgICBsZXQgY29sdW1ucyA9IGZsYXR0ZW5CeShjb2x1bW5UcmVlLCBcImNvbHVtbnNcIik7XG5cbiAgICAgIGNvbHVtbnMgPSBbXG4gICAgICAgIC4uLmdyb3VwQnkubWFwKGcgPT4gY29sdW1ucy5maW5kKGNvbCA9PiBjb2wuaWQgPT09IGcpKSxcbiAgICAgICAgLi4uY29sdW1ucy5maWx0ZXIoY29sID0+ICFncm91cEJ5LmluY2x1ZGVzKGNvbC5pZCkpXG4gICAgICBdO1xuXG4gICAgICAvLyBHZXQgaGVhZGVyR3JvdXBzXG4gICAgICBjb25zdCBoZWFkZXJHcm91cHMgPSBtYWtlSGVhZGVyR3JvdXBzKGNvbHVtbnMsIGZpbmRNYXhEZXB0aChjb2x1bW5UcmVlKSk7XG4gICAgICBjb25zdCBoZWFkZXJzID0gZmxhdHRlbkJ5KGhlYWRlckdyb3VwcywgXCJoZWFkZXJzXCIpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2x1bW5zLFxuICAgICAgICBoZWFkZXJHcm91cHMsXG4gICAgICAgIGhlYWRlcnNcbiAgICAgIH07XG4gICAgfSxcbiAgICBbZ3JvdXBCeSwgdXNlckNvbHVtbnNdXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5wcm9wcyxcbiAgICBjb2x1bW5zLFxuICAgIGhlYWRlckdyb3VwcyxcbiAgICBoZWFkZXJzXG4gIH07XG5cbiAgLy8gRmluZCB0aGUgZGVwdGggb2YgdGhlIGNvbHVtbnNcbiAgZnVuY3Rpb24gZmluZE1heERlcHRoKGNvbHVtbnMsIGRlcHRoID0gMCkge1xuICAgIHJldHVybiBjb2x1bW5zLnJlZHVjZSgocHJldiwgY3VycikgPT4ge1xuICAgICAgaWYgKGN1cnIuY29sdW1ucykge1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgocHJldiwgZmluZE1heERlcHRoKGN1cnIuY29sdW1ucywgZGVwdGggKyAxKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVwdGg7XG4gICAgfSwgMCk7XG4gIH1cblxuICBmdW5jdGlvbiBkZWNvcmF0ZUNvbHVtbihjb2x1bW4sIHBhcmVudCkge1xuICAgIC8vIEZpcnN0IGNoZWNrIGZvciBzdHJpbmcgYWNjZXNzb3JcbiAgICBsZXQgeyBpZCwgYWNjZXNzb3IsIEhlYWRlciB9ID0gY29sdW1uO1xuXG4gICAgaWYgKHR5cGVvZiBhY2Nlc3NvciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgaWQgPSBpZCB8fCBhY2Nlc3NvcjtcbiAgICAgIGNvbnN0IGFjY2Vzc29yU3RyaW5nID0gYWNjZXNzb3I7XG4gICAgICBhY2Nlc3NvciA9IHJvdyA9PiBnZXRCeShyb3csIGFjY2Vzc29yU3RyaW5nKTtcbiAgICB9XG5cbiAgICBpZiAoIWlkICYmIHR5cGVvZiBIZWFkZXIgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGlkID0gSGVhZGVyO1xuICAgIH1cblxuICAgIGlmICghaWQpIHtcbiAgICAgIC8vIEFjY2Vzc29yLCBidXQgbm8gY29sdW1uIGlkPyBUaGlzIGlzIGJhZC5cbiAgICAgIGNvbnNvbGUuZXJyb3IoY29sdW1uKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkEgY29sdW1uIGlkIGlzIHJlcXVpcmVkIVwiKTtcbiAgICB9XG5cbiAgICBjb2x1bW4gPSB7XG4gICAgICBIZWFkZXI6IFwiXCIsXG4gICAgICBDZWxsOiBjZWxsID0+IGNlbGwudmFsdWUsXG4gICAgICBzaG93OiB0cnVlLFxuICAgICAgLi4uY29sdW1uLFxuICAgICAgaWQsXG4gICAgICBhY2Nlc3NvcixcbiAgICAgIHBhcmVudFxuICAgIH07XG5cbiAgICByZXR1cm4gY29sdW1uO1xuICB9XG5cbiAgLy8gQnVpbGQgdGhlIHZpc2libGUgY29sdW1ucywgaGVhZGVycyBhbmQgZmxhdCBjb2x1bW4gbGlzdFxuICBmdW5jdGlvbiBkZWNvcmF0ZUNvbHVtblRyZWUoY29sdW1ucywgcGFyZW50LCBkZXB0aCA9IDApIHtcbiAgICByZXR1cm4gY29sdW1ucy5tYXAoY29sdW1uID0+IHtcbiAgICAgIGNvbHVtbiA9IGRlY29yYXRlQ29sdW1uKGNvbHVtbiwgcGFyZW50KTtcbiAgICAgIGlmIChjb2x1bW4uY29sdW1ucykge1xuICAgICAgICBjb2x1bW4uY29sdW1ucyA9IGRlY29yYXRlQ29sdW1uVHJlZShjb2x1bW4uY29sdW1ucywgY29sdW1uLCBkZXB0aCArIDEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZsYXR0ZW5CeShjb2x1bW5zLCBjaGlsZEtleSkge1xuICAgIGNvbnN0IGZsYXRDb2x1bW5zID0gW107XG5cbiAgICBjb25zdCByZWN1cnNlID0gY29sdW1ucyA9PiB7XG4gICAgICBjb2x1bW5zLmZvckVhY2goZCA9PiB7XG4gICAgICAgIGlmICghZFtjaGlsZEtleV0pIHtcbiAgICAgICAgICBmbGF0Q29sdW1ucy5wdXNoKGQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlY3Vyc2UoZFtjaGlsZEtleV0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgcmVjdXJzZShjb2x1bW5zKTtcblxuICAgIHJldHVybiBmbGF0Q29sdW1ucztcbiAgfVxuXG4gIC8vIEJ1aWxkIHRoZSBoZWFkZXIgZ3JvdXBzIGZyb20gdGhlIGJvdHRvbSB1cFxuICBmdW5jdGlvbiBtYWtlSGVhZGVyR3JvdXBzKGNvbHVtbnMsIG1heERlcHRoKSB7XG4gICAgY29uc3QgaGVhZGVyR3JvdXBzID0gW107XG5cbiAgICBjb25zdCByZW1vdmVDaGlsZENvbHVtbnMgPSBjb2x1bW4gPT4ge1xuICAgICAgZGVsZXRlIGNvbHVtbi5jb2x1bW5zO1xuICAgICAgaWYgKGNvbHVtbi5wYXJlbnQpIHtcbiAgICAgICAgcmVtb3ZlQ2hpbGRDb2x1bW5zKGNvbHVtbi5wYXJlbnQpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29sdW1ucy5mb3JFYWNoKHJlbW92ZUNoaWxkQ29sdW1ucyk7XG5cbiAgICBjb25zdCBidWlsZEdyb3VwID0gKGNvbHVtbnMsIGRlcHRoID0gMCkgPT4ge1xuICAgICAgY29uc3QgaGVhZGVyR3JvdXAgPSB7XG4gICAgICAgIGhlYWRlcnM6IFtdXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwYXJlbnRDb2x1bW5zID0gW107XG5cbiAgICAgIGNvbnN0IGhhc1BhcmVudHMgPSBjb2x1bW5zLnNvbWUoY29sID0+IGNvbC5wYXJlbnQpO1xuXG4gICAgICBjb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgICAgY29uc3QgaXNGaXJzdCA9ICFwYXJlbnRDb2x1bW5zLmxlbmd0aDtcbiAgICAgICAgbGV0IGxhdGVzdFBhcmVudENvbHVtbiA9IFsuLi5wYXJlbnRDb2x1bW5zXS5yZXZlcnNlKClbMF07XG5cbiAgICAgICAgLy8gSWYgdGhlIGNvbHVtbiBoYXMgYSBwYXJlbnQsIGFkZCBpdCBpZiBuZWNlc3NhcnlcbiAgICAgICAgaWYgKGNvbHVtbi5wYXJlbnQpIHtcbiAgICAgICAgICBpZiAoaXNGaXJzdCB8fCBsYXRlc3RQYXJlbnRDb2x1bW4ub3JpZ2luYWxJRCAhPT0gY29sdW1uLnBhcmVudC5pZCkge1xuICAgICAgICAgICAgcGFyZW50Q29sdW1ucy5wdXNoKHtcbiAgICAgICAgICAgICAgLi4uY29sdW1uLnBhcmVudCxcbiAgICAgICAgICAgICAgb3JpZ2luYWxJRDogY29sdW1uLnBhcmVudC5pZCxcbiAgICAgICAgICAgICAgaWQ6IFtjb2x1bW4ucGFyZW50LmlkLCBwYXJlbnRDb2x1bW5zLmxlbmd0aF0uam9pbihcIl9cIilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChoYXNQYXJlbnRzKSB7XG4gICAgICAgICAgLy8gSWYgb3RoZXIgY29sdW1ucyBoYXZlIHBhcmVudHMsIGFkZCBhIHBsYWNlIGhvbGRlciBpZiBuZWNlc3NhcnlcbiAgICAgICAgICBjb25zdCBwbGFjZWhvbGRlckNvbHVtbiA9IGRlY29yYXRlQ29sdW1uKHtcbiAgICAgICAgICAgIG9yaWdpbmFsSUQ6IFtjb2x1bW4uaWQsIFwicGxhY2Vob2xkZXJcIiwgbWF4RGVwdGggLSBkZXB0aF0uam9pbihcIl9cIiksXG4gICAgICAgICAgICBpZDogW1xuICAgICAgICAgICAgICBjb2x1bW4uaWQsXG4gICAgICAgICAgICAgIFwicGxhY2Vob2xkZXJcIixcbiAgICAgICAgICAgICAgbWF4RGVwdGggLSBkZXB0aCxcbiAgICAgICAgICAgICAgcGFyZW50Q29sdW1ucy5sZW5ndGhcbiAgICAgICAgICAgIF0uam9pbihcIl9cIilcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc0ZpcnN0IHx8XG4gICAgICAgICAgICBsYXRlc3RQYXJlbnRDb2x1bW4ub3JpZ2luYWxJRCAhPT0gcGxhY2Vob2xkZXJDb2x1bW4ub3JpZ2luYWxJRFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcGFyZW50Q29sdW1ucy5wdXNoKHBsYWNlaG9sZGVyQ29sdW1uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFc3RhYmxpc2ggdGhlIG5ldyBjb2x1bW5zW10gcmVsYXRpb25zaGlwIG9uIHRoZSBwYXJlbnRcbiAgICAgICAgaWYgKGNvbHVtbi5wYXJlbnQgfHwgaGFzUGFyZW50cykge1xuICAgICAgICAgIGxhdGVzdFBhcmVudENvbHVtbiA9IFsuLi5wYXJlbnRDb2x1bW5zXS5yZXZlcnNlKClbMF07XG4gICAgICAgICAgbGF0ZXN0UGFyZW50Q29sdW1uLmNvbHVtbnMgPSBsYXRlc3RQYXJlbnRDb2x1bW4uY29sdW1ucyB8fCBbXTtcbiAgICAgICAgICBpZiAoIWxhdGVzdFBhcmVudENvbHVtbi5jb2x1bW5zLmluY2x1ZGVzKGNvbHVtbikpIHtcbiAgICAgICAgICAgIGxhdGVzdFBhcmVudENvbHVtbi5jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBoZWFkZXJHcm91cC5oZWFkZXJzLnB1c2goY29sdW1uKTtcbiAgICAgIH0pO1xuXG4gICAgICBoZWFkZXJHcm91cHMucHVzaChoZWFkZXJHcm91cCk7XG5cbiAgICAgIGlmIChwYXJlbnRDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICBidWlsZEdyb3VwKHBhcmVudENvbHVtbnMpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBidWlsZEdyb3VwKGNvbHVtbnMpO1xuXG4gICAgcmV0dXJuIGhlYWRlckdyb3Vwcy5yZXZlcnNlKCk7XG4gIH1cbn07XG4iXX0=