Line data Source code
1 : import * as React from 'react';
2 :
3 : import type { EmbeddedComputeDatabase } from '../platform/database/embedded_database.js';
4 : import { useEmbeddedDatabaseSetup } from '../platform/database/embedded_database_provider.js';
5 : import { useLogger } from '../platform/logger/logger_provider.js';
6 : import { stringifyError } from '../platform/logger/logger.js';
7 :
8 1 : const COMPUTE_DB_CTX = React.createContext<EmbeddedComputeDatabase | null>(null);
9 :
10 : interface Props {
11 : children?: React.ReactElement;
12 : }
13 :
14 1 : export const ComputeConnectionProvider: React.FC<Props> = (props: Props) => {
15 1 : const logger = useLogger();
16 1 : const setupEmbeddedDatabase = useEmbeddedDatabaseSetup();
17 1 : const [database, setDatabase] = React.useState<EmbeddedComputeDatabase | null>(null);
18 :
19 1 : React.useEffect(() => {
20 1 : let cancelled = false;
21 1 : const init = async () => {
22 1 : try {
23 1 : const embeddedDatabase = await setupEmbeddedDatabase("compute");
24 1 : if (!cancelled) {
25 1 : setDatabase(embeddedDatabase);
26 : }
27 1 : } catch (e: any) {
28 1 : logger.warn("Failed to create compute database", { error: stringifyError(e) }, "compute");
29 1 : }
30 1 : };
31 1 : init();
32 1 : return () => { cancelled = true; };
33 1 : }, [setupEmbeddedDatabase, logger]);
34 :
35 1 : return (
36 1 : <COMPUTE_DB_CTX.Provider value={database}>
37 1 : {props.children}
38 1 : </COMPUTE_DB_CTX.Provider>
39 : );
40 1 : };
41 :
42 1 : export function useComputeDatabase(): EmbeddedComputeDatabase | null {
43 1 : return React.useContext(COMPUTE_DB_CTX);
44 1 : }
|