/* Copyright (C) 2025 QuantumNous This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . For commercial licensing, please contact support@quantumnous.com */ 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, }; };