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]);
const handleRefresh = () => {
fetchData({
query: { ...queryParams, page: 1 }
});
};
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;