balibabu
fix: disable sending messages if both application and conversation are empty and add loading to all pages (#134)
e55650e
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; | |
}; | |