aboutsummaryrefslogtreecommitdiff
path: root/src/client/Update.elm
diff options
context:
space:
mode:
authorJoris2017-03-26 21:10:42 +0200
committerJoris2017-03-26 21:10:42 +0200
commit1e47a7754ca38bd1a6c74765d8378caf68ce4619 (patch)
treed0d9238479dc2529a1b558bbbcde346e7e8c2935 /src/client/Update.elm
parentc0ac16a713c4e53cf6af8e72a6d5f6b8ac5d6456 (diff)
downloadbudget-1e47a7754ca38bd1a6c74765d8378caf68ce4619.tar.gz
budget-1e47a7754ca38bd1a6c74765d8378caf68ce4619.tar.bz2
budget-1e47a7754ca38bd1a6c74765d8378caf68ce4619.zip
Separate client and server watch
Diffstat (limited to 'src/client/Update.elm')
-rw-r--r--src/client/Update.elm182
1 files changed, 182 insertions, 0 deletions
diff --git a/src/client/Update.elm b/src/client/Update.elm
new file mode 100644
index 0000000..7006d5a
--- /dev/null
+++ b/src/client/Update.elm
@@ -0,0 +1,182 @@
+module Update exposing
+ ( update
+ )
+
+import Task
+import Platform.Cmd exposing (Cmd)
+import Navigation exposing (Location)
+
+import Page exposing (Page)
+
+import Server
+
+import Msg exposing (..)
+
+import Model exposing (Model)
+import Model.Translations exposing (getMessage)
+import Model.View as V
+
+import LoggedIn.Model as LoggedInModel
+import LoggedIn.Msg as LoggedInMsg
+import LoggedIn.Update as LoggedInUpdate
+
+import SignIn.Model as SignInModel
+import SignIn.Msg as SignInMsg
+import SignIn.Update as SignInUpdate
+
+import Dialog
+import Dialog.Update as DialogUpdate
+
+import Tooltip
+
+import Utils.Http exposing (errorKey)
+import Utils.Cmd exposing ((:>))
+
+update : Msg -> Model -> (Model, Cmd Msg)
+update msg model =
+ case msg of
+
+ NoOp ->
+ (model, Cmd.none)
+
+ UpdatePage page ->
+ ({ model | page = page }, Cmd.none)
+
+ SignIn email ->
+ ( applySignIn model (SignInMsg.WaitingServer)
+ , Server.signIn email (\result -> case result of
+ Ok _ -> UpdateSignIn SignInMsg.ValidLogin
+ Err error -> UpdateSignIn (SignInMsg.ErrorLogin (errorKey error))
+ )
+ )
+
+ GoLoggedInView init ->
+ ( { model | view = V.LoggedInView (LoggedInModel.init init) }
+ , Cmd.none
+ )
+
+ UpdateTime time ->
+ ({ model | currentTime = time }, Cmd.none)
+
+ GoSignInView ->
+ ({ model | view = V.SignInView (SignInModel.init Nothing) }, Cmd.none)
+
+ UpdateSignIn signInMsg ->
+ (applySignIn model signInMsg, Cmd.none)
+
+ UpdateLoggedIn loggedInMsg ->
+ applyLoggedIn model loggedInMsg
+
+ SignOut ->
+ ( model
+ , Server.signOut (\result -> case result of
+ Ok _ -> GoSignInView
+ Err _ -> Error "SignOutError"
+ )
+ )
+
+ Error error ->
+ ({ model | errors = model.errors ++ [ error ] }, Cmd.none)
+
+ Dialog dialogMsg ->
+ Dialog.update DialogUpdate.update dialogMsg model.dialog.model model.dialog
+ |> Tuple.mapFirst (\dialog -> { model | dialog = dialog })
+ :> update (Tooltip Tooltip.HideMessage)
+
+ Tooltip tooltipMsg ->
+ let (newTooltip, command) = Tooltip.update tooltipMsg model.tooltip
+ in ( { model | tooltip = newTooltip }
+ , Cmd.map Tooltip command
+ )
+
+ CreatePayment name cost date category frequency ->
+ ( model
+ , Server.createPayment name cost date category frequency (\result -> case result of
+ Ok paymentId -> UpdateLoggedIn <| LoggedInMsg.ValidateCreatePayment paymentId name cost date category frequency
+ Err _ -> Error "CreatePaymentError"
+ )
+ )
+
+ EditPayment paymentId name cost date category frequency ->
+ ( model
+ , Server.editPayment paymentId name cost date category frequency (\result -> case result of
+ Ok _ -> UpdateLoggedIn <| LoggedInMsg.ValidateEditPayment paymentId name cost date category frequency
+ Err _ -> Error "EditPaymentError"
+ )
+ )
+
+ DeletePayment paymentId ->
+ ( model
+ , Server.deletePayment paymentId (\result -> case result of
+ Ok _ -> UpdateLoggedIn <| LoggedInMsg.ValidateDeletePayment paymentId
+ Err _ -> Error "DeletePaymentError"
+ )
+ )
+
+ CreateIncome amount date ->
+ ( model
+ , Server.createIncome amount date (\result -> case result of
+ Ok incomeId -> UpdateLoggedIn <| LoggedInMsg.ValidateCreateIncome incomeId amount date
+ Err _ -> Error "CreateIncomeError"
+ )
+ )
+
+ EditIncome incomeId amount date ->
+ ( model
+ , Server.editIncome incomeId amount date (\result -> case result of
+ Ok _ -> UpdateLoggedIn <| LoggedInMsg.ValidateEditIncome incomeId amount date
+ Err _ -> Error "EditIncomeError"
+ )
+ )
+
+ DeleteIncome incomeId ->
+ ( model
+ , Server.deleteIncome incomeId (\result -> case result of
+ Ok _ -> UpdateLoggedIn <| LoggedInMsg.ValidateDeleteIncome incomeId
+ Err _ -> Error "DeleteIncomeError"
+ )
+ )
+
+ CreateCategory name color ->
+ ( model
+ , Server.createCategory name color (\result -> case result of
+ Ok categoryId -> UpdateLoggedIn <| LoggedInMsg.ValidateCreateCategory categoryId name color
+ Err _ -> Error "CreateCategoryError"
+ )
+ )
+
+ EditCategory categoryId name color ->
+ ( model
+ , Server.editCategory categoryId name color (\result -> case result of
+ Ok _ -> UpdateLoggedIn <| LoggedInMsg.ValidateEditCategory categoryId name color
+ Err _ -> Error "EditCategoryError"
+ )
+ )
+
+ DeleteCategory categoryId ->
+ ( model
+ , Server.deleteCategory categoryId (\result -> case result of
+ Ok _ -> UpdateLoggedIn <| LoggedInMsg.ValidateDeleteCategory categoryId
+ Err _ -> Error "DeleteCategoryError"
+ )
+ )
+
+
+applySignIn : Model -> SignInMsg.Msg -> Model
+applySignIn model signInMsg =
+ case model.view of
+ V.SignInView signInView ->
+ { model | view = V.SignInView (SignInUpdate.update model.translations signInMsg signInView) }
+ _ ->
+ model
+
+applyLoggedIn : Model -> LoggedInMsg.Msg -> (Model, Cmd Msg)
+applyLoggedIn model loggedInMsg =
+ case model.view of
+ V.LoggedInView loggedInView ->
+ let (view, cmd) = LoggedInUpdate.update model loggedInMsg loggedInView
+ in ( { model | view = V.LoggedInView view }
+ , Cmd.map UpdateLoggedIn cmd
+ )
+ _ ->
+ (model, Cmd.none)