11import { useRenderer , useTerminalDimensions } from '@opentui/react'
22import React , { useCallback , useEffect , useMemo , useRef , useState } from 'react'
3- import { useShallow } from 'zustand/react/shallow'
43import stringWidth from 'string-width'
4+ import { useShallow } from 'zustand/react/shallow'
55
66import { AgentModeToggle } from './components/agent-mode-toggle'
77import { LoginModal } from './components/login-modal'
@@ -13,6 +13,7 @@ import { Separator } from './components/separator'
1313import { StatusIndicator , useHasStatus } from './components/status-indicator'
1414import { SuggestionMenu } from './components/suggestion-menu'
1515import { SLASH_COMMANDS } from './data/slash-commands'
16+ import { useAuthQuery , useLogoutMutation } from './hooks/use-auth-query'
1617import { useClipboard } from './hooks/use-clipboard'
1718import { useInputHistory } from './hooks/use-input-history'
1819import { useKeyboardHandlers } from './hooks/use-keyboard-handlers'
@@ -23,17 +24,16 @@ import { useSendMessage } from './hooks/use-send-message'
2324import { useSuggestionEngine } from './hooks/use-suggestion-engine'
2425import { useSystemThemeDetector } from './hooks/use-system-theme-detector'
2526import { useChatStore } from './state/chat-store'
27+ import { flushAnalytics } from './utils/analytics'
28+ import { getUserCredentials } from './utils/auth'
2629import { createChatScrollAcceleration } from './utils/chat-scroll-accel'
2730import { formatQueuedPreview } from './utils/helpers'
2831import { loadLocalAgents } from './utils/local-agent-registry'
29- import { flushAnalytics } from './utils/analytics'
3032import { logger } from './utils/logger'
3133import { buildMessageTree } from './utils/message-tree-utils'
3234import { chatThemes , createMarkdownPalette } from './utils/theme-system'
3335
3436import type { User } from './utils/auth'
35- import { logoutUser } from './utils/auth'
36-
3737import type { ToolName } from '@codebuff/sdk'
3838import type { ScrollBoxRenderable } from '@opentui/core'
3939
@@ -122,7 +122,10 @@ export const App = ({
122122 )
123123 const lastSigintTimeRef = useRef < number > ( 0 )
124124
125- // Track authentication state
125+ // Track authentication state using TanStack Query
126+ const authQuery = useAuthQuery ( )
127+ const logoutMutation = useLogoutMutation ( )
128+
126129 // If requireAuth is null (checking), assume not authenticated until proven otherwise
127130 const [ isAuthenticated , setIsAuthenticated ] = useState (
128131 requireAuth === false ? true : false
@@ -136,6 +139,27 @@ export const App = ({
136139 }
137140 } , [ requireAuth ] )
138141
142+ // Update authentication state based on query results
143+ useEffect ( ( ) => {
144+ if ( authQuery . isSuccess && authQuery . data ) {
145+ setIsAuthenticated ( true )
146+ if ( ! user ) {
147+ // Convert authQuery data to User format if needed
148+ const userCredentials = getUserCredentials ( )
149+ const userData : User = {
150+ id : authQuery . data . id ,
151+ name : userCredentials ?. name || '' ,
152+ email : authQuery . data . email || '' ,
153+ authToken : userCredentials ?. authToken || '' ,
154+ }
155+ setUser ( userData )
156+ }
157+ } else if ( authQuery . isError ) {
158+ setIsAuthenticated ( false )
159+ setUser ( null )
160+ }
161+ } , [ authQuery . isSuccess , authQuery . isError , authQuery . data , user ] )
162+
139163 // Log app initialization
140164 useEffect ( ( ) => {
141165 logger . debug (
@@ -204,11 +228,32 @@ export const App = ({
204228 // Handle successful login
205229 const handleLoginSuccess = useCallback (
206230 ( loggedInUser : User ) => {
231+ logger . info (
232+ {
233+ userName : loggedInUser . name ,
234+ userEmail : loggedInUser . email ,
235+ userId : loggedInUser . id ,
236+ } ,
237+ '🎊 handleLoginSuccess called - updating UI state' ,
238+ )
239+
240+ logger . info ( '🔄 Resetting chat store...' )
207241 resetChatStore ( )
242+ logger . info ( '✅ Chat store reset' )
243+
244+ logger . info ( '🎯 Setting input focused...' )
208245 setInputFocused ( true )
246+ logger . info ( '✅ Input focused' )
247+
248+ logger . info ( '👤 Setting user state...' )
209249 setUser ( loggedInUser )
250+ logger . info ( '✅ User state set' )
251+
252+ logger . info ( '🔓 Setting isAuthenticated to true...' )
210253 setIsAuthenticated ( true )
211- logger . info ( { user : loggedInUser . name } , 'User logged in successfully' )
254+ logger . info ( '✅ isAuthenticated set to true - modal should close now' )
255+
256+ logger . info ( { user : loggedInUser . name } , '🎉 Login flow completed successfully!' )
212257 } ,
213258 [ resetChatStore , setInputFocused ] ,
214259 )
@@ -678,13 +723,12 @@ export const App = ({
678723 return
679724 }
680725 if ( cmd === 'logout' || cmd === 'signout' ) {
681- ; ( async ( ) => {
682- try {
683- await logoutUser ( )
684- } finally {
685- abortControllerRef . current ?. abort ( )
686- stopStreaming ( )
687- setCanProcessQueue ( false )
726+ abortControllerRef . current ?. abort ( )
727+ stopStreaming ( )
728+ setCanProcessQueue ( false )
729+
730+ logoutMutation . mutate ( undefined , {
731+ onSettled : ( ) => {
688732 const msg = {
689733 id : `sys-${ Date . now ( ) } ` ,
690734 variant : 'ai' as const ,
@@ -697,8 +741,8 @@ export const App = ({
697741 setUser ( null )
698742 setIsAuthenticated ( false )
699743 } , 300 )
700- }
701- } ) ( )
744+ } ,
745+ } )
702746 return
703747 }
704748
0 commit comments