UNPKG

tc-ui-toolkit

Version:

React components used to develop tools for the desktop app translationCore

207 lines (164 loc) 21.3 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _memoizeOne = _interopRequireDefault(require("memoize-one")); var _lodash = _interopRequireDefault(require("lodash")); var _Menu = _interopRequireDefault(require("../Menu")); var _MenuFilter = _interopRequireDefault(require("./MenuFilter")); var _MenuHeader = _interopRequireDefault(require("./MenuHeader")); function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } /** * Renders filtered menu. * This receives the same properties as the {@link Menu} in addition to some filtering options. * @param {object[]} filters - an array of filters * @param {string} title - the menu title * */ var FilteredMenu = /*#__PURE__*/function (_React$Component) { (0, _inherits2["default"])(FilteredMenu, _React$Component); var _super = _createSuper(FilteredMenu); function FilteredMenu() { var _this; (0, _classCallCheck2["default"])(this, FilteredMenu); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", { filtersOpen: false, selectedFilters: [] }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleOpenFilters", function () { _this.setState(function (state) { return { filtersOpen: !state.filtersOpen }; }); }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleToggleFilter", function (filter) { var selectedFilters = _this.state.selectedFilters; var currentIndex = selectedFilters.findIndex(function (selected) { return selected.id === filter.id; }); var newChecked = (0, _toConsumableArray2["default"])(selectedFilters); if (currentIndex === -1) { newChecked.push(filter); } else { newChecked.splice(currentIndex, 1); } _this.setState({ selectedFilters: newChecked }); // eslint-disable-next-line no-unused-expressions _this.props.onFiltersChanged && _this.props.onFiltersChanged(newChecked); }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "normalizeFilters", (0, _memoizeOne["default"])(function (filters) { var normalized = []; for (var i = 0, len = filters.length; i < len; i++) { var filter = Object.assign({}, { value: true, disables: [], id: filters[i].key }, filters[i]); normalized.push(filter); } return normalized; })); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "filter", (0, _memoizeOne["default"])(function (entries, filters) { var groups = _lodash["default"].cloneDeep(entries); // filter children groups.map(function (group) { var _filters = filters.filter(function (filter) { return !filter.nonFilter; }); // skip over any entries that are not true filters (such as config options) group.children = group.children.filter(function (entry) { for (var i = 0, len = _filters.length; i < len; i++) { if (Boolean(entry[_filters[i].key]) === _filters[i].value) { return true; } } return _filters.length === 0; }); return group; }); // filter empty groups return groups.filter(function (entry) { return entry.children.length > 0; }); })); return _this; } (0, _createClass2["default"])(FilteredMenu, [{ key: "render", value: function render() { var _this$props = this.props, filters = _this$props.filters, active = _this$props.active, entries = _this$props.entries, height = _this$props.height, title = _this$props.title, onItemClick = _this$props.onItemClick, width = _this$props.width, statusIcons = _this$props.statusIcons, emptyNotice = _this$props.emptyNotice, targetLanguageFont = _this$props.targetLanguageFont; var _this$state = this.state, selectedFilters = _this$state.selectedFilters, filtersOpen = _this$state.filtersOpen; var normalizedFilters = this.normalizeFilters(filters); var filteredEntries = this.filter(entries, selectedFilters); // fallback to filter icons var menuStatusIcons = statusIcons !== undefined ? statusIcons : filters; return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_Menu["default"], { header: filters.length ? /*#__PURE__*/_react["default"].createElement(_MenuFilter["default"], { onToggle: this.handleToggleFilter, onOpen: this.handleOpenFilters, open: filtersOpen, title: title, filters: normalizedFilters, selected: selectedFilters }) : /*#__PURE__*/_react["default"].createElement(_MenuHeader["default"], { title: title }), width: width, emptyNotice: emptyNotice, statusIcons: menuStatusIcons, entries: filteredEntries, active: active, height: height, onItemClick: onItemClick, targetLanguageFont: targetLanguageFont })); } }]); return FilteredMenu; }(_react["default"].Component); FilteredMenu.propTypes = { filters: _propTypes["default"].array.isRequired, title: _propTypes["default"].string.isRequired, entries: _propTypes["default"].arrayOf(_propTypes["default"].object), active: _propTypes["default"].object, height: _propTypes["default"].any, onItemClick: _propTypes["default"].func, width: _propTypes["default"].number, emptyNotice: _propTypes["default"].string, targetLanguageFont: _propTypes["default"].string, statusIcons: _propTypes["default"].arrayOf(_propTypes["default"].object), onFiltersChanged: _propTypes["default"].func // optional callback for filter change events }; FilteredMenu.defaultProps = { emptyNotice: 'No results found' }; var _default = /*#__PURE__*/_react["default"].memo(FilteredMenu); exports["default"] = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9Hcm91cGVkTWVudS9GaWx0ZXJlZE1lbnUvaW5kZXguanMiXSwibmFtZXMiOlsiRmlsdGVyZWRNZW51IiwiZmlsdGVyc09wZW4iLCJzZWxlY3RlZEZpbHRlcnMiLCJzZXRTdGF0ZSIsInN0YXRlIiwiZmlsdGVyIiwiY3VycmVudEluZGV4IiwiZmluZEluZGV4Iiwic2VsZWN0ZWQiLCJpZCIsIm5ld0NoZWNrZWQiLCJwdXNoIiwic3BsaWNlIiwicHJvcHMiLCJvbkZpbHRlcnNDaGFuZ2VkIiwiZmlsdGVycyIsIm5vcm1hbGl6ZWQiLCJpIiwibGVuIiwibGVuZ3RoIiwiT2JqZWN0IiwiYXNzaWduIiwidmFsdWUiLCJkaXNhYmxlcyIsImtleSIsImVudHJpZXMiLCJncm91cHMiLCJfIiwiY2xvbmVEZWVwIiwibWFwIiwiZ3JvdXAiLCJfZmlsdGVycyIsIm5vbkZpbHRlciIsImNoaWxkcmVuIiwiZW50cnkiLCJCb29sZWFuIiwiYWN0aXZlIiwiaGVpZ2h0IiwidGl0bGUiLCJvbkl0ZW1DbGljayIsIndpZHRoIiwic3RhdHVzSWNvbnMiLCJlbXB0eU5vdGljZSIsInRhcmdldExhbmd1YWdlRm9udCIsIm5vcm1hbGl6ZWRGaWx0ZXJzIiwibm9ybWFsaXplRmlsdGVycyIsImZpbHRlcmVkRW50cmllcyIsIm1lbnVTdGF0dXNJY29ucyIsInVuZGVmaW5lZCIsImhhbmRsZVRvZ2dsZUZpbHRlciIsImhhbmRsZU9wZW5GaWx0ZXJzIiwiUmVhY3QiLCJDb21wb25lbnQiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJhcnJheSIsImlzUmVxdWlyZWQiLCJzdHJpbmciLCJhcnJheU9mIiwib2JqZWN0IiwiYW55IiwiZnVuYyIsIm51bWJlciIsImRlZmF1bHRQcm9wcyIsIm1lbW8iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0FBRUE7Ozs7Ozs7SUFPTUEsWTs7Ozs7Ozs7Ozs7Ozs7OzhGQUNJO0FBQ05DLE1BQUFBLFdBQVcsRUFBRSxLQURQO0FBRU5DLE1BQUFBLGVBQWUsRUFBRTtBQUZYLEs7MEdBUVksWUFBTTtBQUN4QixZQUFLQyxRQUFMLENBQWMsVUFBQUMsS0FBSztBQUFBLGVBQUs7QUFBRUgsVUFBQUEsV0FBVyxFQUFFLENBQUNHLEtBQUssQ0FBQ0g7QUFBdEIsU0FBTDtBQUFBLE9BQW5CO0FBQ0QsSzsyR0FNb0IsVUFBQUksTUFBTSxFQUFJO0FBQUEsVUFDckJILGVBRHFCLEdBQ0QsTUFBS0UsS0FESixDQUNyQkYsZUFEcUI7QUFFN0IsVUFBTUksWUFBWSxHQUFHSixlQUFlLENBQUNLLFNBQWhCLENBQTBCLFVBQUFDLFFBQVE7QUFBQSxlQUFLQSxRQUFRLENBQUNDLEVBQVQsS0FBZ0JKLE1BQU0sQ0FBQ0ksRUFBNUI7QUFBQSxPQUFsQyxDQUFyQjtBQUNBLFVBQU1DLFVBQVUsdUNBQU9SLGVBQVAsQ0FBaEI7O0FBRUEsVUFBSUksWUFBWSxLQUFLLENBQUMsQ0FBdEIsRUFBeUI7QUFDdkJJLFFBQUFBLFVBQVUsQ0FBQ0MsSUFBWCxDQUFnQk4sTUFBaEI7QUFDRCxPQUZELE1BRU87QUFDTEssUUFBQUEsVUFBVSxDQUFDRSxNQUFYLENBQWtCTixZQUFsQixFQUFnQyxDQUFoQztBQUNEOztBQUVELFlBQUtILFFBQUwsQ0FBYztBQUFFRCxRQUFBQSxlQUFlLEVBQUVRO0FBQW5CLE9BQWQsRUFYNkIsQ0FZN0I7OztBQUNBLFlBQUtHLEtBQUwsQ0FBV0MsZ0JBQVgsSUFBK0IsTUFBS0QsS0FBTCxDQUFXQyxnQkFBWCxDQUE0QkosVUFBNUIsQ0FBL0I7QUFDRCxLO3lHQVFrQiw0QkFBUSxVQUFBSyxPQUFPLEVBQUk7QUFDcEMsVUFBTUMsVUFBVSxHQUFHLEVBQW5COztBQUVBLFdBQUssSUFBSUMsQ0FBQyxHQUFHLENBQVIsRUFBV0MsR0FBRyxHQUFHSCxPQUFPLENBQUNJLE1BQTlCLEVBQXNDRixDQUFDLEdBQUdDLEdBQTFDLEVBQStDRCxDQUFDLEVBQWhELEVBQW9EO0FBQ2xELFlBQU1aLE1BQU0sR0FBR2UsTUFBTSxDQUFDQyxNQUFQLENBQ2IsRUFEYSxFQUViO0FBQ0VDLFVBQUFBLEtBQUssRUFBRSxJQURUO0FBQ2VDLFVBQUFBLFFBQVEsRUFBRSxFQUR6QjtBQUM2QmQsVUFBQUEsRUFBRSxFQUFFTSxPQUFPLENBQUNFLENBQUQsQ0FBUCxDQUFXTztBQUQ1QyxTQUZhLEVBS2JULE9BQU8sQ0FBQ0UsQ0FBRCxDQUxNLENBQWY7QUFPQUQsUUFBQUEsVUFBVSxDQUFDTCxJQUFYLENBQWdCTixNQUFoQjtBQUNEOztBQUNELGFBQU9XLFVBQVA7QUFDRCxLQWRrQixDOytGQXdCViw0QkFBUSxVQUFDUyxPQUFELEVBQVVWLE9BQVYsRUFBc0I7QUFDckMsVUFBTVcsTUFBTSxHQUFHQyxtQkFBRUMsU0FBRixDQUFZSCxPQUFaLENBQWYsQ0FEcUMsQ0FHckM7OztBQUNBQyxNQUFBQSxNQUFNLENBQUNHLEdBQVAsQ0FBVyxVQUFBQyxLQUFLLEVBQUk7QUFDbEIsWUFBTUMsUUFBUSxHQUFHaEIsT0FBTyxDQUFDVixNQUFSLENBQWUsVUFBQUEsTUFBTTtBQUFBLGlCQUFLLENBQUNBLE1BQU0sQ0FBQzJCLFNBQWI7QUFBQSxTQUFyQixDQUFqQixDQURrQixDQUM4Qzs7O0FBRWhFRixRQUFBQSxLQUFLLENBQUNHLFFBQU4sR0FBaUJILEtBQUssQ0FBQ0csUUFBTixDQUFlNUIsTUFBZixDQUFzQixVQUFBNkIsS0FBSyxFQUFJO0FBQzlDLGVBQUssSUFBSWpCLENBQUMsR0FBRyxDQUFSLEVBQVdDLEdBQUcsR0FBR2EsUUFBUSxDQUFDWixNQUEvQixFQUF1Q0YsQ0FBQyxHQUFHQyxHQUEzQyxFQUFnREQsQ0FBQyxFQUFqRCxFQUFxRDtBQUNuRCxnQkFBSWtCLE9BQU8sQ0FBQ0QsS0FBSyxDQUFDSCxRQUFRLENBQUNkLENBQUQsQ0FBUixDQUFZTyxHQUFiLENBQU4sQ0FBUCxLQUFvQ08sUUFBUSxDQUFDZCxDQUFELENBQVIsQ0FBWUssS0FBcEQsRUFBMkQ7QUFDekQscUJBQU8sSUFBUDtBQUNEO0FBQ0Y7O0FBQ0QsaUJBQU9TLFFBQVEsQ0FBQ1osTUFBVCxLQUFvQixDQUEzQjtBQUNELFNBUGdCLENBQWpCO0FBUUEsZUFBT1csS0FBUDtBQUNELE9BWkQsRUFKcUMsQ0FrQnJDOztBQUNBLGFBQU9KLE1BQU0sQ0FBQ3JCLE1BQVAsQ0FBYyxVQUFBNkIsS0FBSztBQUFBLGVBQUlBLEtBQUssQ0FBQ0QsUUFBTixDQUFlZCxNQUFmLEdBQXdCLENBQTVCO0FBQUEsT0FBbkIsQ0FBUDtBQUNELEtBcEJRLEM7Ozs7Ozs2QkFzQkE7QUFBQSx3QkFZSCxLQUFLTixLQVpGO0FBQUEsVUFFTEUsT0FGSyxlQUVMQSxPQUZLO0FBQUEsVUFHTHFCLE1BSEssZUFHTEEsTUFISztBQUFBLFVBSUxYLE9BSkssZUFJTEEsT0FKSztBQUFBLFVBS0xZLE1BTEssZUFLTEEsTUFMSztBQUFBLFVBTUxDLEtBTkssZUFNTEEsS0FOSztBQUFBLFVBT0xDLFdBUEssZUFPTEEsV0FQSztBQUFBLFVBUUxDLEtBUkssZUFRTEEsS0FSSztBQUFBLFVBU0xDLFdBVEssZUFTTEEsV0FUSztBQUFBLFVBVUxDLFdBVkssZUFVTEEsV0FWSztBQUFBLFVBV0xDLGtCQVhLLGVBV0xBLGtCQVhLO0FBQUEsd0JBYWtDLEtBQUt2QyxLQWJ2QztBQUFBLFVBYUNGLGVBYkQsZUFhQ0EsZUFiRDtBQUFBLFVBYWtCRCxXQWJsQixlQWFrQkEsV0FibEI7QUFjUCxVQUFNMkMsaUJBQWlCLEdBQUcsS0FBS0MsZ0JBQUwsQ0FBc0I5QixPQUF0QixDQUExQjtBQUNBLFVBQU0rQixlQUFlLEdBQUcsS0FBS3pDLE1BQUwsQ0FBWW9CLE9BQVosRUFBcUJ2QixlQUFyQixDQUF4QixDQWZPLENBaUJQOztBQUNBLFVBQU02QyxlQUFlLEdBQUdOLFdBQVcsS0FBS08sU0FBaEIsR0FBNEJQLFdBQTVCLEdBQTBDMUIsT0FBbEU7QUFFQSwwQkFDRSxnQ0FBQyxpQkFBRCxDQUFPLFFBQVAscUJBQ0UsZ0NBQUMsZ0JBQUQ7QUFDRSxRQUFBLE1BQU0sRUFDSkEsT0FBTyxDQUFDSSxNQUFSLGdCQUNFLGdDQUFDLHNCQUFEO0FBQ0UsVUFBQSxRQUFRLEVBQUUsS0FBSzhCLGtCQURqQjtBQUVFLFVBQUEsTUFBTSxFQUFFLEtBQUtDLGlCQUZmO0FBR0UsVUFBQSxJQUFJLEVBQUVqRCxXQUhSO0FBSUUsVUFBQSxLQUFLLEVBQUVxQyxLQUpUO0FBS0UsVUFBQSxPQUFPLEVBQUVNLGlCQUxYO0FBTUUsVUFBQSxRQUFRLEVBQUUxQztBQU5aLFVBREYsZ0JBVUUsZ0NBQUMsc0JBQUQ7QUFBWSxVQUFBLEtBQUssRUFBRW9DO0FBQW5CLFVBWk47QUFlRSxRQUFBLEtBQUssRUFBRUUsS0FmVDtBQWdCRSxRQUFBLFdBQVcsRUFBRUUsV0FoQmY7QUFpQkUsUUFBQSxXQUFXLEVBQUVLLGVBakJmO0FBa0JFLFFBQUEsT0FBTyxFQUFFRCxlQWxCWDtBQW1CRSxRQUFBLE1BQU0sRUFBRVYsTUFuQlY7QUFvQkUsUUFBQSxNQUFNLEVBQUVDLE1BcEJWO0FBcUJFLFFBQUEsV0FBVyxFQUFFRSxXQXJCZjtBQXNCRSxRQUFBLGtCQUFrQixFQUFFSTtBQXRCdEIsUUFERixDQURGO0FBNEJEOzs7RUFySXdCUSxrQkFBTUMsUzs7QUF3SWpDcEQsWUFBWSxDQUFDcUQsU0FBYixHQUF5QjtBQUN2QnRDLEVBQUFBLE9BQU8sRUFBRXVDLHNCQUFVQyxLQUFWLENBQWdCQyxVQURGO0FBRXZCbEIsRUFBQUEsS0FBSyxFQUFFZ0Isc0JBQVVHLE1BQVYsQ0FBaUJELFVBRkQ7QUFHdkIvQixFQUFBQSxPQUFPLEVBQUU2QixzQkFBVUksT0FBVixDQUFrQkosc0JBQVVLLE1BQTVCLENBSGM7QUFJdkJ2QixFQUFBQSxNQUFNLEVBQUVrQixzQkFBVUssTUFKSztBQUt2QnRCLEVBQUFBLE1BQU0sRUFBRWlCLHNCQUFVTSxHQUxLO0FBTXZCckIsRUFBQUEsV0FBVyxFQUFFZSxzQkFBVU8sSUFOQTtBQU92QnJCLEVBQUFBLEtBQUssRUFBRWMsc0JBQVVRLE1BUE07QUFRdkJwQixFQUFBQSxXQUFXLEVBQUVZLHNCQUFVRyxNQVJBO0FBU3ZCZCxFQUFBQSxrQkFBa0IsRUFBRVcsc0JBQVVHLE1BVFA7QUFVdkJoQixFQUFBQSxXQUFXLEVBQUVhLHNCQUFVSSxPQUFWLENBQWtCSixzQkFBVUssTUFBNUIsQ0FWVTtBQVd2QjdDLEVBQUFBLGdCQUFnQixFQUFFd0Msc0JBQVVPLElBWEwsQ0FXVzs7QUFYWCxDQUF6QjtBQWNBN0QsWUFBWSxDQUFDK0QsWUFBYixHQUE0QjtBQUFFckIsRUFBQUEsV0FBVyxFQUFFO0FBQWYsQ0FBNUI7OzRCQUVlUyxrQkFBTWEsSUFBTixDQUFXaEUsWUFBWCxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdtZW1vaXplLW9uZSc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IE1lbnUgZnJvbSAnLi4vTWVudSc7XG5pbXBvcnQgTWVudUZpbHRlciBmcm9tICcuL01lbnVGaWx0ZXInO1xuaW1wb3J0IE1lbnVIZWFkZXIgZnJvbSAnLi9NZW51SGVhZGVyJztcblxuLyoqXG4gKiBSZW5kZXJzIGZpbHRlcmVkIG1lbnUuXG4gKiBUaGlzIHJlY2VpdmVzIHRoZSBzYW1lIHByb3BlcnRpZXMgYXMgdGhlIHtAbGluayBNZW51fSBpbiBhZGRpdGlvbiB0byBzb21lIGZpbHRlcmluZyBvcHRpb25zLlxuICogQHBhcmFtIHtvYmplY3RbXX0gZmlsdGVycyAtIGFuIGFycmF5IG9mIGZpbHRlcnNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSAtIHRoZSBtZW51IHRpdGxlXG4gKlxuICovXG5jbGFzcyBGaWx0ZXJlZE1lbnUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0ZSA9IHtcbiAgICBmaWx0ZXJzT3BlbjogZmFsc2UsXG4gICAgc2VsZWN0ZWRGaWx0ZXJzOiBbXSxcbiAgfTtcblxuICAvKipcbiAgICogSGFuZGxlcyBvcGVuaW5nIHRoZSBmaWx0ZXIgbWVudVxuICAgKi9cbiAgaGFuZGxlT3BlbkZpbHRlcnMgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZShzdGF0ZSA9PiAoeyBmaWx0ZXJzT3BlbjogIXN0YXRlLmZpbHRlcnNPcGVuIH0pKTtcbiAgfTtcblxuICAvKipcbiAgICogSGFuZGxlcyB0b2dnbGluZyBhIGZpbHRlclxuICAgKiBAcGFyYW0ge29iamVjdH0gZmlsdGVyIC0gdGhlIGZpbHRlciBiZWluZyB0b2dnbGVkXG4gICAqL1xuICBoYW5kbGVUb2dnbGVGaWx0ZXIgPSBmaWx0ZXIgPT4ge1xuICAgIGNvbnN0IHsgc2VsZWN0ZWRGaWx0ZXJzIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHNlbGVjdGVkRmlsdGVycy5maW5kSW5kZXgoc2VsZWN0ZWQgPT4gKHNlbGVjdGVkLmlkID09PSBmaWx0ZXIuaWQpKTtcbiAgICBjb25zdCBuZXdDaGVja2VkID0gWy4uLnNlbGVjdGVkRmlsdGVyc107XG5cbiAgICBpZiAoY3VycmVudEluZGV4ID09PSAtMSkge1xuICAgICAgbmV3Q2hlY2tlZC5wdXNoKGZpbHRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0NoZWNrZWQuc3BsaWNlKGN1cnJlbnRJbmRleCwgMSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7IHNlbGVjdGVkRmlsdGVyczogbmV3Q2hlY2tlZCB9KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG4gICAgdGhpcy5wcm9wcy5vbkZpbHRlcnNDaGFuZ2VkICYmIHRoaXMucHJvcHMub25GaWx0ZXJzQ2hhbmdlZChuZXdDaGVja2VkKTtcbiAgfTtcblxuICAvKipcbiAgICogQXBwbGllcyBkZWZhdWx0IGtleSB2YWx1ZXMgdG8gdGhlIGZpbHRlcnMuXG4gICAqIFRoaXMgcHJlcGFyZXMgZmlsdGVycyBmb3IgdXNlIGluIHRoZSBmaWx0ZXJlZCBtZW51LlxuICAgKiBAcGFyYW0ge1tdfSBmaWx0ZXJzIC0gYW4gYXJyYXkgb2YgZmlsdGVyIG9iamVjdHNcbiAgICogQHJldHVybnMge1tdfSAtIGFuIGFycmF5IG9mIG5vcm1hbGl6ZWQgZmlsdGVyIG9iamVjdHMuXG4gICAqL1xuICBub3JtYWxpemVGaWx0ZXJzID0gbWVtb2l6ZShmaWx0ZXJzID0+IHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZmlsdGVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgZmlsdGVyID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICB2YWx1ZTogdHJ1ZSwgZGlzYWJsZXM6IFtdLCBpZDogZmlsdGVyc1tpXS5rZXksXG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlcnNbaV0sXG4gICAgICApO1xuICAgICAgbm9ybWFsaXplZC5wdXNoKGZpbHRlcik7XG4gICAgfVxuICAgIHJldHVybiBub3JtYWxpemVkO1xuICB9KTtcblxuICAvKipcbiAgICogRXhlY3V0ZXMgYWxsIG9mIHRoZSBlbmFibGVkIGZpbHRlcnMuXG4gICAqIEZpbHRlcmluZyBpcyBwZXJmb3JtZWQgYnkgc2hhbGxvdyBtYXRjaGluZyBhZ2FpbnN0IHRoZSBmaWx0ZXIgYHZhbHVlYC5cbiAgICogRmlsdGVycyBhcmUgZXZhbHVhdGVkIGFzIFwib3JcIlxuICAgKiBAcHJvcGVydHkgZW50cmllcyAtIHRoZSBtZW51IGVudHJpZXNcbiAgICogQHByb3BlcnR5IHtzdHJpbmdbXX0gZmlsdGVycyAtIHRoZSBmaWx0ZXJlcyB0aGF0IHdpbGwgYmUgYXBwbGllZFxuICAgKiBAcmV0dXJucyB7W119IC0gdGhlIGZpbHRlcmVkIGVudHJpZXNcbiAgICovXG4gIGZpbHRlciA9IG1lbW9pemUoKGVudHJpZXMsIGZpbHRlcnMpID0+IHtcbiAgICBjb25zdCBncm91cHMgPSBfLmNsb25lRGVlcChlbnRyaWVzKTtcblxuICAgIC8vIGZpbHRlciBjaGlsZHJlblxuICAgIGdyb3Vwcy5tYXAoZ3JvdXAgPT4ge1xuICAgICAgY29uc3QgX2ZpbHRlcnMgPSBmaWx0ZXJzLmZpbHRlcihmaWx0ZXIgPT4gKCFmaWx0ZXIubm9uRmlsdGVyKSk7IC8vIHNraXAgb3ZlciBhbnkgZW50cmllcyB0aGF0IGFyZSBub3QgdHJ1ZSBmaWx0ZXJzIChzdWNoIGFzIGNvbmZpZyBvcHRpb25zKVxuXG4gICAgICBncm91cC5jaGlsZHJlbiA9IGdyb3VwLmNoaWxkcmVuLmZpbHRlcihlbnRyeSA9PiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBfZmlsdGVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGlmIChCb29sZWFuKGVudHJ5W19maWx0ZXJzW2ldLmtleV0pID09PSBfZmlsdGVyc1tpXS52YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfZmlsdGVycy5sZW5ndGggPT09IDA7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBncm91cDtcbiAgICB9KTtcblxuICAgIC8vIGZpbHRlciBlbXB0eSBncm91cHNcbiAgICByZXR1cm4gZ3JvdXBzLmZpbHRlcihlbnRyeSA9PiBlbnRyeS5jaGlsZHJlbi5sZW5ndGggPiAwKTtcbiAgfSk7XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGZpbHRlcnMsXG4gICAgICBhY3RpdmUsXG4gICAgICBlbnRyaWVzLFxuICAgICAgaGVpZ2h0LFxuICAgICAgdGl0bGUsXG4gICAgICBvbkl0ZW1DbGljayxcbiAgICAgIHdpZHRoLFxuICAgICAgc3RhdHVzSWNvbnMsXG4gICAgICBlbXB0eU5vdGljZSxcbiAgICAgIHRhcmdldExhbmd1YWdlRm9udCxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHNlbGVjdGVkRmlsdGVycywgZmlsdGVyc09wZW4gfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qgbm9ybWFsaXplZEZpbHRlcnMgPSB0aGlzLm5vcm1hbGl6ZUZpbHRlcnMoZmlsdGVycyk7XG4gICAgY29uc3QgZmlsdGVyZWRFbnRyaWVzID0gdGhpcy5maWx0ZXIoZW50cmllcywgc2VsZWN0ZWRGaWx0ZXJzKTtcblxuICAgIC8vIGZhbGxiYWNrIHRvIGZpbHRlciBpY29uc1xuICAgIGNvbnN0IG1lbnVTdGF0dXNJY29ucyA9IHN0YXR1c0ljb25zICE9PSB1bmRlZmluZWQgPyBzdGF0dXNJY29ucyA6IGZpbHRlcnM7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICA8TWVudVxuICAgICAgICAgIGhlYWRlcj17XG4gICAgICAgICAgICBmaWx0ZXJzLmxlbmd0aCA/IChcbiAgICAgICAgICAgICAgPE1lbnVGaWx0ZXJcbiAgICAgICAgICAgICAgICBvblRvZ2dsZT17dGhpcy5oYW5kbGVUb2dnbGVGaWx0ZXJ9XG4gICAgICAgICAgICAgICAgb25PcGVuPXt0aGlzLmhhbmRsZU9wZW5GaWx0ZXJzfVxuICAgICAgICAgICAgICAgIG9wZW49e2ZpbHRlcnNPcGVufVxuICAgICAgICAgICAgICAgIHRpdGxlPXt0aXRsZX1cbiAgICAgICAgICAgICAgICBmaWx0ZXJzPXtub3JtYWxpemVkRmlsdGVyc31cbiAgICAgICAgICAgICAgICBzZWxlY3RlZD17c2VsZWN0ZWRGaWx0ZXJzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPE1lbnVIZWFkZXIgdGl0bGU9e3RpdGxlfSAvPlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgICB3aWR0aD17d2lkdGh9XG4gICAgICAgICAgZW1wdHlOb3RpY2U9e2VtcHR5Tm90aWNlfVxuICAgICAgICAgIHN0YXR1c0ljb25zPXttZW51U3RhdHVzSWNvbnN9XG4gICAgICAgICAgZW50cmllcz17ZmlsdGVyZWRFbnRyaWVzfVxuICAgICAgICAgIGFjdGl2ZT17YWN0aXZlfVxuICAgICAgICAgIGhlaWdodD17aGVpZ2h0fVxuICAgICAgICAgIG9uSXRlbUNsaWNrPXtvbkl0ZW1DbGlja31cbiAgICAgICAgICB0YXJnZXRMYW5ndWFnZUZvbnQ9e3RhcmdldExhbmd1YWdlRm9udH1cbiAgICAgICAgLz5cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxufVxuXG5GaWx0ZXJlZE1lbnUucHJvcFR5cGVzID0ge1xuICBmaWx0ZXJzOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgdGl0bGU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgZW50cmllczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9iamVjdCksXG4gIGFjdGl2ZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgaGVpZ2h0OiBQcm9wVHlwZXMuYW55LFxuICBvbkl0ZW1DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIHdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLFxuICBlbXB0eU5vdGljZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgdGFyZ2V0TGFuZ3VhZ2VGb250OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzdGF0dXNJY29uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9iamVjdCksXG4gIG9uRmlsdGVyc0NoYW5nZWQ6IFByb3BUeXBlcy5mdW5jLCAvLyBvcHRpb25hbCBjYWxsYmFjayBmb3IgZmlsdGVyIGNoYW5nZSBldmVudHNcbn07XG5cbkZpbHRlcmVkTWVudS5kZWZhdWx0UHJvcHMgPSB7IGVtcHR5Tm90aWNlOiAnTm8gcmVzdWx0cyBmb3VuZCcgfTtcblxuZXhwb3J0IGRlZmF1bHQgUmVhY3QubWVtbyhGaWx0ZXJlZE1lbnUpO1xuIl19