1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
module Model exposing
( Model
, init
)
import Time exposing (Time)
import Json.Decode as Json
import Page exposing (Page)
import Init as Init exposing (Init)
import Msg exposing (Msg)
import Model.View exposing (..)
import Model.Translations exposing (..)
import Model.Conf exposing (..)
import Model.InitResult exposing (..)
import LoggedIn.Model as LoggedInModel
import SignIn.Model as SignInModel
import Utils.Maybe exposing (isJust)
type alias Model =
{ view : View
, currentTime : Time
, translations : Translations
, conf : Conf
, page : Page
}
init : Json.Value -> Result String Page -> (Model, Cmd Msg)
init payload result =
let page =
case result of
Err _ -> Page.Home
Ok page -> page
model =
case Json.decodeValue Init.decoder payload of
Ok { time, translations, conf, result } ->
{ view =
case result of
InitEmpty ->
SignInView (SignInModel.init Nothing)
InitSuccess init ->
LoggedInView (LoggedInModel.init init)
InitError error ->
SignInView (SignInModel.init (Just error))
, currentTime = time
, translations = translations
, conf = conf
, page = page
}
Err error ->
{ view = SignInView (SignInModel.init (Just error))
, currentTime = 0
, translations = []
, conf = { currency = "" }
, page = page
}
in (model, Cmd.none)
|