UNPKG

matrix-react-sdk

Version:
45 lines (40 loc) 5.57 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useRoomState = void 0; var _react = require("react"); var _matrix = require("matrix-js-sdk/src/matrix"); var _useEventEmitter = require("./useEventEmitter"); /* Copyright 2024 New Vector Ltd. Copyright 2021 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. */ const defaultMapper = roomState => roomState; // Hook to simplify watching Matrix Room state // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-constraint const useRoomState = (room, mapper = defaultMapper) => { // Create a ref that stores mapper const savedMapper = (0, _react.useRef)(mapper); // Update ref.current value if mapper changes. (0, _react.useEffect)(() => { savedMapper.current = mapper; }, [mapper]); const [value, setValue] = (0, _react.useState)(room ? mapper(room.currentState) : undefined); const update = (0, _react.useCallback)(() => { if (!room) return; setValue(savedMapper.current(room.currentState)); }, [room]); (0, _useEventEmitter.useTypedEventEmitter)(room?.currentState, _matrix.RoomStateEvent.Update, update); (0, _react.useEffect)(() => { update(); return () => { setValue(room ? savedMapper.current(room.currentState) : undefined); }; }, [room, update]); return value; }; exports.useRoomState = useRoomState; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwiX21hdHJpeCIsIl91c2VFdmVudEVtaXR0ZXIiLCJkZWZhdWx0TWFwcGVyIiwicm9vbVN0YXRlIiwidXNlUm9vbVN0YXRlIiwicm9vbSIsIm1hcHBlciIsInNhdmVkTWFwcGVyIiwidXNlUmVmIiwidXNlRWZmZWN0IiwiY3VycmVudCIsInZhbHVlIiwic2V0VmFsdWUiLCJ1c2VTdGF0ZSIsImN1cnJlbnRTdGF0ZSIsInVuZGVmaW5lZCIsInVwZGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlVHlwZWRFdmVudEVtaXR0ZXIiLCJSb29tU3RhdGVFdmVudCIsIlVwZGF0ZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlUm9vbVN0YXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIxIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJvb20sIFJvb21TdGF0ZSwgUm9vbVN0YXRlRXZlbnQgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbWF0cml4XCI7XG5cbmltcG9ydCB7IHVzZVR5cGVkRXZlbnRFbWl0dGVyIH0gZnJvbSBcIi4vdXNlRXZlbnRFbWl0dGVyXCI7XG5cbnR5cGUgTWFwcGVyPFQ+ID0gKHJvb21TdGF0ZTogUm9vbVN0YXRlKSA9PiBUO1xuY29uc3QgZGVmYXVsdE1hcHBlcjogTWFwcGVyPFJvb21TdGF0ZT4gPSAocm9vbVN0YXRlOiBSb29tU3RhdGUpID0+IHJvb21TdGF0ZTtcblxuLy8gSG9vayB0byBzaW1wbGlmeSB3YXRjaGluZyBNYXRyaXggUm9vbSBzdGF0ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS10eXBlLWNvbnN0cmFpbnRcbmV4cG9ydCBjb25zdCB1c2VSb29tU3RhdGUgPSA8VCBleHRlbmRzIGFueSA9IFJvb21TdGF0ZT4oXG4gICAgcm9vbT86IFJvb20sXG4gICAgbWFwcGVyOiBNYXBwZXI8VD4gPSBkZWZhdWx0TWFwcGVyIGFzIE1hcHBlcjxUPixcbik6IFQgPT4ge1xuICAgIC8vIENyZWF0ZSBhIHJlZiB0aGF0IHN0b3JlcyBtYXBwZXJcbiAgICBjb25zdCBzYXZlZE1hcHBlciA9IHVzZVJlZihtYXBwZXIpO1xuXG4gICAgLy8gVXBkYXRlIHJlZi5jdXJyZW50IHZhbHVlIGlmIG1hcHBlciBjaGFuZ2VzLlxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHNhdmVkTWFwcGVyLmN1cnJlbnQgPSBtYXBwZXI7XG4gICAgfSwgW21hcHBlcl0pO1xuXG4gICAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZV0gPSB1c2VTdGF0ZTxUPihyb29tID8gbWFwcGVyKHJvb20uY3VycmVudFN0YXRlKSA6ICh1bmRlZmluZWQgYXMgVCkpO1xuXG4gICAgY29uc3QgdXBkYXRlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICBpZiAoIXJvb20pIHJldHVybjtcbiAgICAgICAgc2V0VmFsdWUoc2F2ZWRNYXBwZXIuY3VycmVudChyb29tLmN1cnJlbnRTdGF0ZSkpO1xuICAgIH0sIFtyb29tXSk7XG5cbiAgICB1c2VUeXBlZEV2ZW50RW1pdHRlcihyb29tPy5jdXJyZW50U3RhdGUsIFJvb21TdGF0ZUV2ZW50LlVwZGF0ZSwgdXBkYXRlKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICB1cGRhdGUoKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIHNldFZhbHVlKHJvb20gPyBzYXZlZE1hcHBlci5jdXJyZW50KHJvb20uY3VycmVudFN0YXRlKSA6ICh1bmRlZmluZWQgYXMgVCkpO1xuICAgICAgICB9O1xuICAgIH0sIFtyb29tLCB1cGRhdGVdKTtcbiAgICByZXR1cm4gdmFsdWU7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFRQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFFQSxJQUFBRSxnQkFBQSxHQUFBRixPQUFBO0FBWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBUUEsTUFBTUcsYUFBZ0MsR0FBSUMsU0FBb0IsSUFBS0EsU0FBUzs7QUFFNUU7QUFDQTtBQUNPLE1BQU1DLFlBQVksR0FBR0EsQ0FDeEJDLElBQVcsRUFDWEMsTUFBaUIsR0FBR0osYUFBMEIsS0FDMUM7RUFDSjtFQUNBLE1BQU1LLFdBQVcsR0FBRyxJQUFBQyxhQUFNLEVBQUNGLE1BQU0sQ0FBQzs7RUFFbEM7RUFDQSxJQUFBRyxnQkFBUyxFQUFDLE1BQU07SUFDWkYsV0FBVyxDQUFDRyxPQUFPLEdBQUdKLE1BQU07RUFDaEMsQ0FBQyxFQUFFLENBQUNBLE1BQU0sQ0FBQyxDQUFDO0VBRVosTUFBTSxDQUFDSyxLQUFLLEVBQUVDLFFBQVEsQ0FBQyxHQUFHLElBQUFDLGVBQVEsRUFBSVIsSUFBSSxHQUFHQyxNQUFNLENBQUNELElBQUksQ0FBQ1MsWUFBWSxDQUFDLEdBQUlDLFNBQWUsQ0FBQztFQUUxRixNQUFNQyxNQUFNLEdBQUcsSUFBQUMsa0JBQVcsRUFBQyxNQUFNO0lBQzdCLElBQUksQ0FBQ1osSUFBSSxFQUFFO0lBQ1hPLFFBQVEsQ0FBQ0wsV0FBVyxDQUFDRyxPQUFPLENBQUNMLElBQUksQ0FBQ1MsWUFBWSxDQUFDLENBQUM7RUFDcEQsQ0FBQyxFQUFFLENBQUNULElBQUksQ0FBQyxDQUFDO0VBRVYsSUFBQWEscUNBQW9CLEVBQUNiLElBQUksRUFBRVMsWUFBWSxFQUFFSyxzQkFBYyxDQUFDQyxNQUFNLEVBQUVKLE1BQU0sQ0FBQztFQUN2RSxJQUFBUCxnQkFBUyxFQUFDLE1BQU07SUFDWk8sTUFBTSxDQUFDLENBQUM7SUFDUixPQUFPLE1BQU07TUFDVEosUUFBUSxDQUFDUCxJQUFJLEdBQUdFLFdBQVcsQ0FBQ0csT0FBTyxDQUFDTCxJQUFJLENBQUNTLFlBQVksQ0FBQyxHQUFJQyxTQUFlLENBQUM7SUFDOUUsQ0FBQztFQUNMLENBQUMsRUFBRSxDQUFDVixJQUFJLEVBQUVXLE1BQU0sQ0FBQyxDQUFDO0VBQ2xCLE9BQU9MLEtBQUs7QUFDaEIsQ0FBQztBQUFDVSxPQUFBLENBQUFqQixZQUFBLEdBQUFBLFlBQUEiLCJpZ25vcmVMaXN0IjpbXX0=