@@ -2,6 +2,7 @@ package ui
22
33import (
44 "context"
5+ "errors"
56 "time"
67
78 tea "github.com/charmbracelet/bubbletea"
@@ -12,30 +13,34 @@ import (
1213
1314const minSpinnerDuration = 400 * time .Millisecond
1415
15- type logoutDoneMsg struct {
16- result auth. LogoutResult
17- }
16+ type logoutSuccessMsg struct {}
17+
18+ type logoutNotLoggedInMsg struct { }
1819
1920type logoutErrMsg struct {
2021 err error
2122}
2223
24+ type logoutState int
25+
26+ const (
27+ logoutStateLoading logoutState = iota
28+ logoutStateSuccess
29+ logoutStateNotLoggedIn
30+ )
31+
2332type LogoutApp struct {
2433 header components.Header
2534 spinner components.Spinner
26- result * logoutResultDisplay
35+ state logoutState
2736 err error
2837}
2938
30- type logoutResultDisplay struct {
31- success bool
32- message string
33- }
34-
3539func NewLogoutApp (version string ) LogoutApp {
3640 return LogoutApp {
3741 header : components .NewHeader (version ),
3842 spinner : components .NewSpinner ().Show ("Logging out" ),
43+ state : logoutStateLoading ,
3944 }
4045}
4146
@@ -50,13 +55,14 @@ func (a LogoutApp) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
5055 return a , tea .Quit
5156 }
5257
53- case logoutDoneMsg :
58+ case logoutSuccessMsg :
5459 a .spinner = a .spinner .Hide ()
55- if msg .result .TokenDeleted {
56- a .result = & logoutResultDisplay {success : true , message : "Logged out successfully." }
57- } else {
58- a .result = & logoutResultDisplay {success : false , message : "Not currently logged in." }
59- }
60+ a .state = logoutStateSuccess
61+ return a , tea .Quit
62+
63+ case logoutNotLoggedInMsg :
64+ a .spinner = a .spinner .Hide ()
65+ a .state = logoutStateNotLoggedIn
6066 return a , tea .Quit
6167
6268 case logoutErrMsg :
@@ -82,19 +88,24 @@ func (a LogoutApp) View() string {
8288 s += a .spinner .View () + "\n "
8389 }
8490
85- if a .result != nil {
86- s += renderLogoutResult (a .result ) + "\n "
91+ switch a .state {
92+ case logoutStateSuccess :
93+ s += renderLogoutSuccess () + "\n "
94+ case logoutStateNotLoggedIn :
95+ s += renderLogoutNotLoggedIn () + "\n "
8796 }
8897
8998 return s
9099}
91100
92- func renderLogoutResult ( r * logoutResultDisplay ) string {
101+ func renderLogoutSuccess ( ) string {
93102 prefix := styles .Secondary .Render ("> " )
94- if r .success {
95- return prefix + styles .Success .Render ("Success:" ) + " " + styles .Message .Render (r .message )
96- }
97- return prefix + styles .Note .Render ("Note:" ) + " " + styles .Message .Render (r .message )
103+ return prefix + styles .Success .Render ("Success:" ) + " " + styles .Message .Render ("Logged out successfully." )
104+ }
105+
106+ func renderLogoutNotLoggedIn () string {
107+ prefix := styles .Secondary .Render ("> " )
108+ return prefix + styles .Note .Render ("Note:" ) + " " + styles .Message .Render ("Not currently logged in." )
98109}
99110
100111func (a LogoutApp ) Err () error {
@@ -107,19 +118,23 @@ func RunLogout(ctx context.Context, version string, a *auth.Auth) error {
107118
108119 go func () {
109120 start := time .Now ()
110- result , err := a .Logout ()
121+ err := a .Logout ()
111122
112123 // Ensure spinner is visible for minimum duration
113124 elapsed := time .Since (start )
114125 if elapsed < minSpinnerDuration {
115126 time .Sleep (minSpinnerDuration - elapsed )
116127 }
117128
129+ if errors .Is (err , auth .ErrNotLoggedIn ) {
130+ p .Send (logoutNotLoggedInMsg {})
131+ return
132+ }
118133 if err != nil {
119134 p .Send (logoutErrMsg {err : err })
120135 return
121136 }
122- p .Send (logoutDoneMsg { result : result })
137+ p .Send (logoutSuccessMsg { })
123138 }()
124139
125140 model , err := p .Run ()
0 commit comments