import AutoTooltip from '@/components/auto-tooltip'; import DropDownActions from '@/components/drop-down-actions'; import IconFont from '@/components/icon-font'; import TagWrapper from '@/components/tags-wrapper'; import ThemeTag from '@/components/tags-wrapper/theme-tag'; import Card from '@/components/templates/card'; import { useIntl } from '@umijs/max'; import { Button, Tag } from 'antd'; import _ from 'lodash'; import { useMemo } from 'react'; import styled from 'styled-components'; import { backendActions, builtInBackendLogos, customColors, customIcons, getGpuColor } from '../config'; import { ListItem } from '../config/types'; const TagInner = styled(Tag)` display: flex; align-items: center; justify-content: center; font-size: 18px; height: 28px; width: 28px; border-radius: 6px; font-weight: 400; `; const Header = styled.div` display: flex; align-items: center; justify-content: space-between; width: 100%; .title { display: flex; align-items: center; gap: 24px; } `; const CardName = styled.div` font-weight: 500; font-size: 16px; display: flex; align-items: center; color: var(--ant-color-text); margin-bottom: 4px; gap: 16px; `; const Content = styled.div` display: flex; flex-direction: column; align-items: flex-start; margin-top: 12px; gap: 16px; color: var(--ant-color-text-secondary); .description { margin-block: 12px; color: var(--ant-color-text-tertiary); } .text { margin-left: 4px; color: var(--ant-color-text); } .title { color: var(--ant-color-text); font-weight: 500; line-height: 1.5; } .info { display: grid; grid-template-columns: max-content 1fr; align-items: center; gap: 8px; color: var(--ant-color-text-tertiary); .icon { color: var(--ant-color-text-tertiary); } .label { display: flex; align-items: center; gap: 4px; } } `; const InfoItem = styled.div` display: grid; width: 100%; grid-template-columns: max-content 1fr; align-items: center; gap: 8px; color: var(--ant-color-text-tertiary); .icon { color: var(--ant-color-text-tertiary); } .label { display: flex; align-items: center; gap: 4px; } `; interface BackendCardProps { onClick?: (data: any) => void; onSelect?: (item: any) => void; data: ListItem; } const BackendCard: React.FC = ({ data, onSelect }) => { const intl = useIntl(); const handleOnSelect = (item: any) => { onSelect?.({ action: item.key, data: data }); }; const handleClick = () => { onSelect?.({ action: 'view_versions', data: data }); }; const renderIcon = () => { if (builtInBackendLogos[data.backend_name]) { return ; } const color = customColors[data.id % customColors.length]; const icon = customIcons[data.id % customIcons.length]; return ( {icon} ); }; const actions = useMemo(() => { if (data.is_built_in) { return backendActions.filter((item) => item.key !== 'delete'); } return backendActions.filter((item) => item.key !== 'view_versions'); }, [data.is_built_in]); const onClick = (e: React.MouseEvent) => { e.stopPropagation(); }; const renderTag = (item: any) => { return ( {item} ); }; const renderFrameworks = () => { const frameworks = _.keys(data.framework_index_map || {}); return ( {intl.formatMessage({ id: 'backend.availableFrameworks' })}:{' '} ); }; return (
{renderIcon()}
} > {data.backend_name} {data.is_built_in && ( {intl.formatMessage({ id: 'backend.builtin' })} )} {renderFrameworks()}
); }; export default BackendCard;