From 22336e1f315cc10fd49c30245488424b51bc5459 Mon Sep 17 00:00:00 2001 From: PA4KEV Date: Tue, 15 Aug 2023 21:46:05 +0200 Subject: [PATCH] Add ThemeProvider. --- src/Pages/BasicPage.js | 7 +++---- src/ThemeContext.js | 20 ++++++++++++++++++++ src/UI/Footer.js | 15 ++++----------- src/UI/Navigation.js | 17 +++++------------ src/index.js | 5 ++++- 5 files changed, 36 insertions(+), 28 deletions(-) create mode 100644 src/ThemeContext.js diff --git a/src/Pages/BasicPage.js b/src/Pages/BasicPage.js index 8991085..c604791 100644 --- a/src/Pages/BasicPage.js +++ b/src/Pages/BasicPage.js @@ -1,17 +1,16 @@ import React, {useState, useEffect} from 'react'; import parse from 'html-react-parser' +import { useTheme } from '../ThemeContext'; // import ScrollSpy from '../UI/ScrollSpy'; const BasicPage = (props) => { - const [theme, setTheme] = useState( - localStorage.getItem('theme') || 'light' - ); - const [error, setError] = useState(null); const [isLoaded, setIsLoaded] = useState(false); const [items, setItems] = useState([]); + const { theme } = useTheme(); + useEffect(() => { fetch("http://localhost:5218/page/" + props.id) .then(res => res.json()) diff --git a/src/ThemeContext.js b/src/ThemeContext.js new file mode 100644 index 0000000..e5d1e8d --- /dev/null +++ b/src/ThemeContext.js @@ -0,0 +1,20 @@ +import React, { createContext, useContext, useState } from 'react'; + +const ThemeContext = createContext(); + +export function ThemeProvider({ children }) { + const [theme, setTheme] = useState( + localStorage.getItem('theme') || 'dark' + // document.body.className = theme; + ); + + return ( + + {children} + + ); +} + +export function useTheme() { + return useContext(ThemeContext); +} diff --git a/src/UI/Footer.js b/src/UI/Footer.js index fa482f7..49f263b 100644 --- a/src/UI/Footer.js +++ b/src/UI/Footer.js @@ -1,17 +1,10 @@ -import React, {useEffect, useState} from 'react'; - +import React from 'react'; +import { useTheme } from '../ThemeContext'; import './Footer.css'; -const Footer = (props) => { - const [theme, setTheme] = useState( - localStorage.getItem('theme') || 'light' - ); - - useEffect(() => { - localStorage.setItem('theme', theme); - document.body.className = theme; - }, [theme]); +const Footer = () => { + const { theme } = useTheme(); return (