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/Update.elm | 182 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 src/client/Update.elm (limited to 'src/client/Update.elm') 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) -- cgit v1.2.3