UNPKG

custom-app

Version:

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

217 lines (174 loc) 20.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useColumns = undefined; 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"); } }; }(); var _react = require("react"); var _utils = require("../utils"); 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); } } var useColumns = exports.useColumns = function useColumns(props) { var debug = props.debug, userColumns = props.columns, _props$state = _slicedToArray(props.state, 1), groupBy = _props$state[0].groupBy; var _useMemo = (0, _react.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 (0, _utils.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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VDb2x1bW5zLmpzIl0sIm5hbWVzIjpbInVzZUNvbHVtbnMiLCJkZWJ1ZyIsInByb3BzIiwidXNlckNvbHVtbnMiLCJjb2x1bW5zIiwic3RhdGUiLCJncm91cEJ5IiwiY29uc29sZSIsImluZm8iLCJjb2x1bW5UcmVlIiwiZGVjb3JhdGVDb2x1bW5UcmVlIiwiZmxhdHRlbkJ5IiwibWFwIiwiZmluZCIsImNvbCIsImlkIiwiZyIsImZpbHRlciIsImluY2x1ZGVzIiwiaGVhZGVyR3JvdXBzIiwibWFrZUhlYWRlckdyb3VwcyIsImZpbmRNYXhEZXB0aCIsImhlYWRlcnMiLCJkZXB0aCIsInJlZHVjZSIsInByZXYiLCJjdXJyIiwiTWF0aCIsIm1heCIsImRlY29yYXRlQ29sdW1uIiwiY29sdW1uIiwicGFyZW50IiwiYWNjZXNzb3IiLCJIZWFkZXIiLCJhY2Nlc3NvclN0cmluZyIsInJvdyIsImVycm9yIiwiRXJyb3IiLCJDZWxsIiwiY2VsbCIsInZhbHVlIiwic2hvdyIsImNoaWxkS2V5IiwiZmxhdENvbHVtbnMiLCJyZWN1cnNlIiwiZm9yRWFjaCIsImQiLCJwdXNoIiwibWF4RGVwdGgiLCJyZW1vdmVDaGlsZENvbHVtbnMiLCJidWlsZEdyb3VwIiwiaGVhZGVyR3JvdXAiLCJwYXJlbnRDb2x1bW5zIiwiaGFzUGFyZW50cyIsInNvbWUiLCJpc0ZpcnN0IiwibGVuZ3RoIiwibGF0ZXN0UGFyZW50Q29sdW1uIiwicmV2ZXJzZSIsIm9yaWdpbmFsSUQiLCJqb2luIiwicGxhY2Vob2xkZXJDb2x1bW4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBRUE7Ozs7QUFFTyxJQUFNQSxrQ0FBYSxTQUFiQSxVQUFhLFFBQVM7QUFBQSxNQUUvQkMsS0FGK0IsR0FLN0JDLEtBTDZCLENBRS9CRCxLQUYrQjtBQUFBLE1BR3RCRSxXQUhzQixHQUs3QkQsS0FMNkIsQ0FHL0JFLE9BSCtCO0FBQUEsb0NBSzdCRixLQUw2QixDQUkvQkcs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ZCxDQUFtQmMsaUJBQW5CO0FBQ0Q7QUFDRjs7QUFFRDtBQUNBLFlBQUkvQixPQUFPQyxNQUFQLElBQWlCc0IsVUFBckIsRUFBaUM7QUFDL0JJLCtCQUFxQixVQUFJTCxhQUFKLEVBQW1CTSxPQUFuQixHQUE2QixDQUE3QixDQUFyQjtBQUNBRCw2QkFBbUJyRCxPQUFuQixHQUE2QnFELG1CQUFtQnJELE9BQW5CLElBQThCLEVBQTNEO0FBQ0EsY0FBSSxDQUFDcUQsbUJBQW1CckQsT0FBbkIsQ0FBMkJjLFFBQTNCLENBQW9DWSxNQUFwQyxDQUFMLEVBQWtEO0FBQ2hEMkIsK0JBQW1CckQsT0FBbkIsQ0FBMkIyQyxJQUEzQixDQUFnQ2pCLE1BQWhDO0FBQ0Q7QUFDRjs7QUFFRHFCLG9CQUFZN0IsT0FBWixDQUFvQnlCLElBQXBCLENBQXlCakIsTUFBekI7QUFDRCxPQTFDRDs7QUE0Q0FYLG1CQUFhNEIsSUFBYixDQUFrQkksV0FBbEI7O0FBRUEsVUFBSUMsY0FBY0ksTUFBbEIsRUFBMEI7QUFDeEJOLG1CQUFXRSxhQUFYO0FBQ0Q7QUFDRixLQTFERDs7QUE0REFGLGVBQVc5QyxPQUFYOztBQUVBLFdBQU9lLGFBQWF1QyxPQUFiLEVBQVA7QUFDRDtBQUNGLENBOUxNIiwiZmlsZSI6InVzZUNvbHVtbnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IGdldEZpcnN0RGVmaW5lZCwgZ2V0QnkgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZXhwb3J0IGNvbnN0IHVzZUNvbHVtbnMgPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHtcbiAgICBkZWJ1ZyxcbiAgICBjb2x1bW5zOiB1c2VyQ29sdW1ucyxcbiAgICBzdGF0ZTogW3sgZ3JvdXBCeSB9XVxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgeyBjb2x1bW5zLCBoZWFkZXJHcm91cHMsIGhlYWRlcnMgfSA9IHVzZU1lbW8oXG4gICAgKCkgPT4ge1xuICAgICAgaWYgKGRlYnVnKSBjb25zb2xlLmluZm8oXCJnZXRDb2x1bW5zXCIpO1xuXG4gICAgICAvLyBEZWNvcmF0ZSBBbGwgdGhlIGNvbHVtbnNcbiAgICAgIGxldCBjb2x1bW5UcmVlID0gZGVjb3JhdGVDb2x1bW5UcmVlKHVzZXJDb2x1bW5zKTtcblxuICAgICAgLy8gR2V0IHRoZSBmbGF0IGxpc3Qgb2YgYWxsIGNvbHVtbnNcbiAgICAgIGxldCBjb2x1bW5zID0gZmxhdHRlbkJ5KGNvbHVtblRyZWUsIFwiY29sdW1uc1wiKTtcblxuICAgICAgY29sdW1ucyA9IFtcbiAgICAgICAgLi4uZ3JvdXBCeS5tYXAoZyA9PiBjb2x1bW5zLmZpbmQoY29sID0+IGNvbC5pZCA9PT0gZykpLFxuICAgICAgICAuLi5jb2x1bW5zLmZpbHRlcihjb2wgPT4gIWdyb3VwQnkuaW5jbHVkZXMoY29sLmlkKSlcbiAgICAgIF07XG5cbiAgICAgIC8vIEdldCBoZWFkZXJHcm91cHNcbiAgICAgIGNvbnN0IGhlYWRlckdyb3VwcyA9IG1ha2VIZWFkZXJHcm91cHMoY29sdW1ucywgZmluZE1heERlcHRoKGNvbHVtblRyZWUpKTtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSBmbGF0dGVuQnkoaGVhZGVyR3JvdXBzLCBcImhlYWRlcnNcIik7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbHVtbnMsXG4gICAgICAgIGhlYWRlckdyb3VwcyxcbiAgICAgICAgaGVhZGVyc1xuICAgICAgfTtcbiAgICB9LFxuICAgIFtncm91cEJ5LCB1c2VyQ29sdW1uc11cbiAgKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnByb3BzLFxuICAgIGNvbHVtbnMsXG4gICAgaGVhZGVyR3JvdXBzLFxuICAgIGhlYWRlcnNcbiAgfTtcblxuICAvLyBGaW5kIHRoZSBkZXB0aCBvZiB0aGUgY29sdW1uc1xuICBmdW5jdGlvbiBmaW5kTWF4RGVwdGgoY29sdW1ucywgZGVwdGggPSAwKSB7XG4gICAgcmV0dXJuIGNvbHVtbnMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XG4gICAgICBpZiAoY3Vyci5jb2x1bW5zKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heChwcmV2LCBmaW5kTWF4RGVwdGgoY3Vyci5jb2x1bW5zLCBkZXB0aCArIDEpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZXB0aDtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlY29yYXRlQ29sdW1uKGNvbHVtbiwgcGFyZW50KSB7XG4gICAgLy8gRmlyc3QgY2hlY2sgZm9yIHN0cmluZyBhY2Nlc3NvclxuICAgIGxldCB7IGlkLCBhY2Nlc3NvciwgSGVhZGVyIH0gPSBjb2x1bW47XG5cbiAgICBpZiAodHlwZW9mIGFjY2Vzc29yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBpZCA9IGlkIHx8IGFjY2Vzc29yO1xuICAgICAgY29uc3QgYWNjZXNzb3JTdHJpbmcgPSBhY2Nlc3NvcjtcbiAgICAgIGFjY2Vzc29yID0gcm93ID0+IGdldEJ5KHJvdywgYWNjZXNzb3JTdHJpbmcpO1xuICAgIH1cblxuICAgIGlmICghaWQgJiYgdHlwZW9mIEhlYWRlciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgaWQgPSBIZWFkZXI7XG4gICAgfVxuXG4gICAgaWYgKCFpZCkge1xuICAgICAgLy8gQWNjZXNzb3IsIGJ1dCBubyBjb2x1bW4gaWQ/IFRoaXMgaXMgYmFkLlxuICAgICAgY29uc29sZS5lcnJvcihjb2x1bW4pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjb2x1bW4gaWQgaXMgcmVxdWlyZWQhXCIpO1xuICAgIH1cblxuICAgIGNvbHVtbiA9IHtcbiAgICAgIEhlYWRlcjogXCJcIixcbiAgICAgIENlbGw6IGNlbGwgPT4gY2VsbC52YWx1ZSxcbiAgICAgIHNob3c6IHRydWUsXG4gICAgICAuLi5jb2x1bW4sXG4gICAgICBpZCxcbiAgICAgIGFjY2Vzc29yLFxuICAgICAgcGFyZW50XG4gICAgfTtcblxuICAgIHJldHVybiBjb2x1bW47XG4gIH1cblxuICAvLyBCdWlsZCB0aGUgdmlzaWJsZSBjb2x1bW5zLCBoZWFkZXJzIGFuZCBmbGF0IGNvbHVtbiBsaXN0XG4gIGZ1bmN0aW9uIGRlY29yYXRlQ29sdW1uVHJlZShjb2x1bW5zLCBwYXJlbnQsIGRlcHRoID0gMCkge1xuICAgIHJldHVybiBjb2x1bW5zLm1hcChjb2x1bW4gPT4ge1xuICAgICAgY29sdW1uID0gZGVjb3JhdGVDb2x1bW4oY29sdW1uLCBwYXJlbnQpO1xuICAgICAgaWYgKGNvbHVtbi5jb2x1bW5zKSB7XG4gICAgICAgIGNvbHVtbi5jb2x1bW5zID0gZGVjb3JhdGVDb2x1bW5UcmVlKGNvbHVtbi5jb2x1bW5zLCBjb2x1bW4sIGRlcHRoICsgMSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29sdW1uO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZmxhdHRlbkJ5KGNvbHVtbnMsIGNoaWxkS2V5KSB7XG4gICAgY29uc3QgZmxhdENvbHVtbnMgPSBbXTtcblxuICAgIGNvbnN0IHJlY3Vyc2UgPSBjb2x1bW5zID0+IHtcbiAgICAgIGNvbHVtbnMuZm9yRWFjaChkID0+IHtcbiAgICAgICAgaWYgKCFkW2NoaWxkS2V5XSkge1xuICAgICAgICAgIGZsYXRDb2x1bW5zLnB1c2goZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVjdXJzZShkW2NoaWxkS2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZWN1cnNlKGNvbHVtbnMpO1xuXG4gICAgcmV0dXJuIGZsYXRDb2x1bW5zO1xuICB9XG5cbiAgLy8gQnVpbGQgdGhlIGhlYWRlciBncm91cHMgZnJvbSB0aGUgYm90dG9tIHVwXG4gIGZ1bmN0aW9uIG1ha2VIZWFkZXJHcm91cHMoY29sdW1ucywgbWF4RGVwdGgpIHtcbiAgICBjb25zdCBoZWFkZXJHcm91cHMgPSBbXTtcblxuICAgIGNvbnN0IHJlbW92ZUNoaWxkQ29sdW1ucyA9IGNvbHVtbiA9PiB7XG4gICAgICBkZWxldGUgY29sdW1uLmNvbHVtbnM7XG4gICAgICBpZiAoY29sdW1uLnBhcmVudCkge1xuICAgICAgICByZW1vdmVDaGlsZENvbHVtbnMoY29sdW1uLnBhcmVudCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb2x1bW5zLmZvckVhY2gocmVtb3ZlQ2hpbGRDb2x1bW5zKTtcblxuICAgIGNvbnN0IGJ1aWxkR3JvdXAgPSAoY29sdW1ucywgZGVwdGggPSAwKSA9PiB7XG4gICAgICBjb25zdCBoZWFkZXJHcm91cCA9IHtcbiAgICAgICAgaGVhZGVyczogW11cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHBhcmVudENvbHVtbnMgPSBbXTtcblxuICAgICAgY29uc3QgaGFzUGFyZW50cyA9IGNvbHVtbnMuc29tZShjb2wgPT4gY29sLnBhcmVudCk7XG5cbiAgICAgIGNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgICBjb25zdCBpc0ZpcnN0ID0gIXBhcmVudENvbHVtbnMubGVuZ3RoO1xuICAgICAgICBsZXQgbGF0ZXN0UGFyZW50Q29sdW1uID0gWy4uLnBhcmVudENvbHVtbnNdLnJldmVyc2UoKVswXTtcblxuICAgICAgICAvLyBJZiB0aGUgY29sdW1uIGhhcyBhIHBhcmVudCwgYWRkIGl0IGlmIG5lY2Vzc2FyeVxuICAgICAgICBpZiAoY29sdW1uLnBhcmVudCkge1xuICAgICAgICAgIGlmIChpc0ZpcnN0IHx8IGxhdGVzdFBhcmVudENvbHVtbi5vcmlnaW5hbElEICE9PSBjb2x1bW4ucGFyZW50LmlkKSB7XG4gICAgICAgICAgICBwYXJlbnRDb2x1bW5zLnB1c2goe1xuICAgICAgICAgICAgICAuLi5jb2x1bW4ucGFyZW50LFxuICAgICAgICAgICAgICBvcmlnaW5hbElEOiBjb2x1bW4ucGFyZW50LmlkLFxuICAgICAgICAgICAgICBpZDogW2NvbHVtbi5wYXJlbnQuaWQsIHBhcmVudENvbHVtbnMubGVuZ3RoXS5qb2luKFwiX1wiKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGhhc1BhcmVudHMpIHtcbiAgICAgICAgICAvLyBJZiBvdGhlciBjb2x1bW5zIGhhdmUgcGFyZW50cywgYWRkIGEgcGxhY2UgaG9sZGVyIGlmIG5lY2Vzc2FyeVxuICAgICAgICAgIGNvbnN0IHBsYWNlaG9sZGVyQ29sdW1uID0gZGVjb3JhdGVDb2x1bW4oe1xuICAgICAgICAgICAgb3JpZ2luYWxJRDogW2NvbHVtbi5pZCwgXCJwbGFjZWhvbGRlclwiLCBtYXhEZXB0aCAtIGRlcHRoXS5qb2luKFwiX1wiKSxcbiAgICAgICAgICAgIGlkOiBbXG4gICAgICAgICAgICAgIGNvbHVtbi5pZCxcbiAgICAgICAgICAgICAgXCJwbGFjZWhvbGRlclwiLFxuICAgICAgICAgICAgICBtYXhEZXB0aCAtIGRlcHRoLFxuICAgICAgICAgICAgICBwYXJlbnRDb2x1bW5zLmxlbmd0aFxuICAgICAgICAgICAgXS5qb2luKFwiX1wiKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGlzRmlyc3QgfHxcbiAgICAgICAgICAgIGxhdGVzdFBhcmVudENvbHVtbi5vcmlnaW5hbElEICE9PSBwbGFjZWhvbGRlckNvbHVtbi5vcmlnaW5hbElEXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwYXJlbnRDb2x1bW5zLnB1c2gocGxhY2Vob2xkZXJDb2x1bW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEVzdGFibGlzaCB0aGUgbmV3IGNvbHVtbnNbXSByZWxhdGlvbnNoaXAgb24gdGhlIHBhcmVudFxuICAgICAgICBpZiAoY29sdW1uLnBhcmVudCB8fCBoYXNQYXJlbnRzKSB7XG4gICAgICAgICAgbGF0ZXN0UGFyZW50Q29sdW1uID0gWy4uLnBhcmVudENvbHVtbnNdLnJldmVyc2UoKVswXTtcbiAgICAgICAgICBsYXRlc3RQYXJlbnRDb2x1bW4uY29sdW1ucyA9IGxhdGVzdFBhcmVudENvbHVtbi5jb2x1bW5zIHx8IFtdO1xuICAgICAgICAgIGlmICghbGF0ZXN0UGFyZW50Q29sdW1uLmNvbHVtbnMuaW5jbHVkZXMoY29sdW1uKSkge1xuICAgICAgICAgICAgbGF0ZXN0UGFyZW50Q29sdW1uLmNvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGhlYWRlckdyb3VwLmhlYWRlcnMucHVzaChjb2x1bW4pO1xuICAgICAgfSk7XG5cbiAgICAgIGhlYWRlckdyb3Vwcy5wdXNoKGhlYWRlckdyb3VwKTtcblxuICAgICAgaWYgKHBhcmVudENvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgIGJ1aWxkR3JvdXAocGFyZW50Q29sdW1ucyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGJ1aWxkR3JvdXAoY29sdW1ucyk7XG5cbiAgICByZXR1cm4gaGVhZGVyR3JvdXBzLnJldmVyc2UoKTtcbiAgfVxufTtcbiJdfQ==