LibreChat/client/src/App.jsx

101 lines
2.2 KiB
React
Raw Normal View History

import React, { useEffect, useState } 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';
2023-03-21 19:31:57 -04:00
import userAuth from './utils/userAuth';
import { useRecoilState, useSetRecoilState } from 'recoil';
import axios from 'axios';
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-03-21 19:31:57 -04:00
useEffect(() => {
// fetch if seatch enabled
axios
.get('/api/search/enable', {
timeout: 1000,
withCredentials: true
})
.then(res => {
setIsSearchEnabled(res.data);
});
// fetch user
2023-03-21 19:31:57 -04:00
userAuth()
.then(user => setUser(user))
.catch(err => console.log(err));
// fetch models
axios
2023-03-31 03:22:57 +08:00
.get('/api/endpoints', {
timeout: 1000,
withCredentials: true
})
.then(({ data }) => {
setEndpointsConfig(data);
})
.catch(error => {
console.error(error);
console.log('Not login!');
window.location.href = '/auth/login';
});
2023-04-02 04:15:07 +08:00
// fetch presets
axios
.get('/api/presets', {
timeout: 1000,
withCredentials: true
})
.then(({ data }) => {
setPresets(data);
})
.catch(error => {
console.error(error);
console.log('Not login!');
window.location.href = '/auth/login';
});
2023-03-21 19:31:57 -04:00
}, []);
if (user)
return (
<div>
<RouterProvider router={router} />
2023-02-04 19:19:53 -05:00
</div>
);
2023-03-21 19:31:57 -04:00
else return <div className="flex h-screen"></div>;
2023-02-04 19:19:53 -05:00
};
export default App;