Files

113 lines
3.6 KiB
JavaScript
Raw Permalink Normal View History

2026-03-17 14:36:31 +08:00
'use client';
import React from 'react';
import { Box, IconButton, Tooltip } from '@mui/material';
import { useTranslation } from 'react-i18next';
import LightModeOutlinedIcon from '@mui/icons-material/LightModeOutlined';
import DarkModeOutlinedIcon from '@mui/icons-material/DarkModeOutlined';
import HelpOutlineIcon from '@mui/icons-material/HelpOutline';
import GitHubIcon from '@mui/icons-material/GitHub';
import BarChartIcon from '@mui/icons-material/BarChart';
import LanguageSwitcher from '../LanguageSwitcher';
import UpdateChecker from '../UpdateChecker';
import TaskIcon from '../TaskIcon';
import ModelSelect from '../ModelSelect';
import * as styles from './styles';
/**
* ActionButtons 组件
* 右侧操作区按钮语言切换主题切换文档GitHub更新检查
*/
export default function ActionButtons({
theme,
resolvedTheme,
toggleTheme,
isProjectDetail,
currentProject,
onActionAreaEnter
}) {
const { t, i18n } = useTranslation();
const isZhLanguage = String(i18n.language || '')
.toLowerCase()
.startsWith('zh');
return (
<Box sx={styles.actionAreaStyles} onMouseEnter={onActionAreaEnter}>
{isProjectDetail && <ModelSelect projectId={currentProject} />}
{isProjectDetail && <TaskIcon theme={theme} projectId={currentProject} />}
{/* Monitoring Dashboard - Only visible on Home page */}
{!isProjectDetail && (
<Tooltip title={t('monitoring.title', 'Resource Monitoring')}>
<IconButton component="a" href="/monitoring" size="medium" sx={styles.getIconButtonStyles(theme)}>
<BarChartIcon />
</IconButton>
</Tooltip>
)}
{/* Language Switcher - Always visible */}
<LanguageSwitcher />
{/* Theme Toggle - Always visible */}
<Tooltip
title={
resolvedTheme === 'dark'
? t('theme.switchToLight', 'Switch to light mode')
: t('theme.switchToDark', 'Switch to dark mode')
}
>
<IconButton
onClick={toggleTheme}
size="medium"
aria-label={
resolvedTheme === 'dark'
? t('theme.switchToLight', 'Switch to light mode')
: t('theme.switchToDark', 'Switch to dark mode')
}
sx={styles.getIconButtonStyles(theme)}
>
{resolvedTheme === 'dark' ? (
<LightModeOutlinedIcon fontSize="small" />
) : (
<DarkModeOutlinedIcon fontSize="small" />
)}
</IconButton>
</Tooltip>
{/* Documentation - Hide below xl */}
<Tooltip title={t('documentation')}>
<IconButton
component="a"
href={isZhLanguage ? 'https://docs.easy-dataset.com/' : 'https://docs.easy-dataset.com/ed/en'}
target="_blank"
rel="noopener noreferrer"
size="medium"
sx={styles.getIconButtonStyles(theme)}
>
<HelpOutlineIcon fontSize="small" />
</IconButton>
</Tooltip>
{/* GitHub - Hide at larger tablet screens and below */}
<Tooltip title={t('common.visitGitHub', 'View on GitHub')}>
<IconButton
component="a"
href="https://github.com/ConardLi/easy-dataset"
target="_blank"
rel="noopener noreferrer"
size="medium"
aria-label={t('common.visitGitHub', 'Open GitHub repository')}
sx={styles.getIconButtonStyles(theme)}
>
<GitHubIcon fontSize="small" />
</IconButton>
</Tooltip>
{/* Update Checker - Hide below xl */}
<Box sx={{ display: { xs: 'none', xl: 'flex' } }}>
<UpdateChecker />
</Box>
</Box>
);
}