Initial react app and context setup

This commit is contained in:
Dmitriy Shishkov 2021-09-04 01:49:59 +03:00
parent 2cd20b5dae
commit 303ba734a3
No known key found for this signature in database
GPG Key ID: 14358F96FCDD8060
4 changed files with 70 additions and 0 deletions

32
src/App.tsx Normal file
View File

@ -0,0 +1,32 @@
import { useMemo } from "react";
import {
ThemeProvider,
createTheme,
useMediaQuery,
CssBaseline,
} from "@material-ui/core";
import { RoomContextProvider } from "./context";
export const App = () => {
const prefersDarkMode = useMediaQuery("(prefers-color-scheme: dark)");
const theme = useMemo(
() =>
createTheme({
palette: {
type: prefersDarkMode ? "dark" : "light",
},
}),
[prefersDarkMode]
);
return (
<ThemeProvider theme={theme}>
<RoomContextProvider>
<CssBaseline />
Here goes content soon!
</RoomContextProvider>
</ThemeProvider>
);
};

23
src/context.tsx Normal file
View File

@ -0,0 +1,23 @@
import { createContext, FC, useContext, useState } from "react";
import { ContextData, ContextValue } from "./types";
const defaultState: ContextData = { x: 0 };
const Context = createContext<ContextValue | undefined>(undefined);
export const RoomContextProvider: FC = ({ children }) => {
const [state, setState] = useState(defaultState);
return (
<Context.Provider value={{ state, setState }}>{children}</Context.Provider>
);
};
export const useRoomContext = () => {
const context = useContext(Context);
if (!context)
throw new Error("useRoomContext must be used within RoomContextProvider");
return context;
};

5
src/index.tsx Normal file
View File

@ -0,0 +1,5 @@
import ReactDOM from "react-dom";
import { App } from "./App";
ReactDOM.render(<App />, document.getElementById("root"));

10
src/types.ts Normal file
View File

@ -0,0 +1,10 @@
import { Dispatch, SetStateAction } from "react";
export interface ContextData {
// TODO: describe state
}
export interface ContextValue {
state: ContextData;
setState: Dispatch<SetStateAction<ContextData>>;
}