2023-04-07 05:20:14 -07:00
|
|
|
import { useEffect } from 'react';
|
2023-03-28 20:36:21 +08:00
|
|
|
import { createBrowserRouter, RouterProvider, Navigate } from 'react-router-dom';
|
|
|
|
|
import Root from './routes/Root';
|
2023-03-28 22:39:27 +08:00
|
|
|
import Chat from './routes/Chat';
|
2023-03-29 00:08:02 +08:00
|
|
|
import Search from './routes/Search';
|
2023-03-28 20:36:21 +08:00
|
|
|
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-05 08:44:00 -07:00
|
|
|
import { useGetSearchEnabledQuery, useGetUserQuery, useGetEndpointsQuery, useGetPresetsQuery} from '~/data-provider';
|
2023-04-07 16:13:00 -07:00
|
|
|
import {ReactQueryDevtools} from '@tanstack/react-query-devtools';
|
2023-02-04 19:19:53 -05:00
|
|
|
|
2023-03-28 20:36:21 +08:00
|
|
|
const router = createBrowserRouter([
|
|
|
|
|
{
|
|
|
|
|
path: '/',
|
|
|
|
|
element: <Root />,
|
|
|
|
|
children: [
|
|
|
|
|
{
|
|
|
|
|
index: true,
|
|
|
|
|
element: (
|
|
|
|
|
<Navigate
|
|
|
|
|
to="/chat/new"
|
|
|
|
|
replace={true}
|
|
|
|
|
/>
|
|
|
|
|
)
|
|
|
|
|
},
|
|
|
|
|
{
|
2023-03-29 00:08:02 +08:00
|
|
|
path: 'chat/:conversationId?',
|
2023-03-28 22:39:27 +08:00
|
|
|
element: <Chat />
|
2023-03-29 00:08:02 +08:00
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: 'search/:query?',
|
|
|
|
|
element: <Search />
|
2023-03-28 20:36:21 +08:00
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
]);
|
2023-03-21 19:31:57 -04:00
|
|
|
|
2023-03-28 20:36:21 +08:00
|
|
|
const App = () => {
|
|
|
|
|
const [user, setUser] = useRecoilState(store.user);
|
|
|
|
|
const setIsSearchEnabled = useSetRecoilState(store.isSearchEnabled);
|
2023-04-01 14:33:07 +08:00
|
|
|
const setEndpointsConfig = useSetRecoilState(store.endpointsConfig);
|
2023-04-02 04:15:07 +08:00
|
|
|
const setPresets = useSetRecoilState(store.presets);
|
2023-02-06 18:25:11 -05:00
|
|
|
|
2023-04-02 12:48:52 -07:00
|
|
|
const searchEnabledQuery = useGetSearchEnabledQuery();
|
|
|
|
|
const userQuery = useGetUserQuery();
|
|
|
|
|
const endpointsQuery = useGetEndpointsQuery();
|
|
|
|
|
const presetsQuery = useGetPresetsQuery();
|
|
|
|
|
|
2023-04-07 05:20:14 -07:00
|
|
|
useEffect(() => {
|
|
|
|
|
if(endpointsQuery.data) {
|
|
|
|
|
setEndpointsConfig(endpointsQuery.data);
|
|
|
|
|
} else if(endpointsQuery.isError) {
|
|
|
|
|
console.error("Failed to get endpoints", endpointsQuery.error);
|
|
|
|
|
window.location.href = '/auth/login';
|
|
|
|
|
}
|
|
|
|
|
}, [endpointsQuery.data, endpointsQuery.isError]);
|
2023-03-28 22:39:27 +08:00
|
|
|
|
2023-04-07 05:20:14 -07:00
|
|
|
useEffect(() => {
|
|
|
|
|
if(presetsQuery.data) {
|
|
|
|
|
setPresets(presetsQuery.data);
|
|
|
|
|
} else if(presetsQuery.isError) {
|
|
|
|
|
console.error("Failed to get presets", presetsQuery.error);
|
|
|
|
|
window.location.href = '/auth/login';
|
|
|
|
|
}
|
|
|
|
|
}, [presetsQuery.data, presetsQuery.isError]);
|
2023-03-28 22:39:27 +08:00
|
|
|
|
2023-04-07 05:20:14 -07:00
|
|
|
useEffect(() => {
|
|
|
|
|
if (searchEnabledQuery.data) {
|
|
|
|
|
setIsSearchEnabled(searchEnabledQuery.data);
|
|
|
|
|
} else if(searchEnabledQuery.isError) {
|
|
|
|
|
console.error("Failed to get search enabled", searchEnabledQuery.error);
|
|
|
|
|
}
|
|
|
|
|
}, [searchEnabledQuery.data, searchEnabledQuery.isError]);
|
2023-04-02 12:48:52 -07:00
|
|
|
|
2023-04-07 05:20:14 -07:00
|
|
|
useEffect(() => {
|
|
|
|
|
if (userQuery.data) {
|
|
|
|
|
setUser(userQuery.data);
|
|
|
|
|
} else if(userQuery.isError) {
|
|
|
|
|
console.error("Failed to get user", userQuery.error);
|
|
|
|
|
window.location.href = '/auth/login';
|
|
|
|
|
}
|
|
|
|
|
}, [userQuery.data, userQuery.isError]);
|
2023-03-14 01:24:43 +08:00
|
|
|
|
|
|
|
|
if (user)
|
|
|
|
|
return (
|
2023-04-07 16:13:00 -07:00
|
|
|
<>
|
|
|
|
|
<RouterProvider router={router} />
|
|
|
|
|
<ReactQueryDevtools initialIsOpen={false} />
|
|
|
|
|
</>
|
2023-03-14 01:24:43 +08:00
|
|
|
);
|
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>
|
|
|
|
|
);
|