Browse Source

refactor: 重构hooks

pull/192/head
cp3hnu 10 months ago
parent
commit
5a6e93aea3
36 changed files with 288 additions and 228 deletions
  1. +1
    -1
      react-ui/src/app.tsx
  2. +1
    -1
      react-ui/src/components/ParameterSelect/config.tsx
  3. +1
    -1
      react-ui/src/components/ParameterSelect/index.tsx
  4. +0
    -202
      react-ui/src/hooks/index.ts
  5. +0
    -0
      react-ui/src/hooks/useCacheState.ts
  6. +25
    -0
      react-ui/src/hooks/useCallbackState.ts
  7. +53
    -0
      react-ui/src/hooks/useCheck.ts
  8. +0
    -0
      react-ui/src/hooks/useComputingResource.ts
  9. +40
    -0
      react-ui/src/hooks/useDomSize.ts
  10. +0
    -0
      react-ui/src/hooks/useDraggable.ts
  11. +27
    -0
      react-ui/src/hooks/useEffectWhen.ts
  12. +24
    -0
      react-ui/src/hooks/useResetForm.ts
  13. +46
    -0
      react-ui/src/hooks/useSSE.ts
  14. +19
    -0
      react-ui/src/hooks/useStateRef.ts
  15. +26
    -0
      react-ui/src/hooks/useVisible.ts
  16. +1
    -1
      react-ui/src/pages/AutoML/components/ExperimentInstance/index.tsx
  17. +1
    -1
      react-ui/src/pages/AutoML/components/ExperimentList/index.tsx
  18. +1
    -1
      react-ui/src/pages/Dataset/components/ResourcePage/index.tsx
  19. +1
    -1
      react-ui/src/pages/DevelopmentEnvironment/List/index.tsx
  20. +2
    -1
      react-ui/src/pages/Experiment/Info/index.jsx
  21. +1
    -1
      react-ui/src/pages/Experiment/components/ExperimentInstance/index.tsx
  22. +1
    -1
      react-ui/src/pages/Experiment/components/LogGroup/index.tsx
  23. +1
    -1
      react-ui/src/pages/Experiment/index.jsx
  24. +1
    -1
      react-ui/src/pages/HyperParameter/components/HyperParameterBasic/index.tsx
  25. +2
    -2
      react-ui/src/pages/Mirror/Info/index.tsx
  26. +1
    -1
      react-ui/src/pages/Mirror/List/index.tsx
  27. +1
    -1
      react-ui/src/pages/Model/components/ModelEvolution/index.tsx
  28. +1
    -1
      react-ui/src/pages/Model/components/ModelMetrics/index.tsx
  29. +1
    -1
      react-ui/src/pages/ModelDeployment/List/index.tsx
  30. +2
    -2
      react-ui/src/pages/ModelDeployment/ServiceInfo/index.tsx
  31. +1
    -1
      react-ui/src/pages/ModelDeployment/components/VersionBasicInfo/index.tsx
  32. +1
    -1
      react-ui/src/pages/ModelDeployment/components/VersionCompareModal/index.tsx
  33. +2
    -1
      react-ui/src/pages/Pipeline/Info/index.jsx
  34. +1
    -1
      react-ui/src/pages/Pipeline/index.jsx
  35. +1
    -1
      react-ui/src/pages/Workspace/index.tsx
  36. +1
    -1
      react-ui/src/utils/ui.tsx

+ 1
- 1
react-ui/src/app.tsx View File

