import { Button } from 'antd'; import { CloseOutlined, SafetyCertificateOutlined } from '@ant-design/icons'; import type { SecurityUpdateStatus } from '../types'; import { getSecurityUpdateStatusMeta } from '../utils/securityUpdatePresentation'; import type { OverlayWorkbenchTheme } from '../utils/overlayWorkbenchTheme'; import { SECURITY_UPDATE_ACTION_BUTTON_CLASS, SECURITY_UPDATE_BANNER_CLASS, getSecurityUpdateActionButtonStyle, getSecurityUpdateBannerSurfaceStyle, } from '../utils/securityUpdateVisuals'; interface SecurityUpdateBannerProps { status: SecurityUpdateStatus; darkMode: boolean; overlayTheme: OverlayWorkbenchTheme; surfaceOpacity?: number; onStart: () => void; onRetry: () => void; onRestart: () => void; onOpenDetails: () => void; onDismiss: () => void; } const resolvePrimaryAction = ( status: SecurityUpdateStatus, actions: Pick, ) => { switch (status.overallStatus) { case 'postponed': return { label: '立即更新', onClick: actions.onStart, }; case 'needs_attention': return { label: '查看详情', onClick: actions.onOpenDetails, }; case 'rolled_back': return { label: '重新开始更新', onClick: actions.onRestart, }; default: return { label: '查看详情', onClick: actions.onOpenDetails, }; } }; const resolveSecondaryAction = ( status: SecurityUpdateStatus, actions: Pick, ) => { switch (status.overallStatus) { case 'needs_attention': return { label: '重新检查', onClick: actions.onRetry, }; case 'rolled_back': return { label: '查看详情', onClick: actions.onOpenDetails, }; default: return null; } }; const SecurityUpdateBanner = ({ status, darkMode, overlayTheme, surfaceOpacity = 1, onStart, onRetry, onRestart, onOpenDetails, onDismiss, }: SecurityUpdateBannerProps) => { const statusMeta = getSecurityUpdateStatusMeta(status); const primaryAction = resolvePrimaryAction(status, { onStart, onRetry, onRestart, onOpenDetails }); const secondaryAction = resolveSecondaryAction(status, { onRetry, onOpenDetails }); const actionButtonStyle = getSecurityUpdateActionButtonStyle(); return (
已保存配置可进行安全更新
{statusMeta.description}
{secondaryAction ? ( ) : null}
); }; export type { SecurityUpdateBannerProps }; export default SecurityUpdateBanner;