You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
import { Tag, TagProps } from 'antd' import { useTranslation } from '@/i18n.ts' import { SyncOutlined } from '@ant-design/icons'
export interface StatusProps extends TagProps { status: string }
const getColor = (status: string) => { if (status.includes('error') || status.includes('err')) { return 'danger' } switch (status) { case 'running': return 'success' case 'stopped': return 'danger' case 'unhealthy': case 'paused': case 'exited': case 'dead': case 'removing': return 'warning' default: return 'default' } }
const loadingStatus = [ 'installing', 'building', 'restarting', 'upgrading', 'rebuilding', 'recreating', 'creating', 'starting', 'removing', 'applying', ]
const loadingIcon = (status: string): boolean => { return loadingStatus.indexOf(status) > -1 } export const Status = ({ status = 'running', ...props }: StatusProps) => {
const { t } = useTranslation() const icon = loadingIcon(status) ? <SyncOutlined spin/> : null return ( <> <Tag {...props} color={getColor(status)} icon={icon}>{t(`status.${status}`, status)}</Tag> </> ) }
export default Status
|