Path: blob/trunk/javascript/grid-ui/src/components/ThemeToggle/ThemeToggle.tsx
1989 views
// Licensed to the Software Freedom Conservancy (SFC) under one1// or more contributor license agreements. See the NOTICE file2// distributed with this work for additional information3// regarding copyright ownership. The SFC licenses this file4// to you under the Apache License, Version 2.0 (the5// "License"); you may not use this file except in compliance6// with the License. You may obtain a copy of the License at7//8// http://www.apache.org/licenses/LICENSE-2.09//10// Unless required by applicable law or agreed to in writing,11// software distributed under the License is distributed on an12// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY13// KIND, either express or implied. See the License for the14// specific language governing permissions and limitations15// under the License.1617import React from 'react'18import { IconButton, Tooltip } from '@mui/material'19import { LightMode, DarkMode, AutoMode } from '@mui/icons-material'20import { useTheme } from '../../contexts/ThemeContext'2122export const ThemeToggle: React.FC = () => {23const { themeMode, setThemeMode } = useTheme()2425const handleClick = () => {26const nextMode = themeMode === 'light' ? 'dark' : themeMode === 'dark' ? 'system' : 'light'27setThemeMode(nextMode)28}2930const getIcon = () => {31if (themeMode === 'light') return <LightMode />32if (themeMode === 'dark') return <DarkMode />33return <AutoMode />34}3536const getTooltip = () => {37if (themeMode === 'light') return 'Switch to dark mode'38if (themeMode === 'dark') return 'Switch to system mode'39return 'Switch to light mode'40}4142return (43<Tooltip title={getTooltip()}>44<IconButton45color="inherit"46onClick={handleClick}47aria-label="Toggle theme"48>49{getIcon()}50</IconButton>51</Tooltip>52)53}5455