// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. import React, {createContext} from 'react'; type Props = { server: ServerContext; children: React.ReactNode; } type WithServerUrlProps = { serverUrl: string; } type GetProps = C extends React.ComponentType ? P : never type ServerContext = { displayName: string; url: string; } const ServerContext = createContext({displayName: '', url: ''}); const {Provider, Consumer} = ServerContext; function ServerUrlProvider({server, children}: Props) { return ( {children} ); } export function withServerUrl, P = GetProps>(Component: C) { return function ServerUrlComponent(props: JSX.LibraryManagedAttributes) { return ( {(server: ServerContext) => ( )} ); }; } export function useServerDisplayName(): string { const server = React.useContext(ServerContext); return server.displayName; } export function useServerUrl(): string { const server = React.useContext(ServerContext); return server.url; } export default ServerUrlProvider;