react-lightning-design-components
Version:
Salesforce Lightning Design System components built with React 16
267 lines (223 loc) • 22.3 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
var _Button = require('./Button');
var _Button2 = _interopRequireDefault(_Button);
var _Spinner = require('./Spinner');
var _Spinner2 = _interopRequireDefault(_Spinner);
var _util = require('./util');
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var TreeNode = function (_Component) {
(0, _inherits3.default)(TreeNode, _Component);
function TreeNode(props) {
(0, _classCallCheck3.default)(this, TreeNode);
var _this = (0, _possibleConstructorReturn3.default)(this, (TreeNode.__proto__ || (0, _getPrototypeOf2.default)(TreeNode)).call(this, props));
_this.state = { opened: _this.props.defaultOpened };
_this.onLabelClickEvent = _this.onLabelClickEvent.bind(_this);
(0, _util.registerStyle)('tree-node', [['.slds-tree__item .tree-buttons', '{ display: none; }'], ['.slds-tree__item:hover .tree-buttons', '{ display: initial; }']]);
return _this;
}
// TODO: revert it babeljs bug https://phabricator.babeljs.io/T2892
(0, _createClass3.default)(TreeNode, [{
key: 'onToggleEvent',
value: function onToggleEvent(e) {
var _props = this.props,
onToggle = _props.onToggle,
onNodeToggle = _props.onNodeToggle;
if (onToggle) {
onToggle(e, this.props);
}
if (onNodeToggle) {
onNodeToggle(e, this.props);
}
this.setState({ opened: !this.state.opened });
}
}, {
key: 'onLabelClickEvent',
value: function onLabelClickEvent(e) {
var _props2 = this.props,
onLabelClick = _props2.onLabelClick,
onNodeLabelClick = _props2.onNodeLabelClick;
if (onLabelClick) {
onLabelClick(e, this.props);
}
if (onNodeLabelClick) {
onNodeLabelClick(e, this.props);
}
}
}, {
key: 'onClickEvent',
value: function onClickEvent(e) {
var _props3 = this.props,
onClick = _props3.onClick,
onNodeClick = _props3.onNodeClick,
toggleOnNodeClick = _props3.toggleOnNodeClick;
if (onClick) {
onClick(e, this.props);
}
if (onNodeClick) {
onNodeClick(e, this.props);
}
if (toggleOnNodeClick) {
this.onToggleEvent(e);
}
}
}, {
key: 'renderTreeItem',
value: function renderTreeItem(itemProps) {
var className = itemProps.className,
label = itemProps.label,
_itemProps$icon = itemProps.icon,
icon = _itemProps$icon === undefined ? 'chevronright' : _itemProps$icon,
loading = itemProps.loading,
selected = itemProps.selected,
leaf = itemProps.leaf,
isOpened = itemProps.isOpened,
controls = itemProps.controls,
children = itemProps.children,
useInput = itemProps.useInput,
props = (0, _objectWithoutProperties3.default)(itemProps, ['className', 'label', 'icon', 'loading', 'selected', 'leaf', 'isOpened', 'controls', 'children', 'useInput']);
var itmClassNames = (0, _classnames2.default)(className, 'slds-tree__item', {
'slds-is-open': isOpened,
'slds-is-selected': selected
});
var pprops = props;
delete pprops.onNodeToggle;
delete pprops.onNodeClick;
delete pprops.onNodeLabelClick;
delete pprops.toggleOnNodeClick;
delete pprops.showAllways;
return _react2.default.createElement(
'div',
(0, _extends3.default)({
className: itmClassNames,
onClick: this.onClickEvent.bind(this)
}, pprops),
loading ? _react2.default.createElement(_Spinner2.default, { size: 'small', className: 'slds-m-right--x-small' }) : !leaf ? _react2.default.createElement(_Button2.default, {
className: 'slds-m-right--small',
'aria-controls': '',
type: 'icon-bare',
icon: icon,
iconSize: 'small',
onClick: this.onToggleEvent.bind(this)
}) : null,
useInput ? _react2.default.createElement(
'div',
{ className: 'treeNodeInputHolder' },
useInput
) : _react2.default.createElement(
'a',
{
className: 'slds-truncate',
tabIndex: -1,
role: 'presentation'
},
label
),
leaf ? children : null,
controls ? _react2.default.createElement(
'div',
{
className: !props.showAllways ? 'tree-buttons' : undefined,
style: { marginLeft: 'auto' }
},
controls
) : null
);
}
}, {
key: 'renderChildNode',
value: function renderChildNode(level, tnode) {
var _props4 = this.props,
onNodeClick = _props4.onNodeClick,
onNodeToggle = _props4.onNodeToggle,
onNodeLabelClick = _props4.onNodeLabelClick,
toggleOnNodeClick = _props4.toggleOnNodeClick;
return _react2.default.cloneElement(tnode, {
level: level, onNodeClick: onNodeClick, onNodeToggle: onNodeToggle, onNodeLabelClick: onNodeLabelClick, toggleOnNodeClick: toggleOnNodeClick
});
}
}, {
key: 'render',
value: function render() {
var _props5 = this.props,
defaultOpened = _props5.defaultOpened,
opened = _props5.opened,
leaf = _props5.leaf,
level = _props5.level,
children = _props5.children,
props = (0, _objectWithoutProperties3.default)(_props5, ['defaultOpened', 'opened', 'leaf', 'level', 'children']);
var isOpened = typeof opened !== 'undefined' ? opened : typeof this.state.opened !== 'undefined' ? this.state.opened : defaultOpened;
var grpClassNames = (0, _classnames2.default)('slds-tree__group', {
'slds-nested': !leaf,
'is-expanded': isOpened,
'slds-show': isOpened,
'slds-hide': !isOpened
});
var itemProps = (0, _extends3.default)({ leaf: leaf, isOpened: isOpened, children: children }, props);
if (leaf) {
return _react2.default.createElement(
'li',
{ role: 'treeitem', 'aria-level': level },
this.renderTreeItem(itemProps)
);
}
return _react2.default.createElement(
'li',
{
role: 'treeitem',
'aria-level': level,
'aria-expanded': isOpened
},
this.renderTreeItem(itemProps),
_react2.default.createElement(
'ul',
{ className: grpClassNames, role: 'group' },
_react2.default.Children.map(children, this.renderChildNode.bind(this, level + 1))
)
);
}
}]);
return TreeNode;
}(_react.Component);
exports.default = TreeNode;
TreeNode.propTypes = {
className: _propTypes2.default.string,
label: _propTypes2.default.string,
onClick: _propTypes2.default.func,
onToggle: _propTypes2.default.func,
onNodeToggle: _propTypes2.default.func,
onNodeLabelClick: _propTypes2.default.func,
onLabelClick: _propTypes2.default.func,
onNodeClick: _propTypes2.default.func,
toggleOnNodeClick: _propTypes2.default.bool,
defaultOpened: _propTypes2.default.bool,
opened: _propTypes2.default.bool,
leaf: _propTypes2.default.bool,
level: _propTypes2.default.number,
children: _propTypes2.default.node,
controls: _propTypes2.default.arrayOf(_propTypes2.default.element),
showAllways: _propTypes2.default.bool
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL1RyZWVOb2RlLmpzIl0sIm5hbWVzIjpbIlRyZWVOb2RlIiwicHJvcHMiLCJzdGF0ZSIsIm9wZW5lZCIsImRlZmF1bHRPcGVuZWQiLCJvbkxhYmVsQ2xpY2tFdmVudCIsImJpbmQiLCJlIiwib25Ub2dnbGUiLCJvbk5vZGVUb2dnbGUiLCJzZXRTdGF0ZSIsIm9uTGFiZWxDbGljayIsIm9uTm9kZUxhYmVsQ2xpY2siLCJvbkNsaWNrIiwib25Ob2RlQ2xpY2siLCJ0b2dnbGVPbk5vZGVDbGljayIsIm9uVG9nZ2xlRXZlbnQiLCJpdGVtUHJvcHMiLCJjbGFzc05hbWUiLCJsYWJlbCIsImljb24iLCJsb2FkaW5nIiwic2VsZWN0ZWQiLCJsZWFmIiwiaXNPcGVuZWQiLCJjb250cm9scyIsImNoaWxkcmVuIiwidXNlSW5wdXQiLCJpdG1DbGFzc05hbWVzIiwicHByb3BzIiwic2hvd0FsbHdheXMiLCJvbkNsaWNrRXZlbnQiLCJ1bmRlZmluZWQiLCJtYXJnaW5MZWZ0IiwibGV2ZWwiLCJ0bm9kZSIsImNsb25lRWxlbWVudCIsImdycENsYXNzTmFtZXMiLCJyZW5kZXJUcmVlSXRlbSIsIkNoaWxkcmVuIiwibWFwIiwicmVuZGVyQ2hpbGROb2RlIiwicHJvcFR5cGVzIiwic3RyaW5nIiwiZnVuYyIsImJvb2wiLCJudW1iZXIiLCJub2RlIiwiYXJyYXlPZiIsImVsZW1lbnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOztBQUNBOzs7Ozs7SUFFcUJBLFE7OztBQUNuQixvQkFBWUMsS0FBWixFQUFtQjtBQUFBOztBQUFBLDBJQUNYQSxLQURXOztBQUVqQixVQUFLQyxLQUFMLEdBQWEsRUFBRUMsUUFBUSxNQUFLRixLQUFMLENBQVdHLGFBQXJCLEVBQWI7QUFDQSxVQUFLQyxpQkFBTCxHQUF5QixNQUFLQSxpQkFBTCxDQUF1QkMsSUFB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QkFoSmtCbEMsUTs7O0FBb0pyQkEsU0FBUzBDLFNBQVQsR0FBcUI7QUFDbkJ4QixhQUFXLG9CQUFVeUIsTUFERjtBQUVuQnhCLFNBQU8sb0JBQVV3QixNQUZFO0FBR25COUIsV0FBUyxvQkFBVStCLElBSEE7QUFJbkJwQyxZQUFVLG9CQUFVb0MsSUFKRDtBQUtuQm5DLGdCQUFjLG9CQUFVbUMsSUFMTDtBQU1uQmhDLG9CQUFrQixvQkFBVWdDLElBTlQ7QUFPbkJqQyxnQkFBYyxvQkFBVWlDLElBUEw7QUFRbkI5QixlQUFhLG9CQUFVOEIsSUFSSjtBQVNuQjdCLHFCQUFtQixvQkFBVThCLElBVFY7QUFVbkJ6QyxpQkFBZSxvQkFBVXlDLElBVk47QUFXbkIxQyxVQUFRLG9CQUFVMEMsSUFYQztBQVluQnRCLFFBQU0sb0JBQVVzQixJQVpHO0FBYW5CWCxTQUFPLG9CQUFVWSxNQWJFO0FBY25CcEIsWUFBVSxvQkFBVXFCLElBZEQ7QUFlbkJ0QixZQUFVLG9CQUFVdUIsT0FBVixDQUFrQixvQkFBVUMsT0FBNUIsQ0FmUztBQWdCbkJuQixlQUFhLG9CQUFVZTtBQWhCSixDQUFyQiIsImZpbGUiOiJUcmVlTm9kZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBCdXR0b24gZnJvbSAnLi9CdXR0b24nO1xuaW1wb3J0IFNwaW5uZXIgZnJvbSAnLi9TcGlubmVyJztcbmltcG9ydCB7IHJlZ2lzdGVyU3R5bGUgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVHJlZU5vZGUgZXh0ZW5kcyBDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0geyBvcGVuZWQ6IHRoaXMucHJvcHMuZGVmYXVsdE9wZW5lZCB9O1xuICAgIHRoaXMub25MYWJlbENsaWNrRXZlbnQgPSB0aGlzLm9uTGFiZWxDbGlja0V2ZW50LmJpbmQodGhpcyk7XG4gICAgcmVnaXN0ZXJTdHlsZSgndHJlZS1ub2RlJywgW1xuICAgICAgW1xuICAgICAgICAnLnNsZHMtdHJlZV9faXRlbSAudHJlZS1idXR0b25zJyxcbiAgICAgICAgJ3sgZGlzcGxheTogbm9uZTsgfScsXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnLnNsZHMtdHJlZV9faXRlbTpob3ZlciAudHJlZS1idXR0b25zJyxcbiAgICAgICAgJ3sgZGlzcGxheTogaW5pdGlhbDsgfScsXG4gICAgICBdLFxuICAgIF0pO1xuICB9XG5cbiAgLy8gVE9ETzogcmV2ZXJ0IGl0IGJhYmVsanMgYnVnIGh0dHBzOi8vcGhhYnJpY2F0b3IuYmFiZWxqcy5pby9UMjg5MlxuICBvblRvZ2dsZUV2ZW50KGUpIHtcbiAgICBjb25zdCB7IG9uVG9nZ2xlLCBvbk5vZGVUb2dnbGUgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKG9uVG9nZ2xlKSB7IG9uVG9nZ2xlKGUsIHRoaXMucHJvcHMpOyB9XG4gICAgaWYgKG9uTm9kZVRvZ2dsZSkgeyBvbk5vZGVUb2dnbGUoZSwgdGhpcy5wcm9wcyk7IH1cbiAgICB0aGlzLnNldFN0YXRlKHsgb3BlbmVkOiAhdGhpcy5zdGF0ZS5vcGVuZWQgfSk7XG4gIH1cblxuICBvbkxhYmVsQ2xpY2tFdmVudChlKSB7XG4gICAgY29uc3QgeyBvbkxhYmVsQ2xpY2ssIG9uTm9kZUxhYmVsQ2xpY2sgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKG9uTGFiZWxDbGljaykgeyBvbkxhYmVsQ2xpY2soZSwgdGhpcy5wcm9wcyk7IH1cbiAgICBpZiAob25Ob2RlTGFiZWxDbGljaykgeyBvbk5vZGVMYWJlbENsaWNrKGUsIHRoaXMucHJvcHMpOyB9XG4gIH1cblxuICBvbkNsaWNrRXZlbnQoZSkge1xuICAgIGNvbnN0IHsgb25DbGljaywgb25Ob2RlQ2xpY2ssIHRvZ2dsZU9uTm9kZUNsaWNrIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChvbkNsaWNrKSB7IG9uQ2xpY2soZSwgdGhpcy5wcm9wcyk7IH1cbiAgICBpZiAob25Ob2RlQ2xpY2spIHsgb25Ob2RlQ2xpY2soZSwgdGhpcy5wcm9wcyk7IH1cbiAgICBpZiAodG9nZ2xlT25Ob2RlQ2xpY2spIHtcbiAgICAgIHRoaXMub25Ub2dnbGVFdmVudChlKTtcbiAgICB9XG4gIH1cblxuXG4gIHJlbmRlclRyZWVJdGVtKGl0ZW1Qcm9wcykge1xuICAgIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSwgbGFiZWwsIGljb24gPSAnY2hldnJvbnJpZ2h0JywgbG9hZGluZywgc2VsZWN0ZWQsIGxlYWYsIGlzT3BlbmVkLCBjb250cm9scyxcbiAgICAgIGNoaWxkcmVuLCB1c2VJbnB1dCwgLi4ucHJvcHMsXG4gICAgfSA9IGl0ZW1Qcm9wcztcbiAgICBjb25zdCBpdG1DbGFzc05hbWVzID0gY2xhc3NuYW1lcyhjbGFzc05hbWUsICdzbGRzLXRyZWVfX2l0ZW0nLCB7XG4gICAgICAnc2xkcy1pcy1vcGVuJzogaXNPcGVuZWQsXG4gICAgICAnc2xkcy1pcy1zZWxlY3RlZCc6IHNlbGVjdGVkLFxuICAgIH0pO1xuICAgIGNvbnN0IHBwcm9wcyA9IHByb3BzO1xuICAgIGRlbGV0ZSBwcHJvcHMub25Ob2RlVG9nZ2xlO1xuICAgIGRlbGV0ZSBwcHJvcHMub25Ob2RlQ2xpY2s7XG4gICAgZGVsZXRlIHBwcm9wcy5vbk5vZGVMYWJlbENsaWNrO1xuICAgIGRlbGV0ZSBwcHJvcHMudG9nZ2xlT25Ob2RlQ2xpY2s7XG4gICAgZGVsZXRlIHBwcm9wcy5zaG93QWxsd2F5cztcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9eyBpdG1DbGFzc05hbWVzIH1cbiAgICAgICAgb25DbGljaz17IHRoaXMub25DbGlja0V2ZW50LmJpbmQodGhpcykgfVxuICAgICAgICB7IC4uLnBwcm9wcyB9XG4gICAgICA+XG4gICAgICAgIHtcbiAgICAgICAgICBsb2FkaW5nID8gPFNwaW5uZXIgc2l6ZT0nc21hbGwnIGNsYXNzTmFtZT0nc2xkcy1tLXJpZ2h0LS14LXNtYWxsJyAvPiA6XG4gICAgICAgICAgIWxlYWYgP1xuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBjbGFzc05hbWU9J3NsZHMtbS1yaWdodC0tc21hbGwnXG4gICAgICAgICAgICAgIGFyaWEtY29udHJvbHM9JydcbiAgICAgICAgICAgICAgdHlwZT0naWNvbi1iYXJlJ1xuICAgICAgICAgICAgICBpY29uPXsgaWNvbiB9XG4gICAgICAgICAgICAgIGljb25TaXplPSdzbWFsbCdcbiAgICAgICAgICAgICAgb25DbGljaz17IHRoaXMub25Ub2dnbGVFdmVudC5iaW5kKHRoaXMpIH1cbiAgICAgICAgICAgIC8+IDpcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgfVxuICAgICAgICB7XG4gICAgICAgICAgdXNlSW5wdXRcbiAgICAgICAgICA/XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ndHJlZU5vZGVJbnB1dEhvbGRlcic+e3VzZUlucHV0fTwvZGl2PlxuICAgICAgICAgIDpcbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT0nc2xkcy10cnVuY2F0ZSdcbiAgICAgICAgICAgICAgdGFiSW5kZXg9eyAtMSB9XG4gICAgICAgICAgICAgIHJvbGU9J3ByZXNlbnRhdGlvbidcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2xhYmVsfVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICB9XG4gICAgICAgIHsgbGVhZiA/IGNoaWxkcmVuIDogbnVsbCB9XG4gICAgICAgIHsgY29udHJvbHNcbiAgICAgICAgICA/IDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17IXByb3BzLnNob3dBbGx3YXlzID8gJ3RyZWUtYnV0dG9ucycgOiB1bmRlZmluZWQgfVxuICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luTGVmdDogJ2F1dG8nIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2NvbnRyb2xzfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDogbnVsbCB9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyQ2hpbGROb2RlKGxldmVsLCB0bm9kZSkge1xuICAgIGNvbnN0IHsgb25Ob2RlQ2xpY2ssIG9uTm9kZVRvZ2dsZSwgb25Ob2RlTGFiZWxDbGljaywgdG9nZ2xlT25Ob2RlQ2xpY2sgfSA9IHRoaXMucHJvcHM7XG4gICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudCh0bm9kZSwge1xuICAgICAgbGV2ZWwsIG9uTm9kZUNsaWNrLCBvbk5vZGVUb2dnbGUsIG9uTm9kZUxhYmVsQ2xpY2ssIHRvZ2dsZU9uTm9kZUNsaWNrLFxuICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGRlZmF1bHRPcGVuZWQsIG9wZW5lZCwgbGVhZiwgbGV2ZWwsXG4gICAgICBjaGlsZHJlbiwgLi4ucHJvcHMsXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgaXNPcGVuZWQgPVxuICAgICAgdHlwZW9mIG9wZW5lZCAhPT0gJ3VuZGVmaW5lZCcgPyBvcGVuZWQgOlxuICAgICAgdHlwZW9mIHRoaXMuc3RhdGUub3BlbmVkICE9PSAndW5kZWZpbmVkJyA/IHRoaXMuc3RhdGUub3BlbmVkIDpcbiAgICAgIGRlZmF1bHRPcGVuZWQ7XG4gICAgY29uc3QgZ3JwQ2xhc3NOYW1lcyA9IGNsYXNzbmFtZXMoJ3NsZHMtdHJlZV9fZ3JvdXAnLCB7XG4gICAgICAnc2xkcy1uZXN0ZWQnOiAhbGVhZixcbiAgICAgICdpcy1leHBhbmRlZCc6IGlzT3BlbmVkLFxuICAgICAgJ3NsZHMtc2hvdyc6IGlzT3BlbmVkLFxuICAgICAgJ3NsZHMtaGlkZSc6ICFpc09wZW5lZCxcbiAgICB9KTtcbiAgICBjb25zdCBpdGVtUHJvcHMgPSB7IGxlYWYsIGlzT3BlbmVkLCBjaGlsZHJlbiwgLi4ucHJvcHMgfTtcbiAgICBpZiAobGVhZikge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGxpIHJvbGU9J3RyZWVpdGVtJyBhcmlhLWxldmVsPXsgbGV2ZWwgfT5cbiAgICAgICAgICB7IHRoaXMucmVuZGVyVHJlZUl0ZW0oaXRlbVByb3BzKSB9XG4gICAgICAgIDwvbGk+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8bGlcbiAgICAgICAgcm9sZT0ndHJlZWl0ZW0nXG4gICAgICAgIGFyaWEtbGV2ZWw9eyBsZXZlbCB9XG4gICAgICAgIGFyaWEtZXhwYW5kZWQ9eyBpc09wZW5lZCB9XG4gICAgICA+XG4gICAgICAgIHsgdGhpcy5yZW5kZXJUcmVlSXRlbShpdGVtUHJvcHMpIH1cbiAgICAgICAgPHVsIGNsYXNzTmFtZT17IGdycENsYXNzTmFtZXMgfSByb2xlPSdncm91cCc+XG4gICAgICAgICAgeyBSZWFjdC5DaGlsZHJlbi5tYXAoY2hpbGRyZW4sIHRoaXMucmVuZGVyQ2hpbGROb2RlLmJpbmQodGhpcywgbGV2ZWwgKyAxKSkgfVxuICAgICAgICA8L3VsPlxuICAgICAgPC9saT5cbiAgICApO1xuICB9XG59XG5cblxuVHJlZU5vZGUucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Ub2dnbGU6IFByb3BUeXBlcy5mdW5jLFxuICBvbk5vZGVUb2dnbGU6IFByb3BUeXBlcy5mdW5jLFxuICBvbk5vZGVMYWJlbENsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25MYWJlbENsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Ob2RlQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICB0b2dnbGVPbk5vZGVDbGljazogUHJvcFR5cGVzLmJvb2wsXG4gIGRlZmF1bHRPcGVuZWQ6IFByb3BUeXBlcy5ib29sLFxuICBvcGVuZWQ6IFByb3BUeXBlcy5ib29sLFxuICBsZWFmOiBQcm9wVHlwZXMuYm9vbCxcbiAgbGV2ZWw6IFByb3BUeXBlcy5udW1iZXIsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgY29udHJvbHM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5lbGVtZW50KSxcbiAgc2hvd0FsbHdheXM6IFByb3BUeXBlcy5ib29sLFxufTtcbiJdfQ==