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: ,
errorElement: ,
children: [
{
path: "/index.html",
element: ,
},
{
path: "/",
element: ,
},
{
path: "/history",
element: ,
},
{
path: "/settings",
element: ,
},
],
},
]);
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 (
);
}
export default App;