UNPKG

matrix-react-sdk

Version:
70 lines (65 loc) 9.26 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useRoomMembers = exports.useRoomMemberCount = exports.useMyRoomMembership = void 0; var _react = require("react"); var _matrix = require("matrix-js-sdk/src/matrix"); var _lodash = require("lodash"); var _useEventEmitter = require("./useEventEmitter"); /* Copyright 2024 New Vector Ltd. Copyright 2020 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. */ // Hook to simplify watching Matrix Room joined members const useRoomMembers = (room, throttleWait = 250) => { const [members, setMembers] = (0, _react.useState)(room.getJoinedMembers()); const throttledUpdate = (0, _react.useMemo)(() => (0, _lodash.throttle)(() => { setMembers(room.getJoinedMembers()); }, throttleWait, { leading: true, trailing: true }), [room, throttleWait]); (0, _useEventEmitter.useTypedEventEmitter)(room.currentState, _matrix.RoomStateEvent.Members, throttledUpdate); return members; }; exports.useRoomMembers = useRoomMembers; /** * Returns a count of members in a given room * @param room the room to track. * @param opts The options. * @returns the room member count. */ const useRoomMemberCount = (room, { throttleWait } = { throttleWait: 250 }) => { const [count, setCount] = (0, _react.useState)(room.getJoinedMemberCount()); const throttledUpdate = (0, _react.useMemo)(() => (0, _lodash.throttle)(() => { setCount(room.getJoinedMemberCount()); }, throttleWait, { leading: true, trailing: true }), [room, throttleWait]); (0, _useEventEmitter.useTypedEventEmitter)(room.currentState, _matrix.RoomStateEvent.Members, throttledUpdate); /** * `room.getJoinedMemberCount()` caches the member count behind the room summary * So we need to re-compute the member count when the summary gets updated */ (0, _useEventEmitter.useTypedEventEmitter)(room, _matrix.RoomEvent.Summary, throttledUpdate); return count; }; // Hook to simplify watching the local user's membership in a room exports.useRoomMemberCount = useRoomMemberCount; const useMyRoomMembership = room => { const [membership, setMembership] = (0, _react.useState)(room.getMyMembership()); (0, _useEventEmitter.useTypedEventEmitter)(room, _matrix.RoomEvent.MyMembership, () => { setMembership(room.getMyMembership()); }); return membership; }; exports.useMyRoomMembership = useMyRoomMembership; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwiX21hdHJpeCIsIl9sb2Rhc2giLCJfdXNlRXZlbnRFbWl0dGVyIiwidXNlUm9vbU1lbWJlcnMiLCJyb29tIiwidGhyb3R0bGVXYWl0IiwibWVtYmVycyIsInNldE1lbWJlcnMiLCJ1c2VTdGF0ZSIsImdldEpvaW5lZE1lbWJlcnMiLCJ0aHJvdHRsZWRVcGRhdGUiLCJ1c2VNZW1vIiwidGhyb3R0bGUiLCJsZWFkaW5nIiwidHJhaWxpbmciLCJ1c2VUeXBlZEV2ZW50RW1pdHRlciIsImN1cnJlbnRTdGF0ZSIsIlJvb21TdGF0ZUV2ZW50IiwiTWVtYmVycyIsImV4cG9ydHMiLCJ1c2VSb29tTWVtYmVyQ291bnQiLCJjb3VudCIsInNldENvdW50IiwiZ2V0Sm9pbmVkTWVtYmVyQ291bnQiLCJSb29tRXZlbnQiLCJTdW1tYXJ5IiwidXNlTXlSb29tTWVtYmVyc2hpcCIsIm1lbWJlcnNoaXAiLCJzZXRNZW1iZXJzaGlwIiwiZ2V0TXlNZW1iZXJzaGlwIiwiTXlNZW1iZXJzaGlwIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzL3VzZVJvb21NZW1iZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIwIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCB7IHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSb29tLCBSb29tRXZlbnQsIFJvb21NZW1iZXIsIFJvb21TdGF0ZUV2ZW50IH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuaW1wb3J0IHsgTWVtYmVyc2hpcCB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy90eXBlc1wiO1xuaW1wb3J0IHsgdGhyb3R0bGUgfSBmcm9tIFwibG9kYXNoXCI7XG5cbmltcG9ydCB7IHVzZVR5cGVkRXZlbnRFbWl0dGVyIH0gZnJvbSBcIi4vdXNlRXZlbnRFbWl0dGVyXCI7XG5cbi8vIEhvb2sgdG8gc2ltcGxpZnkgd2F0Y2hpbmcgTWF0cml4IFJvb20gam9pbmVkIG1lbWJlcnNcbmV4cG9ydCBjb25zdCB1c2VSb29tTWVtYmVycyA9IChyb29tOiBSb29tLCB0aHJvdHRsZVdhaXQgPSAyNTApOiBSb29tTWVtYmVyW10gPT4ge1xuICAgIGNvbnN0IFttZW1iZXJzLCBzZXRNZW1iZXJzXSA9IHVzZVN0YXRlPFJvb21NZW1iZXJbXT4ocm9vbS5nZXRKb2luZWRNZW1iZXJzKCkpO1xuXG4gICAgY29uc3QgdGhyb3R0bGVkVXBkYXRlID0gdXNlTWVtbyhcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICAgIHRocm90dGxlKFxuICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0TWVtYmVycyhyb29tLmdldEpvaW5lZE1lbWJlcnMoKSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aHJvdHRsZVdhaXQsXG4gICAgICAgICAgICAgICAgeyBsZWFkaW5nOiB0cnVlLCB0cmFpbGluZzogdHJ1ZSB9LFxuICAgICAgICAgICAgKSxcbiAgICAgICAgW3Jvb20sIHRocm90dGxlV2FpdF0sXG4gICAgKTtcblxuICAgIHVzZVR5cGVkRXZlbnRFbWl0dGVyKHJvb20uY3VycmVudFN0YXRlLCBSb29tU3RhdGVFdmVudC5NZW1iZXJzLCB0aHJvdHRsZWRVcGRhdGUpO1xuICAgIHJldHVybiBtZW1iZXJzO1xufTtcblxudHlwZSBSb29tTWVtYmVyQ291bnRPcHRzID0ge1xuICAgIC8qKlxuICAgICAqIFdhaXQgdGltZSBiZXR3ZWVuIHJvb20gbWVtYmVyIGNvdW50IHVwZGF0ZVxuICAgICAqL1xuICAgIHRocm90dGxlV2FpdD86IG51bWJlcjtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIGNvdW50IG9mIG1lbWJlcnMgaW4gYSBnaXZlbiByb29tXG4gKiBAcGFyYW0gcm9vbSB0aGUgcm9vbSB0byB0cmFjay5cbiAqIEBwYXJhbSBvcHRzIFRoZSBvcHRpb25zLlxuICogQHJldHVybnMgdGhlIHJvb20gbWVtYmVyIGNvdW50LlxuICovXG5leHBvcnQgY29uc3QgdXNlUm9vbU1lbWJlckNvdW50ID0gKFxuICAgIHJvb206IFJvb20sXG4gICAgeyB0aHJvdHRsZVdhaXQgfTogUm9vbU1lbWJlckNvdW50T3B0cyA9IHsgdGhyb3R0bGVXYWl0OiAyNTAgfSxcbik6IG51bWJlciA9PiB7XG4gICAgY29uc3QgW2NvdW50LCBzZXRDb3VudF0gPSB1c2VTdGF0ZTxudW1iZXI+KHJvb20uZ2V0Sm9pbmVkTWVtYmVyQ291bnQoKSk7XG4gICAgY29uc3QgdGhyb3R0bGVkVXBkYXRlID0gdXNlTWVtbyhcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICAgIHRocm90dGxlKFxuICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0Q291bnQocm9vbS5nZXRKb2luZWRNZW1iZXJDb3VudCgpKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRocm90dGxlV2FpdCxcbiAgICAgICAgICAgICAgICB7IGxlYWRpbmc6IHRydWUsIHRyYWlsaW5nOiB0cnVlIH0sXG4gICAgICAgICAgICApLFxuICAgICAgICBbcm9vbSwgdGhyb3R0bGVXYWl0XSxcbiAgICApO1xuXG4gICAgdXNlVHlwZWRFdmVudEVtaXR0ZXIocm9vbS5jdXJyZW50U3RhdGUsIFJvb21TdGF0ZUV2ZW50Lk1lbWJlcnMsIHRocm90dGxlZFVwZGF0ZSk7XG5cbiAgICAvKipcbiAgICAgKiBgcm9vbS5nZXRKb2luZWRNZW1iZXJDb3VudCgpYCBjYWNoZXMgdGhlIG1lbWJlciBjb3VudCBiZWhpbmQgdGhlIHJvb20gc3VtbWFyeVxuICAgICAqIFNvIHdlIG5lZWQgdG8gcmUtY29tcHV0ZSB0aGUgbWVtYmVyIGNvdW50IHdoZW4gdGhlIHN1bW1hcnkgZ2V0cyB1cGRhdGVkXG4gICAgICovXG4gICAgdXNlVHlwZWRFdmVudEVtaXR0ZXIocm9vbSwgUm9vbUV2ZW50LlN1bW1hcnksIHRocm90dGxlZFVwZGF0ZSk7XG4gICAgcmV0dXJuIGNvdW50O1xufTtcblxuLy8gSG9vayB0byBzaW1wbGlmeSB3YXRjaGluZyB0aGUgbG9jYWwgdXNlcidzIG1lbWJlcnNoaXAgaW4gYSByb29tXG5leHBvcnQgY29uc3QgdXNlTXlSb29tTWVtYmVyc2hpcCA9IChyb29tOiBSb29tKTogTWVtYmVyc2hpcCA9PiB7XG4gICAgY29uc3QgW21lbWJlcnNoaXAsIHNldE1lbWJlcnNoaXBdID0gdXNlU3RhdGU8TWVtYmVyc2hpcD4ocm9vbS5nZXRNeU1lbWJlcnNoaXAoKSk7XG4gICAgdXNlVHlwZWRFdmVudEVtaXR0ZXIocm9vbSwgUm9vbUV2ZW50Lk15TWVtYmVyc2hpcCwgKCkgPT4ge1xuICAgICAgICBzZXRNZW1iZXJzaGlwKHJvb20uZ2V0TXlNZW1iZXJzaGlwKCkpO1xuICAgIH0pO1xuICAgIHJldHVybiBtZW1iZXJzaGlwO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBUUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBRUEsSUFBQUUsT0FBQSxHQUFBRixPQUFBO0FBRUEsSUFBQUcsZ0JBQUEsR0FBQUgsT0FBQTtBQWJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQVNBO0FBQ08sTUFBTUksY0FBYyxHQUFHQSxDQUFDQyxJQUFVLEVBQUVDLFlBQVksR0FBRyxHQUFHLEtBQW1CO0VBQzVFLE1BQU0sQ0FBQ0MsT0FBTyxFQUFFQyxVQUFVLENBQUMsR0FBRyxJQUFBQyxlQUFRLEVBQWVKLElBQUksQ0FBQ0ssZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0VBRTdFLE1BQU1DLGVBQWUsR0FBRyxJQUFBQyxjQUFPLEVBQzNCLE1BQ0ksSUFBQUMsZ0JBQVEsRUFDSixNQUFNO0lBQ0ZMLFVBQVUsQ0FBQ0gsSUFBSSxDQUFDSyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7RUFDdkMsQ0FBQyxFQUNESixZQUFZLEVBQ1o7SUFBRVEsT0FBTyxFQUFFLElBQUk7SUFBRUMsUUFBUSxFQUFFO0VBQUssQ0FDcEMsQ0FBQyxFQUNMLENBQUNWLElBQUksRUFBRUMsWUFBWSxDQUN2QixDQUFDO0VBRUQsSUFBQVUscUNBQW9CLEVBQUNYLElBQUksQ0FBQ1ksWUFBWSxFQUFFQyxzQkFBYyxDQUFDQyxPQUFPLEVBQUVSLGVBQWUsQ0FBQztFQUNoRixPQUFPSixPQUFPO0FBQ2xCLENBQUM7QUFBQ2EsT0FBQSxDQUFBaEIsY0FBQSxHQUFBQSxjQUFBO0FBU0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sTUFBTWlCLGtCQUFrQixHQUFHQSxDQUM5QmhCLElBQVUsRUFDVjtFQUFFQztBQUFrQyxDQUFDLEdBQUc7RUFBRUEsWUFBWSxFQUFFO0FBQUksQ0FBQyxLQUNwRDtFQUNULE1BQU0sQ0FBQ2dCLEtBQUssRUFBRUMsUUFBUSxDQUFDLEdBQUcsSUFBQWQsZUFBUSxFQUFTSixJQUFJLENBQUNtQixvQkFBb0IsQ0FBQyxDQUFDLENBQUM7RUFDdkUsTUFBTWIsZUFBZSxHQUFHLElBQUFDLGNBQU8sRUFDM0IsTUFDSSxJQUFBQyxnQkFBUSxFQUNKLE1BQU07SUFDRlUsUUFBUSxDQUFDbEIsSUFBSSxDQUFDbUIsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0VBQ3pDLENBQUMsRUFDRGxCLFlBQVksRUFDWjtJQUFFUSxPQUFPLEVBQUUsSUFBSTtJQUFFQyxRQUFRLEVBQUU7RUFBSyxDQUNwQyxDQUFDLEVBQ0wsQ0FBQ1YsSUFBSSxFQUFFQyxZQUFZLENBQ3ZCLENBQUM7RUFFRCxJQUFBVSxxQ0FBb0IsRUFBQ1gsSUFBSSxDQUFDWSxZQUFZLEVBQUVDLHNCQUFjLENBQUNDLE9BQU8sRUFBRVIsZUFBZSxDQUFDOztFQUVoRjtBQUNKO0FBQ0E7QUFDQTtFQUNJLElBQUFLLHFDQUFvQixFQUFDWCxJQUFJLEVBQUVvQixpQkFBUyxDQUFDQyxPQUFPLEVBQUVmLGVBQWUsQ0FBQztFQUM5RCxPQUFPVyxLQUFLO0FBQ2hCLENBQUM7O0FBRUQ7QUFBQUYsT0FBQSxDQUFBQyxrQkFBQSxHQUFBQSxrQkFBQTtBQUNPLE1BQU1NLG1CQUFtQixHQUFJdEIsSUFBVSxJQUFpQjtFQUMzRCxNQUFNLENBQUN1QixVQUFVLEVBQUVDLGFBQWEsQ0FBQyxHQUFHLElBQUFwQixlQUFRLEVBQWFKLElBQUksQ0FBQ3lCLGVBQWUsQ0FBQyxDQUFDLENBQUM7RUFDaEYsSUFBQWQscUNBQW9CLEVBQUNYLElBQUksRUFBRW9CLGlCQUFTLENBQUNNLFlBQVksRUFBRSxNQUFNO0lBQ3JERixhQUFhLENBQUN4QixJQUFJLENBQUN5QixlQUFlLENBQUMsQ0FBQyxDQUFDO0VBQ3pDLENBQUMsQ0FBQztFQUNGLE9BQU9GLFVBQVU7QUFDckIsQ0FBQztBQUFDUixPQUFBLENBQUFPLG1CQUFBLEdBQUFBLG1CQUFBIiwiaWdub3JlTGlzdCI6W119