adui
Version:
<div> <img src="https://wxa.wxs.qq.com/mpweb/delivery/legacy/wxadtouch/upload/t1/od834zef_52939fc6.png" style="margin:40px 0 0 -8px; background-color: #fcfcfc; box-shadow: none;" /> </div>
301 lines (239 loc) • 35.8 kB
JavaScript
;
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var React = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _rcSelect = _interopRequireWildcard(require("rc-select"));
var _configProvider = require("../config-provider");
var _input = _interopRequireDefault(require("../input"));
var _omit = _interopRequireDefault(require("../_util/omit"));
require("./style");
var _excluded = ["autoHidePopup", "dataSource", "defaultValue", "filterOption", "getPopupContainer", "inputProps", "intent", "leftElement", "placeholder", "rightElement", "size", "theme", "value"];
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _extends() { _extends = Object.assign ? Object.assign.bind() : 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; }; return _extends.apply(this, arguments); }
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
var noop = function noop() {};
var Suggest = function (_React$Component) {
_inherits(Suggest, _React$Component);
var _super = _createSuper(Suggest);
function Suggest(props) {
var _this;
_classCallCheck(this, Suggest);
_this = _super.call(this, props);
_this.locked = false;
_this.suggest = void 0;
_this.saveSuggest = function (node) {
if (node) {
_this.suggest = node;
}
};
_this.onDropdownVisibleChange = function (open) {
var _this$props = _this.props,
onDropdownVisibleChange = _this$props.onDropdownVisibleChange,
openProp = _this$props.open;
if (openProp === null) {
_this.setState({
open: open
});
}
if (onDropdownVisibleChange) onDropdownVisibleChange(open);
};
_this.onSearch = function (val) {
var onSearch = _this.props.onSearch;
var open = _this.state.open;
_this.setState({
searchValue: val
});
if (!open) {
_this.setState({
open: true
});
}
if (onSearch) {
onSearch(val);
}
};
var defaultOpen = props.defaultOpen,
defaultValue = props.defaultValue,
_open = props.open,
value = props.value;
var openState;
if (_open !== null) {
openState = _open;
} else if (defaultOpen !== null) {
openState = defaultOpen;
}
_this.state = {
open: openState,
searchValue: (value || defaultValue || "").toString()
};
return _this;
}
_createClass(Suggest, [{
key: "render",
value: function render() {
var _this2 = this;
var _this$props2 = this.props,
autoHidePopup = _this$props2.autoHidePopup,
dataSource = _this$props2.dataSource,
defaultValue = _this$props2.defaultValue,
filterOptionProp = _this$props2.filterOption,
getPopupContainer = _this$props2.getPopupContainer,
inputProps = _this$props2.inputProps,
intent = _this$props2.intent,
leftElement = _this$props2.leftElement,
placeholder = _this$props2.placeholder,
rightElement = _this$props2.rightElement,
size = _this$props2.size,
theme = _this$props2.theme,
value = _this$props2.value,
otherProps = _objectWithoutProperties(_this$props2, _excluded);
var _this$state = this.state,
openState = _this$state.open,
searchValue = _this$state.searchValue;
var restProps = (0, _omit["default"])(otherProps, ["defaultOpen", "onSearch", "onDropdownVisibleChange", "open"]);
var selectProps = {};
if (typeof openState === "boolean") {
selectProps.open = openState;
}
if (value !== null) {
selectProps.value = value;
} else {
selectProps.defaultValue = defaultValue;
}
var filterOption = filterOptionProp || function (inputValue, o) {
if (typeof o !== "string") {
return o.props.title.toUpperCase().includes(inputValue.toUpperCase());
}
return o.toUpperCase().includes(inputValue.toUpperCase());
};
var options = dataSource ? dataSource.filter(function (o) {
if (searchValue) {
return filterOption(searchValue, o);
}
return true;
}).map(function (item) {
if (React.isValidElement(item)) {
return item;
}
return React.createElement(_rcSelect.Option, {
key: item,
value: item
}, item);
}) : [];
if (autoHidePopup && !searchValue) {
options = [];
}
return React.createElement(_configProvider.ConfigContext.Consumer, null, function (_ref) {
var getPopupContainerContext = _ref.getPopupContainer;
return React.createElement(_rcSelect["default"], _extends({
mode: "combobox",
menuItemSelectedIcon: null,
dropdownMatchSelectWidth: true,
dropdownClassName: "adui-suggest-dropdown",
defaultActiveFirstOption: true,
getPopupContainer: getPopupContainer || getPopupContainerContext,
onDropdownVisibleChange: _this2.onDropdownVisibleChange,
onSearch: _this2.onSearch,
optionFilterProp: "children",
prefixCls: "adui-suggest",
showSearch: true,
ref: _this2.saveSuggest,
transitionName: "slide-up",
getInputElement: function getInputElement() {
return React.createElement(_input["default"], _extends({
intent: intent,
leftElement: leftElement,
placeholder: placeholder,
rightElement: rightElement,
size: size,
theme: theme
}, inputProps));
}
}, selectProps, restProps), options);
});
}
}]);
return Suggest;
}(React.Component);
Suggest.Option = _rcSelect.Option;
Suggest.OptGroup = _rcSelect.OptGroup;
Suggest.propTypes = {
autoHidePopup: _propTypes["default"].bool,
autoFocus: _propTypes["default"].bool,
children: _propTypes["default"].node,
dataSource: _propTypes["default"].array,
defaultOpen: _propTypes["default"].bool,
defaultValue: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
filterOption: _propTypes["default"].func,
getPopupContainer: _propTypes["default"].func,
inputProps: _propTypes["default"].object,
intent: _propTypes["default"].oneOf(["normal", "primary", "success", "warning", "danger"]),
leftElement: _propTypes["default"].node,
notFoundContent: _propTypes["default"].string,
onDropdownVisibleChange: _propTypes["default"].func,
onInputKeyDown: _propTypes["default"].func,
onSearch: _propTypes["default"].func,
onSelect: _propTypes["default"].func,
open: _propTypes["default"].bool,
placeholder: _propTypes["default"].string,
rightElement: _propTypes["default"].node,
size: _propTypes["default"].oneOf(["mini", "small", "medium", "large"]),
theme: _propTypes["default"].oneOf([null, "light"]),
value: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number])
};
Suggest.defaultProps = {
autoHidePopup: true,
autoFocus: false,
children: null,
dataSource: [],
defaultOpen: null,
defaultValue: "",
filterOption: undefined,
getPopupContainer: null,
inputProps: {},
intent: "normal",
leftElement: undefined,
notFoundContent: null,
onDropdownVisibleChange: noop,
onInputKeyDown: noop,
onSearch: noop,
onSelect: noop,
open: null,
placeholder: "请选择",
rightElement: undefined,
size: "small",
theme: null,
value: null
};
Suggest.getDerivedStateFromProps = function (_ref2) {
var open = _ref2.open,
value = _ref2.value;
var newState = {};
if (open !== null) {
newState.open = open;
}
if (value !== null) {
newState.searchValue = (value || "").toString();
}
return Object.keys(newState).length > 0 ? newState : null;
};
var _default = Suggest;
exports["default"] = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJub29wIiwiU3VnZ2VzdCIsInByb3BzIiwibG9ja2VkIiwic3VnZ2VzdCIsInNhdmVTdWdnZXN0Iiwibm9kZSIsIm9uRHJvcGRvd25WaXNpYmxlQ2hhbmdlIiwib3BlbiIsIm9wZW5Qcm9wIiwic2V0U3RhdGUiLCJvblNlYXJjaCIsInZhbCIsInN0YXRlIiwic2VhcmNoVmFsdWUiLCJkZWZhdWx0T3BlbiIsImRlZmF1bHRWYWx1ZSIsInZhbHVlIiwib3BlblN0YXRlIiwidG9TdHJpbmciLCJhdXRvSGlkZVBvcHVwIiwiZGF0YVNvdXJjZSIsImZpbHRlck9wdGlvblByb3AiLCJmaWx0ZXJPcHRpb24iLCJnZXRQb3B1cENvbnRhaW5lciIsImlucHV0UHJvcHMiLCJpbnRlbnQiLCJsZWZ0RWxlbWVudCIsInBsYWNlaG9sZGVyIiwicmlnaHRFbGVtZW50Iiwic2l6ZSIsInRoZW1lIiwib3RoZXJQcm9wcyIsInJlc3RQcm9wcyIsIm9taXQiLCJzZWxlY3RQcm9wcyIsImlucHV0VmFsdWUiLCJvIiwidGl0bGUiLCJ0b1VwcGVyQ2FzZSIsImluY2x1ZGVzIiwib3B0aW9ucyIsImZpbHRlciIsIm1hcCIsIml0ZW0iLCJSZWFjdCIsImlzVmFsaWRFbGVtZW50IiwiZ2V0UG9wdXBDb250YWluZXJDb250ZXh0IiwiQ29tcG9uZW50IiwiT3B0aW9uIiwiT3B0R3JvdXAiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJib29sIiwiYXV0b0ZvY3VzIiwiY2hpbGRyZW4iLCJhcnJheSIsIm9uZU9mVHlwZSIsInN0cmluZyIsIm51bWJlciIsImZ1bmMiLCJvYmplY3QiLCJvbmVPZiIsIm5vdEZvdW5kQ29udGVudCIsIm9uSW5wdXRLZXlEb3duIiwib25TZWxlY3QiLCJkZWZhdWx0UHJvcHMiLCJ1bmRlZmluZWQiLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJuZXdTdGF0ZSIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiXSwic291cmNlcyI6WyIuLi8uLi9jb21wb25lbnRzL3N1Z2dlc3QvU3VnZ2VzdC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IFJjU2VsZWN0LCB7IE9wdGlvbiwgT3B0R3JvdXAgfSBmcm9tIFwicmMtc2VsZWN0XCJcbmltcG9ydCB7IENvbmZpZ0NvbnRleHQgfSBmcm9tIFwiLi4vY29uZmlnLXByb3ZpZGVyXCJcbmltcG9ydCBJbnB1dCwgeyBJSW5wdXRQcm9wcyB9IGZyb20gXCIuLi9pbnB1dFwiXG5pbXBvcnQgb21pdCBmcm9tIFwiLi4vX3V0aWwvb21pdFwiXG5pbXBvcnQgXCIuL3N0eWxlXCJcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1Z2dlc3Qge1xuICBnZXRQb3B1cERPTU5vZGU6ICgpID0+IEhUTUxFbGVtZW50XG4gIGdldElucHV0RE9NTm9kZTogKCkgPT4gSFRNTElucHV0RWxlbWVudFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElPcHRpb24ge1xuICBba2V5OiBzdHJpbmddOiBhbnlcbiAga2V5OiBzdHJpbmdcbiAgdmFsdWU6IHN0cmluZ1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1Z2dlc3RQcm9wcyB7XG4gIFtrZXk6IHN0cmluZ106IGFueVxuICAvKipcbiAgICog5piv5ZCm5Zyo5pCc57Si5qGG5Li656m65pe277yM6Ieq5Yqo6ZqQ6JePIHBvcHVwXG4gICAqL1xuICBhdXRvSGlkZVBvcHVwPzogYm9vbGVhblxuICAvKipcbiAgICogaW5wdXQg5qCH562+5Y6f55Sf5bGe5oCnIC0gYXV0b0ZvY3VzXG4gICAqL1xuICBhdXRvRm9jdXM/OiBib29sZWFuXG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG4gIGRlZmF1bHRPcGVuPzogYm9vbGVhbiB8IG51bGxcbiAgLyoqXG4gICAqIOm7mOiupOWAvCAtIOWGhemDqOmpseWKqFxuICAgKi9cbiAgZGVmYXVsdFZhbHVlPzogc3RyaW5nIHwgbnVsbFxuICBkYXRhU291cmNlPzogYW55W11cbiAgLyoqXG4gICAqIOaOpeaUtiBpbnB1dFZhbHVlIG9wdGlvbiDkuKTkuKrlj4LmlbDvvIzlvZMgb3B0aW9uIOespuWQiOetm+mAieadoeS7tuaXtu+8jOW6lOi/lOWbniB0cnVl77yM5Y+N5LmL5YiZ6L+U5ZueIGZhbHNlXG4gICAqL1xuICBmaWx0ZXJPcHRpb24/OiAoaW5wdXRWYWx1ZTogc3RyaW5nLCBvcHRpb246IGFueSkgPT4gYm9vbGVhblxuICAvKipcbiAgICog5oyH5a6a5by55Ye65bGC55qE54i257qn77yM6buY6K6k5Li6IGRvY3VtZW50LmJvZHlcbiAgICovXG4gIGdldFBvcHVwQ29udGFpbmVyPzogbnVsbCB8ICgobm9kZTogSFRNTEVsZW1lbnQpID0+IEhUTUxFbGVtZW50KVxuICBpbnB1dFByb3BzPzogSUlucHV0UHJvcHNcbiAgLyoqXG4gICAqIOexu+Wei1xuICAgKi9cbiAgaW50ZW50PzogXCJub3JtYWxcIiB8IFwicHJpbWFyeVwiIHwgXCJzdWNjZXNzXCIgfCBcIndhcm5pbmdcIiB8IFwiZGFuZ2VyXCJcbiAgbGVmdEVsZW1lbnQ/OiBKU1guRWxlbWVudFxuICBub3RGb3VuZENvbnRlbnQ/OiBzdHJpbmcgfCBudWxsXG4gIG9uSW5wdXRLZXlEb3duPzogKGU6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHZvaWRcbiAgb25Ecm9wZG93blZpc2libGVDaGFuZ2U/OiAob3BlbjogYm9vbGVhbikgPT4gdm9pZFxuICBvblNlYXJjaD86ICh2YWw6IHN0cmluZykgPT4gdm9pZFxuICBvblNlbGVjdD86ICh2YWx1ZTogc3RyaW5nLCBvcHRpb246IElPcHRpb24pID0+IHZvaWRcbiAgb3Blbj86IG51bGwgfCBib29sZWFuXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nXG4gIHJpZ2h0RWxlbWVudD86IEpTWC5FbGVtZW50XG4gIC8qKlxuICAgKiDorr7nva7lsLrlr7hcbiAgICovXG4gIHNpemU/OiBcIm1pbmlcIiB8IFwic21hbGxcIiB8IFwibWVkaXVtXCIgfCBcImxhcmdlXCJcbiAgLyoqXG4gICAqIOiuvue9ruS4u+mimFxuICAgKi9cbiAgdGhlbWU/OiBudWxsIHwgXCJsaWdodFwiXG4gIHZhbHVlPzogc3RyaW5nIHwgbnVsbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTdWdnZXN0U3RhdGUge1xuICBvcGVuPzogYm9vbGVhblxuICBzZWFyY2hWYWx1ZT86IHN0cmluZ1xufVxuLyoqXG4gKiDkuIvmi4npgInmi6nlmajjgIJcbiAqL1xuY2xhc3MgU3VnZ2VzdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxJU3VnZ2VzdFByb3BzLCBJU3VnZ2VzdFN0YXRlPiB7XG4gIHB1YmxpYyBzdGF0aWMgT3B0aW9uOiB0eXBlb2YgT3B0aW9uID0gT3B0aW9uXG5cbiAgcHVibGljIHN0YXRpYyBPcHRHcm91cDogdHlwZW9mIE9wdEdyb3VwID0gT3B0R3JvdXBcblxuICBwdWJsaWMgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAvKipcbiAgICAgKiDmmK/lkKblnKjmkJzntKLmoYbkuLrnqbrml7bvvIzoh6rliqjpmpDol48gcG9wdXBcbiAgICAgKi9cbiAgICBhdXRvSGlkZVBvcHVwOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAvKipcbiAgICAgKiBpbnB1dCDmoIfnrb7ljp/nlJ/lsZ7mgKcgLSBhdXRvRm9jdXNcbiAgICAgKi9cbiAgICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAgIC8qKlxuICAgICAqIOWtkOiKgueCuVxuICAgICAqL1xuICAgIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgICAvKipcbiAgICAgKiDkuIvmi4nliJfooahcbiAgICAgKi9cbiAgICBkYXRhU291cmNlOiBQcm9wVHlwZXMuYXJyYXksXG4gICAgLyoqXG4gICAgICog5YaF6YOo6amx5Yqo77ya5piv5ZCm5bGV5byAXG4gICAgICovXG4gICAgZGVmYXVsdE9wZW46IFByb3BUeXBlcy5ib29sLFxuICAgIC8qKlxuICAgICAqIOm7mOiupOWAvCAtIOWGhemDqOmpseWKqFxuICAgICAqL1xuICAgIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pLFxuICAgIC8qKlxuICAgICAqIOaOpeaUtiBpbnB1dFZhbHVlIG9wdGlvbiDkuKTkuKrlj4LmlbDvvIzlvZMgb3B0aW9uIOespuWQiOetm+mAieadoeS7tuaXtu+8jOW6lOi/lOWbniB0cnVl77yM5Y+N5LmL5YiZ6L+U5ZueIGZhbHNlXG4gICAgICovXG4gICAgZmlsdGVyT3B0aW9uOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAvKipcbiAgICAgKiDmjIflrprlvLnlh7rlsYLnmoTniLbnuqfvvIzpu5jorqTkuLogZG9jdW1lbnQuYm9keVxuICAgICAqL1xuICAgIGdldFBvcHVwQ29udGFpbmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAvKipcbiAgICAgKiDkvKDpgJLnu5kgPElucHV0IC8+IOeahCBQcm9wc1xuICAgICAqL1xuICAgIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgLyoqXG4gICAgICog57G75Z6LXG4gICAgICovXG4gICAgaW50ZW50OiBQcm9wVHlwZXMub25lT2YoW1xuICAgICAgXCJub3JtYWxcIixcbiAgICAgIFwicHJpbWFyeVwiLFxuICAgICAgXCJzdWNjZXNzXCIsXG4gICAgICBcIndhcm5pbmdcIixcbiAgICAgIFwiZGFuZ2VyXCIsXG4gICAgXSksXG4gICAgLyoqXG4gICAgICog5YmN572u5YWD57SgXG4gICAgICovXG4gICAgbGVmdEVsZW1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIC8qKlxuICAgICAqIOaXoOWMuemFjee7k+aenOaXtueahOaYvuekuuaWh+Wtl1xuICAgICAqL1xuICAgIG5vdEZvdW5kQ29udGVudDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAvKipcbiAgICAgKiDkuIvmi4nlsZXnpLrlj5HnlJ/lj5jljJbml7bnmoQgaGFuZGxlcu+8jOWPguaVsO+8mmJvb2xcbiAgICAgKi9cbiAgICBvbkRyb3Bkb3duVmlzaWJsZUNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgLyoqXG4gICAgICogaW5wdXQga2V5IHByZXNzIOaXtueahCBoYW5kbGVyLOWmguaenOaDs+emgeeUqOWbnui9pumAieaLqe+8jOWPr+S7peWwneivle+8mlxuICAgICAgb25JbnB1dEtleURvd249eyhlKSA9PiB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gXCJFbnRlclwiKSB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICB9XG4gICAgICB9fVxuICAgICAqL1xuICAgIG9uSW5wdXRLZXlEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAvKipcbiAgICAgKiDmkJzntKLml7bnmoQgaGFuZGxlcu+8jOWPguaVsO+8mnZhbHVlXG4gICAgICovXG4gICAgb25TZWFyY2g6IFByb3BUeXBlcy5mdW5jLFxuICAgIC8qKlxuICAgICAqIOmAieaLqeaXtueahCBoYW5kbGVy77yM5Y+C5pWw77yaKHZhbHVlLCBvcHRpb24pXG4gICAgICovXG4gICAgb25TZWxlY3Q6IFByb3BUeXBlcy5mdW5jLFxuICAgIC8qKlxuICAgICAqIOS7juWklumDqOaMh+WumuS4i+aLieaYr+WQpuWxleW8gFxuICAgICAqL1xuICAgIG9wZW46IFByb3BUeXBlcy5ib29sLFxuICAgIC8qKlxuICAgICAqIOmAieaLqeahhum7mOiupOaWh+Wtl1xuICAgICAqL1xuICAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIC8qKlxuICAgICAqIOWQjue9ruWFg+e0oFxuICAgICAqL1xuICAgIHJpZ2h0RWxlbWVudDogUHJvcFR5cGVzLm5vZGUsXG4gICAgLyoqXG4gICAgICog6K6+572u5bC65a+4XG4gICAgICovXG4gICAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcIm1pbmlcIiwgXCJzbWFsbFwiLCBcIm1lZGl1bVwiLCBcImxhcmdlXCJdKSxcbiAgICAvKipcbiAgICAgKiDorr7nva7kuLvpophcbiAgICAgKi9cbiAgICB0aGVtZTogUHJvcFR5cGVzLm9uZU9mKFtudWxsLCBcImxpZ2h0XCJdKSxcbiAgICAvKipcbiAgICAgKiDku47lpJbpg6jmjIflrprlvZPliY3pgInkuK3pobnnmoTlgLxcbiAgICAgKi9cbiAgICB2YWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pLFxuICB9XG5cbiAgcHVibGljIHN0YXRpYyBkZWZhdWx0UHJvcHM6IElTdWdnZXN0UHJvcHMgPSB7XG4gICAgYXV0b0hpZGVQb3B1cDogdHJ1ZSxcbiAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgIGNoaWxkcmVuOiBudWxsLFxuICAgIGRhdGFTb3VyY2U6IFtdLFxuICAgIGRlZmF1bHRPcGVuOiBudWxsLFxuICAgIGRlZmF1bHRWYWx1ZTogXCJcIixcbiAgICBmaWx0ZXJPcHRpb246IHVuZGVmaW5lZCxcbiAgICBnZXRQb3B1cENvbnRhaW5lcjogbnVsbCxcbiAgICBpbnB1dFByb3BzOiB7fSxcbiAgICBpbnRlbnQ6IFwibm9ybWFsXCIsXG4gICAgbGVmdEVsZW1lbnQ6IHVuZGVmaW5lZCxcbiAgICBub3RGb3VuZENvbnRlbnQ6IG51bGwsXG4gICAgb25Ecm9wZG93blZpc2libGVDaGFuZ2U6IG5vb3AsXG4gICAgb25JbnB1dEtleURvd246IG5vb3AsXG4gICAgb25TZWFyY2g6IG5vb3AsXG4gICAgb25TZWxlY3Q6IG5vb3AsXG4gICAgb3BlbjogbnVsbCxcbiAgICBwbGFjZWhvbGRlcjogXCLor7fpgInmi6lcIixcbiAgICByaWdodEVsZW1lbnQ6IHVuZGVmaW5lZCxcbiAgICBzaXplOiBcInNtYWxsXCIsXG4gICAgdGhlbWU6IG51bGwsXG4gICAgdmFsdWU6IG51bGwsXG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9ICh7IG9wZW4sIHZhbHVlIH06IElTdWdnZXN0UHJvcHMpID0+IHtcbiAgICBjb25zdCBuZXdTdGF0ZTogSVN1Z2dlc3RTdGF0ZSA9IHt9XG4gICAgaWYgKG9wZW4gIT09IG51bGwpIHtcbiAgICAgIG5ld1N0YXRlLm9wZW4gPSBvcGVuXG4gICAgfVxuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgbmV3U3RhdGUuc2VhcmNoVmFsdWUgPSAodmFsdWUgfHwgXCJcIikudG9TdHJpbmcoKVxuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmtleXMobmV3U3RhdGUpLmxlbmd0aCA+IDAgPyBuZXdTdGF0ZSA6IG51bGxcbiAgfVxuXG4gIHB1YmxpYyBsb2NrZWQgPSBmYWxzZVxuXG4gIHB1YmxpYyBzdWdnZXN0OiBJU3VnZ2VzdFxuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJU3VnZ2VzdFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpXG4gICAgY29uc3QgeyBkZWZhdWx0T3BlbiwgZGVmYXVsdFZhbHVlLCBvcGVuLCB2YWx1ZSB9ID0gcHJvcHNcblxuICAgIGxldCBvcGVuU3RhdGU6IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgICBpZiAob3BlbiAhPT0gbnVsbCkge1xuICAgICAgb3BlblN0YXRlID0gb3BlblxuICAgIH0gZWxzZSBpZiAoZGVmYXVsdE9wZW4gIT09IG51bGwpIHtcbiAgICAgIG9wZW5TdGF0ZSA9IGRlZmF1bHRPcGVuXG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIG9wZW46IG9wZW5TdGF0ZSxcbiAgICAgIHNlYXJjaFZhbHVlOiAodmFsdWUgfHwgZGVmYXVsdFZhbHVlIHx8IFwiXCIpLnRvU3RyaW5nKCksXG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNhdmVTdWdnZXN0ID0gKG5vZGU6IElTdWdnZXN0KSA9PiB7XG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIHRoaXMuc3VnZ2VzdCA9IG5vZGVcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25Ecm9wZG93blZpc2libGVDaGFuZ2UgPSAob3BlbjogYm9vbGVhbikgPT4ge1xuICAgIGNvbnN0IHsgb25Ecm9wZG93blZpc2libGVDaGFuZ2UsIG9wZW46IG9wZW5Qcm9wIH0gPSB0aGlzLnByb3BzXG5cbiAgICBpZiAob3BlblByb3AgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBvcGVuIH0pXG4gICAgfVxuICAgIGlmIChvbkRyb3Bkb3duVmlzaWJsZUNoYW5nZSkgb25Ecm9wZG93blZpc2libGVDaGFuZ2Uob3BlbilcbiAgfVxuXG4gIHB1YmxpYyBvblNlYXJjaCA9ICh2YWw6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHsgb25TZWFyY2ggfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB7IG9wZW4gfSA9IHRoaXMuc3RhdGVcbiAgICB0aGlzLnNldFN0YXRlKHsgc2VhcmNoVmFsdWU6IHZhbCB9KVxuXG4gICAgaWYgKCFvcGVuKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgb3BlbjogdHJ1ZSB9KVxuICAgIH1cbiAgICBpZiAob25TZWFyY2gpIHtcbiAgICAgIG9uU2VhcmNoKHZhbClcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGF1dG9IaWRlUG9wdXAsXG4gICAgICBkYXRhU291cmNlLFxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgZmlsdGVyT3B0aW9uOiBmaWx0ZXJPcHRpb25Qcm9wLFxuICAgICAgZ2V0UG9wdXBDb250YWluZXIsXG4gICAgICBpbnB1dFByb3BzLFxuICAgICAgaW50ZW50LFxuICAgICAgbGVmdEVsZW1lbnQsXG4gICAgICBwbGFjZWhvbGRlcixcbiAgICAgIHJpZ2h0RWxlbWVudCxcbiAgICAgIHNpemUsXG4gICAgICB0aGVtZSxcbiAgICAgIHZhbHVlLFxuICAgICAgLi4ub3RoZXJQcm9wc1xuICAgIH0gPSB0aGlzLnByb3BzXG5cbiAgICBjb25zdCB7IG9wZW46IG9wZW5TdGF0ZSwgc2VhcmNoVmFsdWUgfSA9IHRoaXMuc3RhdGVcblxuICAgIGNvbnN0IHJlc3RQcm9wcyA9IG9taXQob3RoZXJQcm9wcywgW1xuICAgICAgXCJkZWZhdWx0T3BlblwiLFxuICAgICAgXCJvblNlYXJjaFwiLFxuICAgICAgXCJvbkRyb3Bkb3duVmlzaWJsZUNoYW5nZVwiLFxuICAgICAgXCJvcGVuXCIsXG4gICAgXSlcblxuICAgIC8vIG9wZW5TdGF0ZSDlj6/og73mmK8gdW5kZWZpbmVkIG9yIG51bGxcbiAgICBjb25zdCBzZWxlY3RQcm9wczoge1xuICAgICAgZGVmYXVsdFZhbHVlPzogUmVhY3QuUmVhY3RUZXh0IHwgbnVsbFxuICAgICAgb3Blbj86IGJvb2xlYW5cbiAgICAgIHZhbHVlPzogUmVhY3QuUmVhY3RUZXh0IHwgbnVsbFxuICAgIH0gPSB7fVxuICAgIGlmICh0eXBlb2Ygb3BlblN0YXRlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgc2VsZWN0UHJvcHMub3BlbiA9IG9wZW5TdGF0ZVxuICAgIH1cbiAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHNlbGVjdFByb3BzLnZhbHVlID0gdmFsdWVcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0UHJvcHMuZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlXG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyT3B0aW9uID1cbiAgICAgIGZpbHRlck9wdGlvblByb3AgfHxcbiAgICAgICgoaW5wdXRWYWx1ZTogc3RyaW5nLCBvOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBvICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgcmV0dXJuIG8ucHJvcHMudGl0bGUudG9VcHBlckNhc2UoKS5pbmNsdWRlcyhpbnB1dFZhbHVlLnRvVXBwZXJDYXNlKCkpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG8udG9VcHBlckNhc2UoKS5pbmNsdWRlcyhpbnB1dFZhbHVlLnRvVXBwZXJDYXNlKCkpXG4gICAgICB9KVxuXG4gICAgbGV0IG9wdGlvbnMgPSBkYXRhU291cmNlXG4gICAgICA/IGRhdGFTb3VyY2VcbiAgICAgICAgICAuZmlsdGVyKChvKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlck9wdGlvbihzZWFyY2hWYWx1ZSwgbylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfSlcbiAgICAgICAgICAubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoaXRlbSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxPcHRpb24ga2V5PXtpdGVtfSB2YWx1ZT17aXRlbX0+XG4gICAgICAgICAgICAgICAge2l0ZW19XG4gICAgICAgICAgICAgIDwvT3B0aW9uPlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG4gICAgICA6IFtdXG5cbiAgICBpZiAoYXV0b0hpZGVQb3B1cCAmJiAhc2VhcmNoVmFsdWUpIHtcbiAgICAgIG9wdGlvbnMgPSBbXVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8Q29uZmlnQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgeyh7IGdldFBvcHVwQ29udGFpbmVyOiBnZXRQb3B1cENvbnRhaW5lckNvbnRleHQgfSkgPT4gKFxuICAgICAgICAgIDxSY1NlbGVjdFxuICAgICAgICAgICAgbW9kZT1cImNvbWJvYm94XCJcbiAgICAgICAgICAgIG1lbnVJdGVtU2VsZWN0ZWRJY29uPXtudWxsfVxuICAgICAgICAgICAgZHJvcGRvd25NYXRjaFNlbGVjdFdpZHRoXG4gICAgICAgICAgICBkcm9wZG93bkNsYXNzTmFtZT1cImFkdWktc3VnZ2VzdC1kcm9wZG93blwiXG4gICAgICAgICAgICBkZWZhdWx0QWN0aXZlRmlyc3RPcHRpb25cbiAgICAgICAgICAgIGdldFBvcHVwQ29udGFpbmVyPXtnZXRQb3B1cENvbnRhaW5lciB8fCBnZXRQb3B1cENvbnRhaW5lckNvbnRleHR9XG4gICAgICAgICAgICBvbkRyb3Bkb3duVmlzaWJsZUNoYW5nZT17dGhpcy5vbkRyb3Bkb3duVmlzaWJsZUNoYW5nZX1cbiAgICAgICAgICAgIG9uU2VhcmNoPXt0aGlzLm9uU2VhcmNofVxuICAgICAgICAgICAgb3B0aW9uRmlsdGVyUHJvcD1cImNoaWxkcmVuXCJcbiAgICAgICAgICAgIHByZWZpeENscz1cImFkdWktc3VnZ2VzdFwiXG4gICAgICAgICAgICBzaG93U2VhcmNoXG4gICAgICAgICAgICByZWY9e3RoaXMuc2F2ZVN1Z2dlc3R9XG4gICAgICAgICAgICB0cmFuc2l0aW9uTmFtZT1cInNsaWRlLXVwXCJcbiAgICAgICAgICAgIGdldElucHV0RWxlbWVudD17KCkgPT4gKFxuICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICBpbnRlbnQ9e2ludGVudH1cbiAgICAgICAgICAgICAgICBsZWZ0RWxlbWVudD17bGVmdEVsZW1lbnR9XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICAgIHJpZ2h0RWxlbWVudD17cmlnaHRFbGVtZW50fVxuICAgICAgICAgICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgICAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICAgICAgICAgIHsuLi5pbnB1dFByb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHsuLi5zZWxlY3RQcm9wc31cbiAgICAgICAgICAgIHsuLi5yZXN0UHJvcHN9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge29wdGlvbnN9XG4gICAgICAgICAgPC9SY1NlbGVjdD5cbiAgICAgICAgKX1cbiAgICAgIDwvQ29uZmlnQ29udGV4dC5Db25zdW1lcj5cbiAgICApXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1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