Feat(Frontend): added ThemeProvider
- ThemeProvider will change the default Material UI looks. CSSBaseline in ThemeProvider will reset and normalize the browser's styling, making sure our app looks the same in any browser. - ThemeProvider will be used as the parent of any styled components.
This commit is contained in:
		@@ -1,8 +1,8 @@
 | 
			
		||||
import React from 'react';
 | 
			
		||||
import { render, screen } from '@testing-library/react';
 | 
			
		||||
import App from './App';
 | 
			
		||||
import React from "react";
 | 
			
		||||
import { render, screen } from "@testing-library/react";
 | 
			
		||||
import App from "./App";
 | 
			
		||||
 | 
			
		||||
test('renders learn react link', () => {
 | 
			
		||||
test("renders learn react link", () => {
 | 
			
		||||
  render(<App />);
 | 
			
		||||
  const linkElement = screen.getByText(/learn react/i);
 | 
			
		||||
  expect(linkElement).toBeInTheDocument();
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,10 @@
 | 
			
		||||
import React from 'react';
 | 
			
		||||
import logo from './logo.svg';
 | 
			
		||||
import './App.css';
 | 
			
		||||
import React from "react";
 | 
			
		||||
import logo from "./logo.svg";
 | 
			
		||||
import "./App.css";
 | 
			
		||||
import "@fontsource/roboto/300.css";
 | 
			
		||||
import "@fontsource/roboto/400.css";
 | 
			
		||||
import "@fontsource/roboto/500.css";
 | 
			
		||||
import "@fontsource/roboto/700.css";
 | 
			
		||||
 | 
			
		||||
function App() {
 | 
			
		||||
  return (
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										29
									
								
								frontend/src/ThemeProvider.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								frontend/src/ThemeProvider.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
import { useMemo } from "react";
 | 
			
		||||
import { PaletteMode } from "@mui/material";
 | 
			
		||||
import CssBaseline from "@mui/material/CssBaseline";
 | 
			
		||||
import useMediaQuery from "@mui/material/useMediaQuery";
 | 
			
		||||
import {
 | 
			
		||||
  createTheme,
 | 
			
		||||
  ThemeProvider as MuiThemeProvider,
 | 
			
		||||
} from "@mui/material/styles";
 | 
			
		||||
 | 
			
		||||
interface IProps {
 | 
			
		||||
  children: React.ReactNode;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const ThemeProvider = ({ children }: IProps) => {
 | 
			
		||||
  const prefersDarkMode = useMediaQuery("(prefers-color-scheme: dark)");
 | 
			
		||||
  const theme = useMemo(() => {
 | 
			
		||||
    const palette = {
 | 
			
		||||
      mode: (prefersDarkMode ? "dark" : "light") as PaletteMode,
 | 
			
		||||
    };
 | 
			
		||||
    return createTheme({ palette });
 | 
			
		||||
  }, [prefersDarkMode]);
 | 
			
		||||
  return (
 | 
			
		||||
    <MuiThemeProvider theme={theme}>
 | 
			
		||||
      <CssBaseline enableColorScheme />
 | 
			
		||||
      {children}
 | 
			
		||||
    </MuiThemeProvider>
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
export default ThemeProvider;
 | 
			
		||||
@@ -1,16 +1,14 @@
 | 
			
		||||
import React from 'react';
 | 
			
		||||
import ReactDOM from 'react-dom/client';
 | 
			
		||||
import './index.css';
 | 
			
		||||
import App from './App';
 | 
			
		||||
import reportWebVitals from './reportWebVitals';
 | 
			
		||||
import React from "react";
 | 
			
		||||
import { createRoot } from "react-dom/client";
 | 
			
		||||
import "./index.css";
 | 
			
		||||
import App from "./App";
 | 
			
		||||
import reportWebVitals from "./reportWebVitals";
 | 
			
		||||
 | 
			
		||||
const root = ReactDOM.createRoot(
 | 
			
		||||
  document.getElementById('root') as HTMLElement
 | 
			
		||||
);
 | 
			
		||||
const root = createRoot(document.getElementById("root") as HTMLElement);
 | 
			
		||||
root.render(
 | 
			
		||||
  <React.StrictMode>
 | 
			
		||||
    <App />
 | 
			
		||||
  </React.StrictMode>
 | 
			
		||||
  </React.StrictMode>,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
// If you want to start measuring performance in your app, pass a function
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
import { ReportHandler } from 'web-vitals';
 | 
			
		||||
import { ReportHandler } from "web-vitals";
 | 
			
		||||
 | 
			
		||||
const reportWebVitals = (onPerfEntry?: ReportHandler) => {
 | 
			
		||||
  if (onPerfEntry && onPerfEntry instanceof Function) {
 | 
			
		||||
    import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
 | 
			
		||||
    import("web-vitals").then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
 | 
			
		||||
      getCLS(onPerfEntry);
 | 
			
		||||
      getFID(onPerfEntry);
 | 
			
		||||
      getFCP(onPerfEntry);
 | 
			
		||||
 
 | 
			
		||||
@@ -2,4 +2,4 @@
 | 
			
		||||
// allows you to do things like:
 | 
			
		||||
// expect(element).toHaveTextContent(/react/i)
 | 
			
		||||
// learn more: https://github.com/testing-library/jest-dom
 | 
			
		||||
import '@testing-library/jest-dom';
 | 
			
		||||
import "@testing-library/jest-dom";
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user