145 lines
4.3 KiB
TypeScript
145 lines
4.3 KiB
TypeScript
import {
|
|
HeaderLeft,
|
|
usePageContentStyle
|
|
} from '@/pages/_components/page-box';
|
|
import { IconFont } from '@gpustack/core-ui';
|
|
import { useIntl } from '@umijs/max';
|
|
import { useMemoizedFn } from 'ahooks';
|
|
import { Segmented, Tabs } from 'antd';
|
|
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
import { DeploymentsContext } from './config/deploments-context';
|
|
import ModelView from './deployments';
|
|
import useFormInitialValues from './hooks/use-form-initial-values';
|
|
import InstanceView from './instance-view';
|
|
|
|
const TabsValueMap = {
|
|
ModelView: 'modelView',
|
|
InstanceView: 'instanceView'
|
|
};
|
|
|
|
const LLModels: React.FC = () => {
|
|
const intl = useIntl();
|
|
const {
|
|
generateFormValues,
|
|
clusterList,
|
|
getClusterList,
|
|
getWorkerList,
|
|
workerList
|
|
} = useFormInitialValues();
|
|
const [activeKey, setActiveKey] = useState(TabsValueMap.ModelView);
|
|
const modelViewRef = useRef<any>(null);
|
|
const instanceViewRef = useRef<any>(null);
|
|
|
|
useEffect(() => {
|
|
const getData = async () => {
|
|
await Promise.all([getClusterList(), getWorkerList()]);
|
|
};
|
|
getData();
|
|
}, []);
|
|
|
|
const handleTabChange = useMemoizedFn((key: string) => {
|
|
if (key === TabsValueMap.ModelView) {
|
|
modelViewRef.current?.resumeRequestsOnPageActive();
|
|
instanceViewRef.current?.cancelRequestsOnPageInactive();
|
|
}
|
|
if (key === TabsValueMap.InstanceView) {
|
|
instanceViewRef.current?.resumeRequestsOnPageActive();
|
|
modelViewRef.current?.cancelRequestsOnPageInactive();
|
|
}
|
|
setActiveKey(key);
|
|
});
|
|
|
|
const title = useMemo(() => {
|
|
return (
|
|
<div className="flex items-center">
|
|
<span className="font-600 flex-center">
|
|
{intl.formatMessage({ id: 'menu.models.deployment' })}
|
|
</span>
|
|
<Segmented
|
|
shape="round"
|
|
style={{
|
|
backgroundColor: 'var(--ant-color-fill-secondary)',
|
|
fontSize: 13
|
|
}}
|
|
size="middle"
|
|
className="m-l-24 font-400"
|
|
options={[
|
|
{
|
|
label: intl.formatMessage({ id: 'models.table.modelView' }),
|
|
value: TabsValueMap.ModelView,
|
|
icon: <IconFont type={'icon-models'}></IconFont>
|
|
},
|
|
{
|
|
label: intl.formatMessage({ id: 'models.table.instanceView' }),
|
|
value: TabsValueMap.InstanceView,
|
|
icon: <IconFont type={'icon-instance-outline'}></IconFont>
|
|
}
|
|
]}
|
|
value={activeKey}
|
|
onChange={handleTabChange}
|
|
></Segmented>
|
|
</div>
|
|
);
|
|
}, [activeKey, intl]);
|
|
|
|
useEffect(() => {
|
|
const handleVisibilityChange = async () => {
|
|
if (document.visibilityState === 'visible') {
|
|
if (activeKey === TabsValueMap.ModelView) {
|
|
modelViewRef.current?.resumeRequestsOnPageActive();
|
|
}
|
|
if (activeKey === TabsValueMap.InstanceView) {
|
|
instanceViewRef.current?.resumeRequestsOnPageActive();
|
|
}
|
|
} else {
|
|
if (activeKey === TabsValueMap.ModelView) {
|
|
modelViewRef.current?.cancelRequestsOnPageInactive();
|
|
}
|
|
if (activeKey === TabsValueMap.InstanceView) {
|
|
instanceViewRef.current?.cancelRequestsOnPageInactive();
|
|
}
|
|
}
|
|
};
|
|
|
|
document.addEventListener('visibilitychange', handleVisibilityChange);
|
|
|
|
return () => {
|
|
document.removeEventListener('visibilitychange', handleVisibilityChange);
|
|
};
|
|
}, [activeKey]);
|
|
|
|
usePageContentStyle({ padding: 0 });
|
|
|
|
return (
|
|
<>
|
|
<HeaderLeft>{title}</HeaderLeft>
|
|
<DeploymentsContext.Provider
|
|
value={{
|
|
generateFormValues,
|
|
clusterList,
|
|
workerList
|
|
}}
|
|
>
|
|
<Tabs
|
|
renderTabBar={() => <></>}
|
|
items={[
|
|
{
|
|
key: TabsValueMap.ModelView,
|
|
label: intl.formatMessage({ id: 'models.table.modelView' }),
|
|
children: <ModelView ref={modelViewRef}></ModelView>
|
|
},
|
|
{
|
|
key: TabsValueMap.InstanceView,
|
|
label: intl.formatMessage({ id: 'models.table.instanceView' }),
|
|
children: <InstanceView ref={instanceViewRef}></InstanceView>
|
|
}
|
|
]}
|
|
activeKey={activeKey}
|
|
></Tabs>
|
|
</DeploymentsContext.Provider>
|
|
</>
|
|
);
|
|
};
|
|
|
|
export default LLModels;
|