Skip to content

Commit 3677b29

Browse files
authored
Merge pull request #12 from unisonweb/improve-reconnect
Improve UCM reconnection flow
2 parents 4740a98 + 70a59f6 commit 3677b29

File tree

3 files changed

+70
-14
lines changed

3 files changed

+70
-14
lines changed

src/Ucm/App.elm

Lines changed: 55 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import Lib.HttpApi as HttpApi exposing (HttpResult)
77
import Lib.Util as Util
88
import UI.Button as Button
99
import UI.Icon as Icon
10+
import UI.StatusBanner as StatusBanner
1011
import Ucm.Api as Api
1112
import Ucm.AppContext exposing (AppContext)
1213
import Ucm.UcmConnectivity exposing (UcmConnectivity(..))
@@ -58,8 +59,10 @@ type Msg
5859
= NoOp
5960
| WelcomeScreenMsg WelcomeScreen.Msg
6061
| WorkspaceScreenMsg WorkspaceScreen.Msg
61-
| CheckUCMConnectivity
62+
| ReCheckUCMConnectivity
63+
| PerformReCheckUCMConnectivity
6264
| InitialUCMConnectivityCheckFinished (HttpResult ())
65+
| CheckUCMConnectivity
6366
| UCMConnectivityCheckFinished (HttpResult ())
6467

6568

@@ -111,23 +114,64 @@ update msg model =
111114
_ ->
112115
( model, Cmd.none )
113116

114-
CheckUCMConnectivity ->
115-
( model, checkUcmConnectivity model.appContext )
117+
ReCheckUCMConnectivity ->
118+
let
119+
appContext =
120+
model.appContext
116121

117-
InitialUCMConnectivityCheckFinished res ->
122+
appContext_ =
123+
{ appContext | ucmConnectivity = Connecting }
124+
in
125+
-- Delay the actual check to give the user feedback when they click the button
126+
( { model | appContext = appContext_ }, Util.delayMsg 750 PerformReCheckUCMConnectivity )
127+
128+
PerformReCheckUCMConnectivity ->
118129
let
119130
appContext =
120131
model.appContext
121132

122133
appContext_ =
134+
{ appContext | ucmConnectivity = Connecting }
135+
in
136+
( { model | appContext = appContext_ }, checkInitialUcmConnectivity appContext_ )
137+
138+
InitialUCMConnectivityCheckFinished res ->
139+
let
140+
appContext =
141+
model.appContext
142+
143+
( appContext_, screen, cmd ) =
123144
case res of
124145
Ok _ ->
125-
{ appContext | ucmConnectivity = Connected }
146+
let
147+
( screen_, screenCmd ) =
148+
case model.screen of
149+
WelcomeScreen _ ->
150+
let
151+
( welcome, welcomeCmd ) =
152+
WelcomeScreen.init appContext
153+
in
154+
( WelcomeScreen welcome, Cmd.map WelcomeScreenMsg welcomeCmd )
155+
156+
WorkspaceScreen wss ->
157+
let
158+
( workspace, wsCmd ) =
159+
WorkspaceScreen.init appContext wss.workspaceContext
160+
in
161+
( WorkspaceScreen workspace, Cmd.map WorkspaceScreenMsg wsCmd )
162+
in
163+
( { appContext | ucmConnectivity = Connected }
164+
, screen_
165+
, Cmd.batch [ Util.delayMsg 5000 CheckUCMConnectivity, screenCmd ]
166+
)
126167

127168
Err e ->
128-
{ appContext | ucmConnectivity = NeverConnected e }
169+
( { appContext | ucmConnectivity = NeverConnected e }, model.screen, Cmd.none )
129170
in
130-
( { model | appContext = appContext_ }, Cmd.none )
171+
( { model | appContext = appContext_, screen = screen }, cmd )
172+
173+
CheckUCMConnectivity ->
174+
( model, checkUcmConnectivity model.appContext )
131175

132176
UCMConnectivityCheckFinished res ->
133177
let
@@ -208,7 +252,9 @@ view model =
208252
in
209253
case model.appContext.ucmConnectivity of
210254
Connecting ->
211-
view_
255+
{ title = "UCM Desktop | Connecting..."
256+
, body = [ div [ class "connecting" ] [ StatusBanner.working "Connecting..." ] ]
257+
}
212258

213259
NeverConnected _ ->
214260
let
@@ -226,7 +272,7 @@ view model =
226272
, br [] []
227273
, code [] [ text apiUrl ]
228274
]
229-
, Button.iconThenLabel CheckUCMConnectivity Icon.refresh "Try again"
275+
, Button.iconThenLabel ReCheckUCMConnectivity Icon.refresh "Try again"
230276
|> Button.emphasized
231277
|> Button.view
232278
]

src/css/unison-theme.css

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -158,11 +158,11 @@
158158
--u-color_positive_text-on-element_subdued: var(--u-color_text);
159159
--u-color_positive_icon-on-element_subdued: var(--color-green-1);
160160

161-
--u-color_working_element: var(--color-purple-5);
162-
--u-color_working_text-on-element: var(--color-purple-2);
163-
--u-color_working_icon-on-element: var(--color-purple-2);
164-
--u-color_working_element_subdued: var(--color-gray-lighten-60);
165-
--u-color_working_text-on-element_subdued: var(--u-color_text);
161+
/* [x] */ --u-color_working_element: var(--color-purple-5);
162+
/* [x] */ --u-color_working_text-on-element: var(--color-purple-2);
163+
/* [x] */ --u-color_working_icon-on-element: var(--color-purple-2);
164+
/* [x] */ --u-color_working_element_subdued: var(--color-gray-base);
165+
/* [x] */ --u-color_working_text-on-element_subdued: var(--u-color_text);
166166

167167
--u-color_chrome: var(--color-gray-darken-20);
168168
--u-color_chrome_subdued: var(--color-gray-darken-30);

src/main.css

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,13 @@
88
@import "./css/ucm/command-palette-modal.css";
99
@import "./css/ucm/ucm-connectivity.css";
1010
@import "./css/ucm/contextual-tag.css";
11+
12+
.connecting {
13+
margin: 16rem auto;
14+
width: 32rem;
15+
display: flex;
16+
flex-direction: column;
17+
justify-content: center;
18+
align-items: center;
19+
flex-shrink: 0;
20+
}

0 commit comments

Comments
 (0)