aboutsummaryrefslogtreecommitdiff
path: root/src/client/elm/LoggedIn/Home/Account/View.elm
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/elm/LoggedIn/Home/Account/View.elm')
-rw-r--r--src/client/elm/LoggedIn/Home/Account/View.elm133
1 files changed, 133 insertions, 0 deletions
diff --git a/src/client/elm/LoggedIn/Home/Account/View.elm b/src/client/elm/LoggedIn/Home/Account/View.elm
new file mode 100644
index 0000000..252f8cf
--- /dev/null
+++ b/src/client/elm/LoggedIn/Home/Account/View.elm
@@ -0,0 +1,133 @@
+module LoggedIn.Home.Account.View
+ ( view
+ ) where
+
+import List
+import Signal exposing (Address)
+
+import Html exposing (..)
+import Html as H exposing (..)
+import Html.Attributes exposing (..)
+import Html.Events exposing (..)
+
+import LoggedIn.Action as LoggedInAction
+
+import LoggedIn.Home.Action as HomeAction
+import LoggedIn.Home.Model as HomeModel
+import LoggedIn.Home.Model.Payer exposing (..)
+import LoggedIn.Home.View.Price exposing (price)
+import LoggedIn.Home.View.Expand exposing (..)
+
+import LoggedIn.Home.Account.Action as AccountAction
+import LoggedIn.Home.Account.Model as AccountModel
+
+import Model exposing (Model)
+import Model.User exposing (getUserName)
+import Model.Translations exposing (getParamMessage, getMessage)
+import Action exposing (..)
+
+import View.Events exposing (onSubmitPrevDefault)
+
+import Utils.Either exposing (toMaybeError)
+
+view : Address Action -> Model -> HomeModel.Model -> Html
+view address model homeModel =
+ let account = homeModel.account
+ in div
+ [ classList
+ [ ("account", True)
+ , ("detail", account.visibleDetail)
+ ]
+ ]
+ [ exceedingPayers address model homeModel
+ , if account.visibleDetail
+ then income address model account
+ else text ""
+ ]
+
+exceedingPayers : Address Action -> Model -> HomeModel.Model -> Html
+exceedingPayers address model homeModel =
+ button
+ [ class "header"
+ , onClick address (UpdateLoggedIn << LoggedInAction.HomeAction << HomeAction.UpdateAccount <| AccountAction.ToggleDetail)
+ ]
+ ( (List.map (exceedingPayer model homeModel) (getOrderedExceedingPayers model.currentTime homeModel.users homeModel.account.incomes homeModel.payments))
+ ++ [ expand ExpandDown homeModel.account.visibleDetail ]
+ )
+
+exceedingPayer : Model -> HomeModel.Model -> ExceedingPayer -> Html
+exceedingPayer model homeModel payer =
+ div
+ [ class "exceedingPayer" ]
+ [ span
+ [ class "userName" ]
+ [ payer.userId
+ |> getUserName homeModel.users
+ |> Maybe.withDefault "−"
+ |> text
+ ]
+ , span
+ [ class "amount" ]
+ [ text ("+ " ++ (price model payer.amount)) ]
+ ]
+
+income : Address Action -> Model -> AccountModel.Model -> Html
+income address model account =
+ case account.incomeEdition of
+ Nothing ->
+ incomeRead address model account
+ Just edition ->
+ incomeEdition address model account edition
+
+incomeRead : Address Action -> Model -> AccountModel.Model -> Html
+incomeRead address model account =
+ div
+ [ class "income" ]
+ [ ( case AccountModel.getCurrentIncome account of
+ Nothing ->
+ text (getMessage "NoIncome" model.translations)
+ Just income ->
+ text (getParamMessage [price model income] "Income" model.translations)
+ )
+ , toggleIncomeEdition address "editIncomeEdition" (getMessage "Edit" model.translations)
+ ]
+
+incomeEdition : Address Action -> Model -> AccountModel.Model -> AccountModel.IncomeEdition -> Html
+incomeEdition address model account edition =
+ H.form
+ [ case AccountModel.validateIncome edition.income model.translations of
+ Ok validatedAmount ->
+ onSubmitPrevDefault address (UpdateLoggedIn << LoggedInAction.HomeAction << HomeAction.UpdateAccount <| AccountAction.UpdateIncome model.currentTime validatedAmount)
+ Err error ->
+ onSubmitPrevDefault address (UpdateLoggedIn << LoggedInAction.HomeAction << HomeAction.UpdateAccount << AccountAction.UpdateEditionError <| error)
+ , class "income"
+ ]
+ [ label
+ [ for "incomeInput" ]
+ [ text (getMessage "NewIncome" model.translations) ]
+ , input
+ [ id "incomeInput"
+ , value edition.income
+ , on "input" targetValue (Signal.message address << UpdateLoggedIn << LoggedInAction.HomeAction << HomeAction.UpdateAccount << AccountAction.UpdateIncomeEdition)
+ , maxlength 10
+ ]
+ []
+ , button
+ [ type' "submit"
+ , class "validateIncomeEdition"
+ ]
+ [ text (getMessage "Validate" model.translations) ]
+ , toggleIncomeEdition address "undoIncomeEdition" (getMessage "Undo" model.translations)
+ , case edition.error of
+ Just error -> div [ class "error" ] [ text error ]
+ Nothing -> text ""
+ ]
+
+toggleIncomeEdition : Address Action -> String -> String -> Html
+toggleIncomeEdition address className name =
+ button
+ [ type' "button"
+ , class className
+ , onClick address (UpdateLoggedIn << LoggedInAction.HomeAction << HomeAction.UpdateAccount <| AccountAction.ToggleIncomeEdition)
+ ]
+ [ text name ]