1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
import GUI from "./pages/gui";
import History from "./pages/history";
import Layout from "./components/Layout";
import { createContext, useEffect } from "react";
import useContinueGUIProtocol from "./hooks/useWebsocket";
import ContinueGUIClientProtocol from "./hooks/ContinueGUIClientProtocol";
import { useDispatch } from "react-redux";
import {
setApiUrl,
setVscMachineId,
setSessionId,
setVscMediaUrl,
setDataSwitchOn,
setWorkspacePaths,
} from "./redux/slices/configSlice";
import { setHighlightedCode } from "./redux/slices/miscSlice";
import { postVscMessage } from "./vscode";
import { createBrowserRouter, RouterProvider } from "react-router-dom";
import ErrorPage from "./pages/error";
import SettingsPage from "./pages/settings";
const router = createBrowserRouter([
{
path: "/",
element: <Layout />,
errorElement: <ErrorPage />,
children: [
{
path: "/index.html",
element: <GUI />,
},
{
path: "/",
element: <GUI />,
},
{
path: "/history",
element: <History />,
},
{
path: "/settings",
element: <SettingsPage />,
},
],
},
]);
export const GUIClientContext = createContext<
ContinueGUIClientProtocol | undefined
>(undefined);
function App() {
const client = useContinueGUIProtocol();
const dispatch = useDispatch();
useEffect(() => {
const eventListener = (event: any) => {
switch (event.data.type) {
case "onLoad":
dispatch(setApiUrl(event.data.apiUrl));
dispatch(setVscMachineId(event.data.vscMachineId));
dispatch(setSessionId(event.data.sessionId));
dispatch(setVscMediaUrl(event.data.vscMediaUrl));
dispatch(setDataSwitchOn(event.data.dataSwitchOn));
dispatch(setWorkspacePaths(event.data.workspacePaths));
break;
case "highlightedCode":
dispatch(setHighlightedCode(event.data.rangeInFile));
break;
}
};
window.addEventListener("message", eventListener);
postVscMessage("onLoad", {});
return () => window.removeEventListener("message", eventListener);
}, []);
return (
<GUIClientContext.Provider value={client}>
<RouterProvider router={router} />
</GUIClientContext.Provider>
);
}
export default App;
|