import useTableFetch from '@/hooks/use-table-fetch'; import { SyncOutlined } from '@ant-design/icons'; import { BaseSelect, IconFont, InfiniteScrollerProvider, NoResult, PageTools, TemplateCardList } from '@gpustack/core-ui'; import { useIntl } from '@umijs/max'; import useMemoizedFn from 'ahooks/lib/useMemoizedFn'; import { Button, Input, Space } from 'antd'; import React, { useCallback, useMemo } from 'react'; import PageBox from '../_components/page-box'; import { MY_MODELS_API, queryMyModels } from './apis'; import ModelItem from './components/model-item'; import { categoryOptions, MyModelsStatusValueMap } from './config'; const Dot = ({ color }: { color: string }) => { return ( ); }; const optionRender = (item: any) => { return ( {item.label} ); }; const UserModels: React.FC = () => { const { dataSource, queryParams, fetchData, handleSearch, handleQueryChange, handleNameChange } = useTableFetch({ fetchAPI: queryMyModels, API: MY_MODELS_API, watch: false, isInfiniteScroll: true, defaultQueryParams: { perPage: 24 } }); const intl = useIntl(); const statusOptions = useMemo(() => { return [ { value: MyModelsStatusValueMap.Active, color: 'var(--ant-color-success)', label: intl.formatMessage({ id: 'models.mymodels.status.active' }) }, { value: MyModelsStatusValueMap.Inactive, color: 'var(--ant-color-fill)', label: intl.formatMessage({ id: 'models.mymodels.status.inactive' }) }, { value: MyModelsStatusValueMap.Degrade, color: 'var(--ant-color-warning)', label: intl.formatMessage({ id: 'models.mymodels.status.degrade' }) } ]; }, [intl]); const handleCategoryChange = (value: string) => { handleQueryChange({ categories: value }); }; const renderCard = (data: any) => { return ; }; const loadMore = useMemoizedFn((nextPage: number) => { fetchData({ query: { ...queryParams, page: nextPage }, loadmore: true }); }); const handleStatusChange = (value: string) => { handleQueryChange({ state: value }); }; const labelRender = (item: any) => { const current = statusOptions.find((option) => option.value === item.value); return ( {item.label} ); }; const getStatus = useCallback((model: any) => { if (!model.targets && !model.ready_targets) { return MyModelsStatusValueMap.Inactive; } if (model.targets > 0 && !model.ready_targets) { return MyModelsStatusValueMap.Degrade; } if (model.ready_targets > 0 && model.targets > 0) { return MyModelsStatusValueMap.Active; } return MyModelsStatusValueMap.Degrade; }, []); const dataList = useMemo(() => { const result = dataSource.dataList.map((item) => { return { ...item, status: getStatus(item) }; }); return result; }, [dataSource.dataList]); return ( handleNameChange({ target: { value: '' } }) } onChange={handleNameChange} > } > } filters={{ ...queryParams }} noFoundText={intl.formatMessage({ id: 'noresult.mymodels.nofound' })} title={intl.formatMessage({ id: 'noresult.mymodels.title' })} subTitle={intl.formatMessage({ id: 'noresult.mymodels.subTitle' })} > ); }; export default UserModels;