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>
198 lines • 29.9 kB
JavaScript
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
import React, { useState } from "react";
import PropTypes from "prop-types";
import classNames from "classnames";
import Icon from "../icon";
import Popover from "../popover";
import Checkbox from "../checkbox";
import Radio from "../radio";
import "./style";
var prefix = "adui-table";
var getFilteredValue = function getFilteredValue(val) {
if (val === null || val === undefined || val.length === 0) {
return ["all"];
}
return val;
};
var TableFilter = function TableFilter(_ref) {
var filterSearchable = _ref.filterSearchable,
filterSearchPlaceholder = _ref.filterSearchPlaceholder,
filterSearchCaseSensitive = _ref.filterSearchCaseSensitive,
filterSearchFunc = _ref.filterSearchFunc,
filteredValueProp = _ref.filteredValue,
filterMultiple = _ref.filterMultiple,
filterPopoverProps = _ref.filterPopoverProps,
filterVisible = _ref.filterVisible,
filtersProp = _ref.filters,
onFilter = _ref.onFilter,
onFilterVisibleChange = _ref.onFilterVisibleChange,
title = _ref.title,
sortableAndFilterable = _ref.sortableAndFilterable;
if (!filtersProp) {
return null;
}
var _useState = useState(getFilteredValue(filteredValueProp)),
_useState2 = _slicedToArray(_useState, 2),
filteredValue = _useState2[0],
setFilteredValue = _useState2[1];
var _useState3 = useState(filterVisible || false),
_useState4 = _slicedToArray(_useState3, 2),
visible = _useState4[0],
setVisible = _useState4[1];
var _useState5 = useState(""),
_useState6 = _slicedToArray(_useState5, 2),
searchValue = _useState6[0],
setSearchValue = _useState6[1];
if (filteredValueProp !== null && filteredValueProp !== undefined && JSON.stringify(filteredValue) !== JSON.stringify(getFilteredValue(filteredValueProp))) {
setFilteredValue(getFilteredValue(filteredValueProp));
}
if (typeof filterVisible === "boolean" && visible !== filterVisible) {
setVisible(filterVisible);
}
var handleChange = function handleChange(filteredValueParam) {
var newValue = filterMultiple && filteredValueParam ? filteredValueParam : [filteredValueParam];
if (newValue.includes("all")) {
newValue.splice(newValue.indexOf("all"), 1);
}
if (filteredValueProp === null) {
setFilteredValue(getFilteredValue(newValue));
}
if (onFilter) {
if (filteredValueParam === "all") {
onFilter([]);
} else {
onFilter(newValue);
}
}
if (!filterMultiple) {
setTimeout(function () {
if (onFilterVisibleChange) {
onFilterVisibleChange(false);
}
setVisible(false);
}, 100);
}
};
var popup;
if (filterSearchable) {
popup = React.createElement("div", null, React.createElement("div", {
className: "".concat(prefix, "-filter-search")
}, React.createElement("input", {
value: searchValue,
placeholder: filterSearchPlaceholder,
onChange: function onChange(e) {
var value = e.target.value;
setSearchValue(value);
}
}), React.createElement(Icon, {
icon: "search",
className: "".concat(prefix, "-filter-icon")
})));
}
var filters = searchValue ? filtersProp.filter(function (o) {
var text = o.text;
if (filterSearchFunc) {
return filterSearchFunc(searchValue, o);
}
if (!filterSearchCaseSensitive) {
return String(text).toLocaleLowerCase().includes(searchValue.toLocaleLowerCase());
}
return String(text).includes(searchValue);
}) : filtersProp;
if (filterMultiple) {
popup = React.createElement(React.Fragment, null, popup, !filters.length ? React.createElement("div", {
className: "".concat(prefix, "-filter-no")
}, "\u65E0\u5339\u914D\u7ED3\u679C") : React.createElement(Checkbox.Group, {
className: "".concat(prefix, "-filterList"),
defaultValue: ["all"],
value: filteredValue,
onChange: handleChange
}, filters.map(function (item) {
return React.createElement(Checkbox, {
key: item.value,
value: item.value
}, item.text);
})));
} else {
popup = React.createElement(React.Fragment, null, popup, !filters.length ? React.createElement("div", {
className: "".concat(prefix, "-filter-no")
}, "\u65E0\u5339\u914D\u7ED3\u679C") : React.createElement(Radio.Group, {
className: "".concat(prefix, "-filterList"),
defaultValue: "all",
value: filteredValue ? filteredValue[0] : null,
onChange: handleChange
}, React.createElement(Radio, {
value: "all"
}, "\u5168\u90E8"), filters.map(function (item) {
return React.createElement(Radio, {
key: item.value,
value: item.value
}, item.text);
})));
}
return React.createElement(Popover, _extends({
arrowed: false,
visible: visible,
onVisibleChange: function onVisibleChange(bool) {
if (typeof filterVisible !== "boolean") {
setVisible(bool);
}
if (onFilterVisibleChange) {
onFilterVisibleChange(bool);
}
},
popup: popup,
trigger: "click",
placement: "bottomLeft"
}, filterPopoverProps), React.createElement("div", {
"data-value": filteredValue,
role: "columnheader",
className: classNames("".concat(prefix, "-filter"), _defineProperty({}, "".concat(prefix, "-filtered"), filteredValue && (filteredValue.length > 1 || filteredValue[0] !== "all")))
}, !sortableAndFilterable ? title : null, React.createElement(Icon, {
icon: "filter-outlined"
}), !sortableAndFilterable && React.createElement("div", {
className: "".concat(prefix, "-clickholder")
})));
};
TableFilter.propTypes = {
filterMultiple: PropTypes.bool,
filterSearchable: PropTypes.bool,
filterSearchCaseSensitive: PropTypes.bool,
filterSearchPlaceholder: PropTypes.string,
filterSearchFunc: PropTypes.func,
filterPopoverProps: PropTypes.object,
filteredValue: PropTypes.array,
filters: PropTypes.any,
filterVisible: PropTypes.bool,
onFilter: PropTypes.func,
onFilterVisibleChange: PropTypes.func,
title: PropTypes.node,
sortableAndFilterable: PropTypes.bool
};
TableFilter.defaultProps = {
filterMultiple: false,
filterSearchable: false,
filterSearchCaseSensitive: false,
filterSearchPlaceholder: "在筛选项中搜索",
filterSearchFunc: undefined,
filterPopoverProps: {},
filteredValue: null,
filterVisible: null,
filters: null,
onFilter: null,
onFilterVisibleChange: null,
title: null,
sortableAndFilterable: false
};
export default TableFilter;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZVN0YXRlIiwiUHJvcFR5cGVzIiwiY2xhc3NOYW1lcyIsIkljb24iLCJQb3BvdmVyIiwiQ2hlY2tib3giLCJSYWRpbyIsInByZWZpeCIsImdldEZpbHRlcmVkVmFsdWUiLCJ2YWwiLCJ1bmRlZmluZWQiLCJsZW5ndGgiLCJUYWJsZUZpbHRlciIsIl9yZWYiLCJmaWx0ZXJTZWFyY2hhYmxlIiwiZmlsdGVyU2VhcmNoUGxhY2Vob2xkZXIiLCJmaWx0ZXJTZWFyY2hDYXNlU2Vuc2l0aXZlIiwiZmlsdGVyU2VhcmNoRnVuYyIsImZpbHRlcmVkVmFsdWVQcm9wIiwiZmlsdGVyZWRWYWx1ZSIsImZpbHRlck11bHRpcGxlIiwiZmlsdGVyUG9wb3ZlclByb3BzIiwiZmlsdGVyVmlzaWJsZSIsImZpbHRlcnNQcm9wIiwiZmlsdGVycyIsIm9uRmlsdGVyIiwib25GaWx0ZXJWaXNpYmxlQ2hhbmdlIiwidGl0bGUiLCJzb3J0YWJsZUFuZEZpbHRlcmFibGUiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJzZXRGaWx0ZXJlZFZhbHVlIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJ2aXNpYmxlIiwic2V0VmlzaWJsZSIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2Iiwic2VhcmNoVmFsdWUiLCJzZXRTZWFyY2hWYWx1ZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJoYW5kbGVDaGFuZ2UiLCJmaWx0ZXJlZFZhbHVlUGFyYW0iLCJuZXdWYWx1ZSIsImluY2x1ZGVzIiwic3BsaWNlIiwiaW5kZXhPZiIsInNldFRpbWVvdXQiLCJwb3B1cCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJjb25jYXQiLCJ2YWx1ZSIsInBsYWNlaG9sZGVyIiwib25DaGFuZ2UiLCJlIiwidGFyZ2V0IiwiaWNvbiIsImZpbHRlciIsIm8iLCJ0ZXh0IiwiU3RyaW5nIiwidG9Mb2NhbGVMb3dlckNhc2UiLCJGcmFnbWVudCIsIkdyb3VwIiwiZGVmYXVsdFZhbHVlIiwibWFwIiwiaXRlbSIsImtleSIsIl9leHRlbmRzIiwiYXJyb3dlZCIsIm9uVmlzaWJsZUNoYW5nZSIsImJvb2wiLCJ0cmlnZ2VyIiwicGxhY2VtZW50Iiwicm9sZSIsIl9kZWZpbmVQcm9wZXJ0eSIsInByb3BUeXBlcyIsInN0cmluZyIsImZ1bmMiLCJvYmplY3QiLCJhcnJheSIsImFueSIsIm5vZGUiLCJkZWZhdWx0UHJvcHMiXSwic291cmNlcyI6WyIuLi8uLi9jb21wb25lbnRzL3RhYmxlL1RhYmxlRmlsdGVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiXG5pbXBvcnQgSWNvbiBmcm9tIFwiLi4vaWNvblwiXG5pbXBvcnQgUG9wb3ZlciwgeyBJUG9wb3ZlclByb3BzIH0gZnJvbSBcIi4uL3BvcG92ZXJcIlxuaW1wb3J0IENoZWNrYm94IGZyb20gXCIuLi9jaGVja2JveFwiXG5pbXBvcnQgUmFkaW8gZnJvbSBcIi4uL3JhZGlvXCJcbmltcG9ydCBcIi4vc3R5bGVcIlxuXG5jb25zdCBwcmVmaXggPSBcImFkdWktdGFibGVcIlxuY29uc3QgZ2V0RmlsdGVyZWRWYWx1ZSA9ICh2YWw/OiAoc3RyaW5nIHwgbnVtYmVyKVtdIHwgbnVsbCkgPT4ge1xuICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkIHx8IHZhbC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW1wiYWxsXCJdXG4gIH1cbiAgcmV0dXJuIHZhbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUYWJsZUZpbHRlclByb3BzIHtcbiAgZmlsdGVyZWRWYWx1ZT86IChzdHJpbmcgfCBudW1iZXIpW10gfCBudWxsXG4gIGZpbHRlck11bHRpcGxlPzogYm9vbGVhblxuICBmaWx0ZXJTZWFyY2hhYmxlPzogYm9vbGVhblxuICBmaWx0ZXJTZWFyY2hDYXNlU2Vuc2l0aXZlPzogYm9vbGVhblxuICBmaWx0ZXJTZWFyY2hQbGFjZWhvbGRlcj86IHN0cmluZ1xuICBmaWx0ZXJTZWFyY2hGdW5jPzogKFxuICAgIGlucHV0OiBzdHJpbmcsXG4gICAgaXRlbTogeyB0ZXh0OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfVxuICApID0+IGJvb2xlYW5cbiAgZmlsdGVyUG9wb3ZlclByb3BzPzogSVBvcG92ZXJQcm9wc1xuICBmaWx0ZXJzPzogQXJyYXk8eyB0ZXh0OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfT4gfCBudWxsXG4gIGZpbHRlclZpc2libGU/OiBib29sZWFuIHwgbnVsbFxuICBvbkZpbHRlcj86ICgodmFsdWU6IChzdHJpbmcgfCBudW1iZXIpW10pID0+IHZvaWQpIHwgbnVsbFxuICBvbkZpbHRlclZpc2libGVDaGFuZ2U/OiAoKHZpc2libGU6IGJvb2xlYW4pID0+IHZvaWQpIHwgbnVsbFxuICB0aXRsZT86IFJlYWN0LlJlYWN0Tm9kZVxuICBzb3J0YWJsZUFuZEZpbHRlcmFibGU/OiBib29sZWFuXG59XG5cbi8qKlxuICog6KGo5qC8562b6YCJXG4gKi9cbmNvbnN0IFRhYmxlRmlsdGVyOiBSZWFjdC5GQzxJVGFibGVGaWx0ZXJQcm9wcz4gPSAoe1xuICBmaWx0ZXJTZWFyY2hhYmxlLFxuICBmaWx0ZXJTZWFyY2hQbGFjZWhvbGRlcixcbiAgZmlsdGVyU2VhcmNoQ2FzZVNlbnNpdGl2ZSxcbiAgZmlsdGVyU2VhcmNoRnVuYyxcbiAgZmlsdGVyZWRWYWx1ZTogZmlsdGVyZWRWYWx1ZVByb3AsXG4gIGZpbHRlck11bHRpcGxlLFxuICBmaWx0ZXJQb3BvdmVyUHJvcHMsXG4gIGZpbHRlclZpc2libGUsXG4gIGZpbHRlcnM6IGZpbHRlcnNQcm9wLFxuICBvbkZpbHRlcixcbiAgb25GaWx0ZXJWaXNpYmxlQ2hhbmdlLFxuICB0aXRsZSxcbiAgc29ydGFibGVBbmRGaWx0ZXJhYmxlLFxufTogSVRhYmxlRmlsdGVyUHJvcHMpID0+IHtcbiAgaWYgKCFmaWx0ZXJzUHJvcCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgW2ZpbHRlcmVkVmFsdWUsIHNldEZpbHRlcmVkVmFsdWVdID0gdXNlU3RhdGUoXG4gICAgZ2V0RmlsdGVyZWRWYWx1ZShmaWx0ZXJlZFZhbHVlUHJvcClcbiAgKVxuICBjb25zdCBbdmlzaWJsZSwgc2V0VmlzaWJsZV0gPSB1c2VTdGF0ZShmaWx0ZXJWaXNpYmxlIHx8IGZhbHNlKVxuICBjb25zdCBbc2VhcmNoVmFsdWUsIHNldFNlYXJjaFZhbHVlXSA9IHVzZVN0YXRlKFwiXCIpXG5cbiAgLy8g55u45b2T5LqO55Sf5ZG95ZGo5pyfIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1xuICBpZiAoXG4gICAgZmlsdGVyZWRWYWx1ZVByb3AgIT09IG51bGwgJiZcbiAgICBmaWx0ZXJlZFZhbHVlUHJvcCAhPT0gdW5kZWZpbmVkICYmXG4gICAgSlNPTi5zdHJpbmdpZnkoZmlsdGVyZWRWYWx1ZSkgIT09XG4gICAgICBKU09OLnN0cmluZ2lmeShnZXRGaWx0ZXJlZFZhbHVlKGZpbHRlcmVkVmFsdWVQcm9wKSlcbiAgKSB7XG4gICAgc2V0RmlsdGVyZWRWYWx1ZShnZXRGaWx0ZXJlZFZhbHVlKGZpbHRlcmVkVmFsdWVQcm9wKSlcbiAgfVxuXG4gIGlmICh0eXBlb2YgZmlsdGVyVmlzaWJsZSA9PT0gXCJib29sZWFuXCIgJiYgdmlzaWJsZSAhPT0gZmlsdGVyVmlzaWJsZSkge1xuICAgIHNldFZpc2libGUoZmlsdGVyVmlzaWJsZSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChcbiAgICBmaWx0ZXJlZFZhbHVlUGFyYW06IChzdHJpbmcgfCBudW1iZXIpIHwgKHN0cmluZyB8IG51bWJlcilbXVxuICApID0+IHtcbiAgICBjb25zdCBuZXdWYWx1ZTogYW55ID1cbiAgICAgIGZpbHRlck11bHRpcGxlICYmIGZpbHRlcmVkVmFsdWVQYXJhbVxuICAgICAgICA/IGZpbHRlcmVkVmFsdWVQYXJhbVxuICAgICAgICA6IFtmaWx0ZXJlZFZhbHVlUGFyYW1dXG4gICAgaWYgKG5ld1ZhbHVlLmluY2x1ZGVzKFwiYWxsXCIpKSB7XG4gICAgICBuZXdWYWx1ZS5zcGxpY2UobmV3VmFsdWUuaW5kZXhPZihcImFsbFwiKSwgMSlcbiAgICB9XG4gICAgaWYgKGZpbHRlcmVkVmFsdWVQcm9wID09PSBudWxsKSB7XG4gICAgICBzZXRGaWx0ZXJlZFZhbHVlKGdldEZpbHRlcmVkVmFsdWUobmV3VmFsdWUpKVxuICAgIH1cbiAgICBpZiAob25GaWx0ZXIpIHtcbiAgICAgIGlmIChmaWx0ZXJlZFZhbHVlUGFyYW0gPT09IFwiYWxsXCIpIHtcbiAgICAgICAgb25GaWx0ZXIoW10pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbkZpbHRlcihuZXdWYWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFmaWx0ZXJNdWx0aXBsZSkge1xuICAgICAgLy8g5bu26L+f5piv5Li65LqG6K6p54q25oCB55qE5Y+Y5YyW5Zyo6KeG6KeJ5LiK5YWI6KKr5o6l5Y+XXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKG9uRmlsdGVyVmlzaWJsZUNoYW5nZSkge1xuICAgICAgICAgIG9uRmlsdGVyVmlzaWJsZUNoYW5nZShmYWxzZSlcbiAgICAgICAgfVxuICAgICAgICBzZXRWaXNpYmxlKGZhbHNlKVxuICAgICAgfSwgMTAwKVxuICAgIH1cbiAgfVxuXG4gIGxldCBwb3B1cFxuXG4gIGlmIChmaWx0ZXJTZWFyY2hhYmxlKSB7XG4gICAgcG9wdXAgPSAoXG4gICAgICA8ZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cHJlZml4fS1maWx0ZXItc2VhcmNoYH0+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB2YWx1ZT17c2VhcmNoVmFsdWV9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17ZmlsdGVyU2VhcmNoUGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gZS50YXJnZXRcbiAgICAgICAgICAgICAgc2V0U2VhcmNoVmFsdWUodmFsdWUpXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPEljb24gaWNvbj1cInNlYXJjaFwiIGNsYXNzTmFtZT17YCR7cHJlZml4fS1maWx0ZXItaWNvbmB9IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgZmlsdGVycyA9IHNlYXJjaFZhbHVlXG4gICAgPyBmaWx0ZXJzUHJvcC5maWx0ZXIoKG8pID0+IHtcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBvXG4gICAgICAgIGlmIChmaWx0ZXJTZWFyY2hGdW5jKSB7XG4gICAgICAgICAgcmV0dXJuIGZpbHRlclNlYXJjaEZ1bmMoc2VhcmNoVmFsdWUsIG8pXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmaWx0ZXJTZWFyY2hDYXNlU2Vuc2l0aXZlKSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZyh0ZXh0KVxuICAgICAgICAgICAgLnRvTG9jYWxlTG93ZXJDYXNlKClcbiAgICAgICAgICAgIC5pbmNsdWRlcyhzZWFyY2hWYWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSgpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTdHJpbmcodGV4dCkuaW5jbHVkZXMoc2VhcmNoVmFsdWUpXG4gICAgICB9KVxuICAgIDogZmlsdGVyc1Byb3BcblxuICBpZiAoZmlsdGVyTXVsdGlwbGUpIHtcbiAgICBwb3B1cCA9IChcbiAgICAgIDw+XG4gICAgICAgIHtwb3B1cH1cbiAgICAgICAgeyFmaWx0ZXJzLmxlbmd0aCA/IChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cHJlZml4fS1maWx0ZXItbm9gfT7ml6DljLnphY3nu5Pmnpw8L2Rpdj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8Q2hlY2tib3guR3JvdXBcbiAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7cHJlZml4fS1maWx0ZXJMaXN0YH1cbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17W1wiYWxsXCJdfVxuICAgICAgICAgICAgdmFsdWU9e2ZpbHRlcmVkVmFsdWV9XG4gICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtmaWx0ZXJzLm1hcCgoaXRlbSkgPT4gKFxuICAgICAgICAgICAgICA8Q2hlY2tib3gga2V5PXtpdGVtLnZhbHVlfSB2YWx1ZT17aXRlbS52YWx1ZX0+XG4gICAgICAgICAgICAgICAge2l0ZW0udGV4dH1cbiAgICAgICAgICAgICAgPC9DaGVja2JveD5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvQ2hlY2tib3guR3JvdXA+XG4gICAgICAgICl9XG4gICAgICA8Lz5cbiAgICApXG4gIH0gZWxzZSB7XG4gICAgcG9wdXAgPSAoXG4gICAgICA8PlxuICAgICAgICB7cG9wdXB9XG4gICAgICAgIHshZmlsdGVycy5sZW5ndGggPyAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3ByZWZpeH0tZmlsdGVyLW5vYH0+5peg5Yy56YWN57uT5p6cPC9kaXY+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPFJhZGlvLkdyb3VwXG4gICAgICAgICAgICBjbGFzc05hbWU9e2Ake3ByZWZpeH0tZmlsdGVyTGlzdGB9XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU9XCJhbGxcIlxuICAgICAgICAgICAgdmFsdWU9e2ZpbHRlcmVkVmFsdWUgPyBmaWx0ZXJlZFZhbHVlWzBdIDogbnVsbH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFJhZGlvIHZhbHVlPVwiYWxsXCI+5YWo6YOoPC9SYWRpbz5cbiAgICAgICAgICAgIHtmaWx0ZXJzLm1hcCgoaXRlbSkgPT4gKFxuICAgICAgICAgICAgICA8UmFkaW8ga2V5PXtpdGVtLnZhbHVlfSB2YWx1ZT17aXRlbS52YWx1ZX0+XG4gICAgICAgICAgICAgICAge2l0ZW0udGV4dH1cbiAgICAgICAgICAgICAgPC9SYWRpbz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvUmFkaW8uR3JvdXA+XG4gICAgICAgICl9XG4gICAgICA8Lz5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxQb3BvdmVyXG4gICAgICBhcnJvd2VkPXtmYWxzZX1cbiAgICAgIHZpc2libGU9e3Zpc2libGV9XG4gICAgICBvblZpc2libGVDaGFuZ2U9eyhib29sKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgZmlsdGVyVmlzaWJsZSAhPT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICBzZXRWaXNpYmxlKGJvb2wpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9uRmlsdGVyVmlzaWJsZUNoYW5nZSkge1xuICAgICAgICAgIG9uRmlsdGVyVmlzaWJsZUNoYW5nZShib29sKVxuICAgICAgICB9XG4gICAgICB9fVxuICAgICAgcG9wdXA9e3BvcHVwfVxuICAgICAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgICAgIHBsYWNlbWVudD1cImJvdHRvbUxlZnRcIlxuICAgICAgey4uLmZpbHRlclBvcG92ZXJQcm9wc31cbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGRhdGEtdmFsdWU9e2ZpbHRlcmVkVmFsdWV9XG4gICAgICAgIHJvbGU9XCJjb2x1bW5oZWFkZXJcIlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoYCR7cHJlZml4fS1maWx0ZXJgLCB7XG4gICAgICAgICAgW2Ake3ByZWZpeH0tZmlsdGVyZWRgXTpcbiAgICAgICAgICAgIGZpbHRlcmVkVmFsdWUgJiZcbiAgICAgICAgICAgIChmaWx0ZXJlZFZhbHVlLmxlbmd0aCA+IDEgfHwgZmlsdGVyZWRWYWx1ZVswXSAhPT0gXCJhbGxcIiksXG4gICAgICAgIH0pfVxuICAgICAgPlxuICAgICAgICB7IXNvcnRhYmxlQW5kRmlsdGVyYWJsZSA/IHRpdGxlIDogbnVsbH1cbiAgICAgICAgPEljb24gaWNvbj1cImZpbHRlci1vdXRsaW5lZFwiIC8+XG4gICAgICAgIHshc29ydGFibGVBbmRGaWx0ZXJhYmxlICYmIDxkaXYgY2xhc3NOYW1lPXtgJHtwcmVmaXh9LWNsaWNraG9sZGVyYH0gLz59XG4gICAgICA8L2Rpdj5cbiAgICA8L1BvcG92ZXI+XG4gIClcbn1cblxuVGFibGVGaWx0ZXIucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICog5piv5ZCm5aSa6YCJXG4gICAqL1xuICBmaWx0ZXJNdWx0aXBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiDnrZvpgInmmK/lkKbmlK/mjIHmkJzntKJcbiAgICovXG4gIGZpbHRlclNlYXJjaGFibGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICog562b6YCJ5pCc57Si5byA5ZCv5aSn5bCP5YaZ5pWP5oSf5pCc57Si77yM6buY6K6k5Li6IGZhbHNlXG4gICAqL1xuICBmaWx0ZXJTZWFyY2hDYXNlU2Vuc2l0aXZlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIOetm+mAieaQnOe0oiBwbGFjZWhvbGRlclxuICAgKi9cbiAgZmlsdGVyU2VhcmNoUGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiDnrZvpgInmkJzntKLnmoToh6rlrprkuYkgZnVuY3Rpb25cbiAgICovXG4gIGZpbHRlclNlYXJjaEZ1bmM6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICog562b6YCJIFBvcG92ZXIgcHJvcHPvvIzkvJrlsIbmraTlr7nosaHpgI/kvKDnu5kgPFBvcG92ZXIgLz5cbiAgICovXG4gIGZpbHRlclBvcG92ZXJQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIOWPr+S7peS7juWklumDqOS8oOWFpeetm+mAieeahOWAvO+8jG51bGwsIFtdLCDpg73kvJror4bliKvkuLrmnKrnrZvpgInnirbmgIFcbiAgICovXG4gIGZpbHRlcmVkVmFsdWU6IFByb3BUeXBlcy5hcnJheSxcbiAgLyoqXG4gICAqIOetm+mAiemhue+8jOagvOW8j++8mlt7IHRleHQ6IFwi5pyL5Y+L5ZyI5bm/5ZGKXCIsIHZhbHVlOiAnMicgfV1cbiAgICovXG4gIGZpbHRlcnM6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiDku47lpJbpg6jmjqfliLYgZmlsdGVyIFBvcG92ZXIg55qE5pi+56S6XG4gICAqL1xuICBmaWx0ZXJWaXNpYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIOetm+mAieaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvbkZpbHRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiDnrZvpgIkgcG9wdXAgdmlzaWJsZSDlj5jljJbml7bnmoQgaGFuZGxlcu+8jOWPguaVsCAoYm9vbCwgY29sKVxuICAgKi9cbiAgb25GaWx0ZXJWaXNpYmxlQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIHRpdGxlXG4gICAqL1xuICB0aXRsZTogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBzb3J0YWJsZUFuZEZpbHRlcmFibGU/OiBib29sZWFuXG4gICAqL1xuICBzb3J0YWJsZUFuZEZpbHRlcmFibGU6IFByb3BUeXBlcy5ib29sLFxufVxuXG5UYWJsZUZpbHRlci5kZWZhdWx0UHJvcHMgPSB7XG4gIGZpbHRlck11bHRpcGxlOiBmYWxzZSxcbiAgZmlsdGVyU2VhcmNoYWJsZTogZmFsc2UsXG4gIGZpbHRlclNlYXJjaENhc2VTZW5zaXRpdmU6IGZhbHNlLFxuICBmaWx0ZXJTZWFyY2hQbGFjZWhvbGRlcjogXCLlnKjnrZvpgInpobnkuK3mkJzntKJcIixcbiAgZmlsdGVyU2VhcmNoRnVuYzogdW5kZWZpbmVkLFxuICBmaWx0ZXJQb3BvdmVyUHJvcHM6IHt9LFxuICBmaWx0ZXJlZFZhbHVlOiBudWxsLFxuICBmaWx0ZXJWaXNpYmxlOiBudWxsLFxuICBmaWx0ZXJzOiBudWxsLFxuICBvbkZpbHRlcjogbnVsbCxcbiAgb25GaWx0ZXJWaXNpYmxlQ2hhbmdlOiBudWxsLFxuICB0aXRsZTogbnVsbCxcbiAgc29ydGFibGVBbmRGaWx0ZXJhYmxlOiBmYWxzZSxcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFibGVGaWx0ZXJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSxPQUFPQSxLQUFLLElBQUlDLFFBQVEsUUFBUSxPQUFPO0FBQ3ZDLE9BQU9DLFNBQVMsTUFBTSxZQUFZO0FBQ2xDLE9BQU9DLFVBQVUsTUFBTSxZQUFZO0FBQ25DLE9BQU9DLElBQUksTUFBTSxTQUFTO0FBQzFCLE9BQU9DLE9BQU8sTUFBeUIsWUFBWTtBQUNuRCxPQUFPQyxRQUFRLE1BQU0sYUFBYTtBQUNsQyxPQUFPQyxLQUFLLE1BQU0sVUFBVTtBQUM1QixPQUFPLFNBQVM7QUFFaEIsSUFBTUMsTUFBTSxHQUFHLFlBQVk7QUFDM0IsSUFBTUMsZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFnQkEsQ0FBSUMsR0FBZ0MsRUFBSztFQUM3RCxJQUFJQSxHQUFHLEtBQUssSUFBSSxJQUFJQSxHQUFHLEtBQUtDLFNBQVMsSUFBSUQsR0FBRyxDQUFDRSxNQUFNLEtBQUssQ0FBQyxFQUFFO0lBQ3pELE9BQU8sQ0FBQyxLQUFLLENBQUM7RUFDaEI7RUFDQSxPQUFPRixHQUFHO0FBQ1osQ0FBQztBQXdCRCxJQUFNRyxXQUF3QyxHQUFHLFNBQTNDQSxXQUF3Q0EsQ0FBQUMsSUFBQSxFQWNyQjtFQUFBLElBYnZCQyxnQkFBZ0IsR0FBQUQsSUFBQSxDQUFoQkMsZ0JBQWdCO0lBQ2hCQyx1QkFBdUIsR0FBQUYsSUFBQSxDQUF2QkUsdUJBQXVCO0lBQ3ZCQyx5QkFBeUIsR0FBQUgsSUFBQSxDQUF6QkcseUJBQXlCO0lBQ3pCQyxnQkFBZ0IsR0FBQUosSUFBQSxDQUFoQkksZ0JBQWdCO0lBQ0RDLGlCQUFpQixHQUFBTCxJQUFBLENBQWhDTSxhQUFhO0lBQ2JDLGNBQWMsR0FBQVAsSUFBQSxDQUFkTyxjQUFjO0lBQ2RDLGtCQUFrQixHQUFBUixJQUFB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