/* 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. */ import React, { ComponentType, Ref } from "react"; import { MatrixClient } from "matrix-js-sdk/src/matrix"; import { RenderOptions } from "jest-matrix-react"; import { MatrixClientPeg as peg } from "../../src/MatrixClientPeg"; import MatrixClientContext from "../../src/contexts/MatrixClientContext"; import { SDKContext, SdkContextClass } from "../../src/contexts/SDKContext"; type WrapperProps = { wrappedRef?: Ref> } & T; export function wrapInMatrixClientContext(WrappedComponent: ComponentType): ComponentType> { class Wrapper extends React.Component> { _matrixClient: MatrixClient; constructor(props: WrapperProps) { super(props); this._matrixClient = peg.safeGet(); } render() { return ( ); } } return Wrapper; } export function wrapInSdkContext( WrappedComponent: ComponentType, sdkContext: SdkContextClass, ): ComponentType> { return class extends React.Component> { render() { return ( ); } }; } /** * Test helper to generate React testing library render options for wrapping with a MatrixClientContext.Provider * @param client the MatrixClient instance to expose via the provider */ export function withClientContextRenderOptions(client: MatrixClient): RenderOptions { return { wrapper: ({ children }) => ( {children} ), }; }