matrix-react-sdk
Version:
SDK for matrix.org using React
147 lines (114 loc) • 14.5 kB
JavaScript
;
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=