UNPKG

matrix-react-sdk

Version:
66 lines (62 loc) 9.64 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.usePermalinkEvent = void 0; var _matrix = require("matrix-js-sdk/src/matrix"); var _react = require("react"); var _Pill = require("../components/views/elements/Pill"); var _MatrixClientPeg = require("../MatrixClientPeg"); /* Copyright 2024 New Vector Ltd. Copyright 2023 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. */ /** * Tries to find the initial event. * If the event should not be looked up or there is no target room it returns null. * Otherwise it tries to get the event from the target room. * * @param shouldLookUpEvent - whether the parmalink event should be looked up * @param Room | null targetRoom - target room of the permalink * @param parseResult - permalink parse result * @returns The event if found or null if it should not be looked up or was not found. */ const determineInitialEvent = (shouldLookUpEvent, targetRoom, parseResult) => { if (!shouldLookUpEvent || !targetRoom || !parseResult?.eventId) return null; return targetRoom.findEventById(parseResult.eventId) || null; }; /** * Hook to get a permalink target event * * @param type - Permalink type * @param parseResult - Permalink parse result * @param targetRoom - Target room of the permalink {@link ./usePermalinkTargetRoom.ts} * @returns The permalink event if it targets an event and it can be loaded. * Else null. */ const usePermalinkEvent = (type, parseResult, targetRoom) => { // Event permalinks require to know the event. // If it cannot be initially determined, it will be looked up later by a memo hook. const shouldLookUpEvent = !!type && !!parseResult?.roomIdOrAlias && !!parseResult?.eventId && [_Pill.PillType.EventInSameRoom, _Pill.PillType.EventInOtherRoom].includes(type); const eventId = parseResult?.eventId; const eventInRoom = determineInitialEvent(shouldLookUpEvent, targetRoom, parseResult); const [event, setEvent] = (0, _react.useState)(eventInRoom); (0, _react.useEffect)(() => { if (!shouldLookUpEvent || !eventId || event || !parseResult?.roomIdOrAlias || !parseResult.eventId) { // nothing to do here return; } const fetchRoomEvent = async () => { try { const eventData = await _MatrixClientPeg.MatrixClientPeg.safeGet().fetchRoomEvent(parseResult.roomIdOrAlias, parseResult.eventId); setEvent(new _matrix.MatrixEvent(eventData)); } catch {} }; fetchRoomEvent(); }, [event, eventId, parseResult?.eventId, parseResult?.roomIdOrAlias, shouldLookUpEvent]); return event; }; exports.usePermalinkEvent = usePermalinkEvent; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWF0cml4IiwicmVxdWlyZSIsIl9yZWFjdCIsIl9QaWxsIiwiX01hdHJpeENsaWVudFBlZyIsImRldGVybWluZUluaXRpYWxFdmVudCIsInNob3VsZExvb2tVcEV2ZW50IiwidGFyZ2V0Um9vbSIsInBhcnNlUmVzdWx0IiwiZXZlbnRJZCIsImZpbmRFdmVudEJ5SWQiLCJ1c2VQZXJtYWxpbmtFdmVudCIsInR5cGUiLCJyb29tSWRPckFsaWFzIiwiUGlsbFR5cGUiLCJFdmVudEluU2FtZVJvb20iLCJFdmVudEluT3RoZXJSb29tIiwiaW5jbHVkZXMiLCJldmVudEluUm9vbSIsImV2ZW50Iiwic2V0RXZlbnQiLCJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsImZldGNoUm9vbUV2ZW50IiwiZXZlbnREYXRhIiwiTWF0cml4Q2xpZW50UGVnIiwic2FmZUdldCIsIk1hdHJpeEV2ZW50IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VQZXJtYWxpbmtFdmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMyBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgeyBNYXRyaXhFdmVudCwgUm9vbSB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9tYXRyaXhcIjtcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgUGlsbFR5cGUgfSBmcm9tIFwiLi4vY29tcG9uZW50cy92aWV3cy9lbGVtZW50cy9QaWxsXCI7XG5pbXBvcnQgeyBNYXRyaXhDbGllbnRQZWcgfSBmcm9tIFwiLi4vTWF0cml4Q2xpZW50UGVnXCI7XG5pbXBvcnQgeyBQZXJtYWxpbmtQYXJ0cyB9IGZyb20gXCIuLi91dGlscy9wZXJtYWxpbmtzL1Blcm1hbGlua0NvbnN0cnVjdG9yXCI7XG5cbi8qKlxuICogVHJpZXMgdG8gZmluZCB0aGUgaW5pdGlhbCBldmVudC5cbiAqIElmIHRoZSBldmVudCBzaG91bGQgbm90IGJlIGxvb2tlZCB1cCBvciB0aGVyZSBpcyBubyB0YXJnZXQgcm9vbSBpdCByZXR1cm5zIG51bGwuXG4gKiBPdGhlcndpc2UgaXQgdHJpZXMgdG8gZ2V0IHRoZSBldmVudCBmcm9tIHRoZSB0YXJnZXQgcm9vbS5cbiAqXG4gKiBAcGFyYW0gc2hvdWxkTG9va1VwRXZlbnQgLSB3aGV0aGVyIHRoZSBwYXJtYWxpbmsgZXZlbnQgc2hvdWxkIGJlIGxvb2tlZCB1cFxuICogQHBhcmFtIFJvb20gfCBudWxsIHRhcmdldFJvb20gLSB0YXJnZXQgcm9vbSBvZiB0aGUgcGVybWFsaW5rXG4gKiBAcGFyYW0gcGFyc2VSZXN1bHQgLSBwZXJtYWxpbmsgcGFyc2UgcmVzdWx0XG4gKiBAcmV0dXJucyBUaGUgZXZlbnQgaWYgZm91bmQgb3IgbnVsbCBpZiBpdCBzaG91bGQgbm90IGJlIGxvb2tlZCB1cCBvciB3YXMgbm90IGZvdW5kLlxuICovXG5jb25zdCBkZXRlcm1pbmVJbml0aWFsRXZlbnQgPSAoXG4gICAgc2hvdWxkTG9va1VwRXZlbnQ6IGJvb2xlYW4sXG4gICAgdGFyZ2V0Um9vbTogUm9vbSB8IG51bGwsXG4gICAgcGFyc2VSZXN1bHQ6IFBlcm1hbGlua1BhcnRzIHwgbnVsbCxcbik6IE1hdHJpeEV2ZW50IHwgbnVsbCA9PiB7XG4gICAgaWYgKCFzaG91bGRMb29rVXBFdmVudCB8fCAhdGFyZ2V0Um9vbSB8fCAhcGFyc2VSZXN1bHQ/LmV2ZW50SWQpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIHRhcmdldFJvb20uZmluZEV2ZW50QnlJZChwYXJzZVJlc3VsdC5ldmVudElkKSB8fCBudWxsO1xufTtcblxuLyoqXG4gKiBIb29rIHRvIGdldCBhIHBlcm1hbGluayB0YXJnZXQgZXZlbnRcbiAqXG4gKiBAcGFyYW0gdHlwZSAtIFBlcm1hbGluayB0eXBlXG4gKiBAcGFyYW0gcGFyc2VSZXN1bHQgLSBQZXJtYWxpbmsgcGFyc2UgcmVzdWx0XG4gKiBAcGFyYW0gdGFyZ2V0Um9vbSAtIFRhcmdldCByb29tIG9mIHRoZSBwZXJtYWxpbmsge0BsaW5rIC4vdXNlUGVybWFsaW5rVGFyZ2V0Um9vbS50c31cbiAqIEByZXR1cm5zIFRoZSBwZXJtYWxpbmsgZXZlbnQgaWYgaXQgdGFyZ2V0cyBhbiBldmVudCBhbmQgaXQgY2FuIGJlIGxvYWRlZC5cbiAqICAgICAgICAgIEVsc2UgbnVsbC5cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZVBlcm1hbGlua0V2ZW50ID0gKFxuICAgIHR5cGU6IFBpbGxUeXBlIHwgbnVsbCxcbiAgICBwYXJzZVJlc3VsdDogUGVybWFsaW5rUGFydHMgfCBudWxsLFxuICAgIHRhcmdldFJvb206IFJvb20gfCBudWxsLFxuKTogTWF0cml4RXZlbnQgfCBudWxsID0+IHtcbiAgICAvLyBFdmVudCBwZXJtYWxpbmtzIHJlcXVpcmUgdG8ga25vdyB0aGUgZXZlbnQuXG4gICAgLy8gSWYgaXQgY2Fubm90IGJlIGluaXRpYWxseSBkZXRlcm1pbmVkLCBpdCB3aWxsIGJlIGxvb2tlZCB1cCBsYXRlciBieSBhIG1lbW8gaG9vay5cbiAgICBjb25zdCBzaG91bGRMb29rVXBFdmVudCA9XG4gICAgICAgICEhdHlwZSAmJlxuICAgICAgICAhIXBhcnNlUmVzdWx0Py5yb29tSWRPckFsaWFzICYmXG4gICAgICAgICEhcGFyc2VSZXN1bHQ/LmV2ZW50SWQgJiZcbiAgICAgICAgW1BpbGxUeXBlLkV2ZW50SW5TYW1lUm9vbSwgUGlsbFR5cGUuRXZlbnRJbk90aGVyUm9vbV0uaW5jbHVkZXModHlwZSk7XG4gICAgY29uc3QgZXZlbnRJZCA9IHBhcnNlUmVzdWx0Py5ldmVudElkO1xuICAgIGNvbnN0IGV2ZW50SW5Sb29tID0gZGV0ZXJtaW5lSW5pdGlhbEV2ZW50KHNob3VsZExvb2tVcEV2ZW50LCB0YXJnZXRSb29tLCBwYXJzZVJlc3VsdCk7XG4gICAgY29uc3QgW2V2ZW50LCBzZXRFdmVudF0gPSB1c2VTdGF0ZTxNYXRyaXhFdmVudCB8IG51bGw+KGV2ZW50SW5Sb29tKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghc2hvdWxkTG9va1VwRXZlbnQgfHwgIWV2ZW50SWQgfHwgZXZlbnQgfHwgIXBhcnNlUmVzdWx0Py5yb29tSWRPckFsaWFzIHx8ICFwYXJzZVJlc3VsdC5ldmVudElkKSB7XG4gICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvIGhlcmVcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZldGNoUm9vbUV2ZW50ID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudERhdGEgPSBhd2FpdCBNYXRyaXhDbGllbnRQZWcuc2FmZUdldCgpLmZldGNoUm9vbUV2ZW50KFxuICAgICAgICAgICAgICAgICAgICBwYXJzZVJlc3VsdC5yb29tSWRPckFsaWFzISxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VSZXN1bHQuZXZlbnRJZCEsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBzZXRFdmVudChuZXcgTWF0cml4RXZlbnQoZXZlbnREYXRhKSk7XG4gICAgICAgICAgICB9IGNhdGNoIHt9XG4gICAgICAgIH07XG5cbiAgICAgICAgZmV0Y2hSb29tRXZlbnQoKTtcbiAgICB9LCBbZXZlbnQsIGV2ZW50SWQsIHBhcnNlUmVzdWx0Py5ldmVudElkLCBwYXJzZVJlc3VsdD8ucm9vbUlkT3JBbGlhcywgc2hvdWxkTG9va1VwRXZlbnRdKTtcblxuICAgIHJldHVybiBldmVudDtcbn07XG4iXSwibWFwcGluZ3MiOiI7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