matrix-react-sdk
Version:
SDK for matrix.org using React
45 lines (40 loc) • 5.57 kB
JavaScript
;
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=