@@ -10,7 +10,7 @@ import '../public/fonts/font.css';
import { getAccessToken } from './access';
import ErrorBoundary from './components/ErrorBoundary';
import './dayjsConfig';
import { removeAllPageCacheState } from './hooks/pageCacheState';
import { removeAllPageCacheState } from './hooks/useCacheState';
import {
getRemoteMenu,
getRoutersInfo,


+ 1
- 1
react-ui/src/components/ParameterSelect/config.tsx View File

@@ -1,4 +1,4 @@
import { filterResourceStandard, resourceFieldNames } from '@/hooks/resource';
import { filterResourceStandard, resourceFieldNames } from '@/hooks/useComputingResource';
import { ServiceData } from '@/pages/ModelDeployment/types';
import { getDatasetList, getModelList } from '@/services/dataset/index.js';
import { getServiceListReq } from '@/services/modelDeployment';


+ 1
- 1
react-ui/src/components/ParameterSelect/index.tsx View File

@@ -4,7 +4,7 @@
* @Description: 参数下拉选择组件,支持资源规格、数据集、模型、服务
*/

import { useComputingResource } from '@/hooks/resource';
import { useComputingResource } from '@/hooks/useComputingResource';
import { to } from '@/utils/promise';
import { Select, type SelectProps } from 'antd';
import { useEffect, useState } from 'react';


+ 0
- 202
react-ui/src/hooks/index.ts View File

@@ -1,202 +0,0 @@
/*
* @Author: 赵伟
* @Date: 2024-04-15 10:01:29
* @Description: 自定义 hooks
*/
import { FormInstance } from 'antd';
import { debounce } from 'lodash';
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
/**
* 生成具有初始值的状态引用
*
* @param initialValue - 状态的初始值
* @return 包含状态值、状态设置函数和可变引用对象的数组
*/
export function useStateRef<T>(initialValue: T) {
const [value, setValue] = useState(initialValue);

const ref = useRef(value);

useEffect(() => {
ref.current = value;
}, [value]);

return [value, setValue, ref] as const;
}

/**
* 生成一个自定义钩子,用于管理模态框的可见性状态。
*
* @param initialValue - 模态框的初始可见性状态。
* @return 一个数组,包含可见性状态和打开和关闭模态框的函数。
*/
export function useVisible(initialValue: boolean) {
const [visible, setVisible] = useState(initialValue);
const ref = useRef(initialValue);

const open = useCallback(() => {
setVisible(true);
}, []);

const close = useCallback(() => {
setVisible(false);
}, []);

useEffect(() => {
ref.current = visible;
}, [visible]);

return [visible, open, close, ref] as const;
}

type Callback<T> = (state: T) => void;

/**
* 生成一个具有回调机制的可变状态值和更新它的函数。
*
* @param initialValue - 初始状态值。
* @return 一个元组,包含当前状态值和用于更新状态的函数。
*/
export function useCallbackState<T>(initialValue: T) {
const [state, _setState] = useState<T>(initialValue);
const callbackQueue = useRef<Callback<T>[]>([]);
useEffect(() => {
callbackQueue.current.forEach((cb) => cb(state));
callbackQueue.current = [];
}, [state]);
const setState = (newValue: T | ((prevState: T) => T), callback?: Callback<T>) => {
_setState(newValue);
if (callback && typeof callback === 'function') {
callbackQueue.current.push(callback);
}
};
return [state, setState] as const;
}

/**
* 用于追踪 DOM 元素尺寸的 hook。
*
* @param initialWidth - 初始宽度。
* @param initialHeight - 初始高度。
* @param deps - 依赖列表。
* @return 一个元组,包含 DOM 元素的 ref、当前宽度和当前高度。
*/
export function useDomSize<T extends HTMLElement>(
initialWidth: number,
initialHeight: number,
deps: React.DependencyList = [],
) {
const domRef = useRef<T>(null);
const [width, setWidth] = useState(initialWidth);
const [height, setHeight] = useState(initialHeight);

useEffect(() => {
const setDomHeight = () => {
if (domRef.current) {
setHeight(domRef.current.offsetHeight);
setWidth(domRef.current.offsetWidth);
}
};
const debounceFunc = debounce(setDomHeight, 100);

setDomHeight();
window.addEventListener('resize', debounceFunc);

return () => {
window.removeEventListener('resize', debounceFunc);
};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [domRef, ...deps]);

return [domRef, { width, height }] as const;
}

/**
* 用于在 modal 关闭时重置 Form 表单的 hook。
*
* @param form - Ant Design Form 表单实例
* @param open - modal 是否打开
*/
export const useResetFormOnCloseModal = (form: FormInstance, open: boolean) => {
const prevOpenRef = useRef<boolean>();

useEffect(() => {
prevOpenRef.current = open;
}, [open]);

const prevOpen = prevOpenRef.current;

useEffect(() => {
if (!open && prevOpen) {
form.resetFields();
}
}, [form, prevOpen, open]);
};

/**
* Executes the effect function when the specified condition is true.
*
* @param effect - The effect function to execute.
* @param when - The condition to trigger the effect.
* @param deps - The dependencies for the effect.
*/
export const useEffectWhen = (effect: () => void, when: boolean, deps: React.DependencyList) => {
const requestFns = useRef<(() => void)[]>([]);
useEffect(() => {
if (when) {
effect();
} else {
requestFns.current.splice(0, 1, effect);
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, deps);

useEffect(() => {
if (when) {
const fn = requestFns.current.pop();
fn?.();
}
}, [when]);
};

// 选择、全选操作
export const useCheck = <T>(list: T[]) => {
const [selected, setSelected] = useState<T[]>([]);

const checked = useMemo(() => {
return selected.length === list.length && selected.length > 0;
}, [selected, list]);

const indeterminate = useMemo(() => {
return selected.length > 0 && selected.length < list.length;
}, [selected, list]);

const checkAll = useCallback(() => {
setSelected(checked ? [] : list);
}, [list, checked]);

const isSingleChecked = useCallback((item: T) => selected.includes(item), [selected]);

const checkSingle = useCallback(
(item: T) => {
setSelected((prev) => {
if (isSingleChecked(item)) {
return prev.filter((i) => i !== item);
} else {
return [...prev, item];
}
});
},
[isSingleChecked],
);

return [
selected,
setSelected,
checked,
indeterminate,
checkAll,
isSingleChecked,
checkSingle,
] as const;
};

react-ui/src/hooks/pageCacheState.ts → react-ui/src/hooks/useCacheState.ts View File


+ 25
- 0
react-ui/src/hooks/useCallbackState.ts View File

@@ -0,0 +1,25 @@
import { useEffect, useRef, useState } from 'react';

type Callback<T> = (state: T) => void;

/**
* 生成一个具有回调机制的可变状态值和更新它的函数。谨慎使用
*
* @param initialValue - 初始状态值。
* @return 一个元组,包含当前状态值和用于更新状态的函数。
*/
export function useCallbackState<T>(initialValue: T) {
const [state, _setState] = useState<T>(initialValue);
const callbackQueue = useRef<Callback<T>[]>([]);
useEffect(() => {
callbackQueue.current.forEach((cb) => cb(state));
callbackQueue.current = [];
}, [state]);
const setState = (newValue: T | ((prevState: T) => T), callback?: Callback<T>) => {
_setState(newValue);
if (callback && typeof callback === 'function') {
callbackQueue.current.push(callback);
}
};
return [state, setState] as const;
}

+ 53
- 0
react-ui/src/hooks/useCheck.ts View File

@@ -0,0 +1,53 @@
import { useCallback, useMemo, useState } from 'react';

/**
* @description 选择、全选操作
* @param list 需要进行选择的列表
* @returns selected 选中的项
* setSelected 设置 selected 的方法
* checked 是否全选
* indeterminate 是否部分选中
* checkAll 全选
* isSingleChecked 是否单个选中
* checkSingle 单个选中
*/
export const useCheck = <T>(list: T[]) => {
const [selected, setSelected] = useState<T[]>([]);

const checked = useMemo(() => {
return selected.length === list.length && selected.length > 0;
}, [selected, list]);

const indeterminate = useMemo(() => {
return selected.length > 0 && selected.length < list.length;
}, [selected, list]);

const checkAll = useCallback(() => {
setSelected(checked ? [] : list);
}, [list, checked]);

const isSingleChecked = useCallback((item: T) => selected.includes(item), [selected]);

const checkSingle = useCallback(
(item: T) => {
setSelected((prev) => {
if (isSingleChecked(item)) {
return prev.filter((i) => i !== item);
} else {
return [...prev, item];
}
});
},
[isSingleChecked],
);

return [
selected,
setSelected,
checked,
indeterminate,
checkAll,
isSingleChecked,
checkSingle,
] as const;
};

react-ui/src/hooks/resource.ts → react-ui/src/hooks/useComputingResource.ts View File


+ 40
- 0
react-ui/src/hooks/useDomSize.ts View File

@@ -0,0 +1,40 @@
import { debounce } from 'lodash';
import { useEffect, useRef, useState } from 'react';

/**
* 用于追踪 DOM 元素尺寸的 hook。
*
* @param initialWidth - 初始宽度。
* @param initialHeight - 初始高度。
* @param deps - 依赖列表。
* @return 一个元组,包含 DOM 元素的 ref、当前宽度和当前高度。
*/
export function useDomSize<T extends HTMLElement>(
initialWidth: number,
initialHeight: number,
deps: React.DependencyList = [],
) {
const domRef = useRef<T>(null);
const [width, setWidth] = useState(initialWidth);
const [height, setHeight] = useState(initialHeight);

useEffect(() => {
const setDomHeight = () => {
if (domRef.current) {
setHeight(domRef.current.offsetHeight);
setWidth(domRef.current.offsetWidth);
}
};
const debounceFunc = debounce(setDomHeight, 100);

setDomHeight();
window.addEventListener('resize', debounceFunc);

return () => {
window.removeEventListener('resize', debounceFunc);
};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, deps);

return [domRef, { width, height }] as const;
}

react-ui/src/hooks/draggable.ts → react-ui/src/hooks/useDraggable.ts View File


+ 27
- 0
react-ui/src/hooks/useEffectWhen.ts View File

@@ -0,0 +1,27 @@
import { useEffect, useRef } from 'react';

/**
* 当指定的条件为真时执行 Effect 函数。
*
* @param effect - The effect function to execute.
* @param when - The condition to trigger the effect.
* @param deps - The dependencies for the effect.
*/
export const useEffectWhen = (effect: () => void, when: boolean, deps: React.DependencyList) => {
const requestFns = useRef<(() => void)[]>([]);
useEffect(() => {
if (when) {
effect();
} else {
requestFns.current.splice(0, 1, effect);
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, deps);

useEffect(() => {
if (when) {
const fn = requestFns.current.pop();
fn?.();
}
}, [when]);
};

+ 24
- 0
react-ui/src/hooks/useResetForm.ts View File

@@ -0,0 +1,24 @@
import { FormInstance } from 'antd';
import { useEffect, useRef } from 'react';

/**
* 用于在 modal 关闭时重置 Form 表单的 hook。
*
* @param form - Ant Design Form 表单实例
* @param open - modal 是否打开
*/
export const useResetForm = (form: FormInstance, open: boolean) => {
const prevOpenRef = useRef<boolean>();

useEffect(() => {
prevOpenRef.current = open;
}, [open]);

const prevOpen = prevOpenRef.current;

useEffect(() => {
if (!open && prevOpen) {
form.resetFields();
}
}, [form, prevOpen, open]);
};

+ 46
- 0
react-ui/src/hooks/useSSE.ts View File

@@ -0,0 +1,46 @@
import { parseJsonText } from '@/utils';
import { useCallback, useRef } from 'react';

export const useSSE = (onMessage: (data: any) => void) => {
const evtSourceRef = useRef<EventSource | null>(null);

const setupSSE = useCallback(
(name: string, namespace: string) => {
const { origin } = location;
const params = encodeURIComponent(`metadata.namespace=${namespace},metadata.name=${name}`);
const evtSource = new EventSource(
`${origin}/api/v1/realtimeStatus?listOptions.fieldSelector=${params}`,
{ withCredentials: false },
);
evtSource.onmessage = (event) => {
const data = event?.data;
if (!data) {
return;
}
const dataJson = parseJsonText(data);
if (dataJson) {
const nodes = dataJson?.result?.object?.status?.nodes;
if (nodes) {
onMessage(nodes);
}
}
};

evtSource.onerror = (error) => {
console.error('SSE error: ', error);
};

evtSourceRef.current = evtSource;
},
[onMessage],
);

const closeSSE = useCallback(() => {
if (evtSourceRef.current) {
evtSourceRef.current.close();
evtSourceRef.current = null;
}
}, []);

return [setupSSE, closeSSE];
};

+ 19
- 0
react-ui/src/hooks/useStateRef.ts View File

@@ -0,0 +1,19 @@
import { useEffect, useRef, useState } from 'react';

/**
* 生成具有初始值的状态引用
*
* @param initialValue - 状态的初始值
* @return 包含状态值、状态设置函数和可变引用对象的数组
*/
export function useStateRef<T>(initialValue: T) {
const [value, setValue] = useState(initialValue);

const ref = useRef(value);

useEffect(() => {
ref.current = value;
}, [value]);

return [value, setValue, ref] as const;
}

+ 26
- 0
react-ui/src/hooks/useVisible.ts View File

@@ -0,0 +1,26 @@
import { useCallback, useEffect, useRef, useState } from 'react';

/**
* 生成一个自定义钩子,用于管理模态框的可见性状态。
*
* @param initialValue - 模态框的初始可见性状态。
* @return 一个数组,包含 visible、打开函数、关闭函数和 visible ref。
*/
export function useVisible(initialValue: boolean) {
const [visible, setVisible] = useState(initialValue);
const ref = useRef(initialValue);

const open = useCallback(() => {
setVisible(true);
}, []);

const close = useCallback(() => {
setVisible(false);
}, []);

useEffect(() => {
ref.current = visible;
}, [visible]);

return [visible, open, close, ref] as const;
}

+ 1
- 1
react-ui/src/pages/AutoML/components/ExperimentInstance/index.tsx View File

@@ -1,6 +1,6 @@
import KFIcon from '@/components/KFIcon';
import { ExperimentStatus } from '@/enums';
import { useCheck } from '@/hooks';
import { useCheck } from '@/hooks/useCheck';
import { experimentStatusInfo } from '@/pages/Experiment/status';
import themes from '@/styles/theme.less';
import { type ExperimentInstance } from '@/types';


+ 1
- 1
react-ui/src/pages/AutoML/components/ExperimentList/index.tsx View File

@@ -7,7 +7,7 @@
import KFIcon from '@/components/KFIcon';
import PageTitle from '@/components/PageTitle';
import { ExperimentStatus } from '@/enums';
import { useCacheState } from '@/hooks/pageCacheState';
import { useCacheState } from '@/hooks/useCacheState';
import { AutoMLData } from '@/pages/AutoML/types';
import { experimentStatusInfo } from '@/pages/Experiment/status';
import themes from '@/styles/theme.less';


+ 1
- 1
react-ui/src/pages/Dataset/components/ResourcePage/index.tsx View File

@@ -1,5 +1,5 @@
import { CommonTabKeys } from '@/enums';
import { useCacheState } from '@/hooks/pageCacheState';
import { useCacheState } from '@/hooks/useCacheState';
import { getAssetIcon } from '@/services/dataset/index.js';
import { to } from '@/utils/promise';
import { Flex, Tabs, type TabsProps } from 'antd';


+ 1
- 1
react-ui/src/pages/DevelopmentEnvironment/List/index.tsx View File

@@ -6,7 +6,7 @@

import KFIcon from '@/components/KFIcon';
import { DevEditorStatus } from '@/enums';
import { useCacheState } from '@/hooks/pageCacheState';
import { useCacheState } from '@/hooks/useCacheState';
import {
deleteEditorReq,
getEditorListReq,


+ 2
- 1
react-ui/src/pages/Experiment/Info/index.jsx View File

@@ -1,5 +1,6 @@
import { ExperimentStatus } from '@/enums';
import { useStateRef, useVisible } from '@/hooks';
import { useStateRef } from '@/hooks/useStateRef';
import { useVisible } from '@/hooks/useVisible';
import { getExperimentIns } from '@/services/experiment/index.js';
import { getWorkflowById } from '@/services/pipeline/index.js';
import themes from '@/styles/theme.less';


+ 1
- 1
react-ui/src/pages/Experiment/components/ExperimentInstance/index.tsx View File

@@ -1,6 +1,6 @@
import KFIcon from '@/components/KFIcon';
import { ExperimentStatus } from '@/enums';
import { useCheck } from '@/hooks';
import { useCheck } from '@/hooks/useCheck';
import { experimentStatusInfo } from '@/pages/Experiment/status';
import {
deleteManyExperimentIns,


+ 1
- 1
react-ui/src/pages/Experiment/components/LogGroup/index.tsx View File

@@ -5,7 +5,7 @@
*/

import { ExperimentStatus } from '@/enums';
import { useStateRef } from '@/hooks';
import { useStateRef } from '@/hooks/useStateRef';
import { getExperimentPodsLog } from '@/services/experiment/index.js';
import { DoubleRightOutlined, DownOutlined, UpOutlined } from '@ant-design/icons';
import { Button } from 'antd';


+ 1
- 1
react-ui/src/pages/Experiment/index.jsx View File

@@ -1,7 +1,7 @@
import KFIcon from '@/components/KFIcon';
import PageTitle from '@/components/PageTitle';
import { ExperimentStatus, TensorBoardStatus } from '@/enums';
import { useCacheState } from '@/hooks/pageCacheState';
import { useCacheState } from '@/hooks/useCacheState';
import {
deleteExperimentById,
getExperiment,


+ 1
- 1
react-ui/src/pages/HyperParameter/components/HyperParameterBasic/index.tsx View File

@@ -1,6 +1,6 @@
import ConfigInfo, { type BasicInfoData } from '@/components/ConfigInfo';
import { hyperParameterOptimizedMode } from '@/enums';
import { useComputingResource } from '@/hooks/resource';
import { useComputingResource } from '@/hooks/useComputingResource';
import { experimentStatusInfo } from '@/pages/Experiment/status';
import {
schedulerAlgorithms,


+ 2
- 2
react-ui/src/pages/Mirror/Info/index.tsx View File

@@ -7,8 +7,8 @@ import KFIcon from '@/components/KFIcon';
import PageTitle from '@/components/PageTitle';
import SubAreaTitle from '@/components/SubAreaTitle';
import { MirrorVersionStatus } from '@/enums';
import { useDomSize } from '@/hooks';
import { useCacheState } from '@/hooks/pageCacheState';
import { useCacheState } from '@/hooks/useCacheState';
import { useDomSize } from '@/hooks/useDomSize';
import {
deleteMirrorVersionReq,
getMirrorInfoReq,


+ 1
- 1
react-ui/src/pages/Mirror/List/index.tsx View File

@@ -5,7 +5,7 @@
*/
import KFIcon from '@/components/KFIcon';
import { CommonTabKeys } from '@/enums';
import { useCacheState } from '@/hooks/pageCacheState';
import { useCacheState } from '@/hooks/useCacheState';
import { deleteMirrorReq, getMirrorListReq } from '@/services/mirror';
import themes from '@/styles/theme.less';
import { to } from '@/utils/promise';


+ 1
- 1
react-ui/src/pages/Model/components/ModelEvolution/index.tsx View File

@@ -4,7 +4,7 @@
* @Description: 模型演化
*/

import { useEffectWhen } from '@/hooks';
import { useEffectWhen } from '@/hooks/useEffectWhen';
import { getModelAtlasReq } from '@/services/dataset/index.js';
import themes from '@/styles/theme.less';
import { to } from '@/utils/promise';


+ 1
- 1
react-ui/src/pages/Model/components/ModelMetrics/index.tsx View File

@@ -1,6 +1,6 @@
import SubAreaTitle from '@/components/SubAreaTitle';
import TableColTitle from '@/components/TableColTitle';
import { useCheck } from '@/hooks';
import { useCheck } from '@/hooks/useCheck';
import { getModelPageVersionsReq, getModelVersionsMetricsReq } from '@/services/dataset';
import { tableSorter } from '@/utils';
import { to } from '@/utils/promise';


+ 1
- 1
react-ui/src/pages/ModelDeployment/List/index.tsx View File

@@ -6,7 +6,7 @@
import KFIcon from '@/components/KFIcon';
import PageTitle from '@/components/PageTitle';
import { serviceTypeOptions } from '@/enums';
import { useCacheState } from '@/hooks/pageCacheState';
import { useCacheState } from '@/hooks/useCacheState';
import { deleteServiceReq, getServiceListReq } from '@/services/modelDeployment';
import themes from '@/styles/theme.less';
import { to } from '@/utils/promise';


+ 2
- 2
react-ui/src/pages/ModelDeployment/ServiceInfo/index.tsx View File

@@ -8,8 +8,8 @@ import KFIcon from '@/components/KFIcon';
import PageTitle from '@/components/PageTitle';
import SubAreaTitle from '@/components/SubAreaTitle';
import { ServiceRunStatus, serviceStatusOptions } from '@/enums';
import { useCacheState } from '@/hooks/pageCacheState';
import { useComputingResource } from '@/hooks/resource';
import { useCacheState } from '@/hooks/useCacheState';
import { useComputingResource } from '@/hooks/useComputingResource';
import {
deleteServiceVersionReq,
getServiceInfoReq,


+ 1
- 1
react-ui/src/pages/ModelDeployment/components/VersionBasicInfo/index.tsx View File

@@ -1,6 +1,6 @@
import BasicInfo, { type BasicInfoData } from '@/components/BasicInfo';
import { ServiceRunStatus } from '@/enums';
import { useComputingResource } from '@/hooks/resource';
import { useComputingResource } from '@/hooks/useComputingResource';
import { ServiceVersionData } from '@/pages/ModelDeployment/types';
import { formatDate } from '@/utils/date';
import { formatCodeConfig, formatModel } from '@/utils/format';


+ 1
- 1
react-ui/src/pages/ModelDeployment/components/VersionCompareModal/index.tsx View File

@@ -1,6 +1,6 @@
import KFModal from '@/components/KFModal';
import { ServiceRunStatus } from '@/enums';
import { useComputingResource } from '@/hooks/resource';
import { useComputingResource } from '@/hooks/useComputingResource';
import { type ServiceVersionData } from '@/pages/ModelDeployment/types';
import { getServiceVersionCompareReq } from '@/services/modelDeployment';
import { isEmpty } from '@/utils';


+ 2
- 1
react-ui/src/pages/Pipeline/Info/index.jsx View File

@@ -1,5 +1,6 @@
import KFIcon from '@/components/KFIcon';
import { useStateRef, useVisible } from '@/hooks';
import { useStateRef } from '@/hooks/useStateRef';
import { useVisible } from '@/hooks/useVisible';
import { getWorkflowById, saveWorkflow } from '@/services/pipeline/index.js';
import themes from '@/styles/theme.less';
import { fittingString, parseJsonText, s8 } from '@/utils';


+ 1
- 1
react-ui/src/pages/Pipeline/index.jsx View File

@@ -1,7 +1,7 @@
import KFIcon from '@/components/KFIcon';
import KFModal from '@/components/KFModal';
import PageTitle from '@/components/PageTitle';
import { useCacheState } from '@/hooks/pageCacheState';
import { useCacheState } from '@/hooks/useCacheState';
import {
addWorkflow,
cloneWorkflow,


+ 1
- 1
react-ui/src/pages/Workspace/index.tsx View File

@@ -1,4 +1,4 @@
import { useDraggable } from '@/hooks/draggable';
import { useDraggable } from '@/hooks/useDraggable';
import { getWorkspaceOverviewReq } from '@/services/workspace';
import { ExperimentInstance } from '@/types';
import { to } from '@/utils/promise';


+ 1
- 1
react-ui/src/utils/ui.tsx View File

@@ -4,7 +4,7 @@
* @Description: UI 公共方法
*/
import { PageEnum } from '@/enums/pagesEnums';
import { removeAllPageCacheState } from '@/hooks/pageCacheState';
import { removeAllPageCacheState } from '@/hooks/useCacheState';
import themes from '@/styles/theme.less';
import { type ClientInfo } from '@/types';
import { history } from '@umijs/max';


Loading…
Cancel
Save