Line data Source code
1 : import * as React from 'react';
2 : import { createRoot } from 'react-dom/client';
3 : import { BrowserRouter } from 'react-router-dom';
4 :
5 : import { LoggerProvider } from '../platform/logger/logger_provider.js';
6 : import { EmbeddedDatabaseProvider } from '../platform/database/embedded_database_provider.js';
7 : import { GitHubTheme } from '../styles/github_theme.js';
8 : import { LoggerToast } from '../ui/logger/logger_toast.js';
9 : import { ShellNavBar } from './shell_navbar.js';
10 : import { ShellPage } from './shell_page.js';
11 : import { ShellQueryHistoryProvider } from './shell_query_history.js';
12 : import { ComputationRegistry } from '../compute/computation_registry.js';
13 : import { ComputationScheduler } from '../compute/computation_scheduler.js';
14 : import { DashQLCoreProvider } from '../runtime/core_provider.js';
15 : import { ShellComputeQueryExecutionProvider } from './shell_compute_query_execution.js';
16 : import { AppConfigProvider } from '../config/app_config.js';
17 : import { PlatformEventListenerProvider } from '../platform/events/event_listener_provider.js';
18 : import { HttpClientProvider } from '../platform/http/http_client_provider.js';
19 : import { FlavorProvider } from '../config/flavor_provider.js';
20 : import { getRequestedFlavor } from '../config/flavor_resolution.js';
21 : import { DASHQL_FLAVOR } from '../config/flavors.js';
22 : import * as styles from './shell.module.css';
23 :
24 : import '@ankoh/dashql-ui/fonts/fonts.css';
25 : import '@ankoh/dashql-ui/styles/colors.css';
26 : import '@ankoh/dashql-ui/styles/tokens.css';
27 : import '../styles/globals.css';
28 : import '@ankoh/dashql-ui/styles/flavors/sidb.css';
29 :
30 1 : export const Shell: React.FC = () => {
31 1 : const [engineVersion, setEngineVersion] = React.useState<string | null>(null);
32 1 : const [shellGeneration, setShellGeneration] = React.useState(0);
33 1 : const resetShell = () => {
34 1 : setEngineVersion(null);
35 1 : setShellGeneration(generation => generation + 1);
36 1 : };
37 :
38 1 : return (
39 1 : <BrowserRouter>
40 1 : <LoggerProvider>
41 1 : <>
42 1 : <LoggerToast />
43 1 : <AppConfigProvider>
44 1 : <PlatformEventListenerProvider>
45 1 : <HttpClientProvider>
46 1 : <EmbeddedDatabaseProvider>
47 1 : <GitHubTheme>
48 1 : <DashQLCoreProvider>
49 1 : <ComputationRegistry>
50 1 : <ShellQueryHistoryProvider key={shellGeneration}>
51 1 : <ShellComputeQueryExecutionProvider>
52 1 : <ComputationScheduler />
53 1 : <div className={styles.root}>
54 1 : <ShellNavBar
55 1 : engineVersion={engineVersion}
56 1 : onReset={resetShell}
57 1 : />
58 1 : <ShellPage onEngineVersion={setEngineVersion} />
59 1 : </div>
60 1 : </ShellComputeQueryExecutionProvider>
61 1 : </ShellQueryHistoryProvider>
62 1 : </ComputationRegistry>
63 1 : </DashQLCoreProvider>
64 1 : </GitHubTheme>
65 1 : </EmbeddedDatabaseProvider>
66 1 : </HttpClientProvider>
67 1 : </PlatformEventListenerProvider>
68 1 : </AppConfigProvider>
69 1 : </>
70 1 : </LoggerProvider>
71 1 : </BrowserRouter>
72 : );
73 1 : };
74 :
75 : // The shell is branded for Hyper, only a flavor other than the default one rebrands it
76 1 : const requested = getRequestedFlavor();
77 1 : const flavor = requested?.id === DASHQL_FLAVOR.id ? null : requested;
78 :
79 1 : const element = document.getElementById('root');
80 1 : createRoot(element!).render(flavor == null ? <Shell /> : (
81 0 : <FlavorProvider requested={flavor}>
82 0 : <Shell />
83 0 : </FlavorProvider>
84 1 : ));
|