| | 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 |
| | }; |
| | }; |