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(null); const instanceViewRef = useRef(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 (
{intl.formatMessage({ id: 'menu.models.deployment' })} }, { label: intl.formatMessage({ id: 'models.table.instanceView' }), value: TabsValueMap.InstanceView, icon: } ]} value={activeKey} onChange={handleTabChange} >
); }, [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 ( <> {title} <>} items={[ { key: TabsValueMap.ModelView, label: intl.formatMessage({ id: 'models.table.modelView' }), children: }, { key: TabsValueMap.InstanceView, label: intl.formatMessage({ id: 'models.table.instanceView' }), children: } ]} activeKey={activeKey} > ); }; export default LLModels;