matrix-react-sdk
Version:
SDK for matrix.org using React
66 lines (61 loc) • 9.86 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useOwnLiveBeacons = void 0;
var _react = require("react");
var _useEventEmitter = require("../../hooks/useEventEmitter");
var _OwnBeaconStore = require("../../stores/OwnBeaconStore");
var _duration = require("./duration");
/*
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.
*/
/**
* Monitor the current users own beacons
* While current implementation only allows one live beacon per user per room
* In future it will be possible to have multiple live beacons in one room
* Select the latest expiry to display,
* and kill all beacons on stop sharing
*/
const useOwnLiveBeacons = liveBeaconIds => {
const [stoppingInProgress, setStoppingInProgress] = (0, _react.useState)(false);
const hasLocationPublishError = (0, _useEventEmitter.useEventEmitterState)(_OwnBeaconStore.OwnBeaconStore.instance, _OwnBeaconStore.OwnBeaconStoreEvent.LocationPublishError, () => liveBeaconIds.some(_OwnBeaconStore.OwnBeaconStore.instance.beaconHasLocationPublishError));
const hasStopSharingError = (0, _useEventEmitter.useEventEmitterState)(_OwnBeaconStore.OwnBeaconStore.instance, _OwnBeaconStore.OwnBeaconStoreEvent.BeaconUpdateError, () => liveBeaconIds.some(id => _OwnBeaconStore.OwnBeaconStore.instance.beaconUpdateErrors.has(id)));
(0, _react.useEffect)(() => {
if (hasStopSharingError) {
setStoppingInProgress(false);
}
}, [hasStopSharingError]);
// reset stopping in progress on change in live ids
(0, _react.useEffect)(() => {
setStoppingInProgress(false);
}, [liveBeaconIds]);
// select the beacon with latest expiry to display expiry time
const beacon = liveBeaconIds.map(beaconId => _OwnBeaconStore.OwnBeaconStore.instance.getBeaconById(beaconId)).sort(_duration.sortBeaconsByLatestExpiry).shift();
const onStopSharing = async () => {
setStoppingInProgress(true);
try {
await Promise.all(liveBeaconIds.map(beaconId => _OwnBeaconStore.OwnBeaconStore.instance.stopBeacon(beaconId)));
} catch (error) {
setStoppingInProgress(false);
}
};
const onResetLocationPublishError = () => {
liveBeaconIds.forEach(beaconId => {
_OwnBeaconStore.OwnBeaconStore.instance.resetLocationPublishError(beaconId);
});
};
return {
onStopSharing,
onResetLocationPublishError,
beacon,
stoppingInProgress,
hasLocationPublishError,
hasStopSharingError
};
};
exports.useOwnLiveBeacons = useOwnLiveBeacons;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwiX3VzZUV2ZW50RW1pdHRlciIsIl9Pd25CZWFjb25TdG9yZSIsIl9kdXJhdGlvbiIsInVzZU93bkxpdmVCZWFjb25zIiwibGl2ZUJlYWNvbklkcyIsInN0b3BwaW5nSW5Qcm9ncmVzcyIsInNldFN0b3BwaW5nSW5Qcm9ncmVzcyIsInVzZVN0YXRlIiwiaGFzTG9jYXRpb25QdWJsaXNoRXJyb3IiLCJ1c2VFdmVudEVtaXR0ZXJTdGF0ZSIsIk93bkJlYWNvblN0b3JlIiwiaW5zdGFuY2UiLCJPd25CZWFjb25TdG9yZUV2ZW50IiwiTG9jYXRpb25QdWJsaXNoRXJyb3IiLCJzb21lIiwiYmVhY29uSGFzTG9jYXRpb25QdWJsaXNoRXJyb3IiLCJoYXNTdG9wU2hhcmluZ0Vycm9yIiwiQmVhY29uVXBkYXRlRXJyb3IiLCJpZCIsImJlYWNvblVwZGF0ZUVycm9ycyIsImhhcyIsInVzZUVmZmVjdCIsImJlYWNvbiIsIm1hcCIsImJlYWNvbklkIiwiZ2V0QmVhY29uQnlJZCIsInNvcnQiLCJzb3J0QmVhY29uc0J5TGF0ZXN0RXhwaXJ5Iiwic2hpZnQiLCJvblN0b3BTaGFyaW5nIiwiUHJvbWlzZSIsImFsbCIsInN0b3BCZWFjb24iLCJlcnJvciIsIm9uUmVzZXRMb2NhdGlvblB1Ymxpc2hFcnJvciIsImZvckVhY2giLCJyZXNldExvY2F0aW9uUHVibGlzaEVycm9yIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9iZWFjb24vdXNlT3duTGl2ZUJlYWNvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjIgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmVhY29uLCBCZWFjb25JZGVudGlmaWVyIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuXG5pbXBvcnQgeyB1c2VFdmVudEVtaXR0ZXJTdGF0ZSB9IGZyb20gXCIuLi8uLi9ob29rcy91c2VFdmVudEVtaXR0ZXJcIjtcbmltcG9ydCB7IE93bkJlYWNvblN0b3JlLCBPd25CZWFjb25TdG9yZUV2ZW50IH0gZnJvbSBcIi4uLy4uL3N0b3Jlcy9Pd25CZWFjb25TdG9yZVwiO1xuaW1wb3J0IHsgc29ydEJlYWNvbnNCeUxhdGVzdEV4cGlyeSB9IGZyb20gXCIuL2R1cmF0aW9uXCI7XG5cbnR5cGUgTGl2ZUJlYWNvbnNTdGF0ZSA9IHtcbiAgICBiZWFjb24/OiBCZWFjb247XG4gICAgb25TdG9wU2hhcmluZzogKCkgPT4gdm9pZDtcbiAgICBvblJlc2V0TG9jYXRpb25QdWJsaXNoRXJyb3I6ICgpID0+IHZvaWQ7XG4gICAgc3RvcHBpbmdJblByb2dyZXNzOiBib29sZWFuO1xuICAgIGhhc1N0b3BTaGFyaW5nRXJyb3I6IGJvb2xlYW47XG4gICAgaGFzTG9jYXRpb25QdWJsaXNoRXJyb3I6IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIE1vbml0b3IgdGhlIGN1cnJlbnQgdXNlcnMgb3duIGJlYWNvbnNcbiAqIFdoaWxlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb25seSBhbGxvd3Mgb25lIGxpdmUgYmVhY29uIHBlciB1c2VyIHBlciByb29tXG4gKiBJbiBmdXR1cmUgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byBoYXZlIG11bHRpcGxlIGxpdmUgYmVhY29ucyBpbiBvbmUgcm9vbVxuICogU2VsZWN0IHRoZSBsYXRlc3QgZXhwaXJ5IHRvIGRpc3BsYXksXG4gKiBhbmQga2lsbCBhbGwgYmVhY29ucyBvbiBzdG9wIHNoYXJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IHVzZU93bkxpdmVCZWFjb25zID0gKGxpdmVCZWFjb25JZHM6IEJlYWNvbklkZW50aWZpZXJbXSk6IExpdmVCZWFjb25zU3RhdGUgPT4ge1xuICAgIGNvbnN0IFtzdG9wcGluZ0luUHJvZ3Jlc3MsIHNldFN0b3BwaW5nSW5Qcm9ncmVzc10gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgICBjb25zdCBoYXNMb2NhdGlvblB1Ymxpc2hFcnJvciA9IHVzZUV2ZW50RW1pdHRlclN0YXRlKFxuICAgICAgICBPd25CZWFjb25TdG9yZS5pbnN0YW5jZSxcbiAgICAgICAgT3duQmVhY29uU3RvcmVFdmVudC5Mb2NhdGlvblB1Ymxpc2hFcnJvcixcbiAgICAgICAgKCkgPT4gbGl2ZUJlYWNvbklkcy5zb21lKE93bkJlYWNvblN0b3JlLmluc3RhbmNlLmJlYWNvbkhhc0xvY2F0aW9uUHVibGlzaEVycm9yKSxcbiAgICApO1xuXG4gICAgY29uc3QgaGFzU3RvcFNoYXJpbmdFcnJvciA9IHVzZUV2ZW50RW1pdHRlclN0YXRlKFxuICAgICAgICBPd25CZWFjb25TdG9yZS5pbnN0YW5jZSxcbiAgICAgICAgT3duQmVhY29uU3RvcmVFdmVudC5CZWFjb25VcGRhdGVFcnJvcixcbiAgICAgICAgKCkgPT4gbGl2ZUJlYWNvbklkcy5zb21lKChpZCkgPT4gT3duQmVhY29uU3RvcmUuaW5zdGFuY2UuYmVhY29uVXBkYXRlRXJyb3JzLmhhcyhpZCkpLFxuICAgICk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoaGFzU3RvcFNoYXJpbmdFcnJvcikge1xuICAgICAgICAgICAgc2V0U3RvcHBpbmdJblByb2dyZXNzKGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH0sIFtoYXNTdG9wU2hhcmluZ0Vycm9yXSk7XG5cbiAgICAvLyByZXNldCBzdG9wcGluZyBpbiBwcm9ncmVzcyBvbiBjaGFuZ2UgaW4gbGl2ZSBpZHNcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBzZXRTdG9wcGluZ0luUHJvZ3Jlc3MoZmFsc2UpO1xuICAgIH0sIFtsaXZlQmVhY29uSWRzXSk7XG5cbiAgICAvLyBzZWxlY3QgdGhlIGJlYWNvbiB3aXRoIGxhdGVzdCBleHBpcnkgdG8gZGlzcGxheSBleHBpcnkgdGltZVxuICAgIGNvbnN0IGJlYWNvbiA9IGxpdmVCZWFjb25JZHNcbiAgICAgICAgLm1hcCgoYmVhY29uSWQpID0+IE93bkJlYWNvblN0b3JlLmluc3RhbmNlLmdldEJlYWNvbkJ5SWQoYmVhY29uSWQpISlcbiAgICAgICAgLnNvcnQoc29ydEJlYWNvbnNCeUxhdGVzdEV4cGlyeSlcbiAgICAgICAgLnNoaWZ0KCk7XG5cbiAgICBjb25zdCBvblN0b3BTaGFyaW5nID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBzZXRTdG9wcGluZ0luUHJvZ3Jlc3ModHJ1ZSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChsaXZlQmVhY29uSWRzLm1hcCgoYmVhY29uSWQpID0+IE93bkJlYWNvblN0b3JlLmluc3RhbmNlLnN0b3BCZWFjb24oYmVhY29uSWQpKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBzZXRTdG9wcGluZ0luUHJvZ3Jlc3MoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uUmVzZXRMb2NhdGlvblB1Ymxpc2hFcnJvciA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgbGl2ZUJlYWNvbklkcy5mb3JFYWNoKChiZWFjb25JZCkgPT4ge1xuICAgICAgICAgICAgT3duQmVhY29uU3RvcmUuaW5zdGFuY2UucmVzZXRMb2NhdGlvblB1Ymxpc2hFcnJvcihiZWFjb25JZCk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBvblN0b3BTaGFyaW5nLFxuICAgICAgICBvblJlc2V0TG9jYXRpb25QdWJsaXNoRXJyb3IsXG4gICAgICAgIGJlYWNvbixcbiAgICAgICAgc3RvcHBpbmdJblByb2dyZXNzLFxuICAgICAgICBoYXNMb2NhdGlvblB1Ymxpc2hFcnJvcixcbiAgICAgICAgaGFzU3RvcFNoYXJpbmdFcnJvcixcbiAgICB9O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBUUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBR0EsSUFBQUMsZ0JBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGVBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLFNBQUEsR0FBQUgsT0FBQTtBQWJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQWtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLE1BQU1JLGlCQUFpQixHQUFJQyxhQUFpQyxJQUF1QjtFQUN0RixNQUFNLENBQUNDLGtCQUFrQixFQUFFQyxxQkFBcUIsQ0FBQyxHQUFHLElBQUFDLGVBQVEsRUFBQyxLQUFLLENBQUM7RUFFbkUsTUFBTUMsdUJBQXVCLEdBQUcsSUFBQUMscUNBQW9CLEVBQ2hEQyw4QkFBYyxDQUFDQyxRQUFRLEVBQ3ZCQyxtQ0FBbUIsQ0FBQ0Msb0JBQW9CLEVBQ3hDLE1BQU1ULGFBQWEsQ0FBQ1UsSUFBSSxDQUFDSiw4QkFBYyxDQUFDQyxRQUFRLENBQUNJLDZCQUE2QixDQUNsRixDQUFDO0VBRUQsTUFBTUMsbUJBQW1CLEdBQUcsSUFBQVAscUNBQW9CLEVBQzVDQyw4QkFBYyxDQUFDQyxRQUFRLEVBQ3ZCQyxtQ0FBbUIsQ0FBQ0ssaUJBQWlCLEVBQ3JDLE1BQU1iLGFBQWEsQ0FBQ1UsSUFBSSxDQUFFSSxFQUFFLElBQUtSLDhCQUFjLENBQUNDLFFBQVEsQ0FBQ1Esa0JBQWtCLENBQUNDLEdBQUcsQ0FBQ0YsRUFBRSxDQUFDLENBQ3ZGLENBQUM7RUFFRCxJQUFBRyxnQkFBUyxFQUFDLE1BQU07SUFDWixJQUFJTCxtQkFBbUIsRUFBRTtNQUNyQlYscUJBQXFCLENBQUMsS0FBSyxDQUFDO0lBQ2hDO0VBQ0osQ0FBQyxFQUFFLENBQUNVLG1CQUFtQixDQUFDLENBQUM7O0VBRXpCO0VBQ0EsSUFBQUssZ0JBQVMsRUFBQyxNQUFNO0lBQ1pmLHFCQUFxQixDQUFDLEtBQUssQ0FBQztFQUNoQyxDQUFDLEVBQUUsQ0FBQ0YsYUFBYSxDQUFDLENBQUM7O0VBRW5CO0VBQ0EsTUFBTWtCLE1BQU0sR0FBR2xCLGFBQWEsQ0FDdkJtQixHQUFHLENBQUVDLFFBQVEsSUFBS2QsOEJBQWMsQ0FBQ0MsUUFBUSxDQUFDYyxhQUFhLENBQUNELFFBQVEsQ0FBRSxDQUFDLENBQ25FRSxJQUFJLENBQUNDLG1DQUF5QixDQUFDLENBQy9CQyxLQUFLLENBQUMsQ0FBQztFQUVaLE1BQU1DLGFBQWEsR0FBRyxNQUFBQSxDQUFBLEtBQTJCO0lBQzdDdkIscUJBQXFCLENBQUMsSUFBSSxDQUFDO0lBQzNCLElBQUk7TUFDQSxNQUFNd0IsT0FBTyxDQUFDQyxHQUFHLENBQUMzQixhQUFhLENBQUNtQixHQUFHLENBQUVDLFFBQVEsSUFBS2QsOEJBQWMsQ0FBQ0MsUUFBUSxDQUFDcUIsVUFBVSxDQUFDUixRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3BHLENBQUMsQ0FBQyxPQUFPUyxLQUFLLEVBQUU7TUFDWjNCLHFCQUFxQixDQUFDLEtBQUssQ0FBQztJQUNoQztFQUNKLENBQUM7RUFFRCxNQUFNNEIsMkJBQTJCLEdBQUdBLENBQUEsS0FBWTtJQUM1QzlCLGFBQWEsQ0FBQytCLE9BQU8sQ0FBRVgsUUFBUSxJQUFLO01BQ2hDZCw4QkFBYyxDQUFDQyxRQUFRLENBQUN5Qix5QkFBeUIsQ0FBQ1osUUFBUSxDQUFDO0lBQy9ELENBQUMsQ0FBQztFQUNOLENBQUM7RUFFRCxPQUFPO0lBQ0hLLGFBQWE7SUFDYkssMkJBQTJCO0lBQzNCWixNQUFNO0lBQ05qQixrQkFBa0I7SUFDbEJHLHVCQUF1QjtJQUN2QlE7RUFDSixDQUFDO0FBQ0wsQ0FBQztBQUFDcUIsT0FBQSxDQUFBbEMsaUJBQUEsR0FBQUEsaUJBQUEiLCJpZ25vcmVMaXN0IjpbXX0=