Line data Source code
1 : import * as React from 'react';
2 :
3 : import { useLogger } from '../logger/logger_provider.js';
4 : import { isDesktopHost } from '../native_globals.js';
5 : import { NativeHttpClient } from './native_http_client.js';
6 : import { WebHttpClient } from './web_http_client.js';
7 : import { HttpClient } from './http_client.js';
8 : import { HttpRequestLog, RecordingHttpClient } from './http_request_log.js';
9 :
10 : type Props = {
11 : children: React.ReactElement;
12 : };
13 :
14 1 : const CLIENT_CTX = React.createContext<HttpClient | null>(null);
15 1 : const REQUEST_LOG_CTX = React.createContext<HttpRequestLog | null>(null);
16 1 : export const useHttpClient = () => React.useContext(CLIENT_CTX)!;
17 : /// The log of the requests of the http client, null outside of the provider
18 1 : export const useHttpRequestLog = () => React.useContext(REQUEST_LOG_CTX);
19 :
20 1 : export const HttpClientProvider: React.FC<Props> = (props: Props) => {
21 1 : const logger = useLogger();
22 1 : const [requestLog] = React.useState(() => new HttpRequestLog());
23 1 : const client = React.useMemo<HttpClient>(() => new RecordingHttpClient(isDesktopHost()
24 1 : ? new NativeHttpClient({ proxyEndpoint: new URL("dashql-native://localhost") }, logger)
25 1 : : new WebHttpClient(logger), requestLog), [logger, requestLog]);
26 1 : return (
27 1 : <REQUEST_LOG_CTX.Provider value={requestLog}>
28 1 : <CLIENT_CTX.Provider value={client}>{props.children}</CLIENT_CTX.Provider>
29 1 : </REQUEST_LOG_CTX.Provider>
30 : );
31 1 : };
|