/* Copyright 2024 New Vector Ltd. Copyright 2021 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 React, { ComponentClass, createContext, forwardRef, useContext } from "react"; import { MatrixClient } from "matrix-js-sdk/src/matrix"; // This context is available to components under LoggedInView, // the context must not be used by components outside a MatrixClientContext tree. // This assertion allows us to make the type not nullable. const MatrixClientContext = createContext(null as any); MatrixClientContext.displayName = "MatrixClientContext"; export default MatrixClientContext; export interface MatrixClientProps { mxClient: MatrixClient; } export function useMatrixClientContext(): MatrixClient { return useContext(MatrixClientContext); } const matrixHOC = ( ComposedComponent: ComponentClass, ): (( props: Omit & React.RefAttributes>, ) => React.ReactElement | null) => { type ComposedComponentInstance = InstanceType; // eslint-disable-next-line react-hooks/rules-of-hooks const TypedComponent = ComposedComponent; return forwardRef>((props, ref) => { const client = useContext(MatrixClientContext); // @ts-ignore return ; }); }; export const withMatrixClientHOC = matrixHOC;