From 1e47a7754ca38bd1a6c74765d8378caf68ce4619 Mon Sep 17 00:00:00 2001 From: Joris Date: Sun, 26 Mar 2017 21:10:42 +0200 Subject: Separate client and server watch --- src/client/Model.elm | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 src/client/Model.elm (limited to 'src/client/Model.elm') 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) -- cgit v1.2.3