Skip to content

Commit 9afd6cb

Browse files
committed
support offline rates
1 parent 50c4fdd commit 9afd6cb

File tree

2 files changed

+76
-60
lines changed

2 files changed

+76
-60
lines changed

ghcjs/currency-converter/src/App/Widgets/Main.hs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ screenWidget st@Model {modelState = St {stScreen = QrCode sc}} =
110110
]
111111
)
112112
screenWidget st@Model {modelState = St {stScreen = Converter}} =
113-
let conn =
113+
let oof =
114114
st
115115
^. #modelState
116116
. #stDoc
@@ -157,13 +157,16 @@ screenWidget st@Model {modelState = St {stScreen = Converter}} =
157157
[ LayoutGrid.span12,
158158
Typography.caption,
159159
style_
160-
[ ("text-align", "center")
161-
]
160+
$ [("text-align", "center")]
161+
<> ( if oof == Offline
162+
then [("color", "#B00020")]
163+
else mempty
164+
)
162165
]
163166
[ Miso.text
164-
$ inspect conn
167+
$ inspect oof
165168
<> " exchange rate"
166-
<> ( case conn of
169+
<> ( case oof of
167170
Offline -> mempty
168171
Online ->
169172
" on "

ghcjs/currency-converter/src/Main.hs

Lines changed: 68 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -284,23 +284,32 @@ syncInputs st = do
284284

285285
evalModel :: (MonadThrow m, MonadUnliftIO m) => Model -> m Model
286286
evalModel raw = do
287+
let oof = raw ^. #modelState . #stDoc . #stDocOnlineOrOffline
287288
new <-
288-
Syb.everywhereM
289-
( Syb.mkM $ \cur ->
290-
Rates.withMarket (raw ^. #modelWebOpts) (raw ^. #modelMarket)
291-
. fmap (fromRight cur)
292-
. Rates.tryMarket
293-
. Rates.getCurrencyInfo (raw ^. #modelWebOpts)
294-
$ currencyInfoCode cur
295-
)
296-
( raw ^. #modelState
297-
)
289+
case oof of
290+
Online ->
291+
Syb.everywhereM
292+
( Syb.mkM $ \cur ->
293+
Rates.withMarket (raw ^. #modelWebOpts) (raw ^. #modelMarket)
294+
. fmap (fromRight cur)
295+
. Rates.tryMarket
296+
. Rates.getCurrencyInfo (raw ^. #modelWebOpts)
297+
$ currencyInfoCode cur
298+
)
299+
( raw ^. #modelState
300+
)
301+
Offline ->
302+
pure $ raw ^. #modelState
298303
curs <-
299-
Rates.withMarket (raw ^. #modelWebOpts) (raw ^. #modelMarket)
300-
. fmap (fromRight $ raw ^. #modelCurrencies)
301-
. Rates.tryMarket
302-
. fmap (^. #currenciesList)
303-
$ Rates.getCurrencies (raw ^. #modelWebOpts)
304+
case oof of
305+
Online ->
306+
Rates.withMarket (raw ^. #modelWebOpts) (raw ^. #modelMarket)
307+
. fmap (fromRight $ raw ^. #modelCurrencies)
308+
. Rates.tryMarket
309+
. fmap (^. #currenciesList)
310+
$ Rates.getCurrencies (raw ^. #modelWebOpts)
311+
Offline ->
312+
pure $ raw ^. #modelCurrencies
304313
km <-
305314
if (new ^. #stKm . #kmIkm . #unIkm == mempty)
306315
&& (new ^. #stIkm . #fieldOutput == mempty)
@@ -335,50 +344,54 @@ evalModel raw = do
335344
case baseAmtResult of
336345
Left {} -> pure st
337346
Right baseAmt ->
338-
Rates.withMarket (st ^. #modelWebOpts) (st ^. #modelMarket) $ do
339-
let funds =
340-
Funds
341-
baseAmt
347+
case oof of
348+
Offline ->
349+
pure st
350+
Online ->
351+
Rates.withMarket (st ^. #modelWebOpts) (st ^. #modelMarket) $ do
352+
let funds =
353+
Funds
354+
baseAmt
355+
$ st
356+
^. cloneLens baseLens
357+
. #moneyCurrency
358+
. #currencyOutput
359+
. #currencyInfoCode
360+
quote <-
361+
Rates.getQuote (st ^. #modelWebOpts) funds
342362
$ st
343-
^. cloneLens baseLens
363+
^. cloneLens quoteLens
344364
. #moneyCurrency
345365
. #currencyOutput
346366
. #currencyInfoCode
347-
quote <-
348-
Rates.getQuote (st ^. #modelWebOpts) funds
349-
$ st
350-
^. cloneLens quoteLens
351-
. #moneyCurrency
352-
. #currencyOutput
353-
. #currencyInfoCode
354-
let quoteAmt = quote ^. #quoteMoneyAmount
355-
ct <- getCurrentTime
356-
pure
357-
$ st
358-
& cloneLens baseLens
359-
. #moneyAmount
360-
. #fieldInput
361-
. #uniqueValue
362-
.~ baseAmtInput
363-
& cloneLens baseLens
364-
. #moneyAmount
365-
. #fieldOutput
366-
.~ unTagged baseAmt
367-
& cloneLens quoteLens
368-
. #moneyAmount
369-
. #fieldInput
370-
. #uniqueValue
371-
.~ inspectRatioDef (unTagged quoteAmt)
372-
& cloneLens quoteLens
373-
. #moneyAmount
374-
. #fieldOutput
375-
.~ unTagged quoteAmt
376-
& #modelState
377-
. #stDoc
378-
. #stDocCreatedAt
379-
.~ (quote ^. #quoteCreatedAt)
380-
& #modelOnlineAt
381-
.~ ct
367+
let quoteAmt = quote ^. #quoteMoneyAmount
368+
ct <- getCurrentTime
369+
pure
370+
$ st
371+
& cloneLens baseLens
372+
. #moneyAmount
373+
. #fieldInput
374+
. #uniqueValue
375+
.~ baseAmtInput
376+
& cloneLens baseLens
377+
. #moneyAmount
378+
. #fieldOutput
379+
.~ unTagged baseAmt
380+
& cloneLens quoteLens
381+
. #moneyAmount
382+
. #fieldInput
383+
. #uniqueValue
384+
.~ inspectRatioDef (unTagged quoteAmt)
385+
& cloneLens quoteLens
386+
. #moneyAmount
387+
. #fieldOutput
388+
.~ unTagged quoteAmt
389+
& #modelState
390+
. #stDoc
391+
. #stDocCreatedAt
392+
.~ (quote ^. #quoteCreatedAt)
393+
& #modelOnlineAt
394+
.~ ct
382395

383396
getBaseConverterMoneyLens :: TopOrBottom -> ALens' Model (Money Unique)
384397
getBaseConverterMoneyLens = \case

0 commit comments

Comments
 (0)