Line data Source code
1 : import * as React from 'react';
2 :
3 : import { SalesforceApiClient, SalesforceApiClientInterface } from './salesforce_api_client.js';
4 : import { SalesforceAPIClientMock } from './salesforce_api_client_mock.js';
5 : import { mockSalesforceAuthFlow as mockSalesforceSetup } from './salesforce_connection_setup_mock.js';
6 : import { SalesforceSetupApi, createSalesforceSetup } from './salesforce_connection_setup.js';
7 : import { useAppConfig } from '../../config/app_config.js';
8 : import { useHttpClient } from '../../platform/http/http_client_provider.js';
9 : import { useLogger } from '../../platform/logger/logger_provider.js';
10 : import { useHyperHttpClient } from '../hyper/hyperdb_grpc_client_provider.js';
11 : import { usePlatformType } from '../../platform/platform_type.js';
12 : import { usePlatformEventListener } from '../../platform/events/event_listener_provider.js';
13 :
14 1 : const API_CTX = React.createContext<SalesforceApiClientInterface | null>(null);
15 1 : const SETUP_CTX = React.createContext<SalesforceSetupApi | null>(null);
16 :
17 :
18 : interface Props {
19 : children: React.ReactElement;
20 : }
21 :
22 1 : export const SalesforceConnector: React.FC<Props> = (props: Props) => {
23 1 : const logger = useLogger();
24 1 : const config = useAppConfig();
25 1 : const connectorConfig = config?.connectors?.salesforce;
26 1 : const forceReLogin = config?.settings?.forceReLogin ?? false;
27 1 : const httpClient = useHttpClient();
28 1 : const hyperHttpClient = useHyperHttpClient();
29 1 : const platformType = usePlatformType();
30 1 : const appEvents = usePlatformEventListener();
31 :
32 1 : const [api, setup] = React.useMemo(() => {
33 1 : if (!connectorConfig) {
34 1 : return [null, null];
35 1 : } else if (connectorConfig.mock?.enabled) {
36 1 : const api = new SalesforceAPIClientMock(connectorConfig.mock);
37 1 : const setup = mockSalesforceSetup(api, connectorConfig, logger);
38 1 : return [api, setup];
39 1 : } else if (!httpClient || !hyperHttpClient) {
40 1 : return [null, null];
41 1 : } else {
42 1 : const api = new SalesforceApiClient(logger, httpClient);
43 1 : const setup = createSalesforceSetup(hyperHttpClient, api, platformType, appEvents, connectorConfig, forceReLogin, logger);
44 1 : return [api, setup];
45 1 : }
46 1 : }, [connectorConfig, httpClient, hyperHttpClient, platformType, appEvents, forceReLogin]);
47 :
48 1 : return (
49 1 : <API_CTX.Provider value={api}>
50 1 : <SETUP_CTX.Provider value={setup}>
51 1 : {props.children}
52 1 : </SETUP_CTX.Provider>
53 1 : </API_CTX.Provider>
54 : );
55 1 : };
56 :
57 1 : export const useSalesforceAPI = (): SalesforceApiClientInterface => React.useContext(API_CTX)!;
58 1 : export const useSalesforceSetup = () => React.useContext(SETUP_CTX!);
|