aboutsummaryrefslogtreecommitdiff
path: root/src/client/LoggedIn/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/LoggedIn/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/LoggedIn/Update.elm')
-rw-r--r--src/client/LoggedIn/Update.elm151
1 files changed, 151 insertions, 0 deletions
diff --git a/src/client/LoggedIn/Update.elm b/src/client/LoggedIn/Update.elm
new file mode 100644
index 0000000..9e6d6ee
--- /dev/null
+++ b/src/client/LoggedIn/Update.elm
@@ -0,0 +1,151 @@
+module LoggedIn.Update exposing
+ ( update
+ )
+
+import Dict
+import String
+import Task
+
+import Http exposing (Error(..))
+import Date exposing (Date)
+import Platform.Cmd exposing (Cmd)
+
+import Form
+
+import Model exposing (Model)
+import Model.Payment as Payment exposing (Payment, Frequency(..))
+import Model.Income as Income exposing (Income)
+import Model.Category exposing (Category)
+import Model.PaymentCategory as PaymentCategory
+
+import Server
+import LoggedData
+
+import LoggedIn.Msg as LoggedInMsg
+import LoggedIn.Model as LoggedInModel
+
+import LoggedIn.Home.Msg as Home
+import LoggedIn.Home.Update as Home
+import LoggedIn.Home.Model as Home
+
+import LoggedIn.Income.Update as Income
+import LoggedIn.Income.Model as Income
+
+import LoggedIn.Category.Update as Categories
+import LoggedIn.Category.Model as Categories
+
+import Utils.Cmd exposing ((:>))
+
+update : Model -> LoggedInMsg.Msg -> LoggedInModel.Model -> (LoggedInModel.Model, Cmd LoggedInMsg.Msg)
+update model msg loggedIn =
+ let loggedData = LoggedData.build model loggedIn
+ in case msg of
+
+ LoggedInMsg.NoOp ->
+ ( loggedIn
+ , Cmd.none
+ )
+
+ LoggedInMsg.HomeMsg homeMsg ->
+ case Home.update loggedData homeMsg loggedIn.home of
+ (home, effects) ->
+ ( { loggedIn | home = home }
+ , Cmd.map LoggedInMsg.HomeMsg effects
+ )
+
+ LoggedInMsg.IncomeMsg incomeMsg ->
+ case Income.update loggedData incomeMsg loggedIn.income of
+ (income, cmd) ->
+ ( { loggedIn | income = income }
+ , Cmd.map LoggedInMsg.IncomeMsg cmd
+ )
+
+ LoggedInMsg.CategoriesMsg categoriesMsg ->
+ case Categories.update loggedData categoriesMsg loggedIn.category of
+ (category, cmd) ->
+ ( { loggedIn | category = category }
+ , Cmd.map LoggedInMsg.CategoriesMsg cmd
+ )
+
+ LoggedInMsg.ValidateCreatePayment paymentId name cost date category frequency ->
+ update model (LoggedInMsg.HomeMsg <| Home.SearchMsg (Form.Reset (Home.searchInitial frequency))) loggedIn
+ :> update model (LoggedInMsg.HomeMsg <| Home.UpdatePage 1)
+ :> (\loggedIn ->
+ let newPayment = Payment paymentId name cost date loggedIn.me frequency
+ in ( { loggedIn
+ | payments = newPayment :: loggedIn.payments
+ , paymentCategories = PaymentCategory.set name category loggedIn.paymentCategories
+ }
+ , Cmd.none
+ )
+ )
+
+ LoggedInMsg.ValidateEditPayment paymentId name cost date category frequency ->
+ let updatedPayment = Payment paymentId name cost date loggedIn.me frequency
+ mbOldPayment = Payment.find paymentId loggedIn.payments
+ in ( { loggedIn
+ | payments = Payment.edit updatedPayment loggedIn.payments
+ , paymentCategories =
+ case mbOldPayment of
+ Just oldPayment ->
+ PaymentCategory.update oldPayment.name name category loggedIn.paymentCategories
+ Nothing ->
+ loggedData.paymentCategories
+ }
+ , Cmd.none
+ )
+
+ LoggedInMsg.ValidateDeletePayment paymentId ->
+ let payments = Payment.delete paymentId loggedIn.payments
+ frequency =
+ case Form.getOutput loggedIn.home.search of
+ Just data -> data.frequency
+ Nothing -> Punctual
+ switchToPunctual =
+ ( frequency == Monthly
+ && List.isEmpty (Payment.monthly payments)
+ )
+ in if switchToPunctual
+ then
+ update model (LoggedInMsg.HomeMsg <| Home.SearchMsg (Form.Reset (Home.searchInitial Punctual))) loggedIn
+ :> (\loggedIn ->
+ ( { loggedIn | payments = payments }
+ , Cmd.none
+ )
+ )
+ else
+ ( { loggedIn | payments = payments }
+ , Cmd.none
+ )
+
+ LoggedInMsg.ValidateCreateIncome incomeId amount date ->
+ let newIncome = { userId = loggedIn.me, amount = amount, time = Date.toTime date }
+ in ( { loggedIn | incomes = Dict.insert incomeId newIncome loggedIn.incomes }
+ , Cmd.none
+ )
+
+ LoggedInMsg.ValidateEditIncome incomeId amount date ->
+ let updateIncome _ = Just <| Income loggedIn.me (Date.toTime date) amount
+ in ( { loggedIn | incomes = Dict.update incomeId updateIncome loggedIn.incomes }
+ , Cmd.none
+ )
+
+ LoggedInMsg.ValidateDeleteIncome incomeId ->
+ ( { loggedIn | incomes = Dict.remove incomeId loggedIn.incomes }
+ , Cmd.none
+ )
+
+ LoggedInMsg.ValidateCreateCategory categoryId name color ->
+ let newCategory = { name = name, color = color }
+ in ( { loggedIn | categories = Dict.insert categoryId newCategory loggedIn.categories }
+ , Cmd.none
+ )
+
+ LoggedInMsg.ValidateEditCategory categoryId name color ->
+ let updateCategory _ = Just <| Category name color
+ in ( { loggedIn | categories = Dict.update categoryId updateCategory loggedIn.categories } , Cmd.none)
+
+ LoggedInMsg.ValidateDeleteCategory categoryId ->
+ ( { loggedIn | categories = Dict.remove categoryId loggedIn.categories }
+ , Cmd.none
+ )