LibreChat/client/src/App.jsx

110 lines
3 KiB
React
Raw Normal View History

2023-04-02 12:48:52 -07:00
import { useEffect } from 'react';
import { createBrowserRouter, RouterProvider, Navigate } from 'react-router-dom';
import Root from './routes/Root';
import Chat from './routes/Chat';
import Search from './routes/Search';
import store from './store';
import { useRecoilState, useSetRecoilState } from 'recoil';
2023-04-06 02:48:32 +08:00
import { ScreenshotProvider } from './utils/screenshotContext.jsx';
2023-04-02 12:48:52 -07:00
import { useGetSearchEnabledQuery, useGetUserQuery, useGetModelsQuery, useGetEndpointsQuery, useGetPresetsQuery} from '~/data-provider';
2023-02-04 19:19:53 -05:00
const router = createBrowserRouter([
{
path: '/',
element: <Root />,
children: [
{
index: true,
element: (
<Navigate
to="/chat/new"
replace={true}
/>
)
},
{
path: 'chat/:conversationId?',
element: <Chat />
},
{
path: 'search/:query?',
element: <Search />
}
]
}
]);
2023-03-21 19:31:57 -04:00
const App = () => {
const [user, setUser] = useRecoilState(store.user);
const setIsSearchEnabled = useSetRecoilState(store.isSearchEnabled);
const setEndpointsConfig = useSetRecoilState(store.endpointsConfig);
2023-04-02 04:15:07 +08:00
const setPresets = useSetRecoilState(store.presets);
2023-04-02 12:48:52 -07:00
const searchEnabledQuery = useGetSearchEnabledQuery();
const userQuery = useGetUserQuery();
const modelsQuery = useGetModelsQuery();
const endpointsQuery = useGetEndpointsQuery();
const presetsQuery = useGetPresetsQuery();
if(endpointsQuery.data) {
setEndpointsConfig(endpointsQuery.data);
} else if(endpointsQuery.isError) {
console.error("Failed to get endpoints", endpointsQuery.error);
window.location.href = '/auth/login';
}
2023-04-02 12:48:52 -07:00
if(presetsQuery.data) {
setPresets(presetsQuery.data);
} else if(presetsQuery.isError) {
console.error("Failed to get presets", presetsQuery.error);
window.location.href = '/auth/login';
}
2023-04-02 12:48:52 -07:00
useEffect(() => {
if (searchEnabledQuery.error) {
console.error("Failed to get search enabled", searchEnabledQuery.error);
}
if (searchEnabledQuery.data) {
setIsSearchEnabled(searchEnabledQuery.data);
}
}, [searchEnabledQuery.data, setIsSearchEnabled, searchEnabledQuery.error]);
2023-04-02 04:15:07 +08:00
2023-04-02 12:48:52 -07:00
useEffect(() => {
if (userQuery.error) {
console.error("Failed to get user", userQuery.error);
}
if (userQuery.data) {
setUser(userQuery.data);
}
}, [userQuery.data, setUser, userQuery.error]);
useEffect(() => {
const { data, error } = modelsQuery;
if (error) {
console.error("Failed to get models", error);
}
if (data) {
const filter = {
chatgpt: data?.hasOpenAI,
chatgptCustom: data?.hasOpenAI,
bingai: data?.hasBing,
sydney: data?.hasBing,
chatgptBrowser: data?.hasChatGpt
};
setModelsFilter(filter);
}
}, [modelsQuery.data, setModelsFilter, modelsQuery.error, modelsQuery]);
if (user)
return (
2023-04-02 12:48:52 -07:00
<RouterProvider router={router} />
);
2023-03-21 19:31:57 -04:00
else return <div className="flex h-screen"></div>;
2023-02-04 19:19:53 -05:00
};
2023-04-06 02:48:32 +08:00
export default () => (
<ScreenshotProvider>
<App />
</ScreenshotProvider>
);