UNPKG

matrix-react-sdk

Version:
86 lines (81 loc) 9.19 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.usePollsWithRelations = exports.usePolls = void 0; var _react = require("react"); var _matrix = require("matrix-js-sdk/src/matrix"); var _useEventEmitter = require("../../../../hooks/useEventEmitter"); /* 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. */ /** * Get poll instances from a room * Updates to include new polls * @param roomId - id of room to retrieve polls for * @param matrixClient - client * @returns {Map<string, Poll>} - Map of Poll instances */ const usePolls = (roomId, matrixClient) => { const room = matrixClient.getRoom(roomId); if (!room) { throw new Error("Cannot find room"); } // copy room.polls map so changes can be detected const polls = (0, _useEventEmitter.useEventEmitterState)(room, _matrix.PollEvent.New, () => new Map(room.polls)); return { polls }; }; /** * Get all poll instances from a room * Fetch their responses (using cached poll responses) * Updates on: * - new polls added to room * - new responses added to polls * - changes to poll ended state * @param roomId - id of room to retrieve polls for * @param matrixClient - client * @returns {Map<string, Poll>} - Map of Poll instances */ exports.usePolls = usePolls; const usePollsWithRelations = (roomId, matrixClient) => { const { polls } = usePolls(roomId, matrixClient); const [pollsWithRelations, setPollsWithRelations] = (0, _react.useState)(polls); (0, _react.useEffect)(() => { const onPollUpdate = async () => { // trigger rerender by creating a new poll map setPollsWithRelations(new Map(polls)); }; if (polls) { for (const poll of polls.values()) { // listen to changes in responses and end state poll.on(_matrix.PollEvent.End, onPollUpdate); poll.on(_matrix.PollEvent.Responses, onPollUpdate); // trigger request to get all responses // if they are not already in cache poll.getResponses(); } setPollsWithRelations(polls); } // unsubscribe return () => { if (polls) { for (const poll of polls.values()) { poll.off(_matrix.PollEvent.End, onPollUpdate); poll.off(_matrix.PollEvent.Responses, onPollUpdate); } } }; }, [polls, setPollsWithRelations]); return { polls: pollsWithRelations }; }; exports.usePollsWithRelations = usePollsWithRelations; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwiX21hdHJpeCIsIl91c2VFdmVudEVtaXR0ZXIiLCJ1c2VQb2xscyIsInJvb21JZCIsIm1hdHJpeENsaWVudCIsInJvb20iLCJnZXRSb29tIiwiRXJyb3IiLCJwb2xscyIsInVzZUV2ZW50RW1pdHRlclN0YXRlIiwiUG9sbEV2ZW50IiwiTmV3IiwiTWFwIiwiZXhwb3J0cyIsInVzZVBvbGxzV2l0aFJlbGF0aW9ucyIsInBvbGxzV2l0aFJlbGF0aW9ucyIsInNldFBvbGxzV2l0aFJlbGF0aW9ucyIsInVzZVN0YXRlIiwidXNlRWZmZWN0Iiwib25Qb2xsVXBkYXRlIiwicG9sbCIsInZhbHVlcyIsIm9uIiwiRW5kIiwiUmVzcG9uc2VzIiwiZ2V0UmVzcG9uc2VzIiwib2ZmIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdmlld3MvcG9sbHMvcG9sbEhpc3RvcnkvdXNlUG9sbEhpc3RvcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjMgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUG9sbCwgUG9sbEV2ZW50LCBNYXRyaXhDbGllbnQgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbWF0cml4XCI7XG5cbmltcG9ydCB7IHVzZUV2ZW50RW1pdHRlclN0YXRlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50RW1pdHRlclwiO1xuXG4vKipcbiAqIEdldCBwb2xsIGluc3RhbmNlcyBmcm9tIGEgcm9vbVxuICogVXBkYXRlcyB0byBpbmNsdWRlIG5ldyBwb2xsc1xuICogQHBhcmFtIHJvb21JZCAtIGlkIG9mIHJvb20gdG8gcmV0cmlldmUgcG9sbHMgZm9yXG4gKiBAcGFyYW0gbWF0cml4Q2xpZW50IC0gY2xpZW50XG4gKiBAcmV0dXJucyB7TWFwPHN0cmluZywgUG9sbD59IC0gTWFwIG9mIFBvbGwgaW5zdGFuY2VzXG4gKi9cbmV4cG9ydCBjb25zdCB1c2VQb2xscyA9IChcbiAgICByb29tSWQ6IHN0cmluZyxcbiAgICBtYXRyaXhDbGllbnQ6IE1hdHJpeENsaWVudCxcbik6IHtcbiAgICBwb2xsczogTWFwPHN0cmluZywgUG9sbD47XG59ID0+IHtcbiAgICBjb25zdCByb29tID0gbWF0cml4Q2xpZW50LmdldFJvb20ocm9vbUlkKTtcblxuICAgIGlmICghcm9vbSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCByb29tXCIpO1xuICAgIH1cblxuICAgIC8vIGNvcHkgcm9vbS5wb2xscyBtYXAgc28gY2hhbmdlcyBjYW4gYmUgZGV0ZWN0ZWRcbiAgICBjb25zdCBwb2xscyA9IHVzZUV2ZW50RW1pdHRlclN0YXRlKHJvb20sIFBvbGxFdmVudC5OZXcsICgpID0+IG5ldyBNYXA8c3RyaW5nLCBQb2xsPihyb29tLnBvbGxzKSk7XG5cbiAgICByZXR1cm4geyBwb2xscyB9O1xufTtcblxuLyoqXG4gKiBHZXQgYWxsIHBvbGwgaW5zdGFuY2VzIGZyb20gYSByb29tXG4gKiBGZXRjaCB0aGVpciByZXNwb25zZXMgKHVzaW5nIGNhY2hlZCBwb2xsIHJlc3BvbnNlcylcbiAqIFVwZGF0ZXMgb246XG4gKiAtIG5ldyBwb2xscyBhZGRlZCB0byByb29tXG4gKiAtIG5ldyByZXNwb25zZXMgYWRkZWQgdG8gcG9sbHNcbiAqIC0gY2hhbmdlcyB0byBwb2xsIGVuZGVkIHN0YXRlXG4gKiBAcGFyYW0gcm9vbUlkIC0gaWQgb2Ygcm9vbSB0byByZXRyaWV2ZSBwb2xscyBmb3JcbiAqIEBwYXJhbSBtYXRyaXhDbGllbnQgLSBjbGllbnRcbiAqIEByZXR1cm5zIHtNYXA8c3RyaW5nLCBQb2xsPn0gLSBNYXAgb2YgUG9sbCBpbnN0YW5jZXNcbiAqL1xuZXhwb3J0IGNvbnN0IHVzZVBvbGxzV2l0aFJlbGF0aW9ucyA9IChcbiAgICByb29tSWQ6IHN0cmluZyxcbiAgICBtYXRyaXhDbGllbnQ6IE1hdHJpeENsaWVudCxcbik6IHtcbiAgICBwb2xsczogTWFwPHN0cmluZywgUG9sbD47XG59ID0+IHtcbiAgICBjb25zdCB7IHBvbGxzIH0gPSB1c2VQb2xscyhyb29tSWQsIG1hdHJpeENsaWVudCk7XG4gICAgY29uc3QgW3BvbGxzV2l0aFJlbGF0aW9ucywgc2V0UG9sbHNXaXRoUmVsYXRpb25zXSA9IHVzZVN0YXRlPE1hcDxzdHJpbmcsIFBvbGw+Pihwb2xscyk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBjb25zdCBvblBvbGxVcGRhdGUgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgICAgICAvLyB0cmlnZ2VyIHJlcmVuZGVyIGJ5IGNyZWF0aW5nIGEgbmV3IHBvbGwgbWFwXG4gICAgICAgICAgICBzZXRQb2xsc1dpdGhSZWxhdGlvbnMobmV3IE1hcChwb2xscykpO1xuICAgICAgICB9O1xuICAgICAgICBpZiAocG9sbHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcG9sbCBvZiBwb2xscy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgICAgIC8vIGxpc3RlbiB0byBjaGFuZ2VzIGluIHJlc3BvbnNlcyBhbmQgZW5kIHN0YXRlXG4gICAgICAgICAgICAgICAgcG9sbC5vbihQb2xsRXZlbnQuRW5kLCBvblBvbGxVcGRhdGUpO1xuICAgICAgICAgICAgICAgIHBvbGwub24oUG9sbEV2ZW50LlJlc3BvbnNlcywgb25Qb2xsVXBkYXRlKTtcbiAgICAgICAgICAgICAgICAvLyB0cmlnZ2VyIHJlcXVlc3QgdG8gZ2V0IGFsbCByZXNwb25zZXNcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGV5IGFyZSBub3QgYWxyZWFkeSBpbiBjYWNoZVxuICAgICAgICAgICAgICAgIHBvbGwuZ2V0UmVzcG9uc2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRQb2xsc1dpdGhSZWxhdGlvbnMocG9sbHMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHVuc3Vic2NyaWJlXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAocG9sbHMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBvbGwgb2YgcG9sbHMudmFsdWVzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcG9sbC5vZmYoUG9sbEV2ZW50LkVuZCwgb25Qb2xsVXBkYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgcG9sbC5vZmYoUG9sbEV2ZW50LlJlc3BvbnNlcywgb25Qb2xsVXBkYXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSwgW3BvbGxzLCBzZXRQb2xsc1dpdGhSZWxhdGlvbnNdKTtcblxuICAgIHJldHVybiB7IHBvbGxzOiBwb2xsc1dpdGhSZWxhdGlvbnMgfTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQVFBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUVBLElBQUFFLGdCQUFBLEdBQUFGLE9BQUE7QUFYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLE1BQU1HLFFBQVEsR0FBR0EsQ0FDcEJDLE1BQWMsRUFDZEMsWUFBMEIsS0FHekI7RUFDRCxNQUFNQyxJQUFJLEdBQUdELFlBQVksQ0FBQ0UsT0FBTyxDQUFDSCxNQUFNLENBQUM7RUFFekMsSUFBSSxDQUFDRSxJQUFJLEVBQUU7SUFDUCxNQUFNLElBQUlFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztFQUN2Qzs7RUFFQTtFQUNBLE1BQU1DLEtBQUssR0FBRyxJQUFBQyxxQ0FBb0IsRUFBQ0osSUFBSSxFQUFFSyxpQkFBUyxDQUFDQyxHQUFHLEVBQUUsTUFBTSxJQUFJQyxHQUFHLENBQWVQLElBQUksQ0FBQ0csS0FBSyxDQUFDLENBQUM7RUFFaEcsT0FBTztJQUFFQTtFQUFNLENBQUM7QUFDcEIsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVkFLLE9BQUEsQ0FBQVgsUUFBQSxHQUFBQSxRQUFBO0FBV08sTUFBTVkscUJBQXFCLEdBQUdBLENBQ2pDWCxNQUFjLEVBQ2RDLFlBQTBCLEtBR3pCO0VBQ0QsTUFBTTtJQUFFSTtFQUFNLENBQUMsR0FBR04sUUFBUSxDQUFDQyxNQUFNLEVBQUVDLFlBQVksQ0FBQztFQUNoRCxNQUFNLENBQUNXLGtCQUFrQixFQUFFQyxxQkFBcUIsQ0FBQyxHQUFHLElBQUFDLGVBQVEsRUFBb0JULEtBQUssQ0FBQztFQUV0RixJQUFBVSxnQkFBUyxFQUFDLE1BQU07SUFDWixNQUFNQyxZQUFZLEdBQUcsTUFBQUEsQ0FBQSxLQUEyQjtNQUM1QztNQUNBSCxxQkFBcUIsQ0FBQyxJQUFJSixHQUFHLENBQUNKLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFDRCxJQUFJQSxLQUFLLEVBQUU7TUFDUCxLQUFLLE1BQU1ZLElBQUksSUFBSVosS0FBSyxDQUFDYSxNQUFNLENBQUMsQ0FBQyxFQUFFO1FBQy9CO1FBQ0FELElBQUksQ0FBQ0UsRUFBRSxDQUFDWixpQkFBUyxDQUFDYSxHQUFHLEVBQUVKLFlBQVksQ0FBQztRQUNwQ0MsSUFBSSxDQUFDRSxFQUFFLENBQUNaLGlCQUFTLENBQUNjLFNBQVMsRUFBRUwsWUFBWSxDQUFDO1FBQzFDO1FBQ0E7UUFDQUMsSUFBSSxDQUFDSyxZQUFZLENBQUMsQ0FBQztNQUN2QjtNQUNBVCxxQkFBcUIsQ0FBQ1IsS0FBSyxDQUFDO0lBQ2hDO0lBQ0E7SUFDQSxPQUFPLE1BQU07TUFDVCxJQUFJQSxLQUFLLEVBQUU7UUFDUCxLQUFLLE1BQU1ZLElBQUksSUFBSVosS0FBSyxDQUFDYSxNQUFNLENBQUMsQ0FBQyxFQUFFO1VBQy9CRCxJQUFJLENBQUNNLEdBQUcsQ0FBQ2hCLGlCQUFTLENBQUNhLEdBQUcsRUFBRUosWUFBWSxDQUFDO1VBQ3JDQyxJQUFJLENBQUNNLEdBQUcsQ0FBQ2hCLGlCQUFTLENBQUNjLFNBQVMsRUFBRUwsWUFBWSxDQUFDO1FBQy9DO01BQ0o7SUFDSixDQUFDO0VBQ0wsQ0FBQyxFQUFFLENBQUNYLEtBQUssRUFBRVEscUJBQXFCLENBQUMsQ0FBQztFQUVsQyxPQUFPO0lBQUVSLEtBQUssRUFBRU87RUFBbUIsQ0FBQztBQUN4QyxDQUFDO0FBQUNGLE9BQUEsQ0FBQUMscUJBQUEsR0FBQUEscUJBQUEiLCJpZ25vcmVMaXN0IjpbXX0=