import { useSetRecoilState } from 'recoil'; import { useEffect, useCallback } from 'react'; import { useQueryClient } from '@tanstack/react-query'; import type { TEndpointsConfig, TModelsConfig } from 'librechat-data-provider'; import { useGetEndpointsConfigOverride } from '~/data-provider'; import { QueryKeys } from 'librechat-data-provider'; import store from '~/store'; type TempOverrideType = Record & { endpointsConfig: TEndpointsConfig; modelsConfig: TModelsConfig; combinedOptions: unknown[]; combined: boolean; }; export default function useConfigOverride() { const setEndpointsQueryEnabled = useSetRecoilState(store.endpointsQueryEnabled); const overrideQuery = useGetEndpointsConfigOverride({ staleTime: Infinity, }); const queryClient = useQueryClient(); const handleOverride = useCallback( async (data: unknown | boolean) => { const { endpointsConfig, modelsConfig } = data as TempOverrideType; if (endpointsConfig) { setEndpointsQueryEnabled(false); await queryClient.cancelQueries([QueryKeys.endpoints]); queryClient.setQueryData([QueryKeys.endpoints], endpointsConfig); } if (modelsConfig) { await queryClient.cancelQueries([QueryKeys.models]); queryClient.setQueryData([QueryKeys.models], modelsConfig); } }, [queryClient, setEndpointsQueryEnabled], ); useEffect(() => { if (overrideQuery.data) { handleOverride(overrideQuery.data); } }, [overrideQuery.data, handleOverride]); }