Path: blob/master/cloud/ai-service-apps/nextjs-carbon-react-ui/src/components/ThemeToggle/ThemeToggle.js
6408 views
import { useState } from "react";1import { THEME } from "@/utils/constants";2import { useAppContext } from "@/contexts/app-context";3import ThemeButton from "./ThemeButton";4import "./theme-toggle.scss";56const THEME_BTN_SIZE = 31;7const THEME_BTNS = Object.values(THEME);89const ThemeToggle = ({ isExpanded }) => {10const { updateTheme, theme } = useAppContext();11const [selectedIndex, setSelectedIndex] = useState(THEME_BTNS.indexOf(theme));1213const handleClick = ({ currentTarget }, index) => {14setSelectedIndex(index);15updateTheme(currentTarget.value);16};1718return (19<div className="theme-toggle">20<div21className="theme-toggle__indicator"22style={{ transform: `translateX(${selectedIndex * THEME_BTN_SIZE}px)` }}23/>24{THEME_BTNS.map((value, index) => (25<ThemeButton26key={`theme-btn-${value}`}27value={value}28isExpanded={isExpanded}29onClick={(event) => handleClick(event, index)}30/>31))}32</div>33);34};3536export default ThemeToggle;373839