/* Copyright 2024 New Vector Ltd. Copyright 2020 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. */ import { useCallback, useState } from "react"; import { ClientEvent, MatrixClient, MatrixEvent } from "matrix-js-sdk/src/matrix"; import { useTypedEventEmitter } from "./useEventEmitter"; const tryGetContent = (ev?: MatrixEvent): T | undefined => ev?.getContent(); // Hook to simplify listening to Matrix account data export const useAccountData = (cli: MatrixClient, eventType: string): T => { const [value, setValue] = useState(() => tryGetContent(cli.getAccountData(eventType))); const handler = useCallback( (event: MatrixEvent) => { if (event.getType() !== eventType) return; setValue(event.getContent()); }, [eventType], ); useTypedEventEmitter(cli, ClientEvent.AccountData, handler); return value || ({} as T); }; // Currently not used, commenting out otherwise the dead code CI is unhappy. // But this code is valid and probably will be needed. // export const useRoomAccountData = (room: Room, eventType: string): T => { // const [value, setValue] = useState(() => tryGetContent(room.getAccountData(eventType))); // const handler = useCallback( // (event) => { // if (event.getType() !== eventType) return; // setValue(event.getContent()); // }, // [eventType], // ); // useTypedEventEmitter(room, RoomEvent.AccountData, handler); // return value || ({} as T); // };