UNPKG

matrix-react-sdk

Version:
82 lines (77 loc) 11.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.usePermalinkTargetRoom = void 0; 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 determine the initial room. * Initial here means it should be possible to load the room without sending API requests. * For an @room or a user mention it is the permalinkRoom. * If the parse result contains a room Id or alias try to find it with {@link findRoom}. * Otherwise returns null. * * @param type - Pill type * @param permalinkRoom - Room in which the permalink is displayed. * @param parseResult - Permalink parser result * @returns Initial room or null if it cannot be determined. */ const determineInitialRoom = (type, parseResult, permalinkRoom) => { if (type === _Pill.PillType.AtRoomMention && permalinkRoom) return permalinkRoom; if (type === _Pill.PillType.UserMention && permalinkRoom) { return permalinkRoom; } if (parseResult?.roomIdOrAlias) { const room = findRoom(parseResult.roomIdOrAlias); if (room) return room; } return null; }; /** * Tries to find a room by room Id or searching all rooms for an alias. * * @param roomIdOrAlias - Id or alias of the room to find. * @returns Room if found, else null. */ const findRoom = roomIdOrAlias => { const client = _MatrixClientPeg.MatrixClientPeg.safeGet(); return roomIdOrAlias[0] === "#" ? client.getRooms().find(r => { return r.getCanonicalAlias() === roomIdOrAlias || r.getAltAliases().includes(roomIdOrAlias); }) ?? null : client.getRoom(roomIdOrAlias); }; /** * Hook to get the permalink target room: * * @param type - Permalink type * @param parseResult - Permalink parse result * @param permalinkRoom - Room in which the permalink is rendered * @returns Returns the target room: * - The permalinkRoom for an @room or user mention * - The room of the parse result for a room mention * - The room of the event for an event permalink * - Null in other cases or if the room cannot be found */ const usePermalinkTargetRoom = (type, parseResult, permalinkRoom) => { // The listed permalink types require a room. // If it cannot be initially determined, it will be looked up later by a memo hook. const shouldLookUpRoom = type && [_Pill.PillType.RoomMention, _Pill.PillType.EventInSameRoom, _Pill.PillType.EventInOtherRoom, "space"].includes(type); const initialRoom = determineInitialRoom(type, parseResult, permalinkRoom); const [targetRoom, setTargetRoom] = (0, _react.useState)(initialRoom); (0, _react.useEffect)(() => { if (shouldLookUpRoom && !targetRoom && parseResult?.roomIdOrAlias) { const newRoom = findRoom(parseResult.roomIdOrAlias); setTargetRoom(newRoom); } }, [parseResult?.roomIdOrAlias, shouldLookUpRoom, targetRoom]); return targetRoom; }; exports.usePermalinkTargetRoom = usePermalinkTargetRoom; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwiX1BpbGwiLCJfTWF0cml4Q2xpZW50UGVnIiwiZGV0ZXJtaW5lSW5pdGlhbFJvb20iLCJ0eXBlIiwicGFyc2VSZXN1bHQiLCJwZXJtYWxpbmtSb29tIiwiUGlsbFR5cGUiLCJBdFJvb21NZW50aW9uIiwiVXNlck1lbnRpb24iLCJyb29tSWRPckFsaWFzIiwicm9vbSIsImZpbmRSb29tIiwiY2xpZW50IiwiTWF0cml4Q2xpZW50UGVnIiwic2FmZUdldCIsImdldFJvb21zIiwiZmluZCIsInIiLCJnZXRDYW5vbmljYWxBbGlhcyIsImdldEFsdEFsaWFzZXMiLCJpbmNsdWRlcyIsImdldFJvb20iLCJ1c2VQZXJtYWxpbmtUYXJnZXRSb29tIiwic2hvdWxkTG9va1VwUm9vbSIsIlJvb21NZW50aW9uIiwiRXZlbnRJblNhbWVSb29tIiwiRXZlbnRJbk90aGVyUm9vbSIsImluaXRpYWxSb29tIiwidGFyZ2V0Um9vbSIsInNldFRhcmdldFJvb20iLCJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsIm5ld1Jvb20iLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzL3VzZVBlcm1hbGlua1RhcmdldFJvb20udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjMgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IHsgUm9vbSB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9tYXRyaXhcIjtcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgUGlsbFR5cGUgfSBmcm9tIFwiLi4vY29tcG9uZW50cy92aWV3cy9lbGVtZW50cy9QaWxsXCI7XG5pbXBvcnQgeyBNYXRyaXhDbGllbnRQZWcgfSBmcm9tIFwiLi4vTWF0cml4Q2xpZW50UGVnXCI7XG5pbXBvcnQgeyBQZXJtYWxpbmtQYXJ0cyB9IGZyb20gXCIuLi91dGlscy9wZXJtYWxpbmtzL1Blcm1hbGlua0NvbnN0cnVjdG9yXCI7XG5cbi8qKlxuICogVHJpZXMgdG8gZGV0ZXJtaW5lIHRoZSBpbml0aWFsIHJvb20uXG4gKiBJbml0aWFsIGhlcmUgbWVhbnMgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGxvYWQgdGhlIHJvb20gd2l0aG91dCBzZW5kaW5nIEFQSSByZXF1ZXN0cy5cbiAqIEZvciBhbiBAcm9vbSBvciBhIHVzZXIgbWVudGlvbiBpdCBpcyB0aGUgcGVybWFsaW5rUm9vbS5cbiAqIElmIHRoZSBwYXJzZSByZXN1bHQgY29udGFpbnMgYSByb29tIElkIG9yIGFsaWFzIHRyeSB0byBmaW5kIGl0IHdpdGgge0BsaW5rIGZpbmRSb29tfS5cbiAqIE90aGVyd2lzZSByZXR1cm5zIG51bGwuXG4gKlxuICogQHBhcmFtIHR5cGUgLSBQaWxsIHR5cGVcbiAqIEBwYXJhbSBwZXJtYWxpbmtSb29tIC0gUm9vbSBpbiB3aGljaCB0aGUgcGVybWFsaW5rIGlzIGRpc3BsYXllZC5cbiAqIEBwYXJhbSBwYXJzZVJlc3VsdCAtIFBlcm1hbGluayBwYXJzZXIgcmVzdWx0XG4gKiBAcmV0dXJucyBJbml0aWFsIHJvb20gb3IgbnVsbCBpZiBpdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiAqL1xuY29uc3QgZGV0ZXJtaW5lSW5pdGlhbFJvb20gPSAoXG4gICAgdHlwZTogUGlsbFR5cGUgfCBudWxsLFxuICAgIHBhcnNlUmVzdWx0OiBQZXJtYWxpbmtQYXJ0cyB8IG51bGwsXG4gICAgcGVybWFsaW5rUm9vbTogUm9vbSB8IHVuZGVmaW5lZCxcbik6IFJvb20gfCBudWxsID0+IHtcbiAgICBpZiAodHlwZSA9PT0gUGlsbFR5cGUuQXRSb29tTWVudGlvbiAmJiBwZXJtYWxpbmtSb29tKSByZXR1cm4gcGVybWFsaW5rUm9vbTtcblxuICAgIGlmICh0eXBlID09PSBQaWxsVHlwZS5Vc2VyTWVudGlvbiAmJiBwZXJtYWxpbmtSb29tKSB7XG4gICAgICAgIHJldHVybiBwZXJtYWxpbmtSb29tO1xuICAgIH1cblxuICAgIGlmIChwYXJzZVJlc3VsdD8ucm9vbUlkT3JBbGlhcykge1xuICAgICAgICBjb25zdCByb29tID0gZmluZFJvb20ocGFyc2VSZXN1bHQucm9vbUlkT3JBbGlhcyk7XG4gICAgICAgIGlmIChyb29tKSByZXR1cm4gcm9vbTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbi8qKlxuICogVHJpZXMgdG8gZmluZCBhIHJvb20gYnkgcm9vbSBJZCBvciBzZWFyY2hpbmcgYWxsIHJvb21zIGZvciBhbiBhbGlhcy5cbiAqXG4gKiBAcGFyYW0gcm9vbUlkT3JBbGlhcyAtIElkIG9yIGFsaWFzIG9mIHRoZSByb29tIHRvIGZpbmQuXG4gKiBAcmV0dXJucyBSb29tIGlmIGZvdW5kLCBlbHNlIG51bGwuXG4gKi9cbmNvbnN0IGZpbmRSb29tID0gKHJvb21JZE9yQWxpYXM6IHN0cmluZyk6IFJvb20gfCBudWxsID0+IHtcbiAgICBjb25zdCBjbGllbnQgPSBNYXRyaXhDbGllbnRQZWcuc2FmZUdldCgpO1xuXG4gICAgcmV0dXJuIHJvb21JZE9yQWxpYXNbMF0gPT09IFwiI1wiXG4gICAgICAgID8gKGNsaWVudC5nZXRSb29tcygpLmZpbmQoKHIpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHIuZ2V0Q2Fub25pY2FsQWxpYXMoKSA9PT0gcm9vbUlkT3JBbGlhcyB8fCByLmdldEFsdEFsaWFzZXMoKS5pbmNsdWRlcyhyb29tSWRPckFsaWFzKTtcbiAgICAgICAgICB9KSA/PyBudWxsKVxuICAgICAgICA6IGNsaWVudC5nZXRSb29tKHJvb21JZE9yQWxpYXMpO1xufTtcblxuLyoqXG4gKiBIb29rIHRvIGdldCB0aGUgcGVybWFsaW5rIHRhcmdldCByb29tOlxuICpcbiAqIEBwYXJhbSB0eXBlIC0gUGVybWFsaW5rIHR5cGVcbiAqIEBwYXJhbSBwYXJzZVJlc3VsdCAtIFBlcm1hbGluayBwYXJzZSByZXN1bHRcbiAqIEBwYXJhbSBwZXJtYWxpbmtSb29tIC0gUm9vbSBpbiB3aGljaCB0aGUgcGVybWFsaW5rIGlzIHJlbmRlcmVkXG4gKiBAcmV0dXJucyBSZXR1cm5zIHRoZSB0YXJnZXQgcm9vbTpcbiAqICAgICAgICAgIC0gVGhlIHBlcm1hbGlua1Jvb20gZm9yIGFuIEByb29tIG9yIHVzZXIgbWVudGlvblxuICogICAgICAgICAgLSBUaGUgcm9vbSBvZiB0aGUgcGFyc2UgcmVzdWx0IGZvciBhIHJvb20gbWVudGlvblxuICogICAgICAgICAgLSBUaGUgcm9vbSBvZiB0aGUgZXZlbnQgZm9yIGFuIGV2ZW50IHBlcm1hbGlua1xuICogICAgICAgICAgLSBOdWxsIGluIG90aGVyIGNhc2VzIG9yIGlmIHRoZSByb29tIGNhbm5vdCBiZSBmb3VuZFxuICovXG5leHBvcnQgY29uc3QgdXNlUGVybWFsaW5rVGFyZ2V0Um9vbSA9IChcbiAgICB0eXBlOiBQaWxsVHlwZSB8IG51bGwsXG4gICAgcGFyc2VSZXN1bHQ6IFBlcm1hbGlua1BhcnRzIHwgbnVsbCxcbiAgICBwZXJtYWxpbmtSb29tOiBSb29tIHwgdW5kZWZpbmVkLFxuKTogUm9vbSB8IG51bGwgPT4ge1xuICAgIC8vIFRoZSBsaXN0ZWQgcGVybWFsaW5rIHR5cGVzIHJlcXVpcmUgYSByb29tLlxuICAgIC8vIElmIGl0IGNhbm5vdCBiZSBpbml0aWFsbHkgZGV0ZXJtaW5lZCwgaXQgd2lsbCBiZSBsb29rZWQgdXAgbGF0ZXIgYnkgYSBtZW1vIGhvb2suXG4gICAgY29uc3Qgc2hvdWxkTG9va1VwUm9vbSA9XG4gICAgICAgIHR5cGUgJiYgW1BpbGxUeXBlLlJvb21NZW50aW9uLCBQaWxsVHlwZS5FdmVudEluU2FtZVJvb20sIFBpbGxUeXBlLkV2ZW50SW5PdGhlclJvb20sIFwic3BhY2VcIl0uaW5jbHVkZXModHlwZSk7XG4gICAgY29uc3QgaW5pdGlhbFJvb20gPSBkZXRlcm1pbmVJbml0aWFsUm9vbSh0eXBlLCBwYXJzZVJlc3VsdCwgcGVybWFsaW5rUm9vbSk7XG4gICAgY29uc3QgW3RhcmdldFJvb20sIHNldFRhcmdldFJvb21dID0gdXNlU3RhdGU8Um9vbSB8IG51bGw+KGluaXRpYWxSb29tKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChzaG91bGRMb29rVXBSb29tICYmICF0YXJnZXRSb29tICYmIHBhcnNlUmVzdWx0Py5yb29tSWRPckFsaWFzKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdSb29tID0gZmluZFJvb20ocGFyc2VSZXN1bHQucm9vbUlkT3JBbGlhcyk7XG4gICAgICAgICAgICBzZXRUYXJnZXRSb29tKG5ld1Jvb20pO1xuICAgICAgICB9XG4gICAgfSwgW3BhcnNlUmVzdWx0Py5yb29tSWRPckFsaWFzLCBzaG91bGRMb29rVXBSb29tLCB0YXJnZXRSb29tXSk7XG5cbiAgICByZXR1cm4gdGFyZ2V0Um9vbTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQVNBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLEtBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGdCQUFBLEdBQUFGLE9BQUE7QUFaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNRyxvQkFBb0IsR0FBR0EsQ0FDekJDLElBQXFCLEVBQ3JCQyxXQUFrQyxFQUNsQ0MsYUFBK0IsS0FDakI7RUFDZCxJQUFJRixJQUFJLEtBQUtHLGNBQVEsQ0FBQ0MsYUFBYSxJQUFJRixhQUFhLEVBQUUsT0FBT0EsYUFBYTtFQUUxRSxJQUFJRixJQUFJLEtBQUtHLGNBQVEsQ0FBQ0UsV0FBVyxJQUFJSCxhQUFhLEVBQUU7SUFDaEQsT0FBT0EsYUFBYTtFQUN4QjtFQUVBLElBQUlELFdBQVcsRUFBRUssYUFBYSxFQUFFO0lBQzVCLE1BQU1DLElBQUksR0FBR0MsUUFBUSxDQUFDUCxXQUFXLENBQUNLLGFBQWEsQ0FBQztJQUNoRCxJQUFJQyxJQUFJLEVBQUUsT0FBT0EsSUFBSTtFQUN6QjtFQUVBLE9BQU8sSUFBSTtBQUNmLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTUMsUUFBUSxHQUFJRixhQUFxQixJQUFrQjtFQUNyRCxNQUFNRyxNQUFNLEdBQUdDLGdDQUFlLENBQUNDLE9BQU8sQ0FBQyxDQUFDO0VBRXhDLE9BQU9MLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQ3hCRyxNQUFNLENBQUNHLFFBQVEsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBRUMsQ0FBQyxJQUFLO0lBQzNCLE9BQU9BLENBQUMsQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQyxLQUFLVCxhQUFhLElBQUlRLENBQUMsQ0FBQ0UsYUFBYSxDQUFDLENBQUMsQ0FBQ0MsUUFBUSxDQUFDWCxhQUFhLENBQUM7RUFDL0YsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUNWRyxNQUFNLENBQUNTLE9BQU8sQ0FBQ1osYUFBYSxDQUFDO0FBQ3ZDLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sTUFBTWEsc0JBQXNCLEdBQUdBLENBQ2xDbkIsSUFBcUIsRUFDckJDLFdBQWtDLEVBQ2xDQyxhQUErQixLQUNqQjtFQUNkO0VBQ0E7RUFDQSxNQUFNa0IsZ0JBQWdCLEdBQ2xCcEIsSUFBSSxJQUFJLENBQUNHLGNBQVEsQ0FBQ2tCLFdBQVcsRUFBRWxCLGNBQVEsQ0FBQ21CLGVBQWUsRUFBRW5CLGNBQVEsQ0FBQ29CLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxDQUFDTixRQUFRLENBQUNqQixJQUFJLENBQUM7RUFDL0csTUFBTXdCLFdBQVcsR0FBR3pCLG9CQUFvQixDQUFDQyxJQUFJLEVBQUVDLFdBQVcsRUFBRUMsYUFBYSxDQUFDO0VBQzFFLE1BQU0sQ0FBQ3VCLFVBQVUsRUFBRUMsYUFBYSxDQUFDLEdBQUcsSUFBQUMsZUFBUSxFQUFjSCxXQUFXLENBQUM7RUFFdEUsSUFBQUksZ0JBQVMsRUFBQyxNQUFNO0lBQ1osSUFBSVIsZ0JBQWdCLElBQUksQ0FBQ0ssVUFBVSxJQUFJeEIsV0FBVyxFQUFFSyxhQUFhLEVBQUU7TUFDL0QsTUFBTXVCLE9BQU8sR0FBR3JCLFFBQVEsQ0FBQ1AsV0FBVyxDQUFDSyxhQUFhLENBQUM7TUFDbkRvQixhQUFhLENBQUNHLE9BQU8sQ0FBQztJQUMxQjtFQUNKLENBQUMsRUFBRSxDQUFDNUIsV0FBVyxFQUFFSyxhQUFhLEVBQUVjLGdCQUFnQixFQUFFSyxVQUFVLENBQUMsQ0FBQztFQUU5RCxPQUFPQSxVQUFVO0FBQ3JCLENBQUM7QUFBQ0ssT0FBQSxDQUFBWCxzQkFBQSxHQUFBQSxzQkFBQSIsImlnbm9yZUxpc3QiOltdfQ==