UNPKG

matrix-react-sdk

Version:
63 lines (57 loc) 8.43 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.useBeacon = void 0; var _react = require("react"); var _matrix = require("matrix-js-sdk/src/matrix"); var _MatrixClientContext = _interopRequireDefault(require("../../contexts/MatrixClientContext")); var _useEventEmitter = require("../../hooks/useEventEmitter"); /* Copyright 2024 New Vector Ltd. Copyright 2022 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 useBeacon = beaconInfoEvent => { const matrixClient = (0, _react.useContext)(_MatrixClientContext.default); const [beacon, setBeacon] = (0, _react.useState)(); (0, _react.useEffect)(() => { const roomId = beaconInfoEvent.getRoomId(); const beaconIdentifier = (0, _matrix.getBeaconInfoIdentifier)(beaconInfoEvent); const room = matrixClient?.getRoom(roomId); const beaconInstance = room?.currentState.beacons.get(beaconIdentifier); // TODO could this be less stupid? // Beacons are identified by their `state_key`, // where `state_key` is always owner mxid for access control. // Thus, only one beacon is allowed per-user per-room. // See https://github.com/matrix-org/matrix-spec-proposals/pull/3672 // When a user creates a new beacon any previous // beacon is replaced and should assume a 'stopped' state // Here we check that this event is the latest beacon for this user // If it is not the beacon instance is set to undefined. // Retired beacons don't get a beacon instance. if (beaconInstance?.beaconInfoId === beaconInfoEvent.getId()) { setBeacon(beaconInstance); } else { setBeacon(undefined); } }, [beaconInfoEvent, matrixClient]); // beacon update will fire when this beacon is superseded // check the updated event id for equality to the matrix event const beaconInstanceEventId = (0, _useEventEmitter.useEventEmitterState)(beacon, _matrix.BeaconEvent.Update, () => beacon?.beaconInfoId); (0, _react.useEffect)(() => { if (beaconInstanceEventId && beaconInstanceEventId !== beaconInfoEvent.getId()) { setBeacon(undefined); } }, [beaconInstanceEventId, beaconInfoEvent]); (0, _react.useEffect)(() => { if (beacon) { beacon.monitorLiveness(); } }, [beacon]); return beacon; }; exports.useBeacon = useBeacon; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwiX21hdHJpeCIsIl9NYXRyaXhDbGllbnRDb250ZXh0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl91c2VFdmVudEVtaXR0ZXIiLCJ1c2VCZWFjb24iLCJiZWFjb25JbmZvRXZlbnQiLCJtYXRyaXhDbGllbnQiLCJ1c2VDb250ZXh0IiwiTWF0cml4Q2xpZW50Q29udGV4dCIsImJlYWNvbiIsInNldEJlYWNvbiIsInVzZVN0YXRlIiwidXNlRWZmZWN0Iiwicm9vbUlkIiwiZ2V0Um9vbUlkIiwiYmVhY29uSWRlbnRpZmllciIsImdldEJlYWNvbkluZm9JZGVudGlmaWVyIiwicm9vbSIsImdldFJvb20iLCJiZWFjb25JbnN0YW5jZSIsImN1cnJlbnRTdGF0ZSIsImJlYWNvbnMiLCJnZXQiLCJiZWFjb25JbmZvSWQiLCJnZXRJZCIsInVuZGVmaW5lZCIsImJlYWNvbkluc3RhbmNlRXZlbnRJZCIsInVzZUV2ZW50RW1pdHRlclN0YXRlIiwiQmVhY29uRXZlbnQiLCJVcGRhdGUiLCJtb25pdG9yTGl2ZW5lc3MiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL2JlYWNvbi91c2VCZWFjb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjIgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IHsgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmVhY29uLCBCZWFjb25FdmVudCwgTWF0cml4RXZlbnQsIGdldEJlYWNvbkluZm9JZGVudGlmaWVyIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuXG5pbXBvcnQgTWF0cml4Q2xpZW50Q29udGV4dCBmcm9tIFwiLi4vLi4vY29udGV4dHMvTWF0cml4Q2xpZW50Q29udGV4dFwiO1xuaW1wb3J0IHsgdXNlRXZlbnRFbWl0dGVyU3RhdGUgfSBmcm9tIFwiLi4vLi4vaG9va3MvdXNlRXZlbnRFbWl0dGVyXCI7XG5cbmV4cG9ydCBjb25zdCB1c2VCZWFjb24gPSAoYmVhY29uSW5mb0V2ZW50OiBNYXRyaXhFdmVudCk6IEJlYWNvbiB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3QgbWF0cml4Q2xpZW50ID0gdXNlQ29udGV4dChNYXRyaXhDbGllbnRDb250ZXh0KTtcbiAgICBjb25zdCBbYmVhY29uLCBzZXRCZWFjb25dID0gdXNlU3RhdGU8QmVhY29uPigpO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgY29uc3Qgcm9vbUlkID0gYmVhY29uSW5mb0V2ZW50LmdldFJvb21JZCgpO1xuICAgICAgICBjb25zdCBiZWFjb25JZGVudGlmaWVyID0gZ2V0QmVhY29uSW5mb0lkZW50aWZpZXIoYmVhY29uSW5mb0V2ZW50KTtcblxuICAgICAgICBjb25zdCByb29tID0gbWF0cml4Q2xpZW50Py5nZXRSb29tKHJvb21JZCk7XG4gICAgICAgIGNvbnN0IGJlYWNvbkluc3RhbmNlID0gcm9vbT8uY3VycmVudFN0YXRlLmJlYWNvbnMuZ2V0KGJlYWNvbklkZW50aWZpZXIpO1xuXG4gICAgICAgIC8vIFRPRE8gY291bGQgdGhpcyBiZSBsZXNzIHN0dXBpZD9cblxuICAgICAgICAvLyBCZWFjb25zIGFyZSBpZGVudGlmaWVkIGJ5IHRoZWlyIGBzdGF0ZV9rZXlgLFxuICAgICAgICAvLyB3aGVyZSBgc3RhdGVfa2V5YCBpcyBhbHdheXMgb3duZXIgbXhpZCBmb3IgYWNjZXNzIGNvbnRyb2wuXG4gICAgICAgIC8vIFRodXMsIG9ubHkgb25lIGJlYWNvbiBpcyBhbGxvd2VkIHBlci11c2VyIHBlci1yb29tLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21hdHJpeC1vcmcvbWF0cml4LXNwZWMtcHJvcG9zYWxzL3B1bGwvMzY3MlxuICAgICAgICAvLyBXaGVuIGEgdXNlciBjcmVhdGVzIGEgbmV3IGJlYWNvbiBhbnkgcHJldmlvdXNcbiAgICAgICAgLy8gYmVhY29uIGlzIHJlcGxhY2VkIGFuZCBzaG91bGQgYXNzdW1lIGEgJ3N0b3BwZWQnIHN0YXRlXG4gICAgICAgIC8vIEhlcmUgd2UgY2hlY2sgdGhhdCB0aGlzIGV2ZW50IGlzIHRoZSBsYXRlc3QgYmVhY29uIGZvciB0aGlzIHVzZXJcbiAgICAgICAgLy8gSWYgaXQgaXMgbm90IHRoZSBiZWFjb24gaW5zdGFuY2UgaXMgc2V0IHRvIHVuZGVmaW5lZC5cbiAgICAgICAgLy8gUmV0aXJlZCBiZWFjb25zIGRvbid0IGdldCBhIGJlYWNvbiBpbnN0YW5jZS5cbiAgICAgICAgaWYgKGJlYWNvbkluc3RhbmNlPy5iZWFjb25JbmZvSWQgPT09IGJlYWNvbkluZm9FdmVudC5nZXRJZCgpKSB7XG4gICAgICAgICAgICBzZXRCZWFjb24oYmVhY29uSW5zdGFuY2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0QmVhY29uKHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICB9LCBbYmVhY29uSW5mb0V2ZW50LCBtYXRyaXhDbGllbnRdKTtcblxuICAgIC8vIGJlYWNvbiB1cGRhdGUgd2lsbCBmaXJlIHdoZW4gdGhpcyBiZWFjb24gaXMgc3VwZXJzZWRlZFxuICAgIC8vIGNoZWNrIHRoZSB1cGRhdGVkIGV2ZW50IGlkIGZvciBlcXVhbGl0eSB0byB0aGUgbWF0cml4IGV2ZW50XG4gICAgY29uc3QgYmVhY29uSW5zdGFuY2VFdmVudElkID0gdXNlRXZlbnRFbWl0dGVyU3RhdGUoYmVhY29uLCBCZWFjb25FdmVudC5VcGRhdGUsICgpID0+IGJlYWNvbj8uYmVhY29uSW5mb0lkKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChiZWFjb25JbnN0YW5jZUV2ZW50SWQgJiYgYmVhY29uSW5zdGFuY2VFdmVudElkICE9PSBiZWFjb25JbmZvRXZlbnQuZ2V0SWQoKSkge1xuICAgICAgICAgICAgc2V0QmVhY29uKHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICB9LCBbYmVhY29uSW5zdGFuY2VFdmVudElkLCBiZWFjb25JbmZvRXZlbnRdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChiZWFjb24pIHtcbiAgICAgICAgICAgIGJlYWNvbi5tb25pdG9yTGl2ZW5lc3MoKTtcbiAgICAgICAgfVxuICAgIH0sIFtiZWFjb25dKTtcblxuICAgIHJldHVybiBiZWFjb247XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBUUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBRUEsSUFBQUUsb0JBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFJLGdCQUFBLEdBQUFKLE9BQUE7QUFaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFRTyxNQUFNSyxTQUFTLEdBQUlDLGVBQTRCLElBQXlCO0VBQzNFLE1BQU1DLFlBQVksR0FBRyxJQUFBQyxpQkFBVSxFQUFDQyw0QkFBbUIsQ0FBQztFQUNwRCxNQUFNLENBQUNDLE1BQU0sRUFBRUMsU0FBUyxDQUFDLEdBQUcsSUFBQUMsZUFBUSxFQUFTLENBQUM7RUFFOUMsSUFBQUMsZ0JBQVMsRUFBQyxNQUFNO0lBQ1osTUFBTUMsTUFBTSxHQUFHUixlQUFlLENBQUNTLFNBQVMsQ0FBQyxDQUFDO0lBQzFDLE1BQU1DLGdCQUFnQixHQUFHLElBQUFDLCtCQUF1QixFQUFDWCxlQUFlLENBQUM7SUFFakUsTUFBTVksSUFBSSxHQUFHWCxZQUFZLEVBQUVZLE9BQU8sQ0FBQ0wsTUFBTSxDQUFDO0lBQzFDLE1BQU1NLGNBQWMsR0FBR0YsSUFBSSxFQUFFRyxZQUFZLENBQUNDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDUCxnQkFBZ0IsQ0FBQzs7SUFFdkU7O0lBRUE7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0EsSUFBSUksY0FBYyxFQUFFSSxZQUFZLEtBQUtsQixlQUFlLENBQUNtQixLQUFLLENBQUMsQ0FBQyxFQUFFO01BQzFEZCxTQUFTLENBQUNTLGNBQWMsQ0FBQztJQUM3QixDQUFDLE1BQU07TUFDSFQsU0FBUyxDQUFDZSxTQUFTLENBQUM7SUFDeEI7RUFDSixDQUFDLEVBQUUsQ0FBQ3BCLGVBQWUsRUFBRUMsWUFBWSxDQUFDLENBQUM7O0VBRW5DO0VBQ0E7RUFDQSxNQUFNb0IscUJBQXFCLEdBQUcsSUFBQUMscUNBQW9CLEVBQUNsQixNQUFNLEVBQUVtQixtQkFBVyxDQUFDQyxNQUFNLEVBQUUsTUFBTXBCLE1BQU0sRUFBRWMsWUFBWSxDQUFDO0VBRTFHLElBQUFYLGdCQUFTLEVBQUMsTUFBTTtJQUNaLElBQUljLHFCQUFxQixJQUFJQSxxQkFBcUIsS0FBS3JCLGVBQWUsQ0FBQ21CLEtBQUssQ0FBQyxDQUFDLEVBQUU7TUFDNUVkLFNBQVMsQ0FBQ2UsU0FBUyxDQUFDO0lBQ3hCO0VBQ0osQ0FBQyxFQUFFLENBQUNDLHFCQUFxQixFQUFFckIsZUFBZSxDQUFDLENBQUM7RUFFNUMsSUFBQU8sZ0JBQVMsRUFBQyxNQUFNO0lBQ1osSUFBSUgsTUFBTSxFQUFFO01BQ1JBLE1BQU0sQ0FBQ3FCLGVBQWUsQ0FBQyxDQUFDO0lBQzVCO0VBQ0osQ0FBQyxFQUFFLENBQUNyQixNQUFNLENBQUMsQ0FBQztFQUVaLE9BQU9BLE1BQU07QUFDakIsQ0FBQztBQUFDc0IsT0FBQSxDQUFBM0IsU0FBQSxHQUFBQSxTQUFBIiwiaWdub3JlTGlzdCI6W119