UNPKG

matrix-react-sdk

Version:
133 lines (108 loc) 15.5 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _BreadcrumbsStore = require("../../../stores/BreadcrumbsStore"); var _DecoratedRoomAvatar = _interopRequireDefault(require("../avatars/DecoratedRoomAvatar")); var _languageHandler = require("../../../languageHandler"); var _dispatcher = _interopRequireDefault(require("../../../dispatcher/dispatcher")); var _Analytics = _interopRequireDefault(require("../../../Analytics")); var _AsyncStore = require("../../../stores/AsyncStore"); var _reactTransitionGroup = require("react-transition-group"); var _RovingTabIndex = require("../../../accessibility/RovingTabIndex"); var _Toolbar = _interopRequireDefault(require("../../../accessibility/Toolbar")); var _replaceableComponent = require("../../../utils/replaceableComponent"); var _dec, _class, _temp; let RoomBreadcrumbs = (_dec = (0, _replaceableComponent.replaceableComponent)("views.rooms.RoomBreadcrumbs"), _dec(_class = (_temp = class RoomBreadcrumbs extends _react.default.PureComponent /*:: <IProps, IState>*/ { constructor(props /*: IProps*/ ) { super(props); (0, _defineProperty2.default)(this, "isMounted", true); (0, _defineProperty2.default)(this, "onBreadcrumbsUpdate", () => { if (!this.isMounted) return; // We need to trick the CSSTransition component into updating, which means we need to // tell it to not animate, then to animate a moment later. This causes two updates // which means two renders. The skipFirst change is so that our don't-animate state // doesn't show the breadcrumb we're about to reveal as it causes a visual jump/jerk. // The second update, on the next available tick, causes the "enter" animation to start // again and this time we want to show the newest breadcrumb because it'll be hidden // off screen for the animation. this.setState({ doAnimation: false, skipFirst: true }); setTimeout(() => this.setState({ doAnimation: true, skipFirst: false }), 0); }); (0, _defineProperty2.default)(this, "viewRoom", (room /*: Room*/ , index /*: number*/ ) => { _Analytics.default.trackEvent("Breadcrumbs", "click_node", String(index)); _dispatcher.default.dispatch({ action: "view_room", room_id: room.roomId }); }); this.state = { doAnimation: true, // technically we want animation on mount, but it won't be perfect skipFirst: false // render the thing, as boring as it is }; _BreadcrumbsStore.BreadcrumbsStore.instance.on(_AsyncStore.UPDATE_EVENT, this.onBreadcrumbsUpdate); } componentWillUnmount() { this.isMounted = false; _BreadcrumbsStore.BreadcrumbsStore.instance.off(_AsyncStore.UPDATE_EVENT, this.onBreadcrumbsUpdate); } render() /*: React.ReactElement*/ { const tiles = _BreadcrumbsStore.BreadcrumbsStore.instance.rooms.map((r, i) => { return /*#__PURE__*/_react.default.createElement(_RovingTabIndex.RovingAccessibleTooltipButton, { className: "mx_RoomBreadcrumbs_crumb", key: r.roomId, onClick: () => this.viewRoom(r, i), "aria-label": (0, _languageHandler._t)("Room %(name)s", { name: r.name }), title: r.name, tooltipClassName: "mx_RoomBreadcrumbs_Tooltip" }, /*#__PURE__*/_react.default.createElement(_DecoratedRoomAvatar.default, { room: r, avatarSize: 32, displayBadge: true, forceCount: true })); }); if (tiles.length > 0) { // NOTE: The CSSTransition timeout MUST match the timeout in our CSS! return /*#__PURE__*/_react.default.createElement(_reactTransitionGroup.CSSTransition, { appear: true, in: this.state.doAnimation, timeout: 640, classNames: "mx_RoomBreadcrumbs" }, /*#__PURE__*/_react.default.createElement(_Toolbar.default, { className: "mx_RoomBreadcrumbs", "aria-label": (0, _languageHandler._t)("Recently visited rooms") }, tiles.slice(this.state.skipFirst ? 1 : 0))); } else { return /*#__PURE__*/_react.default.createElement("div", { className: "mx_RoomBreadcrumbs" }, /*#__PURE__*/_react.default.createElement("div", { className: "mx_RoomBreadcrumbs_placeholder" }, (0, _languageHandler._t)("No recently visited rooms"))); } } }, _temp)) || _class); exports.default = RoomBreadcrumbs; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL3Jvb21zL1Jvb21CcmVhZGNydW1icy50c3giXSwibmFtZXMiOlsiUm9vbUJyZWFkY3J1bWJzIiwiUmVhY3QiLCJQdXJlQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsImlzTW91bnRlZCIsInNldFN0YXRlIiwiZG9BbmltYXRpb24iLCJza2lwRmlyc3QiLCJzZXRUaW1lb3V0Iiwicm9vbSIsImluZGV4IiwiQW5hbHl0aWNzIiwidHJhY2tFdmVudCIsIlN0cmluZyIsImRlZmF1bHREaXNwYXRjaGVyIiwiZGlzcGF0Y2giLCJhY3Rpb24iLCJyb29tX2lkIiwicm9vbUlkIiwic3RhdGUiLCJCcmVhZGNydW1ic1N0b3JlIiwiaW5zdGFuY2UiLCJvbiIsIlVQREFURV9FVkVOVCIsIm9uQnJlYWRjcnVtYnNVcGRhdGUiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsIm9mZiIsInJlbmRlciIsInRpbGVzIiwicm9vbXMiLCJtYXAiLCJyIiwiaSIsInZpZXdSb29tIiwibmFtZSIsImxlbmd0aCIsInNsaWNlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQWdCQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztJQWlCcUJBLGUsV0FEcEIsZ0RBQXFCLDZCQUFyQixDLHlCQUFELE1BQ3FCQSxlQURyQixTQUM2Q0MsZUFBTUM7QUFEbkQ7QUFDaUY7QUFHN0VDLEVBQUFBLFdBQVcsQ0FBQ0M7QUFBRDtBQUFBLElBQWdCO0FBQ3ZCLFVBQU1BLEtBQU47QUFEdUIscURBRlAsSUFFTztBQUFBLCtEQWdCRyxNQUFNO0FBQ2hDLFVBQUksQ0FBQyxLQUFLQyxTQUFWLEVBQXFCLE9BRFcsQ0FHaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsV0FBS0MsUUFBTCxDQUFjO0FBQUNDLFFBQUFBLFdBQVcsRUFBRSxLQUFkO0FBQXFC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dCAyMDIwIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG55b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG5Zb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG5kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG5XSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cblNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQnJlYWRjcnVtYnNTdG9yZSB9IGZyb20gXCIuLi8uLi8uLi9zdG9yZXMvQnJlYWRjcnVtYnNTdG9yZVwiO1xuaW1wb3J0IERlY29yYXRlZFJvb21BdmF0YXIgZnJvbSBcIi4uL2F2YXRhcnMvRGVjb3JhdGVkUm9vbUF2YXRhclwiO1xuaW1wb3J0IHsgX3QgfSBmcm9tIFwiLi4vLi4vLi4vbGFuZ3VhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgeyBSb29tIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21vZGVscy9yb29tXCI7XG5pbXBvcnQgZGVmYXVsdERpc3BhdGNoZXIgZnJvbSBcIi4uLy4uLy4uL2Rpc3BhdGNoZXIvZGlzcGF0Y2hlclwiO1xuaW1wb3J0IEFuYWx5dGljcyBmcm9tIFwiLi4vLi4vLi4vQW5hbHl0aWNzXCI7XG5pbXBvcnQgeyBVUERBVEVfRVZFTlQgfSBmcm9tIFwiLi4vLi4vLi4vc3RvcmVzL0FzeW5jU3RvcmVcIjtcbmltcG9ydCB7IENTU1RyYW5zaXRpb24gfSBmcm9tIFwicmVhY3QtdHJhbnNpdGlvbi1ncm91cFwiO1xuaW1wb3J0IHsgUm92aW5nQWNjZXNzaWJsZVRvb2x0aXBCdXR0b24gfSBmcm9tIFwiLi4vLi4vLi4vYWNjZXNzaWJpbGl0eS9Sb3ZpbmdUYWJJbmRleFwiO1xuaW1wb3J0IFRvb2xiYXIgZnJvbSBcIi4uLy4uLy4uL2FjY2Vzc2liaWxpdHkvVG9vbGJhclwiO1xuaW1wb3J0IHsgcmVwbGFjZWFibGVDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcmVwbGFjZWFibGVDb21wb25lbnRcIjtcblxuaW50ZXJmYWNlIElQcm9wcyB7XG59XG5cbmludGVyZmFjZSBJU3RhdGUge1xuICAgIC8vIEJvdGggb2YgdGhlc2UgY29udHJvbCB0aGUgYW5pbWF0aW9uIGZvciB0aGUgYnJlYWRjcnVtYnMuIEZvciBkZXRhaWxzIG9uIHRoZVxuICAgIC8vIGFjdHVhbCBhbmltYXRpb24sIHNlZSB0aGUgQ1NTLlxuICAgIC8vXG4gICAgLy8gZG9BbmltYXRpb24gaXMgdG8gbGllIHRvIHRoZSBDU1NUcmFuc2l0aW9uIGNvbXBvbmVudCAoc2VlIG9uQnJlYWRjcnVtYnNVcGRhdGVcbiAgICAvLyBmb3IgaW5mbykuIHNraXBGaXJzdCBpcyB1c2VkIHRvIHRyeSBhbmQgcmVkdWNlIGplcmt5IGFuaW1hdGlvbiAtIGFsc28gc2VlIHRoZVxuICAgIC8vIGJyZWFkY3J1bWIgdXBkYXRlIGZ1bmN0aW9uIGZvciBpbmZvIG9uIHRoYXQuXG4gICAgZG9BbmltYXRpb246IGJvb2xlYW47XG4gICAgc2tpcEZpcnN0OiBib29sZWFuO1xufVxuXG5AcmVwbGFjZWFibGVDb21wb25lbnQoXCJ2aWV3cy5yb29tcy5Sb29tQnJlYWRjcnVtYnNcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvb21CcmVhZGNydW1icyBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQ8SVByb3BzLCBJU3RhdGU+IHtcbiAgICBwcml2YXRlIGlzTW91bnRlZCA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogSVByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgZG9BbmltYXRpb246IHRydWUsIC8vIHRlY2huaWNhbGx5IHdlIHdhbnQgYW5pbWF0aW9uIG9uIG1vdW50LCBidXQgaXQgd29uJ3QgYmUgcGVyZmVjdFxuICAgICAgICAgICAgc2tpcEZpcnN0OiBmYWxzZSwgLy8gcmVuZGVyIHRoZSB0aGluZywgYXMgYm9yaW5nIGFzIGl0IGlzXG4gICAgICAgIH07XG5cbiAgICAgICAgQnJlYWRjcnVtYnNTdG9yZS5pbnN0YW5jZS5vbihVUERBVEVfRVZFTlQsIHRoaXMub25CcmVhZGNydW1ic1VwZGF0ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgICB0aGlzLmlzTW91bnRlZCA9IGZhbHNlO1xuICAgICAgICBCcmVhZGNydW1ic1N0b3JlLmluc3RhbmNlLm9mZihVUERBVEVfRVZFTlQsIHRoaXMub25CcmVhZGNydW1ic1VwZGF0ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkJyZWFkY3J1bWJzVXBkYXRlID0gKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNNb3VudGVkKSByZXR1cm47XG5cbiAgICAgICAgLy8gV2UgbmVlZCB0byB0cmljayB0aGUgQ1NTVHJhbnNpdGlvbiBjb21wb25lbnQgaW50byB1cGRhdGluZywgd2hpY2ggbWVhbnMgd2UgbmVlZCB0b1xuICAgICAgICAvLyB0ZWxsIGl0IHRvIG5vdCBhbmltYXRlLCB0aGVuIHRvIGFuaW1hdGUgYSBtb21lbnQgbGF0ZXIuIFRoaXMgY2F1c2VzIHR3byB1cGRhdGVzXG4gICAgICAgIC8vIHdoaWNoIG1lYW5zIHR3byByZW5kZXJzLiBUaGUgc2tpcEZpcnN0IGNoYW5nZSBpcyBzbyB0aGF0IG91ciBkb24ndC1hbmltYXRlIHN0YXRlXG4gICAgICAgIC8vIGRvZXNuJ3Qgc2hvdyB0aGUgYnJlYWRjcnVtYiB3ZSdyZSBhYm91dCB0byByZXZlYWwgYXMgaXQgY2F1c2VzIGEgdmlzdWFsIGp1bXAvamVyay5cbiAgICAgICAgLy8gVGhlIHNlY29uZCB1cGRhdGUsIG9uIHRoZSBuZXh0IGF2YWlsYWJsZSB0aWNrLCBjYXVzZXMgdGhlIFwiZW50ZXJcIiBhbmltYXRpb24gdG8gc3RhcnRcbiAgICAgICAgLy8gYWdhaW4gYW5kIHRoaXMgdGltZSB3ZSB3YW50IHRvIHNob3cgdGhlIG5ld2VzdCBicmVhZGNydW1iIGJlY2F1c2UgaXQnbGwgYmUgaGlkZGVuXG4gICAgICAgIC8vIG9mZiBzY3JlZW4gZm9yIHRoZSBhbmltYXRpb24uXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2RvQW5pbWF0aW9uOiBmYWxzZSwgc2tpcEZpcnN0OiB0cnVlfSk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXRTdGF0ZSh7ZG9BbmltYXRpb246IHRydWUsIHNraXBGaXJzdDogZmFsc2V9KSwgMCk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgdmlld1Jvb20gPSAocm9vbTogUm9vbSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBBbmFseXRpY3MudHJhY2tFdmVudChcIkJyZWFkY3J1bWJzXCIsIFwiY2xpY2tfbm9kZVwiLCBTdHJpbmcoaW5kZXgpKTtcbiAgICAgICAgZGVmYXVsdERpc3BhdGNoZXIuZGlzcGF0Y2goe2FjdGlvbjogXCJ2aWV3X3Jvb21cIiwgcm9vbV9pZDogcm9vbS5yb29tSWR9KTtcbiAgICB9O1xuXG4gICAgcHVibGljIHJlbmRlcigpOiBSZWFjdC5SZWFjdEVsZW1lbnQge1xuICAgICAgICBjb25zdCB0aWxlcyA9IEJyZWFkY3J1bWJzU3RvcmUuaW5zdGFuY2Uucm9vbXMubWFwKChyLCBpKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxSb3ZpbmdBY2Nlc3NpYmxlVG9vbHRpcEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteF9Sb29tQnJlYWRjcnVtYnNfY3J1bWJcIlxuICAgICAgICAgICAgICAgICAgICBrZXk9e3Iucm9vbUlkfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLnZpZXdSb29tKHIsIGkpfVxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtfdChcIlJvb20gJShuYW1lKXNcIiwge25hbWU6IHIubmFtZX0pfVxuICAgICAgICAgICAgICAgICAgICB0aXRsZT17ci5uYW1lfVxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3NOYW1lPVwibXhfUm9vbUJyZWFkY3J1bWJzX1Rvb2x0aXBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPERlY29yYXRlZFJvb21BdmF0YXJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb209e3J9XG4gICAgICAgICAgICAgICAgICAgICAgICBhdmF0YXJTaXplPXszMn1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlCYWRnZT17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlQ291bnQ9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9Sb3ZpbmdBY2Nlc3NpYmxlVG9vbHRpcEJ1dHRvbj5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBOT1RFOiBUaGUgQ1NTVHJhbnNpdGlvbiB0aW1lb3V0IE1VU1QgbWF0Y2ggdGhlIHRpbWVvdXQgaW4gb3VyIENTUyFcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPENTU1RyYW5zaXRpb25cbiAgICAgICAgICAgICAgICAgICAgYXBwZWFyPXt0cnVlfSBpbj17dGhpcy5zdGF0ZS5kb0FuaW1hdGlvbn0gdGltZW91dD17NjQwfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWVzPSdteF9Sb29tQnJlYWRjcnVtYnMnXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8VG9vbGJhciBjbGFzc05hbWU9J214X1Jvb21CcmVhZGNydW1icycgYXJpYS1sYWJlbD17X3QoXCJSZWNlbnRseSB2aXNpdGVkIHJvb21zXCIpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0aWxlcy5zbGljZSh0aGlzLnN0YXRlLnNraXBGaXJzdCA/IDEgOiAwKX1cbiAgICAgICAgICAgICAgICAgICAgPC9Ub29sYmFyPlxuICAgICAgICAgICAgICAgIDwvQ1NTVHJhbnNpdGlvbj5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdteF9Sb29tQnJlYWRjcnVtYnMnPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1Jvb21CcmVhZGNydW1ic19wbGFjZWhvbGRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge190KFwiTm8gcmVjZW50bHkgdmlzaXRlZCByb29tc1wiKX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19