113 lines
3.6 KiB
JavaScript
113 lines
3.6 KiB
JavaScript
'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>
|
||
);
|
||
}
|