aboutsummaryrefslogtreecommitdiff
path: root/src/client/Model.elm
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/Model.elm')
-rw-r--r--src/client/Model.elm74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/client/Model.elm b/src/client/Model.elm
new file mode 100644
index 0000000..5167e42
--- /dev/null
+++ b/src/client/Model.elm
@@ -0,0 +1,74 @@
+module Model exposing
+ ( Model
+ , init
+ )
+
+import Time exposing (Time)
+import Json.Decode as Decode
+
+import Navigation exposing (Location)
+
+import Html as Html
+
+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 Dialog
+import Dialog.Model as DialogModel
+import Dialog.Msg as DialogMsg
+
+import Tooltip
+
+import Utils.Maybe exposing (isJust)
+
+type alias Model =
+ { view : View
+ , currentTime : Time
+ , translations : Translations
+ , conf : Conf
+ , page : Page
+ , errors : List String
+ , dialog : Dialog.Model DialogModel.Model DialogMsg.Msg Msg
+ , tooltip : Tooltip.Model
+ }
+
+init : Decode.Value -> Location -> (Model, Cmd Msg)
+init payload location =
+ let model =
+ case Decode.decodeValue Init.decoder payload of
+ Ok { time, translations, conf, result, windowSize } ->
+ { 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.fromLocation location
+ , errors = []
+ , dialog = Dialog.init DialogModel.init Msg.Dialog
+ , tooltip = Tooltip.init windowSize.width windowSize.height
+ }
+ Err error ->
+ { view = SignInView (SignInModel.init (Just error))
+ , currentTime = 0
+ , translations = []
+ , conf = { currency = "" }
+ , page = Page.fromLocation location
+ , errors = [ error ]
+ , dialog = Dialog.init DialogModel.init Msg.Dialog
+ , tooltip = Tooltip.init 0 0
+ }
+ in (model, Cmd.none)