UNPKG

matrix-react-sdk

Version:
112 lines (108 loc) 18.6 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.MPollEndBody = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _react = _interopRequireWildcard(require("react")); var _matrix = require("matrix-js-sdk/src/matrix"); var _logger = require("matrix-js-sdk/src/logger"); var _poll = require("../../../../res/img/element-icons/room/composer/poll.svg"); var _MatrixClientContext = _interopRequireWildcard(require("../../../contexts/MatrixClientContext")); var _languageHandler = require("../../../languageHandler"); var _TextForEvent = require("../../../TextForEvent"); var _Caption = require("../typography/Caption"); var _MPollBody = _interopRequireDefault(require("./MPollBody")); const _excluded = ["mxEvent"]; /* Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. 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 getRelatedPollStartEventId = event => { const relation = event.getRelation(); return relation?.event_id; }; /** * Attempt to retrieve the related poll start event for this end event * If the event already exists in the rooms timeline, return it * Otherwise try to fetch the event from the server * @param event * @returns */ const usePollStartEvent = event => { const matrixClient = (0, _react.useContext)(_MatrixClientContext.default); const [pollStartEvent, setPollStartEvent] = (0, _react.useState)(); const [isLoadingPollStartEvent, setIsLoadingPollStartEvent] = (0, _react.useState)(false); const pollStartEventId = getRelatedPollStartEventId(event); (0, _react.useEffect)(() => { const room = matrixClient.getRoom(event.getRoomId()); const fetchPollStartEvent = async (roomId, pollStartEventId) => { setIsLoadingPollStartEvent(true); try { const startEventJson = await matrixClient.fetchRoomEvent(roomId, pollStartEventId); const startEvent = new _matrix.MatrixEvent(startEventJson); // add the poll to the room polls state room?.processPollEvents([startEvent, event]); // end event is not a valid end to the related start event // if not sent by the same user if (startEvent.getSender() === event.getSender()) { setPollStartEvent(startEvent); } } catch (error) { _logger.logger.error("Failed to fetch related poll start event", error); } finally { setIsLoadingPollStartEvent(false); } }; if (pollStartEvent || !room || !pollStartEventId) { return; } const timelineSet = room.getUnfilteredTimelineSet(); const localEvent = timelineSet?.getTimelineForEvent(pollStartEventId)?.getEvents().find(e => e.getId() === pollStartEventId); if (localEvent) { // end event is not a valid end to the related start event // if not sent by the same user if (localEvent.getSender() === event.getSender()) { setPollStartEvent(localEvent); } } else { // pollStartEvent is not in the current timeline, // fetch it fetchPollStartEvent(room.roomId, pollStartEventId); } }, [event, pollStartEventId, pollStartEvent, matrixClient]); return { pollStartEvent, isLoadingPollStartEvent }; }; const MPollEndBody = exports.MPollEndBody = /*#__PURE__*/_react.default.forwardRef((_ref, ref) => { let { mxEvent } = _ref, props = (0, _objectWithoutProperties2.default)(_ref, _excluded); const cli = (0, _MatrixClientContext.useMatrixClientContext)(); const { pollStartEvent, isLoadingPollStartEvent } = usePollStartEvent(mxEvent); if (!pollStartEvent) { const pollEndFallbackMessage = _matrix.M_TEXT.findIn(mxEvent.getContent()) || (0, _TextForEvent.textForEvent)(mxEvent, cli); return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_poll.Icon, { className: "mx_MPollEndBody_icon" }), !isLoadingPollStartEvent && pollEndFallbackMessage); } return /*#__PURE__*/_react.default.createElement("div", { className: "mx_MPollEndBody", ref: ref }, /*#__PURE__*/_react.default.createElement(_Caption.Caption, null, (0, _languageHandler._t)("timeline|m.poll.end|ended")), /*#__PURE__*/_react.default.createElement(_MPollBody.default, (0, _extends2.default)({ mxEvent: pollStartEvent }, props))); }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfbWF0cml4IiwiX2xvZ2dlciIsIl9wb2xsIiwiX01hdHJpeENsaWVudENvbnRleHQiLCJfbGFuZ3VhZ2VIYW5kbGVyIiwiX1RleHRGb3JFdmVudCIsIl9DYXB0aW9uIiwiX01Qb2xsQm9keSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfZXhjbHVkZWQiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJnZXRSZWxhdGVkUG9sbFN0YXJ0RXZlbnRJZCIsImV2ZW50IiwicmVsYXRpb24iLCJnZXRSZWxhdGlvbiIsImV2ZW50X2lkIiwidXNlUG9sbFN0YXJ0RXZlbnQiLCJtYXRyaXhDbGllbnQiLCJ1c2VDb250ZXh0IiwiTWF0cml4Q2xpZW50Q29udGV4dCIsInBvbGxTdGFydEV2ZW50Iiwic2V0UG9sbFN0YXJ0RXZlbnQiLCJ1c2VTdGF0ZSIsImlzTG9hZGluZ1BvbGxTdGFydEV2ZW50Iiwic2V0SXNMb2FkaW5nUG9sbFN0YXJ0RXZlbnQiLCJwb2xsU3RhcnRFdmVudElkIiwidXNlRWZmZWN0Iiwicm9vbSIsImdldFJvb20iLCJnZXRSb29tSWQiLCJmZXRjaFBvbGxTdGFydEV2ZW50Iiwicm9vbUlkIiwic3RhcnRFdmVudEpzb24iLCJmZXRjaFJvb21FdmVudCIsInN0YXJ0RXZlbnQiLCJNYXRyaXhFdmVudCIsInByb2Nlc3NQb2xsRXZlbnRzIiwiZ2V0U2VuZGVyIiwiZXJyb3IiLCJsb2dnZXIiLCJ0aW1lbGluZVNldCIsImdldFVuZmlsdGVyZWRUaW1lbGluZVNldCIsImxvY2FsRXZlbnQiLCJnZXRUaW1lbGluZUZvckV2ZW50IiwiZ2V0RXZlbnRzIiwiZmluZCIsImdldElkIiwiTVBvbGxFbmRCb2R5IiwiZXhwb3J0cyIsIlJlYWN0IiwiZm9yd2FyZFJlZiIsIl9yZWYiLCJyZWYiLCJteEV2ZW50IiwicHJvcHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMyIiwiY2xpIiwidXNlTWF0cml4Q2xpZW50Q29udGV4dCIsInBvbGxFbmRGYWxsYmFja01lc3NhZ2UiLCJNX1RFWFQiLCJmaW5kSW4iLCJnZXRDb250ZW50IiwidGV4dEZvckV2ZW50IiwiY3JlYXRlRWxlbWVudCIsIkZyYWdtZW50IiwiSWNvbiIsImNsYXNzTmFtZSIsIkNhcHRpb24iLCJfdCIsIl9leHRlbmRzMiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL21lc3NhZ2VzL01Qb2xsRW5kQm9keS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjMgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUsIHVzZUNvbnRleHQsIEZvcndhcmRSZWZFeG90aWNDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IE1hdHJpeEV2ZW50LCBNX1RFWFQgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbWF0cml4XCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbG9nZ2VyXCI7XG5cbmltcG9ydCB7IEljb24gYXMgUG9sbEljb24gfSBmcm9tIFwiLi4vLi4vLi4vLi4vcmVzL2ltZy9lbGVtZW50LWljb25zL3Jvb20vY29tcG9zZXIvcG9sbC5zdmdcIjtcbmltcG9ydCBNYXRyaXhDbGllbnRDb250ZXh0LCB7IHVzZU1hdHJpeENsaWVudENvbnRleHQgfSBmcm9tIFwiLi4vLi4vLi4vY29udGV4dHMvTWF0cml4Q2xpZW50Q29udGV4dFwiO1xuaW1wb3J0IHsgX3QgfSBmcm9tIFwiLi4vLi4vLi4vbGFuZ3VhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgeyB0ZXh0Rm9yRXZlbnQgfSBmcm9tIFwiLi4vLi4vLi4vVGV4dEZvckV2ZW50XCI7XG5pbXBvcnQgeyBDYXB0aW9uIH0gZnJvbSBcIi4uL3R5cG9ncmFwaHkvQ2FwdGlvblwiO1xuaW1wb3J0IHsgSUJvZHlQcm9wcyB9IGZyb20gXCIuL0lCb2R5UHJvcHNcIjtcbmltcG9ydCBNUG9sbEJvZHkgZnJvbSBcIi4vTVBvbGxCb2R5XCI7XG5cbmNvbnN0IGdldFJlbGF0ZWRQb2xsU3RhcnRFdmVudElkID0gKGV2ZW50OiBNYXRyaXhFdmVudCk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3QgcmVsYXRpb24gPSBldmVudC5nZXRSZWxhdGlvbigpO1xuICAgIHJldHVybiByZWxhdGlvbj8uZXZlbnRfaWQ7XG59O1xuXG4vKipcbiAqIEF0dGVtcHQgdG8gcmV0cmlldmUgdGhlIHJlbGF0ZWQgcG9sbCBzdGFydCBldmVudCBmb3IgdGhpcyBlbmQgZXZlbnRcbiAqIElmIHRoZSBldmVudCBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcm9vbXMgdGltZWxpbmUsIHJldHVybiBpdFxuICogT3RoZXJ3aXNlIHRyeSB0byBmZXRjaCB0aGUgZXZlbnQgZnJvbSB0aGUgc2VydmVyXG4gKiBAcGFyYW0gZXZlbnRcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IHVzZVBvbGxTdGFydEV2ZW50ID0gKGV2ZW50OiBNYXRyaXhFdmVudCk6IHsgcG9sbFN0YXJ0RXZlbnQ/OiBNYXRyaXhFdmVudDsgaXNMb2FkaW5nUG9sbFN0YXJ0RXZlbnQ6IGJvb2xlYW4gfSA9PiB7XG4gICAgY29uc3QgbWF0cml4Q2xpZW50ID0gdXNlQ29udGV4dChNYXRyaXhDbGllbnRDb250ZXh0KTtcbiAgICBjb25zdCBbcG9sbFN0YXJ0RXZlbnQsIHNldFBvbGxTdGFydEV2ZW50XSA9IHVzZVN0YXRlPE1hdHJpeEV2ZW50PigpO1xuICAgIGNvbnN0IFtpc0xvYWRpbmdQb2xsU3RhcnRFdmVudCwgc2V0SXNMb2FkaW5nUG9sbFN0YXJ0RXZlbnRdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gICAgY29uc3QgcG9sbFN0YXJ0RXZlbnRJZCA9IGdldFJlbGF0ZWRQb2xsU3RhcnRFdmVudElkKGV2ZW50KTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJvb20gPSBtYXRyaXhDbGllbnQuZ2V0Um9vbShldmVudC5nZXRSb29tSWQoKSk7XG4gICAgICAgIGNvbnN0IGZldGNoUG9sbFN0YXJ0RXZlbnQgPSBhc3luYyAocm9vbUlkOiBzdHJpbmcsIHBvbGxTdGFydEV2ZW50SWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgc2V0SXNMb2FkaW5nUG9sbFN0YXJ0RXZlbnQodHJ1ZSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0RXZlbnRKc29uID0gYXdhaXQgbWF0cml4Q2xpZW50LmZldGNoUm9vbUV2ZW50KHJvb21JZCwgcG9sbFN0YXJ0RXZlbnRJZCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRFdmVudCA9IG5ldyBNYXRyaXhFdmVudChzdGFydEV2ZW50SnNvbik7XG4gICAgICAgICAgICAgICAgLy8gYWRkIHRoZSBwb2xsIHRvIHRoZSByb29tIHBvbGxzIHN0YXRlXG4gICAgICAgICAgICAgICAgcm9vbT8ucHJvY2Vzc1BvbGxFdmVudHMoW3N0YXJ0RXZlbnQsIGV2ZW50XSk7XG5cbiAgICAgICAgICAgICAgICAvLyBlbmQgZXZlbnQgaXMgbm90IGEgdmFsaWQgZW5kIHRvIHRoZSByZWxhdGVkIHN0YXJ0IGV2ZW50XG4gICAgICAgICAgICAgICAgLy8gaWYgbm90IHNlbnQgYnkgdGhlIHNhbWUgdXNlclxuICAgICAgICAgICAgICAgIGlmIChzdGFydEV2ZW50LmdldFNlbmRlcigpID09PSBldmVudC5nZXRTZW5kZXIoKSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRQb2xsU3RhcnRFdmVudChzdGFydEV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcIkZhaWxlZCB0byBmZXRjaCByZWxhdGVkIHBvbGwgc3RhcnQgZXZlbnRcIiwgZXJyb3IpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICBzZXRJc0xvYWRpbmdQb2xsU3RhcnRFdmVudChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHBvbGxTdGFydEV2ZW50IHx8ICFyb29tIHx8ICFwb2xsU3RhcnRFdmVudElkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aW1lbGluZVNldCA9IHJvb20uZ2V0VW5maWx0ZXJlZFRpbWVsaW5lU2V0KCk7XG4gICAgICAgIGNvbnN0IGxvY2FsRXZlbnQgPSB0aW1lbGluZVNldFxuICAgICAgICAgICAgPy5nZXRUaW1lbGluZUZvckV2ZW50KHBvbGxTdGFydEV2ZW50SWQpXG4gICAgICAgICAgICA/LmdldEV2ZW50cygpXG4gICAgICAgICAgICAuZmluZCgoZSkgPT4gZS5nZXRJZCgpID09PSBwb2xsU3RhcnRFdmVudElkKTtcblxuICAgICAgICBpZiAobG9jYWxFdmVudCkge1xuICAgICAgICAgICAgLy8gZW5kIGV2ZW50IGlzIG5vdCBhIHZhbGlkIGVuZCB0byB0aGUgcmVsYXRlZCBzdGFydCBldmVudFxuICAgICAgICAgICAgLy8gaWYgbm90IHNlbnQgYnkgdGhlIHNhbWUgdXNlclxuICAgICAgICAgICAgaWYgKGxvY2FsRXZlbnQuZ2V0U2VuZGVyKCkgPT09IGV2ZW50LmdldFNlbmRlcigpKSB7XG4gICAgICAgICAgICAgICAgc2V0UG9sbFN0YXJ0RXZlbnQobG9jYWxFdmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBwb2xsU3RhcnRFdmVudCBpcyBub3QgaW4gdGhlIGN1cnJlbnQgdGltZWxpbmUsXG4gICAgICAgICAgICAvLyBmZXRjaCBpdFxuICAgICAgICAgICAgZmV0Y2hQb2xsU3RhcnRFdmVudChyb29tLnJvb21JZCwgcG9sbFN0YXJ0RXZlbnRJZCk7XG4gICAgICAgIH1cbiAgICB9LCBbZXZlbnQsIHBvbGxTdGFydEV2ZW50SWQsIHBvbGxTdGFydEV2ZW50LCBtYXRyaXhDbGllbnRdKTtcblxuICAgIHJldHVybiB7IHBvbGxTdGFydEV2ZW50LCBpc0xvYWRpbmdQb2xsU3RhcnRFdmVudCB9O1xufTtcblxuZXhwb3J0IGNvbnN0IE1Qb2xsRW5kQm9keSA9IFJlYWN0LmZvcndhcmRSZWY8YW55LCBJQm9keVByb3BzPigoeyBteEV2ZW50LCAuLi5wcm9wcyB9LCByZWYpID0+IHtcbiAgICBjb25zdCBjbGkgPSB1c2VNYXRyaXhDbGllbnRDb250ZXh0KCk7XG4gICAgY29uc3QgeyBwb2xsU3RhcnRFdmVudCwgaXNMb2FkaW5nUG9sbFN0YXJ0RXZlbnQgfSA9IHVzZVBvbGxTdGFydEV2ZW50KG14RXZlbnQpO1xuXG4gICAgaWYgKCFwb2xsU3RhcnRFdmVudCkge1xuICAgICAgICBjb25zdCBwb2xsRW5kRmFsbGJhY2tNZXNzYWdlID0gTV9URVhULmZpbmRJbihteEV2ZW50LmdldENvbnRlbnQoKSkgfHwgdGV4dEZvckV2ZW50KG14RXZlbnQsIGNsaSk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIDxQb2xsSWNvbiBjbGFzc05hbWU9XCJteF9NUG9sbEVuZEJvZHlfaWNvblwiIC8+XG4gICAgICAgICAgICAgICAgeyFpc0xvYWRpbmdQb2xsU3RhcnRFdmVudCAmJiBwb2xsRW5kRmFsbGJhY2tNZXNzYWdlfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9NUG9sbEVuZEJvZHlcIiByZWY9e3JlZn0+XG4gICAgICAgICAgICA8Q2FwdGlvbj57X3QoXCJ0aW1lbGluZXxtLnBvbGwuZW5kfGVuZGVkXCIpfTwvQ2FwdGlvbj5cbiAgICAgICAgICAgIDxNUG9sbEJvZHkgbXhFdmVudD17cG9sbFN0YXJ0RXZlbnR9IHsuLi5wcm9wc30gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgKTtcbn0pIGFzIEZvcndhcmRSZWZFeG90aWNDb21wb25lbnQ8SUJvZHlQcm9wcz47XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQVFBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE9BQUEsR0FBQUYsT0FBQTtBQUVBLElBQUFHLEtBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLG9CQUFBLEdBQUFMLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxnQkFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sYUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sUUFBQSxHQUFBUCxPQUFBO0FBRUEsSUFBQVEsVUFBQSxHQUFBQyxzQkFBQSxDQUFBVCxPQUFBO0FBQW9DLE1BQUFVLFNBQUE7QUFsQnBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkEsU0FBQUMseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEsQ0FBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEs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