Line data Source code
1 : import * as React from 'react';
2 :
3 : import { TrinoApiClient, TrinoApiClientInterface } from "./trino_api_client.js";
4 : import { useLogger } from '../../platform/logger/logger_provider.js';
5 : import { useAppConfig } from '../../config/app_config.js';
6 : import { useHttpClient } from '../../platform/http/http_client_provider.js';
7 : import { createTrinoSetup, TrinoSetupApi } from './trino_connection_setup.js';
8 : import { usePlatformType } from '../../platform/platform_type.js';
9 :
10 1 : const API_CTX = React.createContext<TrinoApiClientInterface | null>(null);
11 1 : export const SETUP_CTX = React.createContext<TrinoSetupApi | null>(null);
12 :
13 : interface Props {
14 : children: React.ReactElement;
15 : }
16 :
17 1 : export const TrinoConnector: React.FC<Props> = (props: Props) => {
18 1 : const logger = useLogger();
19 1 : const config = useAppConfig();
20 1 : const httpClient = useHttpClient();
21 1 : const platformType = usePlatformType();
22 1 : const connectorConfig = config?.connectors?.trino;
23 1 : const forceReLogin = config?.settings?.forceReLogin ?? false;
24 :
25 1 : const [api, setup] = React.useMemo(() => {
26 1 : if (!connectorConfig) {
27 1 : return [null, null];
28 1 : } else {
29 1 : const api: TrinoApiClientInterface = new TrinoApiClient(logger, httpClient);
30 1 : const setup = createTrinoSetup(api!, connectorConfig, logger, httpClient, platformType, forceReLogin);
31 1 : return [api, setup];
32 1 : }
33 1 : }, [connectorConfig, httpClient, platformType, forceReLogin]);
34 :
35 1 : return (
36 1 : <API_CTX.Provider value={api}>
37 1 : <SETUP_CTX.Provider value={setup}>
38 1 : {props.children}
39 1 : </SETUP_CTX.Provider>
40 1 : </API_CTX.Provider>
41 : );
42 1 : }
43 :
44 : export const useTrinoAPI = (): TrinoApiClientInterface => React.useContext(API_CTX)!;
45 1 : export const useTrinoSetup = (): TrinoSetupApi => React.useContext(SETUP_CTX)!;
|