diff --git a/packages/desktop/src/components/Conversations.tsx b/packages/desktop/src/components/Conversations.tsx index f557634..ec09279 100644 --- a/packages/desktop/src/components/Conversations.tsx +++ b/packages/desktop/src/components/Conversations.tsx @@ -154,9 +154,9 @@ function ListPeople({ people }: { people: User[] }) { } function ListConversations() { - const { conversations } = useTerminal(); + const { conversationMap } = useTerminal(); - if (conversations.length === 0) { + if (Object.keys(conversationMap).length === 0) { return ( Look for someone by name or email to start a conversation! diff --git a/packages/desktop/src/components/Terminal.tsx b/packages/desktop/src/components/Terminal.tsx index 206d18f..ffceaa4 100644 --- a/packages/desktop/src/components/Terminal.tsx +++ b/packages/desktop/src/components/Terminal.tsx @@ -10,11 +10,7 @@ import Conversations from './Conversations'; import Navbar from './Navbar'; import Conversation from '@nirvana/core/src/models/conversation.model'; import useAuth from '../providers/AuthProvider'; -import { - createOneOnOneConversation, - getConversationsQueryLIVE, - useGetConversationsQueryLIVE, -} from '../firebase/firestore'; +import { createOneOnOneConversation, useGetConversationsQueryLIVE } from '../firebase/firestore'; import { Link, AudioClip, Image } from '@nirvana/core/src/models/content.model'; import { useImmer } from 'use-immer'; import { User } from '@nirvana/core/src/models/user.model'; @@ -91,6 +87,8 @@ export function TerminalProvider({ children }: { children?: React.ReactNode }) { // cache of selected conversation const selectedConversation: Conversation | undefined = useMemo(() => { + if (!selectedConversationId) return undefined; + // select if we do have it const conversation = conversationMap[selectedConversationId]; diff --git a/packages/desktop/src/providers/AuthProvider.tsx b/packages/desktop/src/providers/AuthProvider.tsx index fe4ac79..3f58b8c 100644 --- a/packages/desktop/src/providers/AuthProvider.tsx +++ b/packages/desktop/src/providers/AuthProvider.tsx @@ -17,13 +17,15 @@ import { getAuth, } from 'firebase/auth'; import { useSnackbar } from 'notistack'; -import { createUser } from '../firebase/firestore'; +import { createUser, getUserById } from '../firebase/firestore'; import CircularProgress from '@mui/material/CircularProgress'; import NirvanaLogo from '../components/NirvanaLogo'; +import { User } from '@nirvana/core/src/models/user.model'; interface IAuthContext { user?: FirebaseUser; + nirvanaUser?: User; logout?: () => void; } @@ -34,6 +36,7 @@ export const AuthProvider = ({ children }: { children: React.ReactNode }) => { // since auth.currentuser isn't updating const [currentUser, setCurrentUser] = useState(null); + const [currentNirvanaUser, setCurrentNirvanaUser] = useState(null); // are we still waiting on initial auth to trigger? const [authIniting, setAuthIniting] = useState(true); @@ -43,8 +46,16 @@ export const AuthProvider = ({ children }: { children: React.ReactNode }) => { console.log('auth changed!!!!', user); if (user) { - // TODO: add user to user's table with new sign in infp - await createUser(user); + // getting from our data store of users + let fetchedNirvanaUser = await getUserById(user.uid); + + if (!fetchedNirvanaUser) { + await createUser(user); + + fetchedNirvanaUser = await getUserById(user.uid); + } + + setCurrentNirvanaUser(fetchedNirvanaUser); setCurrentUser(user); } else { @@ -58,7 +69,7 @@ export const AuthProvider = ({ children }: { children: React.ReactNode }) => { }); return () => authListener(); - }, [setCurrentUser, enqueueSnackbar, setAuthIniting]); + }, [setCurrentUser, enqueueSnackbar, setAuthIniting, setCurrentNirvanaUser]); useEffect(() => { const tokenListener = window.electronAPI.once( @@ -124,8 +135,8 @@ export const AuthProvider = ({ children }: { children: React.ReactNode }) => { ); return ( - - {currentUser ? <>{children} : } + + {currentUser && currentNirvanaUser ? <>{children} : } ); };