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.
59 lines
1.2 KiB
59 lines
1.2 KiB
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
|