import DropdownButtons from '@/components/drop-down-buttons'; import GaugeChart from '@/components/echarts/gauge'; import IconFont from '@/components/icon-font'; import StatusTag from '@/components/status-tag'; import Card from '@/components/templates/card'; import { DeleteOutlined, EditOutlined, KubernetesOutlined } from '@ant-design/icons'; import { Card as ACard, Button, Col, Row, Tag } from 'antd'; import React, { useMemo } from 'react'; import styled from 'styled-components'; import { ClusterStatus, ClusterStatusLabelMap, ProviderLabelMap, ProviderValueMap } from '../config'; import { ClusterListItem as ListItem } from '../config/types'; import WorkerPools from './worker-pools'; const CollapseTitle = styled.div` display: flex; align-items: center; gap: 8px; font-size: var(--font-size-middle); font-weight: 500; color: var(--ant-color-text); height: 32px; cursor: pointer; `; const Content = styled.div` display: flex; justify-content: space-between; align-items: center; .chart-wrapper { flex: 1; } `; const CardWrapper = styled(ACard)` text-align: center; box-shadow: none; .ant-card { box-shadow: none; } .ant-card-body { display: flex; flex-direction: column; justify-content: flex-start; align-items: center; gap: 8px; } .label { font-weight: 500; font-size: var(--font-size-middle); } .value { font-weight: 500; color: var(--ant-color-text); } `; const actionItems = [ { key: 'edit', label: 'common.button.edit', icon: }, { key: 'add_worker', label: 'Add Worker', provider: ProviderValueMap.Custom, locale: false, icon: }, { key: 'register_cluster', label: 'Register Cluster', provider: ProviderValueMap.Kubernetes, locale: false, icon: }, { key: 'addPool', label: 'Add Node Pool', provider: ProviderValueMap.DigitalOcean, locale: false, icon: }, { key: 'delete', label: 'common.button.delete', icon: , props: { danger: true } } ]; const Inner = styled.div` display: flex; flex-direction: column; height: 100%; width: 100%; cursor: default; .title { margin-bottom: 16px; display: flex; align-items: center; justify-content: space-between; padding-bottom: 8px; .text { display: flex; align-items: center; font-size: var(--font-size-middle); font-weight: 500; color: var(--ant-color-text); } } .content { display: flex; flex-direction: column; justify-content: space-between; flex: 1; } `; interface CardProps { data: ListItem; onSelect?: (key: string, row: ListItem) => void; } const CardItem: React.FC = (props) => { const { data, onSelect } = props; const [show, setShow] = React.useState(false); const handleOnSelect = (key: string) => { console.log('Selected action:', key); onSelect?.(key, data); }; const actions = useMemo(() => { return actionItems.filter((item) => { if (item.provider) { return item.provider === data.provider; } return true; }); }, [data.provider]); return (
{data.name} {ProviderLabelMap[data.provider]}
Workers
1
GPUs
12
Deployments
2
{data.provider === ProviderValueMap.DigitalOcean && ( <> )}
); }; export default CardItem;