aboutsummaryrefslogtreecommitdiff
path: root/src/client/elm/LoggedIn
diff options
context:
space:
mode:
authorJoris2016-03-27 21:24:11 +0200
committerJoris2016-03-27 21:24:11 +0200
commit617d30c96792795ab8561a6262c4c5f4e023b6cf (patch)
tree3174d82e3839e942a4be17a065415b497405fd0b /src/client/elm/LoggedIn
parent0c9d2b91e73f045067f7bcce6e4235fc9008f309 (diff)
Regroup monthly modules
Diffstat (limited to 'src/client/elm/LoggedIn')
-rw-r--r--src/client/elm/LoggedIn/Action.elm4
-rw-r--r--src/client/elm/LoggedIn/Model.elm9
-rw-r--r--src/client/elm/LoggedIn/Monthly/Action.elm10
-rw-r--r--src/client/elm/LoggedIn/Monthly/Model.elm17
-rw-r--r--src/client/elm/LoggedIn/Monthly/Update.elm21
-rw-r--r--src/client/elm/LoggedIn/Monthly/View.elm89
-rw-r--r--src/client/elm/LoggedIn/Update.elm13
-rw-r--r--src/client/elm/LoggedIn/View.elm4
8 files changed, 152 insertions, 15 deletions
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