From 617d30c96792795ab8561a6262c4c5f4e023b6cf Mon Sep 17 00:00:00 2001 From: Joris Date: Sun, 27 Mar 2016 21:24:11 +0200 Subject: Regroup monthly modules --- src/client/elm/LoggedIn/Action.elm | 4 +- src/client/elm/LoggedIn/Model.elm | 9 ++- src/client/elm/LoggedIn/Monthly/Action.elm | 10 +++ src/client/elm/LoggedIn/Monthly/Model.elm | 17 +++++ src/client/elm/LoggedIn/Monthly/Update.elm | 21 ++++++ src/client/elm/LoggedIn/Monthly/View.elm | 89 ++++++++++++++++++++++++++ src/client/elm/LoggedIn/Update.elm | 13 ++-- src/client/elm/LoggedIn/View.elm | 4 +- src/client/elm/Model/Action/MonthlyAction.elm | 10 --- src/client/elm/Model/View/LoggedIn/Monthly.elm | 17 ----- src/client/elm/Update/LoggedIn/Monthly.elm | 21 ------ src/client/elm/View/LoggedIn/Monthly.elm | 88 ------------------------- 12 files changed, 152 insertions(+), 151 deletions(-) create mode 100644 src/client/elm/LoggedIn/Monthly/Action.elm create mode 100644 src/client/elm/LoggedIn/Monthly/Model.elm create mode 100644 src/client/elm/LoggedIn/Monthly/Update.elm create mode 100644 src/client/elm/LoggedIn/Monthly/View.elm delete mode 100644 src/client/elm/Model/Action/MonthlyAction.elm delete mode 100644 src/client/elm/Model/View/LoggedIn/Monthly.elm delete mode 100644 src/client/elm/Update/LoggedIn/Monthly.elm delete mode 100644 src/client/elm/View/LoggedIn/Monthly.elm (limited to 'src/client/elm') diff --git a/src/client/elm/LoggedIn/Action.elm b/src/client/elm/LoggedIn/Action.elm index 32c7e0a..2872f1a 100644 --- a/src/client/elm/LoggedIn/Action.elm +++ b/src/client/elm/LoggedIn/Action.elm @@ -3,10 +3,10 @@ module LoggedIn.Action ) where import Model.Payment exposing (Payments, Payment, PaymentId, PaymentFrequency) -import Model.Action.MonthlyAction exposing (MonthlyAction) import LoggedIn.Account.Action as AccountAction import LoggedIn.AddPayment.Action as AddPaymentAction +import LoggedIn.Monthly.Action as MonthlyAction type Action = NoOp @@ -18,5 +18,5 @@ type Action = | ValidateDeletePayment Payment PaymentFrequency | ToggleEdit PaymentId | UpdatePage Int - | UpdateMonthly MonthlyAction + | UpdateMonthly MonthlyAction.Action | UpdateAccount AccountAction.Action diff --git a/src/client/elm/LoggedIn/Model.elm b/src/client/elm/LoggedIn/Model.elm index c1c573f..8f0843e 100644 --- a/src/client/elm/LoggedIn/Model.elm +++ b/src/client/elm/LoggedIn/Model.elm @@ -3,21 +3,20 @@ module LoggedIn.Model , init ) where +import Model.View.LoggedIn.Edition exposing (..) import Model.User exposing (Users, UserId) import Model.Payment exposing (Payments, PaymentFrequency(..)) import Model.Payer exposing (Payers) import Model.Init exposing (..) -import Model.View.LoggedIn.Edition exposing (..) -import Model.View.LoggedIn.Monthly exposing (..) - import LoggedIn.Account.Model as AccountModel import LoggedIn.AddPayment.Model as AddPaymentModel +import LoggedIn.Monthly.Model as MonthlyModel type alias Model = { users : Users , add : AddPaymentModel.Model - , monthly : Monthly + , monthly : MonthlyModel.Model , account : AccountModel.Model , payments : Payments , paymentsCount : Int @@ -29,7 +28,7 @@ init : Init -> Model init initData = { users = initData.users , add = AddPaymentModel.init Punctual - , monthly = initMonthly initData.monthlyPayments + , monthly = MonthlyModel.init initData.monthlyPayments , account = AccountModel.init initData.me initData.incomes , payments = initData.payments , paymentsCount = initData.paymentsCount diff --git a/src/client/elm/LoggedIn/Monthly/Action.elm b/src/client/elm/LoggedIn/Monthly/Action.elm new file mode 100644 index 0000000..bf974f9 --- /dev/null +++ b/src/client/elm/LoggedIn/Monthly/Action.elm @@ -0,0 +1,10 @@ +module LoggedIn.Monthly.Action + ( Action(..) + ) where + +import Model.Payment exposing (Payment) + +type Action = + ToggleDetail + | AddPayment Payment + | DeletePayment Payment diff --git a/src/client/elm/LoggedIn/Monthly/Model.elm b/src/client/elm/LoggedIn/Monthly/Model.elm new file mode 100644 index 0000000..16009d6 --- /dev/null +++ b/src/client/elm/LoggedIn/Monthly/Model.elm @@ -0,0 +1,17 @@ +module LoggedIn.Monthly.Model + ( Model + , init + ) where + +import Model.Payment exposing (Payments) + +type alias Model = + { payments : Payments + , visibleDetail : Bool + } + +init : Payments -> Model +init payments = + { payments = payments + , visibleDetail = False + } diff --git a/src/client/elm/LoggedIn/Monthly/Update.elm b/src/client/elm/LoggedIn/Monthly/Update.elm new file mode 100644 index 0000000..62b40e6 --- /dev/null +++ b/src/client/elm/LoggedIn/Monthly/Update.elm @@ -0,0 +1,21 @@ +module LoggedIn.Monthly.Update + ( update + ) where + +import LoggedIn.Monthly.Action as MonthlyAction +import LoggedIn.Monthly.Model as MonthlyModel + +update : MonthlyAction.Action -> MonthlyModel.Model -> MonthlyModel.Model +update action monthly = + case action of + MonthlyAction.ToggleDetail -> + { monthly | visibleDetail = not monthly.visibleDetail } + MonthlyAction.AddPayment payment -> + { monthly + | payments = payment :: monthly.payments + , visibleDetail = True + } + MonthlyAction.DeletePayment payment -> + { monthly + | payments = List.filter (((/=) payment.id) << .id) monthly.payments + } diff --git a/src/client/elm/LoggedIn/Monthly/View.elm b/src/client/elm/LoggedIn/Monthly/View.elm new file mode 100644 index 0000000..f9ea3bf --- /dev/null +++ b/src/client/elm/LoggedIn/Monthly/View.elm @@ -0,0 +1,89 @@ +module LoggedIn.Monthly.View + ( view + ) where + +import String +import Signal exposing (Address) + +import Html exposing (..) +import Html.Attributes exposing (..) +import Html.Events exposing (..) + +import LoggedIn.Action as LoggedInAction +import LoggedIn.Model as LoggedInModel + +import LoggedIn.Monthly.Action as MonthlyAction +import LoggedIn.Monthly.Model as MonthlyModel + +import Model exposing (Model) +import Model.Payment as Payment exposing (Payments, Payment) +import Model.Translations exposing (getMessage, getParamMessage) +import Model.Action exposing (..) + +import View.Icon exposing (renderIcon) +import View.Expand exposing (..) +import View.Price exposing (price) + +view : Address Action -> Model -> LoggedInModel.Model -> Html +view address model loggedInModel = + let monthly = loggedInModel.monthly + in if List.length monthly.payments == 0 + then + text "" + else + div + [ classList + [ ("monthlyPayments", True) + , ("detail", monthly.visibleDetail) + ] + ] + [ monthlyCount address model monthly + , if monthly.visibleDetail then paymentsTable address model loggedInModel monthly else text "" + ] + +monthlyCount : Address Action -> Model -> MonthlyModel.Model -> Html +monthlyCount address model monthly = + let count = List.length monthly.payments + total = List.sum << List.map .cost <| monthly.payments + key = if count > 1 then "PluralMonthlyCount" else "SingularMonthlyCount" + in button + [ class "header" + , onClick address (UpdateLoggedIn << LoggedInAction.UpdateMonthly <| MonthlyAction.ToggleDetail) + ] + [ text (getParamMessage [toString count, price model total] key model.translations) + , expand ExpandDown monthly.visibleDetail + ] + +paymentsTable : Address Action -> Model -> LoggedInModel.Model -> MonthlyModel.Model -> Html +paymentsTable address model loggedInModel monthly = + div + [ class "table" ] + ( monthly.payments + |> List.sortBy (String.toLower << .name) + |> List.map (paymentLine address model loggedInModel) + ) + +paymentLine : Address Action -> Model -> LoggedInModel.Model -> Payment -> Html +paymentLine address model loggedInModel payment = + a + [ classList + [ ("row", True) + , ("edition", loggedInModel.paymentEdition == Just payment.id) + ] + , onClick address (UpdateLoggedIn (LoggedInAction.ToggleEdit payment.id)) + ] + [ div [ class "cell category" ] [ text (payment.name) ] + , div + [ classList + [ ("cell cost", True) + , ("refund", payment.cost < 0) + ] + ] + [ text (price model payment.cost) ] + , div + [ class "cell delete" + , onClick address (UpdateLoggedIn <| LoggedInAction.DeletePayment payment Payment.Monthly) + ] + [ button [] [ renderIcon "times" ] + ] + ] diff --git a/src/client/elm/LoggedIn/Update.elm b/src/client/elm/LoggedIn/Update.elm index 35ffaff..3b8090a 100644 --- a/src/client/elm/LoggedIn/Update.elm +++ b/src/client/elm/LoggedIn/Update.elm @@ -23,14 +23,15 @@ import LoggedIn.AddPayment.Action as AddPaymentAction import LoggedIn.AddPayment.Model as AddPaymentModel import LoggedIn.AddPayment.Update as AddPaymentUpdate +import LoggedIn.Monthly.Action as MonthlyAction +import LoggedIn.Monthly.Model as MonthlyModel +import LoggedIn.Monthly.Update as MonthlyUpdate + import Model exposing (Model) import Model.User exposing (UserId) import Model.Payment exposing (..) -import Model.Action.MonthlyAction as Monthly import Model.Translations exposing (Translations, getMessage) -import Update.LoggedIn.Monthly exposing (updateMonthly) - update : Model -> LoggedInAction.Action -> LoggedInModel.Model -> (LoggedInModel.Model, Effects LoggedInAction.Action) update model action loggedInView = case action of @@ -86,7 +87,7 @@ update model action loggedInView = Monthly -> ( { loggedInView | add = newAdd - , monthly = updateMonthly (Monthly.AddPayment newPayment) loggedInView.monthly + , monthly = MonthlyUpdate.update (MonthlyAction.AddPayment newPayment) loggedInView.monthly } , Effects.none ) @@ -108,7 +109,7 @@ update model action loggedInView = case frequency of Monthly -> ( { loggedInView - | monthly = updateMonthly (Monthly.DeletePayment payment) loggedInView.monthly + | monthly = MonthlyUpdate.update (MonthlyAction.DeletePayment payment) loggedInView.monthly } , Effects.none ) @@ -127,7 +128,7 @@ update model action loggedInView = ) LoggedInAction.UpdateMonthly monthlyAction -> - ( { loggedInView | monthly = updateMonthly monthlyAction loggedInView.monthly } + ( { loggedInView | monthly = MonthlyUpdate.update monthlyAction loggedInView.monthly } , Effects.none ) diff --git a/src/client/elm/LoggedIn/View.elm b/src/client/elm/LoggedIn/View.elm index 8561d2c..25624ce 100644 --- a/src/client/elm/LoggedIn/View.elm +++ b/src/client/elm/LoggedIn/View.elm @@ -10,12 +10,12 @@ import Html.Attributes exposing (..) import LoggedIn.Model as LoggedInModel import LoggedIn.Account.View as AccountView import LoggedIn.AddPayment.View as AddPaymentView +import LoggedIn.Monthly.View as MonthlyView import Model exposing (Model) import Model.Payment exposing (Payments) import Model.Action exposing (Action) -import View.LoggedIn.Monthly exposing (monthlyPayments) import View.LoggedIn.Table exposing (paymentsTable) import View.LoggedIn.Paging exposing (paymentsPaging) @@ -27,7 +27,7 @@ view address model loggedInModel = , div [ class "expandables" ] [ AccountView.view address model loggedInModel - , monthlyPayments address model loggedInModel + , MonthlyView.view address model loggedInModel ] , paymentsTable address model loggedInModel , paymentsPaging address loggedInModel diff --git a/src/client/elm/Model/Action/MonthlyAction.elm b/src/client/elm/Model/Action/MonthlyAction.elm deleted file mode 100644 index c2de3e5..0000000 --- a/src/client/elm/Model/Action/MonthlyAction.elm +++ /dev/null @@ -1,10 +0,0 @@ -module Model.Action.MonthlyAction - ( MonthlyAction(..) - ) where - -import Model.Payment exposing (Payment) - -type MonthlyAction = - ToggleDetail - | AddPayment Payment - | DeletePayment Payment diff --git a/src/client/elm/Model/View/LoggedIn/Monthly.elm b/src/client/elm/Model/View/LoggedIn/Monthly.elm deleted file mode 100644 index 3c6f66a..0000000 --- a/src/client/elm/Model/View/LoggedIn/Monthly.elm +++ /dev/null @@ -1,17 +0,0 @@ -module Model.View.LoggedIn.Monthly - ( Monthly - , initMonthly - ) where - -import Model.Payment exposing (Payments) - -type alias Monthly = - { payments : Payments - , visibleDetail : Bool - } - -initMonthly : Payments -> Monthly -initMonthly payments = - { payments = payments - , visibleDetail = False - } diff --git a/src/client/elm/Update/LoggedIn/Monthly.elm b/src/client/elm/Update/LoggedIn/Monthly.elm deleted file mode 100644 index 3741e1f..0000000 --- a/src/client/elm/Update/LoggedIn/Monthly.elm +++ /dev/null @@ -1,21 +0,0 @@ -module Update.LoggedIn.Monthly - ( updateMonthly - ) where - -import Model.Action.MonthlyAction exposing (..) -import Model.View.LoggedIn.Monthly exposing (..) - -updateMonthly : MonthlyAction -> Monthly -> Monthly -updateMonthly action monthly = - case action of - ToggleDetail -> - { monthly | visibleDetail = not monthly.visibleDetail } - AddPayment payment -> - { monthly - | payments = payment :: monthly.payments - , visibleDetail = True - } - DeletePayment payment -> - { monthly - | payments = List.filter (((/=) payment.id) << .id) monthly.payments - } diff --git a/src/client/elm/View/LoggedIn/Monthly.elm b/src/client/elm/View/LoggedIn/Monthly.elm deleted file mode 100644 index ae7e6bc..0000000 --- a/src/client/elm/View/LoggedIn/Monthly.elm +++ /dev/null @@ -1,88 +0,0 @@ -module View.LoggedIn.Monthly - ( monthlyPayments - ) where - -import String -import Signal exposing (Address) - -import Html exposing (..) -import Html.Attributes exposing (..) -import Html.Events exposing (..) - -import LoggedIn.Action as LoggedInAction -import LoggedIn.Model as LoggedInModel - -import Model exposing (Model) -import Model.Payment as Payment exposing (Payments, Payment) -import Model.Translations exposing (getMessage, getParamMessage) -import Model.Action exposing (..) -import Model.Action.MonthlyAction exposing (..) -import Model.View.LoggedIn.Monthly exposing (Monthly) - -import View.Icon exposing (renderIcon) -import View.Expand exposing (..) -import View.Price exposing (price) - -monthlyPayments : Address Action -> Model -> LoggedInModel.Model -> Html -monthlyPayments address model loggedInModel = - let monthly = loggedInModel.monthly - in if List.length monthly.payments == 0 - then - text "" - else - div - [ classList - [ ("monthlyPayments", True) - , ("detail", monthly.visibleDetail) - ] - ] - [ monthlyCount address model monthly - , if monthly.visibleDetail then paymentsTable address model loggedInModel monthly else text "" - ] - -monthlyCount : Address Action -> Model -> Monthly -> Html -monthlyCount address model monthly = - let count = List.length monthly.payments - total = List.sum << List.map .cost <| monthly.payments - key = if count > 1 then "PluralMonthlyCount" else "SingularMonthlyCount" - in button - [ class "header" - , onClick address (UpdateLoggedIn << LoggedInAction.UpdateMonthly <| ToggleDetail) - ] - [ text (getParamMessage [toString count, price model total] key model.translations) - , expand ExpandDown monthly.visibleDetail - ] - -paymentsTable : Address Action -> Model -> LoggedInModel.Model -> Monthly -> Html -paymentsTable address model loggedInModel monthly = - div - [ class "table" ] - ( monthly.payments - |> List.sortBy (String.toLower << .name) - |> List.map (paymentLine address model loggedInModel) - ) - -paymentLine : Address Action -> Model -> LoggedInModel.Model -> Payment -> Html -paymentLine address model loggedInModel payment = - a - [ classList - [ ("row", True) - , ("edition", loggedInModel.paymentEdition == Just payment.id) - ] - , onClick address (UpdateLoggedIn (LoggedInAction.ToggleEdit payment.id)) - ] - [ div [ class "cell category" ] [ text (payment.name) ] - , div - [ classList - [ ("cell cost", True) - , ("refund", payment.cost < 0) - ] - ] - [ text (price model payment.cost) ] - , div - [ class "cell delete" - , onClick address (UpdateLoggedIn <| LoggedInAction.DeletePayment payment Payment.Monthly) - ] - [ button [] [ renderIcon "times" ] - ] - ] -- cgit v1.2.3