balibabu
fix: disable sending messages if both application and conversation are empty and add loading to all pages (#134)
e55650e
raw
history blame
3.22 kB
import { useSetModalState } from '@/hooks/commonHooks';
import {
IApiKeySavingParams,
ISystemModelSettingSavingParams,
useFetchLlmList,
useSaveApiKey,
useSaveTenantInfo,
useSelectLlmOptionsByModelType,
} from '@/hooks/llmHooks';
import { useOneNamespaceEffectsLoading } from '@/hooks/storeHooks';
import {
useFetchTenantInfo,
useSelectTenantInfo,
} from '@/hooks/userSettingHook';
import { useCallback, useEffect, useState } from 'react';
type SavingParamsState = Omit<IApiKeySavingParams, 'api_key'>;
export const useSubmitApiKey = () => {
const [savingParams, setSavingParams] = useState<SavingParamsState>(
{} as SavingParamsState,
);
const saveApiKey = useSaveApiKey();
const {
visible: apiKeyVisible,
hideModal: hideApiKeyModal,
showModal: showApiKeyModal,
} = useSetModalState();
const onApiKeySavingOk = useCallback(
async (apiKey: string) => {
const ret = await saveApiKey({ ...savingParams, api_key: apiKey });
if (ret === 0) {
hideApiKeyModal();
}
},
[hideApiKeyModal, saveApiKey, savingParams],
);
const onShowApiKeyModal = useCallback(
(savingParams: SavingParamsState) => {
setSavingParams(savingParams);
showApiKeyModal();
},
[showApiKeyModal, setSavingParams],
);
const loading = useOneNamespaceEffectsLoading('settingModel', [
'set_api_key',
]);
return {
saveApiKeyLoading: loading,
initialApiKey: '',
onApiKeySavingOk,
apiKeyVisible,
hideApiKeyModal,
showApiKeyModal: onShowApiKeyModal,
};
};
export const useSubmitSystemModelSetting = () => {
const systemSetting = useSelectTenantInfo();
const loading = useOneNamespaceEffectsLoading('settingModel', [
'set_tenant_info',
]);
const saveSystemModelSetting = useSaveTenantInfo();
const {
visible: systemSettingVisible,
hideModal: hideSystemSettingModal,
showModal: showSystemSettingModal,
} = useSetModalState();
const onSystemSettingSavingOk = useCallback(
async (
payload: Omit<ISystemModelSettingSavingParams, 'tenant_id' | 'name'>,
) => {
const ret = await saveSystemModelSetting({
tenant_id: systemSetting.tenant_id,
name: systemSetting.name,
...payload,
});
if (ret === 0) {
hideSystemSettingModal();
}
},
[hideSystemSettingModal, saveSystemModelSetting, systemSetting],
);
return {
saveSystemModelSettingLoading: loading,
onSystemSettingSavingOk,
systemSettingVisible,
hideSystemSettingModal,
showSystemSettingModal,
};
};
export const useFetchSystemModelSettingOnMount = (visible: boolean) => {
const systemSetting = useSelectTenantInfo();
const allOptions = useSelectLlmOptionsByModelType();
const fetchLlmList = useFetchLlmList();
const fetchTenantInfo = useFetchTenantInfo();
useEffect(() => {
if (visible) {
fetchLlmList();
fetchTenantInfo();
}
}, [fetchLlmList, fetchTenantInfo, visible]);
return { systemSetting, allOptions };
};
export const useSelectModelProvidersLoading = () => {
const loading = useOneNamespaceEffectsLoading('settingModel', [
'my_llm',
'factories_list',
]);
return loading;
};