| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| import { useCallback, useEffect } from 'react'; |
| import { useTranslation } from 'react-i18next'; |
| import { API, processModelsData, processGroupsData } from '../../helpers'; |
| import { API_ENDPOINTS } from '../../constants/playground.constants'; |
|
|
| export const useDataLoader = ( |
| userState, |
| inputs, |
| handleInputChange, |
| setModels, |
| setGroups, |
| ) => { |
| const { t } = useTranslation(); |
|
|
| const loadModels = useCallback(async () => { |
| try { |
| const res = await API.get(API_ENDPOINTS.USER_MODELS); |
| const { success, message, data } = res.data; |
|
|
| if (success) { |
| const { modelOptions, selectedModel } = processModelsData( |
| data, |
| inputs.model, |
| ); |
| setModels(modelOptions); |
|
|
| if (selectedModel !== inputs.model) { |
| handleInputChange('model', selectedModel); |
| } |
| } else { |
| showError(t(message)); |
| } |
| } catch (error) { |
| showError(t('加载模型失败')); |
| } |
| }, [inputs.model, handleInputChange, setModels, t]); |
|
|
| const loadGroups = useCallback(async () => { |
| try { |
| const res = await API.get(API_ENDPOINTS.USER_GROUPS); |
| const { success, message, data } = res.data; |
|
|
| if (success) { |
| const userGroup = |
| userState?.user?.group || |
| JSON.parse(localStorage.getItem('user'))?.group; |
| const groupOptions = processGroupsData(data, userGroup); |
| setGroups(groupOptions); |
|
|
| const hasCurrentGroup = groupOptions.some( |
| (option) => option.value === inputs.group, |
| ); |
| if (!hasCurrentGroup) { |
| handleInputChange('group', groupOptions[0]?.value || ''); |
| } |
| } else { |
| showError(t(message)); |
| } |
| } catch (error) { |
| showError(t('加载分组失败')); |
| } |
| }, [userState, inputs.group, handleInputChange, setGroups, t]); |
|
|
| |
| useEffect(() => { |
| if (userState?.user) { |
| loadModels(); |
| loadGroups(); |
| } |
| }, [userState?.user, loadModels, loadGroups]); |
|
|
| return { |
| loadModels, |
| loadGroups, |
| }; |
| }; |
|
|