diff --git a/packages/frontend/src/Routes.tsx b/packages/frontend/src/Routes.tsx
index 9db8da7..f7dd35c 100644
--- a/packages/frontend/src/Routes.tsx
+++ b/packages/frontend/src/Routes.tsx
@@ -7,20 +7,29 @@ import ShowNote from "./content/ShowNote";
import NotFound from "./content/NotFound";
import { BASE_URL } from "./config";
+import { useThemeContext } from "./hooks/useThemeContext";
-const Routes = () => (
-
- Loading...
}>
-
-
- } />
- } />
- } />
- } />
-
-
-
-
-);
+const Routes = () => {
+ const { darkMode } = useThemeContext();
+
+ return (
+
+
+
+ Loading...
}>
+
+
+ } />
+ } />
+ } />
+ } />
+
+
+
+
+
+
+ );
+}
export { Routes };
diff --git a/packages/frontend/src/components/PageContainer.tsx b/packages/frontend/src/components/PageContainer.tsx
index 108f5e4..ba9d5ce 100644
--- a/packages/frontend/src/components/PageContainer.tsx
+++ b/packages/frontend/src/components/PageContainer.tsx
@@ -1,14 +1,20 @@
import React from "react";
import { Card } from "react-bootstrap";
+import { ThemeSwitch } from "../content/ThemeSwitch";
const PageContainer = (props: {
header: React.ReactNode;
children: React.ReactNode;
-}) => (
-
- {props.header}
- {props.children}
-
-);
+}) => {
+ return (
+ <>
+
+ {props.header}
+ {props.children}
+
+
+ >
+ )
+};
export { PageContainer };
diff --git a/packages/frontend/src/content/ThemeSwitch.tsx b/packages/frontend/src/content/ThemeSwitch.tsx
new file mode 100644
index 0000000..ce15220
--- /dev/null
+++ b/packages/frontend/src/content/ThemeSwitch.tsx
@@ -0,0 +1,25 @@
+import React, { useState } from "react";
+import { useThemeContext } from "../hooks/useThemeContext";
+import { Form } from "react-bootstrap";
+
+
+export const ThemeSwitch = () => {
+ const { darkMode, setDarkMode } = useThemeContext();
+
+ const toggleTheme = () => {
+ setDarkMode(!darkMode);
+ };
+
+ return (
+
+
+ );
+}
\ No newline at end of file
diff --git a/packages/frontend/src/hooks/usePersistedState.ts b/packages/frontend/src/hooks/usePersistedState.ts
new file mode 100644
index 0000000..d5598d6
--- /dev/null
+++ b/packages/frontend/src/hooks/usePersistedState.ts
@@ -0,0 +1,14 @@
+import { useEffect, useState } from "react";
+
+// to store the state to local storage
+export default function usePersistedState(key: string, defaultValue: any) {
+ const [state, setState] = useState(() => {
+ return JSON.parse(localStorage.getItem(key) ?? '{}') || defaultValue;
+ });
+
+ useEffect(() => {
+ localStorage.setItem(key, JSON.stringify(state));
+ }, [key, state]);
+
+ return [state, setState];
+}
diff --git a/packages/frontend/src/hooks/useThemeContext.tsx b/packages/frontend/src/hooks/useThemeContext.tsx
new file mode 100644
index 0000000..8780730
--- /dev/null
+++ b/packages/frontend/src/hooks/useThemeContext.tsx
@@ -0,0 +1,32 @@
+import React from "react";
+import { createContext, useContext, ReactElement } from "react";
+import usePersistedState from "./usePersistedState";
+
+type ThemeContextValue = {
+ darkMode: boolean;
+ setDarkMode: React.Dispatch>;
+};
+
+// register the context
+const ThemeContext = createContext(undefined as any);
+
+type Props = {
+ children: React.ReactNode;
+};
+
+export const ThemeProvider = ({ children }: Props): ReactElement => {
+ /** usePersistedState for storing state in local store */
+ const [darkMode, setDarkMode] = usePersistedState("darkmode", false);
+
+ return (
+
+ {children}
+
+ );
+}
+
+// export a custom hook to use this specific context
+export const useThemeContext = (): ThemeContextValue => {
+ return useContext(ThemeContext);
+}
+
diff --git a/packages/frontend/src/index.tsx b/packages/frontend/src/index.tsx
index b3a7bef..4035c74 100644
--- a/packages/frontend/src/index.tsx
+++ b/packages/frontend/src/index.tsx
@@ -1,8 +1,9 @@
import { Buffer } from "buffer";
import process from "process";
import React from "react";
-import { createRoot } from "react-dom/client";
+import ReactDOM from "react-dom";
import { Routes } from "./Routes";
+import { ThemeProvider } from "./hooks/useThemeContext";
// Polyfills required for MicrophoneStream
if (typeof (window as any).global === "undefined") {
@@ -15,11 +16,10 @@ if (typeof (window as any).process === "undefined") {
(window as any).process = process;
}
-const container = document.getElementById("root");
-// @ts-ignore
-const root = createRoot(container);
-root.render(
-
-
-
+
+ReactDOM.render(
+
+
+ ,
+ document.getElementById("root")
);