import fallbackImg from '@/assets/images/img.png'; import { categoryConfig } from '@/pages/_components/model-tag'; import { AutoTooltip, IconFont, ThemeTag } from '@gpustack/core-ui'; import { useIntl } from '@umijs/max'; import { Typography } from 'antd'; import classNames from 'classnames'; import _ from 'lodash'; import React, { useCallback, useMemo } from 'react'; import { modelCategories } from '../../config'; import { CatalogItem as CatalogItemType } from '../../config/types'; import '../../style/catalog-item.less'; interface CatalogItemProps { activeId: number; data: CatalogItemType; onClick: (data: CatalogItemType) => void; } const CatalogItem: React.FC = (props) => { const intl = useIntl(); const { onClick, activeId, data } = props; const handleOnClick = useCallback(() => { onClick(data); }, [data, onClick]); const handleOnError = (e: any) => { e.target.src = fallbackImg; }; const description = useMemo(() => { return ( {data.description} ) }} > {data.description} ); }, [data.description]); return (
{data.name}
{data.release_date} {_.map(data.licenses, (license: string, index: number) => { return ( {license} ); })}
{data.categories.map((sItem, i) => { return ( {_.find(modelCategories, { value: sItem })?.label || sItem} ); })} {data.capabilities?.length > 0 && data.capabilities.map((sItem, i) => { return ( {_.map(_.split(sItem, '/'), (s: string) => { return _.split(s, '_').join(' '); }) .reverse() .join(' ')} ); })} {data.size > 0 && ( <> {data.activated_size ? `${data.size}${data.size_unit || 'B'}-A${data.activated_size}B` : `${data.size}${data.size_unit || 'B'}`} )}
); }; export default CatalogItem;