import PageTools from '@/components/page-tools'; import { PageAction } from '@/config'; import breakpoints from '@/config/breakpoints'; import { SyncOutlined } from '@ant-design/icons'; import { PageContainer } from '@ant-design/pro-components'; import { useIntl, useNavigate } from '@umijs/max'; import { Button, Col, Input, Pagination, Row, Select, Space, message } from 'antd'; import _ from 'lodash'; import ResizeObserver from 'rc-resize-observer'; import React, { useCallback, useEffect, useState } from 'react'; import { createModel, queryCatalogList } from './apis'; import CatalogItem from './components/catalog-item'; import DelopyBuiltInModal from './components/deploy-builtin-modal'; import { modelCategories, modelSourceMap } from './config'; import { CatalogItem as CatalogItemType, FormData } from './config/types'; const Catalog: React.FC = () => { const intl = useIntl(); const navigate = useNavigate(); const [span, setSpan] = React.useState(8); const [activeId, setActiveId] = React.useState(-1); const [dataSource, setDataSource] = useState<{ dataList: CatalogItemType[]; loading: boolean; total: number; }>({ dataList: [], loading: false, total: 0 }); const [queryParams, setQueryParams] = useState({ page: 1, perPage: 9, search: '', categories: [] }); const [openDeployModal, setOpenDeployModal] = useState({ show: false, width: 600, current: {}, source: modelSourceMap.huggingface_value }); const fetchData = useCallback(async () => { setDataSource((pre) => { pre.loading = true; return { ...pre }; }); try { const params = { ..._.pickBy(queryParams, (val: any) => !!val) }; const res: any = await queryCatalogList(params); setDataSource({ dataList: res.items, loading: false, total: res.pagination.total }); } catch (error) { setDataSource({ dataList: [], loading: false, total: dataSource.total }); console.log('error', error); } }, [queryParams]); const handleDeployModalCancel = () => { setOpenDeployModal({ ...openDeployModal, show: false }); setActiveId(-1); }; const handleResize = useCallback( _.throttle((size: { width: number; height: number }) => { const { width } = size; if (width < breakpoints.xs) { setSpan(24); } else if (width < breakpoints.sm) { setSpan(24); } else if (width < breakpoints.md) { setSpan(12); } else if (width < breakpoints.lg) { setSpan(12); } else { setSpan(8); } }, 100), [] ); const handleOnDeploy = useCallback((item: CatalogItemType) => { setActiveId(item.id); setOpenDeployModal({ show: true, source: modelSourceMap.huggingface_value, current: item, width: 600 }); }, []); const handleCreateModel = useCallback( async (data: FormData) => { try { console.log('data:', data, openDeployModal); const modelData = await createModel({ data: { ..._.omit(data, ['size', 'quantization']) } }); setOpenDeployModal({ ...openDeployModal, show: false }); message.success(intl.formatMessage({ id: 'common.message.success' })); navigate('/models/list'); } catch (error) {} }, [openDeployModal] ); const handleOnPageChange = useCallback( (page: number, pageSize?: number) => { setQueryParams({ ...queryParams, page, perPage: pageSize || 10 }); }, [queryParams] ); const handleSearch = (e: any) => { fetchData(); }; const handleNameChange = _.debounce((e: any) => { setQueryParams({ ...queryParams, page: 1, search: e.target.value }); }, 350); const handleCategoryChange = (value: any) => { setQueryParams({ ...queryParams, page: 1, categories: value }); }; useEffect(() => { fetchData(); }, [queryParams]); return ( } > {dataSource.dataList.map((item: CatalogItemType, index) => { return ( ); })}
); }; export default Catalog;