UNPKG

matrix-react-sdk

Version:
124 lines (119 loc) 18.9 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _react = _interopRequireWildcard(require("react")); var _classnames = _interopRequireDefault(require("classnames")); var _matrix = require("matrix-js-sdk/src/matrix"); var _compoundWeb = require("@vector-im/compound-web"); var _SettingsStore = _interopRequireDefault(require("../../../settings/SettingsStore")); var _RoomContext = _interopRequireDefault(require("../../../contexts/RoomContext")); var _MatrixClientContext = _interopRequireDefault(require("../../../contexts/MatrixClientContext")); var _useEventEmitter = require("../../../hooks/useEventEmitter"); var _languageHandler = require("../../../languageHandler"); const _excluded = ["name", "idName", "title", "url", "urls", "size", "onClick", "className", "type", "altText"]; /* Copyright 2024 New Vector Ltd. Copyright 2019, 2020 The Matrix.org Foundation C.I.C. Copyright 2019 Michael Telatynski <7t3chguy@gmail.com> Copyright 2018 New Vector Ltd Copyright 2015, 2016 OpenMarket Ltd SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } const calculateUrls = (url, urls, lowBandwidth = false) => { // work out the full set of urls to try to load. This is formed like so: // imageUrls: [ props.url, ...props.urls ] let _urls = []; if (!lowBandwidth) { _urls = urls || []; if (url) { // copy urls and put url first _urls = [url, ..._urls]; } } // deduplicate URLs return Array.from(new Set(_urls)); }; const useImageUrl = ({ url, urls }) => { // Since this is a hot code path and the settings store can be slow, we // use the cached lowBandwidth value from the room context if it exists const roomContext = (0, _react.useContext)(_RoomContext.default); const lowBandwidth = roomContext ? roomContext.lowBandwidth : _SettingsStore.default.getValue("lowBandwidth"); const [imageUrls, setUrls] = (0, _react.useState)(calculateUrls(url, urls, lowBandwidth)); const [urlsIndex, setIndex] = (0, _react.useState)(0); const onError = (0, _react.useCallback)(() => { setIndex(i => i + 1); // try the next one }, []); (0, _react.useEffect)(() => { setUrls(calculateUrls(url, urls, lowBandwidth)); setIndex(0); }, [url, JSON.stringify(urls)]); // eslint-disable-line react-hooks/exhaustive-deps const cli = (0, _react.useContext)(_MatrixClientContext.default); const onClientSync = (0, _react.useCallback)((syncState, prevState) => { // Consider the client reconnected if there is no error with syncing. // This means the state could be RECONNECTING, SYNCING, PREPARED or CATCHUP. const reconnected = syncState !== "ERROR" && prevState !== syncState; if (reconnected) { setIndex(0); } }, []); (0, _useEventEmitter.useTypedEventEmitter)(cli, _matrix.ClientEvent.Sync, onClientSync); const imageUrl = imageUrls[urlsIndex]; return [imageUrl, onError]; }; const BaseAvatar = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => { const { name, idName, title, url, urls, size = "40px", onClick, className, type = "round", altText = (0, _languageHandler._t)("common|avatar") } = props, otherProps = (0, _objectWithoutProperties2.default)(props, _excluded); const [imageUrl, onError] = useImageUrl({ url, urls }); const extraProps = {}; if (onClick) { extraProps["aria-live"] = "off"; extraProps["role"] = "button"; } else if (!imageUrl) { extraProps["role"] = "presentation"; extraProps["aria-label"] = undefined; } else { extraProps["role"] = undefined; } return /*#__PURE__*/_react.default.createElement(_compoundWeb.Avatar, (0, _extends2.default)({ ref: ref, src: imageUrl, id: idName ?? "", name: name ?? "", type: type, size: size, className: (0, _classnames.default)("mx_BaseAvatar", className), "aria-label": altText, onError: onError, title: title, onClick: onClick }, extraProps, otherProps, { "data-testid": "avatar-img" })); }); var _default = exports.default = BaseAvatar; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfY2xhc3NuYW1lcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfbWF0cml4IiwiX2NvbXBvdW5kV2ViIiwiX1NldHRpbmdzU3RvcmUiLCJfUm9vbUNvbnRleHQiLCJfTWF0cml4Q2xpZW50Q29udGV4dCIsIl91c2VFdmVudEVtaXR0ZXIiLCJfbGFuZ3VhZ2VIYW5kbGVyIiwiX2V4Y2x1ZGVkIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiY2FsY3VsYXRlVXJscyIsInVybCIsInVybHMiLCJsb3dCYW5kd2lkdGgiLCJfdXJscyIsIkFycmF5IiwiZnJvbSIsIlNldCIsInVzZUltYWdlVXJsIiwicm9vbUNvbnRleHQiLCJ1c2VDb250ZXh0IiwiUm9vbUNvbnRleHQiLCJTZXR0aW5nc1N0b3JlIiwiZ2V0VmFsdWUiLCJpbWFnZVVybHMiLCJzZXRVcmxzIiwidXNlU3RhdGUiLCJ1cmxzSW5kZXgiLCJzZXRJbmRleCIsIm9uRXJyb3IiLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJjbGkiLCJNYXRyaXhDbGllbnRDb250ZXh0Iiwib25DbGllbnRTeW5jIiwic3luY1N0YXRlIiwicHJldlN0YXRlIiwicmVjb25uZWN0ZWQiLCJ1c2VUeXBlZEV2ZW50RW1pdHRlciIsIkNsaWVudEV2ZW50IiwiU3luYyIsImltYWdlVXJsIiwiQmFzZUF2YXRhciIsImZvcndhcmRSZWYiLCJwcm9wcyIsInJlZiIsIm5hbWUiLCJpZE5hbWUiLCJ0aXRsZSIsInNpemUiLCJvbkNsaWNrIiwiY2xhc3NOYW1lIiwidHlwZSIsImFsdFRleHQiLCJfdCIsIm90aGVyUHJvcHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMyIiwiZXh0cmFQcm9wcyIsInVuZGVmaW5lZCIsImNyZWF0ZUVsZW1lbnQiLCJBdmF0YXIiLCJfZXh0ZW5kczIiLCJzcmMiLCJpZCIsImNsYXNzTmFtZXMiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy92aWV3cy9hdmF0YXJzL0Jhc2VBdmF0YXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDE5LCAyMDIwIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5Db3B5cmlnaHQgMjAxOSBNaWNoYWVsIFRlbGF0eW5za2kgPDd0M2NoZ3V5QGdtYWlsLmNvbT5cbkNvcHlyaWdodCAyMDE4IE5ldyBWZWN0b3IgTHRkXG5Db3B5cmlnaHQgMjAxNSwgMjAxNiBPcGVuTWFya2V0IEx0ZFxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgUmVhY3QsIHsgQXJpYVJvbGUsIGZvcndhcmRSZWYsIHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0LCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IHsgQ2xpZW50RXZlbnQsIFN5bmNTdGF0ZSB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9tYXRyaXhcIjtcbmltcG9ydCB7IEF2YXRhciB9IGZyb20gXCJAdmVjdG9yLWltL2NvbXBvdW5kLXdlYlwiO1xuXG5pbXBvcnQgU2V0dGluZ3NTdG9yZSBmcm9tIFwiLi4vLi4vLi4vc2V0dGluZ3MvU2V0dGluZ3NTdG9yZVwiO1xuaW1wb3J0IHsgQnV0dG9uRXZlbnQgfSBmcm9tIFwiLi4vZWxlbWVudHMvQWNjZXNzaWJsZUJ1dHRvblwiO1xuaW1wb3J0IFJvb21Db250ZXh0IGZyb20gXCIuLi8uLi8uLi9jb250ZXh0cy9Sb29tQ29udGV4dFwiO1xuaW1wb3J0IE1hdHJpeENsaWVudENvbnRleHQgZnJvbSBcIi4uLy4uLy4uL2NvbnRleHRzL01hdHJpeENsaWVudENvbnRleHRcIjtcbmltcG9ydCB7IHVzZVR5cGVkRXZlbnRFbWl0dGVyIH0gZnJvbSBcIi4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50RW1pdHRlclwiO1xuaW1wb3J0IHsgX3QgfSBmcm9tIFwiLi4vLi4vLi4vbGFuZ3VhZ2VIYW5kbGVyXCI7XG5cbmludGVyZmFjZSBJUHJvcHMge1xuICAgIG5hbWU/OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgQXZhdGFyPltcIm5hbWVcIl07IC8vIFRoZSBuYW1lIChmaXJzdCBpbml0aWFsIHVzZWQgYXMgZGVmYXVsdClcbiAgICBpZE5hbWU/OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgQXZhdGFyPltcImlkXCJdOyAvLyBJRCBmb3IgZ2VuZXJhdGluZyBoYXNoIGNvbG91cnNcbiAgICB0aXRsZT86IHN0cmluZzsgLy8gb25Ib3ZlciB0aXRsZSB0ZXh0XG4gICAgdXJsPzogc3RyaW5nIHwgbnVsbDsgLy8gaGlnaGVzdCBwcmlvcml0eSBvZiB0aGVtIGFsbCwgc2hvcnRjdXQgdG8gc2V0IGluIHVybHNbMF1cbiAgICB1cmxzPzogc3RyaW5nW107IC8vIFtoaWdoZXN0X3ByaW9yaXR5LCAuLi4gLCBsb3dlc3RfcHJpb3JpdHldXG4gICAgdHlwZT86IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBBdmF0YXI+W1widHlwZVwiXTtcbiAgICBzaXplOiBzdHJpbmc7XG4gICAgb25DbGljaz86IChldjogQnV0dG9uRXZlbnQpID0+IHZvaWQ7XG4gICAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAgIHRhYkluZGV4PzogbnVtYmVyO1xuICAgIGFsdFRleHQ/OiBzdHJpbmc7XG4gICAgcm9sZT86IEFyaWFSb2xlO1xufVxuXG5jb25zdCBjYWxjdWxhdGVVcmxzID0gKHVybD86IHN0cmluZyB8IG51bGwsIHVybHM/OiBzdHJpbmdbXSwgbG93QmFuZHdpZHRoID0gZmFsc2UpOiBzdHJpbmdbXSA9PiB7XG4gICAgLy8gd29yayBvdXQgdGhlIGZ1bGwgc2V0IG9mIHVybHMgdG8gdHJ5IHRvIGxvYWQuIFRoaXMgaXMgZm9ybWVkIGxpa2Ugc286XG4gICAgLy8gaW1hZ2VVcmxzOiBbIHByb3BzLnVybCwgLi4ucHJvcHMudXJscyBdXG5cbiAgICBsZXQgX3VybHM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKCFsb3dCYW5kd2lkdGgpIHtcbiAgICAgICAgX3VybHMgPSB1cmxzIHx8IFtdO1xuXG4gICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICAgIC8vIGNvcHkgdXJscyBhbmQgcHV0IHVybCBmaXJzdFxuICAgICAgICAgICAgX3VybHMgPSBbdXJsLCAuLi5fdXJsc107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkZWR1cGxpY2F0ZSBVUkxzXG4gICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChfdXJscykpO1xufTtcblxuY29uc3QgdXNlSW1hZ2VVcmwgPSAoeyB1cmwsIHVybHMgfTogeyB1cmw/OiBzdHJpbmcgfCBudWxsOyB1cmxzPzogc3RyaW5nW10gfSk6IFtzdHJpbmcsICgpID0+IHZvaWRdID0+IHtcbiAgICAvLyBTaW5jZSB0aGlzIGlzIGEgaG90IGNvZGUgcGF0aCBhbmQgdGhlIHNldHRpbmdzIHN0b3JlIGNhbiBiZSBzbG93LCB3ZVxuICAgIC8vIHVzZSB0aGUgY2FjaGVkIGxvd0JhbmR3aWR0aCB2YWx1ZSBmcm9tIHRoZSByb29tIGNvbnRleHQgaWYgaXQgZXhpc3RzXG4gICAgY29uc3Qgcm9vbUNvbnRleHQgPSB1c2VDb250ZXh0KFJvb21Db250ZXh0KTtcbiAgICBjb25zdCBsb3dCYW5kd2lkdGggPSByb29tQ29udGV4dCA/IHJvb21Db250ZXh0Lmxvd0JhbmR3aWR0aCA6IFNldHRpbmdzU3RvcmUuZ2V0VmFsdWUoXCJsb3dCYW5kd2lkdGhcIik7XG5cbiAgICBjb25zdCBbaW1hZ2VVcmxzLCBzZXRVcmxzXSA9IHVzZVN0YXRlPHN0cmluZ1tdPihjYWxjdWxhdGVVcmxzKHVybCwgdXJscywgbG93QmFuZHdpZHRoKSk7XG4gICAgY29uc3QgW3VybHNJbmRleCwgc2V0SW5kZXhdID0gdXNlU3RhdGU8bnVtYmVyPigwKTtcblxuICAgIGNvbnN0IG9uRXJyb3IgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIHNldEluZGV4KChpKSA9PiBpICsgMSk7IC8vIHRyeSB0aGUgbmV4dCBvbmVcbiAgICB9LCBbXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBzZXRVcmxzKGNhbGN1bGF0ZVVybHModXJsLCB1cmxzLCBsb3dCYW5kd2lkdGgpKTtcbiAgICAgICAgc2V0SW5kZXgoMCk7XG4gICAgfSwgW3VybCwgSlNPTi5zdHJpbmdpZnkodXJscyldKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcblxuICAgIGNvbnN0IGNsaSA9IHVzZUNvbnRleHQoTWF0cml4Q2xpZW50Q29udGV4dCk7XG4gICAgY29uc3Qgb25DbGllbnRTeW5jID0gdXNlQ2FsbGJhY2soKHN5bmNTdGF0ZTogU3luY1N0YXRlLCBwcmV2U3RhdGU6IFN5bmNTdGF0ZSB8IG51bGwpID0+IHtcbiAgICAgICAgLy8gQ29uc2lkZXIgdGhlIGNsaWVudCByZWNvbm5lY3RlZCBpZiB0aGVyZSBpcyBubyBlcnJvciB3aXRoIHN5bmNpbmcuXG4gICAgICAgIC8vIFRoaXMgbWVhbnMgdGhlIHN0YXRlIGNvdWxkIGJlIFJFQ09OTkVDVElORywgU1lOQ0lORywgUFJFUEFSRUQgb3IgQ0FUQ0hVUC5cbiAgICAgICAgY29uc3QgcmVjb25uZWN0ZWQgPSBzeW5jU3RhdGUgIT09IFwiRVJST1JcIiAmJiBwcmV2U3RhdGUgIT09IHN5bmNTdGF0ZTtcbiAgICAgICAgaWYgKHJlY29ubmVjdGVkKSB7XG4gICAgICAgICAgICBzZXRJbmRleCgwKTtcbiAgICAgICAgfVxuICAgIH0sIFtdKTtcbiAgICB1c2VUeXBlZEV2ZW50RW1pdHRlcihjbGksIENsaWVudEV2ZW50LlN5bmMsIG9uQ2xpZW50U3luYyk7XG5cbiAgICBjb25zdCBpbWFnZVVybCA9IGltYWdlVXJsc1t1cmxzSW5kZXhdO1xuICAgIHJldHVybiBbaW1hZ2VVcmwsIG9uRXJyb3JdO1xufTtcblxuY29uc3QgQmFzZUF2YXRhciA9IGZvcndhcmRSZWY8SFRNTEVsZW1lbnQsIElQcm9wcz4oKHByb3BzLCByZWYpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIGlkTmFtZSxcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIHVybCxcbiAgICAgICAgdXJscyxcbiAgICAgICAgc2l6ZSA9IFwiNDBweFwiLFxuICAgICAgICBvbkNsaWNrLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIHR5cGUgPSBcInJvdW5kXCIsXG4gICAgICAgIGFsdFRleHQgPSBfdChcImNvbW1vbnxhdmF0YXJcIiksXG4gICAgICAgIC4uLm90aGVyUHJvcHNcbiAgICB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCBbaW1hZ2VVcmwsIG9uRXJyb3JdID0gdXNlSW1hZ2VVcmwoeyB1cmwsIHVybHMgfSk7XG5cbiAgICBjb25zdCBleHRyYVByb3BzOiBQYXJ0aWFsPFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBBdmF0YXI+PiA9IHt9O1xuXG4gICAgaWYgKG9uQ2xpY2spIHtcbiAgICAgICAgZXh0cmFQcm9wc1tcImFyaWEtbGl2ZVwiXSA9IFwib2ZmXCI7XG4gICAgICAgIGV4dHJhUHJvcHNbXCJyb2xlXCJdID0gXCJidXR0b25cIjtcbiAgICB9IGVsc2UgaWYgKCFpbWFnZVVybCkge1xuICAgICAgICBleHRyYVByb3BzW1wicm9sZVwiXSA9IFwicHJlc2VudGF0aW9uXCI7XG4gICAgICAgIGV4dHJhUHJvcHNbXCJhcmlhLWxhYmVsXCJdID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGV4dHJhUHJvcHNbXCJyb2xlXCJdID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAgIDxBdmF0YXJcbiAgICAgICAgICAgIHJlZj17cmVmfVxuICAgICAgICAgICAgc3JjPXtpbWFnZVVybH1cbiAgICAgICAgICAgIGlkPXtpZE5hbWUgPz8gXCJcIn1cbiAgICAgICAgICAgIG5hbWU9e25hbWUgPz8gXCJcIn1cbiAgICAgICAgICAgIHR5cGU9e3R5cGV9XG4gICAgICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKFwibXhfQmFzZUF2YXRhclwiLCBjbGFzc05hbWUpfVxuICAgICAgICAgICAgYXJpYS1sYWJlbD17YWx0VGV4dH1cbiAgICAgICAgICAgIG9uRXJyb3I9e29uRXJyb3J9XG4gICAgICAgICAgICB0aXRsZT17dGl0bGV9XG4gICAgICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICAgICAgey4uLmV4dHJhUHJvcHN9XG4gICAgICAgICAgICB7Li4ub3RoZXJQcm9wc31cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiYXZhdGFyLWltZ1wiXG4gICAgICAgIC8+XG4gICAgKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBCYXNlQXZhdGFyO1xuZXhwb3J0IHR5cGUgQmFzZUF2YXRhclR5cGUgPSBSZWFjdC5GQzxJUHJvcHM+O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFXQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxXQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxP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