nova-betterchat/src/App.tsx
2023-03-06 00:50:18 +08:00

76 lines
2 KiB
TypeScript

import React, { useEffect, useRef } from 'react';
import useStore from '@store/store';
import Chat from './components/Chat';
import Menu from './components/Menu';
import useInitialiseNewChat from '@hooks/useInitialiseNewChat';
import { ChatInterface } from '@type/chat';
import { Theme } from '@type/theme';
function App() {
const initialiseNewChat = useInitialiseNewChat();
const setChats = useStore((state) => state.setChats);
const setTheme = useStore((state) => state.setTheme);
const setApiKey = useStore((state) => state.setApiKey);
const setCurrentChatIndex = useStore((state) => state.setCurrentChatIndex);
useEffect(() => {
// legacy local storage
const oldChats = localStorage.getItem('chats');
const apiKey = localStorage.getItem('apiKey');
const theme = localStorage.getItem('theme');
if (apiKey) {
// legacy local storage
setApiKey(apiKey);
localStorage.removeItem('apiKey');
}
if (theme) {
// legacy local storage
setTheme(theme as Theme);
localStorage.removeItem('theme');
}
if (oldChats) {
// legacy local storage
try {
const chats: ChatInterface[] = JSON.parse(oldChats);
if (chats.length > 0) {
setChats(chats);
setCurrentChatIndex(0);
} else {
initialiseNewChat();
}
} catch (e: unknown) {
console.log(e);
initialiseNewChat();
}
localStorage.removeItem('chats');
} else {
// existing local storage
const chats = useStore.getState().chats;
const currentChatIndex = useStore.getState().currentChatIndex;
if (!chats || chats.length === 0) {
initialiseNewChat();
}
if (
chats &&
!(currentChatIndex >= 0 && currentChatIndex < chats.length)
) {
setCurrentChatIndex(0);
}
}
}, []);
return (
<div className='overflow-hidden w-full h-full relative'>
<Menu />
<Chat />
</div>
);
}
export default App;