UNPKG

matrix-react-sdk

Version:
147 lines (114 loc) 14.5 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _FlairStore = _interopRequireDefault(require("../../../stores/FlairStore")); var _dispatcher = _interopRequireDefault(require("../../../dispatcher/dispatcher")); var _MatrixClientContext = _interopRequireDefault(require("../../../contexts/MatrixClientContext")); var _replaceableComponent = require("../../../utils/replaceableComponent"); var _Media = require("../../../customisations/Media"); var _dec, _class; class FlairAvatar extends _react.default.Component { constructor() { super(); this.onClick = this.onClick.bind(this); } onClick(ev) { ev.preventDefault(); // Don't trigger onClick of parent element ev.stopPropagation(); _dispatcher.default.dispatch({ action: 'view_group', group_id: this.props.groupProfile.groupId }); } render() { const httpUrl = (0, _Media.mediaFromMxc)(this.props.groupProfile.avatarUrl).getSquareThumbnailHttp(16); const tooltip = this.props.groupProfile.name ? `${this.props.groupProfile.name} (${this.props.groupProfile.groupId})` : this.props.groupProfile.groupId; return /*#__PURE__*/_react.default.createElement("img", { src: httpUrl, width: "16", height: "16", onClick: this.onClick, title: tooltip }); } } FlairAvatar.propTypes = { groupProfile: _propTypes.default.shape({ groupId: _propTypes.default.string.isRequired, name: _propTypes.default.string, avatarUrl: _propTypes.default.string.isRequired }) }; FlairAvatar.contextType = _MatrixClientContext.default; let Flair = (_dec = (0, _replaceableComponent.replaceableComponent)("views.elements.Flair"), _dec(_class = class Flair extends _react.default.Component { constructor() { super(); this.state = { profiles: [] }; } componentDidMount() { this._unmounted = false; this._generateAvatars(this.props.groups); } componentWillUnmount() { this._unmounted = true; } // TODO: [REACT-WARNING] Replace with appropriate lifecycle event UNSAFE_componentWillReceiveProps(newProps) { // eslint-disable-line camelcase this._generateAvatars(newProps.groups); } async _getGroupProfiles(groups) { const profiles = []; for (const groupId of groups) { let groupProfile = null; try { groupProfile = await _FlairStore.default.getGroupProfileCached(this.context, groupId); } catch (err) { console.error('Could not get profile for group', groupId, err); } profiles.push(groupProfile); } return profiles.filter(p => p !== null); } async _generateAvatars(groups) { if (!groups || groups.length === 0) { return; } const profiles = await this._getGroupProfiles(groups); if (!this.unmounted) { this.setState({ profiles: profiles.filter(profile => { return profile ? profile.avatarUrl : false; }) }); } } render() { if (this.state.profiles.length === 0) { return /*#__PURE__*/_react.default.createElement("span", { className: "mx_Flair" }); } const avatars = this.state.profiles.map((profile, index) => { return /*#__PURE__*/_react.default.createElement(FlairAvatar, { key: index, groupProfile: profile }); }); return /*#__PURE__*/_react.default.createElement("span", { className: "mx_Flair" }, avatars); } }) || _class); exports.default = Flair; Flair.propTypes = { groups: _propTypes.default.arrayOf(_propTypes.default.string) }; Flair.contextType = _MatrixClientContext.default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL2VsZW1lbnRzL0ZsYWlyLmpzIl0sIm5hbWVzIjpbIkZsYWlyQXZhdGFyIiwiUmVhY3QiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsIm9uQ2xpY2siLCJiaW5kIiwiZXYiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsImRpcyIsImRpc3BhdGNoIiwiYWN0aW9uIiwiZ3JvdXBfaWQiLCJwcm9wcyIsImdyb3VwUHJvZmlsZSIsImdyb3VwSWQiLCJyZW5kZXIiLCJodHRwVXJsIiwiYXZhdGFyVXJsIiwiZ2V0U3F1YXJlVGh1bWJuYWlsSHR0cCIsInRvb2x0aXAiLCJuYW1lIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwic2hhcGUiLCJzdHJpbmciLCJpc1JlcXVpcmVkIiwiY29udGV4dFR5cGUiLCJNYXRyaXhDbGllbnRDb250ZXh0IiwiRmxhaXIiLCJzdGF0ZSIsInByb2ZpbGVzIiwiY29tcG9uZW50RGlkTW91bnQiLCJfdW5tb3VudGVkIiwiX2dlbmVyYXRlQXZhdGFycyIsImdyb3VwcyIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwiVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJuZXdQcm9wcyIsIl9nZXRHcm91cFByb2ZpbGVzIiwiRmxhaXJTdG9yZSIsImdldEdyb3VwUHJvZmlsZUNhY2hlZCIsImNvbnRleHQiLCJlcnIiLCJjb25zb2xlIiwiZXJyb3IiLCJwdXNoIiwiZmlsdGVyIiwicCIsImxlbmd0aCIsInVubW91bnRlZCIsInNldFN0YXRlIiwicHJvZmlsZSIsImF2YXRhcnMiLCJtYXAiLCJpbmRleCIsImFycmF5T2YiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQWdCQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUdBLE1BQU1BLFdBQU4sU0FBMEJDLGVBQU1DLFNBQWhDLENBQTBDO0FBQ3RDQyxFQUFBQSxXQUFXLEdBQUc7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QUFBLE1BQU0sRUFBRVosbUJBQVVpQyxPQUFWLENBQWtCakMsbUJBQVVFLE1BQTVCO0FBRE0sQ0FBbEI7QUFJQUksS0FBSyxDQUFDRixXQUFOLEdBQW9CQyw0QkFBcEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuIENvcHlyaWdodCAyMDE3IE5ldyBWZWN0b3IgTHRkLlxuXG4gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEZsYWlyU3RvcmUgZnJvbSAnLi4vLi4vLi4vc3RvcmVzL0ZsYWlyU3RvcmUnO1xuaW1wb3J0IGRpcyBmcm9tICcuLi8uLi8uLi9kaXNwYXRjaGVyL2Rpc3BhdGNoZXInO1xuaW1wb3J0IE1hdHJpeENsaWVudENvbnRleHQgZnJvbSBcIi4uLy4uLy4uL2NvbnRleHRzL01hdHJpeENsaWVudENvbnRleHRcIjtcbmltcG9ydCB7cmVwbGFjZWFibGVDb21wb25lbnR9IGZyb20gXCIuLi8uLi8uLi91dGlscy9yZXBsYWNlYWJsZUNvbXBvbmVudFwiO1xuaW1wb3J0IHttZWRpYUZyb21NeGN9IGZyb20gXCIuLi8uLi8uLi9jdXN0b21pc2F0aW9ucy9NZWRpYVwiO1xuXG5cbmNsYXNzIEZsYWlyQXZhdGFyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5vbkNsaWNrID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgb25DbGljayhldikge1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAvLyBEb24ndCB0cmlnZ2VyIG9uQ2xpY2sgb2YgcGFyZW50IGVsZW1lbnRcbiAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGRpcy5kaXNwYXRjaCh7XG4gICAgICAgICAgICBhY3Rpb246ICd2aWV3X2dyb3VwJyxcbiAgICAgICAgICAgIGdyb3VwX2lkOiB0aGlzLnByb3BzLmdyb3VwUHJvZmlsZS5ncm91cElkLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IGh0dHBVcmwgPSBtZWRpYUZyb21NeGModGhpcy5wcm9wcy5ncm91cFByb2ZpbGUuYXZhdGFyVXJsKS5nZXRTcXVhcmVUaHVtYm5haWxIdHRwKDE2KTtcbiAgICAgICAgY29uc3QgdG9vbHRpcCA9IHRoaXMucHJvcHMuZ3JvdXBQcm9maWxlLm5hbWUgP1xuICAgICAgICAgICAgYCR7dGhpcy5wcm9wcy5ncm91cFByb2ZpbGUubmFtZX0gKCR7dGhpcy5wcm9wcy5ncm91cFByb2ZpbGUuZ3JvdXBJZH0pYDpcbiAgICAgICAgICAgIHRoaXMucHJvcHMuZ3JvdXBQcm9maWxlLmdyb3VwSWQ7XG4gICAgICAgIHJldHVybiA8aW1nXG4gICAgICAgICAgICBzcmM9e2h0dHBVcmx9XG4gICAgICAgICAgICB3aWR0aD1cIjE2XCJcbiAgICAgICAgICAgIGhlaWdodD1cIjE2XCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMub25DbGlja31cbiAgICAgICAgICAgIHRpdGxlPXt0b29sdGlwfSAvPjtcbiAgICB9XG59XG5cbkZsYWlyQXZhdGFyLnByb3BUeXBlcyA9IHtcbiAgICBncm91cFByb2ZpbGU6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIGdyb3VwSWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgICAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgYXZhdGFyVXJsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgfSksXG59O1xuXG5GbGFpckF2YXRhci5jb250ZXh0VHlwZSA9IE1hdHJpeENsaWVudENvbnRleHQ7XG5cbkByZXBsYWNlYWJsZUNvbXBvbmVudChcInZpZXdzLmVsZW1lbnRzLkZsYWlyXCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGbGFpciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBwcm9maWxlczogW10sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIHRoaXMuX3VubW91bnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9nZW5lcmF0ZUF2YXRhcnModGhpcy5wcm9wcy5ncm91cHMpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgICB0aGlzLl91bm1vdW50ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIFRPRE86IFtSRUFDVC1XQVJOSU5HXSBSZXBsYWNlIHdpdGggYXBwcm9wcmlhdGUgbGlmZWN5Y2xlIGV2ZW50XG4gICAgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV3UHJvcHMpIHsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY2FtZWxjYXNlXG4gICAgICAgIHRoaXMuX2dlbmVyYXRlQXZhdGFycyhuZXdQcm9wcy5ncm91cHMpO1xuICAgIH1cblxuICAgIGFzeW5jIF9nZXRHcm91cFByb2ZpbGVzKGdyb3Vwcykge1xuICAgICAgICBjb25zdCBwcm9maWxlcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGdyb3VwSWQgb2YgZ3JvdXBzKSB7XG4gICAgICAgICAgICBsZXQgZ3JvdXBQcm9maWxlID0gbnVsbDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBQcm9maWxlID0gYXdhaXQgRmxhaXJTdG9yZS5nZXRHcm91cFByb2ZpbGVDYWNoZWQodGhpcy5jb250ZXh0LCBncm91cElkKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBnZXQgcHJvZmlsZSBmb3IgZ3JvdXAnLCBncm91cElkLCBlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJvZmlsZXMucHVzaChncm91cFByb2ZpbGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9maWxlcy5maWx0ZXIoKHApID0+IHAgIT09IG51bGwpO1xuICAgIH1cblxuICAgIGFzeW5jIF9nZW5lcmF0ZUF2YXRhcnMoZ3JvdXBzKSB7XG4gICAgICAgIGlmICghZ3JvdXBzIHx8IGdyb3Vwcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9maWxlcyA9IGF3YWl0IHRoaXMuX2dldEdyb3VwUHJvZmlsZXMoZ3JvdXBzKTtcbiAgICAgICAgaWYgKCF0aGlzLnVubW91bnRlZCkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgcHJvZmlsZXM6IHByb2ZpbGVzLmZpbHRlcigocHJvZmlsZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvZmlsZSA/IHByb2ZpbGUuYXZhdGFyVXJsIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUucHJvZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPVwibXhfRmxhaXJcIiAvPjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhdmF0YXJzID0gdGhpcy5zdGF0ZS5wcm9maWxlcy5tYXAoKHByb2ZpbGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gPEZsYWlyQXZhdGFyIGtleT17aW5kZXh9IGdyb3VwUHJvZmlsZT17cHJvZmlsZX0gLz47XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibXhfRmxhaXJcIj5cbiAgICAgICAgICAgICAgICB7IGF2YXRhcnMgfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuRmxhaXIucHJvcFR5cGVzID0ge1xuICAgIGdyb3VwczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG59O1xuXG5GbGFpci5jb250ZXh0VHlwZSA9IE1hdHJpeENsaWVudENvbnRleHQ7XG4iXX0=