Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ibm
GitHub Repository: ibm/watson-machine-learning-samples
Path: blob/master/cloud/ai-service-apps/nextjs-carbon-react-ui/src/components/ThemeToggle/ThemeToggle.js
6408 views
1
import { useState } from "react";
2
import { THEME } from "@/utils/constants";
3
import { useAppContext } from "@/contexts/app-context";
4
import ThemeButton from "./ThemeButton";
5
import "./theme-toggle.scss";
6
7
const THEME_BTN_SIZE = 31;
8
const THEME_BTNS = Object.values(THEME);
9
10
const ThemeToggle = ({ isExpanded }) => {
11
const { updateTheme, theme } = useAppContext();
12
const [selectedIndex, setSelectedIndex] = useState(THEME_BTNS.indexOf(theme));
13
14
const handleClick = ({ currentTarget }, index) => {
15
setSelectedIndex(index);
16
updateTheme(currentTarget.value);
17
};
18
19
return (
20
<div className="theme-toggle">
21
<div
22
className="theme-toggle__indicator"
23
style={{ transform: `translateX(${selectedIndex * THEME_BTN_SIZE}px)` }}
24
/>
25
{THEME_BTNS.map((value, index) => (
26
<ThemeButton
27
key={`theme-btn-${value}`}
28
value={value}
29
isExpanded={isExpanded}
30
onClick={(event) => handleClick(event, index)}
31
/>
32
))}
33
</div>
34
);
35
};
36
37
export default ThemeToggle;
38
39