Skip to content

Commit

Permalink
Cookie de theme y colorMode
Browse files Browse the repository at this point in the history
  • Loading branch information
Sardlimad committed Nov 5, 2024
1 parent 3086b2c commit b6d71f4
Show file tree
Hide file tree
Showing 4 changed files with 88 additions and 32 deletions.
9 changes: 9 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
"chart.js": "^4.4.5",
"echarts": "^5.5.1",
"framer-motion": "^11.11.10",
"js-cookie": "^3.0.5",
"react": "^18.3.1",
"react-chartjs-2": "^5.2.0",
"react-dom": "^18.2.0",
Expand Down
93 changes: 62 additions & 31 deletions src/App.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React, { useState } from "react";
import React, { useEffect, useState } from "react";
import { Radar } from "react-chartjs-2";
import "chart.js/auto";
import { FontAwesomeIcon as FA } from "@fortawesome/react-fontawesome";
Expand All @@ -16,6 +16,7 @@ import {
Link,
Select,
StackDivider,
Switch,
Tab,
TabList,
TabPanel,
Expand All @@ -29,6 +30,7 @@ import theme from "./themes/theme";
import pinkTheme from "./themes/pinkTheme";
import Clementine from "./themes/Clementine";
import GreenHaze from "./themes/GreenHaze";
import Cookies from "js-cookie";

function App() {
//Referencia al gráfico
Expand All @@ -46,6 +48,65 @@ function App() {

const [currentTheme, setCurrentTheme] = useState(theme);

useEffect(() => {
const savedTheme = Cookies.get("theme");
if (savedTheme) {
switch (savedTheme) {
case "pink":
setCurrentTheme(pinkTheme);
break;

case "blue":
setCurrentTheme(theme);
break;

case "clementine":
setCurrentTheme(Clementine);
break;

case "greenhaze":
setCurrentTheme(GreenHaze);
break;

default:
setCurrentTheme(theme);
break;
}
}
}, [currentTheme]);

const downloadChart = () => {
const chart = chartRef.current;
if (chart) {
const link = document.createElement("a");
link.href = chart.toBase64Image();
link.download = "boehm-turner-star.png";
link.click();
}
};

const handleSetTheme = (e) => {
switch (e.target.value) {
case "pink":
setCurrentTheme(pinkTheme);
break;
case "blue":
setCurrentTheme(theme);
break;
case "clementine":
setCurrentTheme(Clementine);
break;
case "greenhaze":
setCurrentTheme(GreenHaze);
break;

default:
break;
}

Cookies.set("theme", e.target.value, { expires: 7 });
};

//Etiquetas del gráfico
const labels = [
"Staff Experience",
Expand Down Expand Up @@ -101,36 +162,6 @@ function App() {
],
};

const downloadChart = () => {
const chart = chartRef.current;
if (chart) {
const link = document.createElement("a");
link.href = chart.toBase64Image();
link.download = "boehm-turner-star.png";
link.click();
}
};

const handleSetTheme = (e) => {
switch (e.target.value) {
case "pink":
setCurrentTheme(pinkTheme);
break;
case "blue":
setCurrentTheme(theme);
break;
case "clementine":
setCurrentTheme(Clementine);
break;
case "greenhaze":
setCurrentTheme(GreenHaze);
break;

default:
break;
}
};

return (
<ChakraProvider theme={currentTheme}>
<Box textAlign="center" m="15px">
Expand Down
17 changes: 16 additions & 1 deletion src/components/ToggleTheme.jsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,28 @@
import { IconButton, useColorMode } from "@chakra-ui/react";
import { faMoon, faSun } from "@fortawesome/free-solid-svg-icons";
import { FontAwesomeIcon as FA } from "@fortawesome/react-fontawesome";
import Cookies from "js-cookie";
import { useEffect } from "react";

export const ToggleTheme = () => {
const { colorMode, toggleColorMode } = useColorMode();

useEffect(() => {
const savedMode = Cookies.get('mode');
if (savedMode && savedMode !== colorMode) {
toggleColorMode();
}
}, [colorMode, toggleColorMode]);

const handleColorMode = () => {
toggleColorMode();

Cookies.set('mode', colorMode === 'light' ? 'dark' : 'light', { expires: 7 });
}

return (
<IconButton
onClick={toggleColorMode}
onClick={handleColorMode}
icon={colorMode === "light" ? <FA icon={faMoon} color="#f1c40f" /> : <FA icon={faSun} color="#f39c12" />}
variant="ghost"
color="brand.500"
Expand Down

0 comments on commit b6d71f4

Please sign in to comment.