UNPKG

matrix-react-sdk

Version:
234 lines (195 loc) 25.3 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var React = _interopRequireWildcard(require("react")); var _classnames = _interopRequireDefault(require("classnames")); var _dispatcher = _interopRequireDefault(require("../../dispatcher/dispatcher")); var _languageHandler = require("../../languageHandler"); var _AccessibleButton = _interopRequireDefault(require("../views/elements/AccessibleButton")); var _actions = require("../../dispatcher/actions"); var _RoomListStore = _interopRequireDefault(require("../../stores/room-list/RoomListStore")); var _NameFilterCondition = require("../../stores/room-list/filters/NameFilterCondition"); var _KeyBindingsManager = require("../../KeyBindingsManager"); var _replaceableComponent = require("../../utils/replaceableComponent"); var _SpaceStore = _interopRequireWildcard(require("../../stores/SpaceStore")); var _dec, _class, _temp; let RoomSearch = (_dec = (0, _replaceableComponent.replaceableComponent)("structures.RoomSearch"), _dec(_class = (_temp = class RoomSearch extends React.PureComponent /*:: <IProps, IState>*/ { constructor(props /*: IProps*/ ) { super(props); (0, _defineProperty2.default)(this, "dispatcherRef", void 0); (0, _defineProperty2.default)(this, "inputRef", /*#__PURE__*/(0, React.createRef)()); (0, _defineProperty2.default)(this, "searchFilter", new _NameFilterCondition.NameFilterCondition()); (0, _defineProperty2.default)(this, "onSpaces", (spaces /*: Room[]*/ ) => { this.setState({ inSpaces: spaces.length > 0 }); }); (0, _defineProperty2.default)(this, "onAction", (payload /*: ActionPayload*/ ) => { if (payload.action === 'view_room' && payload.clear_search) { this.clearInput(); } else if (payload.action === 'focus_room_filter' && this.inputRef.current) { this.inputRef.current.focus(); } }); (0, _defineProperty2.default)(this, "clearInput", () => { if (!this.inputRef.current) return; this.inputRef.current.value = ""; this.onChange(); }); (0, _defineProperty2.default)(this, "openSearch", () => { _dispatcher.default.dispatch({ action: "show_left_panel" }); _dispatcher.default.dispatch({ action: "focus_room_filter" }); }); (0, _defineProperty2.default)(this, "onChange", () => { if (!this.inputRef.current) return; this.setState({ query: this.inputRef.current.value }); }); (0, _defineProperty2.default)(this, "onFocus", (ev /*: React.FocusEvent<HTMLInputElement>*/ ) => { this.setState({ focused: true }); ev.target.select(); }); (0, _defineProperty2.default)(this, "onBlur", (ev /*: React.FocusEvent<HTMLInputElement>*/ ) => { this.setState({ focused: false }); }); (0, _defineProperty2.default)(this, "onKeyDown", (ev /*: React.KeyboardEvent*/ ) => { const action = (0, _KeyBindingsManager.getKeyBindingsManager)().getRoomListAction(ev); switch (action) { case _KeyBindingsManager.RoomListAction.ClearSearch: this.clearInput(); _dispatcher.default.fire(_actions.Action.FocusComposer); break; case _KeyBindingsManager.RoomListAction.NextRoom: case _KeyBindingsManager.RoomListAction.PrevRoom: // we don't handle these actions here put pass the event on to the interested party (LeftPanel) this.props.onKeyDown(ev); break; case _KeyBindingsManager.RoomListAction.SelectRoom: { const shouldClear = this.props.onSelectRoom(); if (shouldClear) { // wrap in set immediate to delay it so that we don't clear the filter & then change room setImmediate(() => { this.clearInput(); }); } break; } } }); this.state = { query: "", focused: false, inSpaces: false }; this.dispatcherRef = _dispatcher.default.register(this.onAction); // clear filter when changing spaces, in future we may wish to maintain a filter per-space _SpaceStore.default.instance.on(_SpaceStore.UPDATE_SELECTED_SPACE, this.clearInput); _SpaceStore.default.instance.on(_SpaceStore.UPDATE_TOP_LEVEL_SPACES, this.onSpaces); } componentDidUpdate(prevProps /*: Readonly<IProps>*/ , prevState /*: Readonly<IState>*/ ) /*: void*/ { if (prevState.query !== this.state.query) { const hadSearch = !!this.searchFilter.search.trim(); const haveSearch = !!this.state.query.trim(); this.searchFilter.search = this.state.query; if (!hadSearch && haveSearch) { // started a new filter - add the condition _RoomListStore.default.instance.addFilter(this.searchFilter); } else if (hadSearch && !haveSearch) { // cleared a filter - remove the condition _RoomListStore.default.instance.removeFilter(this.searchFilter); } // else the filter hasn't changed enough for us to care here } } componentWillUnmount() { _dispatcher.default.unregister(this.dispatcherRef); _SpaceStore.default.instance.off(_SpaceStore.UPDATE_SELECTED_SPACE, this.clearInput); _SpaceStore.default.instance.off(_SpaceStore.UPDATE_TOP_LEVEL_SPACES, this.onSpaces); } render() /*: React.ReactNode*/ { const classes = (0, _classnames.default)({ 'mx_RoomSearch': true, 'mx_RoomSearch_hasQuery': this.state.query, 'mx_RoomSearch_focused': this.state.focused, 'mx_RoomSearch_minimized': this.props.isMinimized }); const inputClasses = (0, _classnames.default)({ 'mx_RoomSearch_input': true, 'mx_RoomSearch_inputExpanded': this.state.query || this.state.focused }); let placeholder = (0, _languageHandler._t)("Filter"); if (this.state.inSpaces) { placeholder = (0, _languageHandler._t)("Filter all spaces"); } let icon = /*#__PURE__*/React.createElement("div", { className: "mx_RoomSearch_icon" }); let input = /*#__PURE__*/React.createElement("input", { type: "text", ref: this.inputRef, className: inputClasses, value: this.state.query, onFocus: this.onFocus, onBlur: this.onBlur, onChange: this.onChange, onKeyDown: this.onKeyDown, placeholder: placeholder, autoComplete: "off" }); let clearButton = /*#__PURE__*/React.createElement(_AccessibleButton.default, { tabIndex: -1, title: (0, _languageHandler._t)("Clear filter"), className: "mx_RoomSearch_clearButton", onClick: this.clearInput }); if (this.props.isMinimized) { icon = /*#__PURE__*/React.createElement(_AccessibleButton.default, { title: (0, _languageHandler._t)("Filter rooms and people"), className: "mx_RoomSearch_icon mx_RoomSearch_minimizedHandle", onClick: this.openSearch }); input = null; clearButton = null; } return /*#__PURE__*/React.createElement("div", { className: classes }, icon, input, clearButton); } }, _temp)) || _class); exports.default = RoomSearch; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3N0cnVjdHVyZXMvUm9vbVNlYXJjaC50c3giXSwibmFtZXMiOlsiUm9vbVNlYXJjaCIsIlJlYWN0IiwiUHVyZUNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJOYW1lRmlsdGVyQ29uZGl0aW9uIiwic3BhY2VzIiwic2V0U3RhdGUiLCJpblNwYWNlcyIsImxlbmd0aCIsInBheWxvYWQiLCJhY3Rpb24iLCJjbGVhcl9zZWFyY2giLCJjbGVhcklucHV0IiwiaW5wdXRSZWYiLCJjdXJyZW50IiwiZm9jdXMiLCJ2YWx1ZSIsIm9uQ2hhbmdlIiwiZGVmYXVsdERpc3BhdGNoZXIiLCJkaXNwYXRjaCIsInF1ZXJ5IiwiZXYiLCJmb2N1c2VkIiwidGFyZ2V0Iiwic2VsZWN0IiwiZ2V0Um9vbUxpc3RBY3Rpb24iLCJSb29tTGlzdEFjdGlvbiIsIkNsZWFyU2VhcmNoIiwiZmlyZSIsIkFjdGlvbiIsIkZvY3VzQ29tcG9zZXIiLCJOZXh0Um9vbSIsIlByZXZSb29tIiwib25LZXlEb3duIiwiU2VsZWN0Um9vbSIsInNob3VsZENsZWFyIiwib25TZWxlY3RSb29tIiwic2V0SW1tZWRpYXRlIiwic3RhdGUiLCJkaXNwYXRjaGVyUmVmIiwicmVnaXN0ZXIiLCJvbkFjdGlvbiIsIlNwYWNlU3RvcmUiLCJpbnN0YW5jZSIsIm9uIiwiVVBEQVRFX1NFTEVDVEVEX1NQQUNFIiwiVVBEQVRFX1RPUF9MRVZFTF9TUEFDRVMiLCJvblNwYWNlcyIsImNvbXBvbmVudERpZFVwZGF0ZSIsInByZXZQcm9wcyIsInByZXZTdGF0ZSIsImhhZFNlYXJjaCIsInNlYXJjaEZpbHRlciIsInNlYXJjaCIsInRyaW0iLCJoYXZlU2VhcmNoIiwiUm9vbUxpc3RTdG9yZSIsImFkZEZpbHRlciIsInJlbW92ZUZpbHRlciIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwidW5yZWdpc3RlciIsIm9mZiIsInJlbmRlciIsImNsYXNzZXMiLCJpc01pbmltaXplZCIsImlucHV0Q2xhc3NlcyIsInBsYWNlaG9sZGVyIiwiaWNvbiIsImlucHV0Iiwib25Gb2N1cyIsIm9uQmx1ciIsImNsZWFyQnV0dG9uIiwib3BlblNlYXJjaCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQWdCQTs7QUFFQTs7QUFHQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztJQWtCcUJBLFUsV0FEcEIsZ0RBQXFCLHVCQUFyQixDLHlCQUFELE1BQ3FCQSxVQURyQixTQUN3Q0MsS0FBSyxDQUFDQztBQUQ5QztBQUM0RTtBQUt4RUMsRUFBQUEsV0FBVyxDQUFDQztBQUFEO0FBQUEsSUFBZ0I7QUFDdkIsVUFBTUEsS0FBTjtBQUR1QjtBQUFBLGlFQUgyQixzQkFHM0I7QUFBQSx3REFGaUIsSUFBSUMsd0NBQUosRUFFakI7QUFBQSxvREFvQ1IsQ0FBQ0M7QUFBRDtBQUFBLFNBQW9CO0FBQ25DLFdBQUtDLFFBQUwsQ0FBYztBQUNWQyxRQUFBQSxRQUFRLEVBQUVGLE1BQU0sQ0FBQ0csTUFBUCxHQUFnQjtBQURoQixPQUFkO0FBR0gsS0F4QzBCO0FBQUEsb0RBMENSLENBQUNDO0FBQUQ7QUFBQSxTQUE0QjtBQUMzQyxVQUFJQSxPQUFPLENBQUNDLE1BQVIsS0FBbUIsV0FBbkIsSUFBa0NELE9BQU8sQ0FBQ0UsWUFBOUMsRUFBNEQ7QUFDeEQsYUFBS0MsVUFBTDtBQUNILE9BRkQsTUFFTyxJQUFJSCxPQUFPLENBQUNDLE1BQVIsS0FBbUIsbUJBQW5CLElBQTBDLEtBQUtHLFFBQUwsQ0FBY0MsT0FBNUQsRUFBcUU7QUFDeEUsYUFBS0QsUUFBTCxDQUFjQyxPQUFkLENBQXNCQyxLQUF0QjtBQUNIO0FBQ0osS0FoRDBCO0FBQUEsc0RBa0ROLE1BQU07QUFDdkIsVUFBSSxDQUFDLEtBQUtGLFFBQUwsQ0FBY0MsT0FBbkIsRUFBNEI7QUFDNUIsV0FBS0QsUUFBTCxDQUFjQyxPQUFkLENBQXNCRSxLQUF0QixHQUE4QixFQUE5QjtBQUNBLFdBQUtDLFFBQUw7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QyxNQURUO0FBRUksTUFBQSxHQUFHLEVBQUUsS0FBS3ZELFFBRmQ7QUFHSSxNQUFBLFNBQVMsRUFBRW9ELFlBSGY7QUFJSSxNQUFBLEtBQUssRUFBRSxLQUFLM0IsS0FBTCxDQUFXbEIsS0FKdEI7QUFLSSxNQUFBLE9BQU8sRUFBRSxLQUFLaUQsT0FMbEI7QUFNSSxNQUFBLE1BQU0sRUFBRSxLQUFLQyxNQU5qQjtBQU9JLE1BQUEsUUFBUSxFQUFFLEtBQUtyRCxRQVBuQjtBQVFJLE1BQUEsU0FBUyxFQUFFLEtBQUtnQixTQVJwQjtBQVNJLE1BQUEsV0FBVyxFQUFFaUMsV0FUakI7QUFVSSxNQUFBLFlBQVksRUFBQztBQVZqQixNQURKO0FBY0EsUUFBSUssV0FBVyxnQkFDWCxvQkFBQyx5QkFBRDtBQUNJLE1BQUEsUUFBUSxFQUFFLENBQUMsQ0FEZjtBQUVJLE1BQUEsS0FBSyxFQUFFLHlCQUFHLGNBQUgsQ0FGWDtBQUdJLE1BQUEsU0FBUyxFQUFDLDJCQUhkO0FBSUksTUFBQSxPQUFPLEVBQUUsS0FBSzNEO0FBSmxCLE1BREo7O0FBU0EsUUFBSSxLQUFLVCxLQUFMLENBQVc2RCxXQUFmLEVBQTRCO0FBQ3hCRyxNQUFBQSxJQUFJLGdCQUNBLG9CQUFDLHlCQUFEO0FBQ0ksUUFBQSxLQUFLLEVBQUUseUJBQUcseUJBQUgsQ0FEWDtBQUVJLFFBQUEsU0FBUyxFQUFDLGtEQUZkO0FBR0ksUUFBQSxPQUFPLEVBQUUsS0FBS0s7QUFIbEIsUUFESjtBQU9BSixNQUFBQSxLQUFLLEdBQUcsSUFBUjtBQUNBRyxNQUFBQSxXQUFXLEdBQUcsSUFBZDtBQUNIOztBQUVELHdCQUNJO0FBQUssTUFBQSxTQUFTLEVBQUVSO0FBQWhCLE9BQ0tJLElBREwsRUFFS0MsS0FGTCxFQUdLRyxXQUhMLENBREo7QUFPSDs7QUF4S3VFLEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjAsIDIwMjEgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbnlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cblVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxubGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGNyZWF0ZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCB7IFJvb20gfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbW9kZWxzL3Jvb21cIjtcblxuaW1wb3J0IGRlZmF1bHREaXNwYXRjaGVyIGZyb20gXCIuLi8uLi9kaXNwYXRjaGVyL2Rpc3BhdGNoZXJcIjtcbmltcG9ydCB7IF90IH0gZnJvbSBcIi4uLy4uL2xhbmd1YWdlSGFuZGxlclwiO1xuaW1wb3J0IHsgQWN0aW9uUGF5bG9hZCB9IGZyb20gXCIuLi8uLi9kaXNwYXRjaGVyL3BheWxvYWRzXCI7XG5pbXBvcnQgQWNjZXNzaWJsZUJ1dHRvbiBmcm9tIFwiLi4vdmlld3MvZWxlbWVudHMvQWNjZXNzaWJsZUJ1dHRvblwiO1xuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIi4uLy4uL2Rpc3BhdGNoZXIvYWN0aW9uc1wiO1xuaW1wb3J0IFJvb21MaXN0U3RvcmUgZnJvbSBcIi4uLy4uL3N0b3Jlcy9yb29tLWxpc3QvUm9vbUxpc3RTdG9yZVwiO1xuaW1wb3J0IHsgTmFtZUZpbHRlckNvbmRpdGlvbiB9IGZyb20gXCIuLi8uLi9zdG9yZXMvcm9vbS1saXN0L2ZpbHRlcnMvTmFtZUZpbHRlckNvbmRpdGlvblwiO1xuaW1wb3J0IHsgZ2V0S2V5QmluZGluZ3NNYW5hZ2VyLCBSb29tTGlzdEFjdGlvbiB9IGZyb20gXCIuLi8uLi9LZXlCaW5kaW5nc01hbmFnZXJcIjtcbmltcG9ydCB7IHJlcGxhY2VhYmxlQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL3V0aWxzL3JlcGxhY2VhYmxlQ29tcG9uZW50XCI7XG5pbXBvcnQgU3BhY2VTdG9yZSwgeyBVUERBVEVfU0VMRUNURURfU1BBQ0UsIFVQREFURV9UT1BfTEVWRUxfU1BBQ0VTIH0gZnJvbSBcIi4uLy4uL3N0b3Jlcy9TcGFjZVN0b3JlXCI7XG5cbmludGVyZmFjZSBJUHJvcHMge1xuICAgIGlzTWluaW1pemVkOiBib29sZWFuO1xuICAgIG9uS2V5RG93bihldjogUmVhY3QuS2V5Ym9hcmRFdmVudCk6IHZvaWQ7XG4gICAgLyoqXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiBhIHJvb20gaGFzIGJlZW4gc2VsZWN0ZWQgYW5kIHRoZSBzZWFyY2ggZmllbGQgc2hvdWxkIGJlIGNsZWFyZWRcbiAgICAgKi9cbiAgICBvblNlbGVjdFJvb20oKTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIElTdGF0ZSB7XG4gICAgcXVlcnk6IHN0cmluZztcbiAgICBmb2N1c2VkOiBib29sZWFuO1xuICAgIGluU3BhY2VzOiBib29sZWFuO1xufVxuXG5AcmVwbGFjZWFibGVDb21wb25lbnQoXCJzdHJ1Y3R1cmVzLlJvb21TZWFyY2hcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvb21TZWFyY2ggZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PElQcm9wcywgSVN0YXRlPiB7XG4gICAgcHJpdmF0ZSBkaXNwYXRjaGVyUmVmOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBpbnB1dFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxJbnB1dEVsZW1lbnQ+ID0gY3JlYXRlUmVmKCk7XG4gICAgcHJpdmF0ZSBzZWFyY2hGaWx0ZXI6IE5hbWVGaWx0ZXJDb25kaXRpb24gPSBuZXcgTmFtZUZpbHRlckNvbmRpdGlvbigpO1xuXG4gICAgY29uc3RydWN0b3IocHJvcHM6IElQcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHF1ZXJ5OiBcIlwiLFxuICAgICAgICAgICAgZm9jdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBpblNwYWNlczogZmFsc2UsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyUmVmID0gZGVmYXVsdERpc3BhdGNoZXIucmVnaXN0ZXIodGhpcy5vbkFjdGlvbik7XG4gICAgICAgIC8vIGNsZWFyIGZpbHRlciB3aGVuIGNoYW5naW5nIHNwYWNlcywgaW4gZnV0dXJlIHdlIG1heSB3aXNoIHRvIG1haW50YWluIGEgZmlsdGVyIHBlci1zcGFjZVxuICAgICAgICBTcGFjZVN0b3JlLmluc3RhbmNlLm9uKFVQREFURV9TRUxFQ1RFRF9TUEFDRSwgdGhpcy5jbGVhcklucHV0KTtcbiAgICAgICAgU3BhY2VTdG9yZS5pbnN0YW5jZS5vbihVUERBVEVfVE9QX0xFVkVMX1NQQUNFUywgdGhpcy5vblNwYWNlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IFJlYWRvbmx5PElQcm9wcz4sIHByZXZTdGF0ZTogUmVhZG9ubHk8SVN0YXRlPik6IHZvaWQge1xuICAgICAgICBpZiAocHJldlN0YXRlLnF1ZXJ5ICE9PSB0aGlzLnN0YXRlLnF1ZXJ5KSB7XG4gICAgICAgICAgICBjb25zdCBoYWRTZWFyY2ggPSAhIXRoaXMuc2VhcmNoRmlsdGVyLnNlYXJjaC50cmltKCk7XG4gICAgICAgICAgICBjb25zdCBoYXZlU2VhcmNoID0gISF0aGlzLnN0YXRlLnF1ZXJ5LnRyaW0oKTtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRmlsdGVyLnNlYXJjaCA9IHRoaXMuc3RhdGUucXVlcnk7XG4gICAgICAgICAgICBpZiAoIWhhZFNlYXJjaCAmJiBoYXZlU2VhcmNoKSB7XG4gICAgICAgICAgICAgICAgLy8gc3RhcnRlZCBhIG5ldyBmaWx0ZXIgLSBhZGQgdGhlIGNvbmRpdGlvblxuICAgICAgICAgICAgICAgIFJvb21MaXN0U3RvcmUuaW5zdGFuY2UuYWRkRmlsdGVyKHRoaXMuc2VhcmNoRmlsdGVyKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaGFkU2VhcmNoICYmICFoYXZlU2VhcmNoKSB7XG4gICAgICAgICAgICAgICAgLy8gY2xlYXJlZCBhIGZpbHRlciAtIHJlbW92ZSB0aGUgY29uZGl0aW9uXG4gICAgICAgICAgICAgICAgUm9vbUxpc3RTdG9yZS5pbnN0YW5jZS5yZW1vdmVGaWx0ZXIodGhpcy5zZWFyY2hGaWx0ZXIpO1xuICAgICAgICAgICAgfSAvLyBlbHNlIHRoZSBmaWx0ZXIgaGFzbid0IGNoYW5nZWQgZW5vdWdoIGZvciB1cyB0byBjYXJlIGhlcmVcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgZGVmYXVsdERpc3BhdGNoZXIudW5yZWdpc3Rlcih0aGlzLmRpc3BhdGNoZXJSZWYpO1xuICAgICAgICBTcGFjZVN0b3JlLmluc3RhbmNlLm9mZihVUERBVEVfU0VMRUNURURfU1BBQ0UsIHRoaXMuY2xlYXJJbnB1dCk7XG4gICAgICAgIFNwYWNlU3RvcmUuaW5zdGFuY2Uub2ZmKFVQREFURV9UT1BfTEVWRUxfU1BBQ0VTLCB0aGlzLm9uU3BhY2VzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uU3BhY2VzID0gKHNwYWNlczogUm9vbVtdKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgaW5TcGFjZXM6IHNwYWNlcy5sZW5ndGggPiAwLFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBvbkFjdGlvbiA9IChwYXlsb2FkOiBBY3Rpb25QYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmIChwYXlsb2FkLmFjdGlvbiA9PT0gJ3ZpZXdfcm9vbScgJiYgcGF5bG9hZC5jbGVhcl9zZWFyY2gpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHBheWxvYWQuYWN0aW9uID09PSAnZm9jdXNfcm9vbV9maWx0ZXInICYmIHRoaXMuaW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dFJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBjbGVhcklucHV0ID0gKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaW5wdXRSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgICAgICB0aGlzLmlucHV0UmVmLmN1cnJlbnQudmFsdWUgPSBcIlwiO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKCk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgb3BlblNlYXJjaCA9ICgpID0+IHtcbiAgICAgICAgZGVmYXVsdERpc3BhdGNoZXIuZGlzcGF0Y2goe2FjdGlvbjogXCJzaG93X2xlZnRfcGFuZWxcIn0pO1xuICAgICAgICBkZWZhdWx0RGlzcGF0Y2hlci5kaXNwYXRjaCh7YWN0aW9uOiBcImZvY3VzX3Jvb21fZmlsdGVyXCJ9KTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBvbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlucHV0UmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7cXVlcnk6IHRoaXMuaW5wdXRSZWYuY3VycmVudC52YWx1ZX0pO1xuICAgIH07XG5cbiAgICBwcml2YXRlIG9uRm9jdXMgPSAoZXY6IFJlYWN0LkZvY3VzRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Zm9jdXNlZDogdHJ1ZX0pO1xuICAgICAgICBldi50YXJnZXQuc2VsZWN0KCk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgb25CbHVyID0gKGV2OiBSZWFjdC5Gb2N1c0V2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2ZvY3VzZWQ6IGZhbHNlfSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgb25LZXlEb3duID0gKGV2OiBSZWFjdC5LZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IGdldEtleUJpbmRpbmdzTWFuYWdlcigpLmdldFJvb21MaXN0QWN0aW9uKGV2KTtcbiAgICAgICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgICAgICAgIGNhc2UgUm9vbUxpc3RBY3Rpb24uQ2xlYXJTZWFyY2g6XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhcklucHV0KCk7XG4gICAgICAgICAgICAgICAgZGVmYXVsdERpc3BhdGNoZXIuZmlyZShBY3Rpb24uRm9jdXNDb21wb3Nlcik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFJvb21MaXN0QWN0aW9uLk5leHRSb29tOlxuICAgICAgICAgICAgY2FzZSBSb29tTGlzdEFjdGlvbi5QcmV2Um9vbTpcbiAgICAgICAgICAgICAgICAvLyB3ZSBkb24ndCBoYW5kbGUgdGhlc2UgYWN0aW9ucyBoZXJlIHB1dCBwYXNzIHRoZSBldmVudCBvbiB0byB0aGUgaW50ZXJlc3RlZCBwYXJ0eSAoTGVmdFBhbmVsKVxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25LZXlEb3duKGV2KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUm9vbUxpc3RBY3Rpb24uU2VsZWN0Um9vbToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZENsZWFyID0gdGhpcy5wcm9wcy5vblNlbGVjdFJvb20oKTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkQ2xlYXIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gd3JhcCBpbiBzZXQgaW1tZWRpYXRlIHRvIGRlbGF5IGl0IHNvIHRoYXQgd2UgZG9uJ3QgY2xlYXIgdGhlIGZpbHRlciAmIHRoZW4gY2hhbmdlIHJvb21cbiAgICAgICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dCgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHVibGljIHJlbmRlcigpOiBSZWFjdC5SZWFjdE5vZGUge1xuICAgICAgICBjb25zdCBjbGFzc2VzID0gY2xhc3NOYW1lcyh7XG4gICAgICAgICAgICAnbXhfUm9vbVNlYXJjaCc6IHRydWUsXG4gICAgICAgICAgICAnbXhfUm9vbVNlYXJjaF9oYXNRdWVyeSc6IHRoaXMuc3RhdGUucXVlcnksXG4gICAgICAgICAgICAnbXhfUm9vbVNlYXJjaF9mb2N1c2VkJzogdGhpcy5zdGF0ZS5mb2N1c2VkLFxuICAgICAgICAgICAgJ214X1Jvb21TZWFyY2hfbWluaW1pemVkJzogdGhpcy5wcm9wcy5pc01pbmltaXplZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgaW5wdXRDbGFzc2VzID0gY2xhc3NOYW1lcyh7XG4gICAgICAgICAgICAnbXhfUm9vbVNlYXJjaF9pbnB1dCc6IHRydWUsXG4gICAgICAgICAgICAnbXhfUm9vbVNlYXJjaF9pbnB1dEV4cGFuZGVkJzogdGhpcy5zdGF0ZS5xdWVyeSB8fCB0aGlzLnN0YXRlLmZvY3VzZWQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCBwbGFjZWhvbGRlciA9IF90KFwiRmlsdGVyXCIpO1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5pblNwYWNlcykge1xuICAgICAgICAgICAgcGxhY2Vob2xkZXIgPSBfdChcIkZpbHRlciBhbGwgc3BhY2VzXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGljb24gPSAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbXhfUm9vbVNlYXJjaF9pY29uJyAvPlxuICAgICAgICApO1xuICAgICAgICBsZXQgaW5wdXQgPSAoXG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgcmVmPXt0aGlzLmlucHV0UmVmfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17aW5wdXRDbGFzc2VzfVxuICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnF1ZXJ5fVxuICAgICAgICAgICAgICAgIG9uRm9jdXM9e3RoaXMub25Gb2N1c31cbiAgICAgICAgICAgICAgICBvbkJsdXI9e3RoaXMub25CbHVyfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlfVxuICAgICAgICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5vbktleURvd259XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgICBsZXQgY2xlYXJCdXR0b24gPSAoXG4gICAgICAgICAgICA8QWNjZXNzaWJsZUJ1dHRvblxuICAgICAgICAgICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgICAgICAgICB0aXRsZT17X3QoXCJDbGVhciBmaWx0ZXJcIil9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXhfUm9vbVNlYXJjaF9jbGVhckJ1dHRvblwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5jbGVhcklucHV0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgKTtcblxuICAgICAgICBpZiAodGhpcy5wcm9wcy5pc01pbmltaXplZCkge1xuICAgICAgICAgICAgaWNvbiA9IChcbiAgICAgICAgICAgICAgICA8QWNjZXNzaWJsZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0aXRsZT17X3QoXCJGaWx0ZXIgcm9vbXMgYW5kIHBlb3BsZVwiKX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXhfUm9vbVNlYXJjaF9pY29uIG14X1Jvb21TZWFyY2hfbWluaW1pemVkSGFuZGxlXCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5vcGVuU2VhcmNofVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaW5wdXQgPSBudWxsO1xuICAgICAgICAgICAgY2xlYXJCdXR0b24gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2VzfT5cbiAgICAgICAgICAgICAgICB7aWNvbn1cbiAgICAgICAgICAgICAgICB7aW5wdXR9XG4gICAgICAgICAgICAgICAge2NsZWFyQnV0dG9ufVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfVxufVxuIl19