From 8cd63a64abafe21378c35c2489d49f24c9ece3c9 Mon Sep 17 00:00:00 2001 From: Joris Date: Mon, 4 Apr 2016 01:27:36 +0200 Subject: Add income list CRUD in user page --- src/client/elm/LoggedIn/User/View.elm | 90 +++++++++++++++++++++++++++++++++-- 1 file changed, 87 insertions(+), 3 deletions(-) (limited to 'src/client/elm/LoggedIn/User/View.elm') diff --git a/src/client/elm/LoggedIn/User/View.elm b/src/client/elm/LoggedIn/User/View.elm index 35ea940..74e2ae2 100644 --- a/src/client/elm/LoggedIn/User/View.elm +++ b/src/client/elm/LoggedIn/User/View.elm @@ -2,10 +2,94 @@ module LoggedIn.User.View ( view ) where +import Dict +import Date + import Html exposing (..) +import Html.Events exposing (..) +import Html.Attributes exposing (..) +import Form exposing (Form) +import Form.Input as Input + +import LoggedData exposing (LoggedData) + +import Model.Income exposing (IncomeId, Income) +import Model.Translations exposing (getMessage) +import LoggedIn.User.Model as UserModel + +import Mailbox + +import Action +import LoggedIn.Action as LoggedInAction +import LoggedIn.User.Action as UserAction + +import LoggedIn.View.Date exposing (renderShortDate) +import LoggedIn.View.Price exposing (price) + +import Utils.Maybe exposing (isJust) -view : LoggedData -> Html -view loggedData = +view : LoggedData -> UserModel.Model -> Html +view loggedData userModel = div [] - [ text "Hey" ] + [ h1 [] [ text <| getMessage "AddIncome" loggedData.translations ] + , addIncomeView loggedData userModel.addIncome + , h1 [] [ text <| getMessage "Incomes" loggedData.translations ] + , incomesView loggedData + ] + +addIncomeView : LoggedData -> Form () UserModel.AddIncome -> Html +addIncomeView loggedData addIncome = + let + formAddress = Signal.forwardTo Mailbox.address (Action.UpdateLoggedIn << LoggedInAction.UserAction << UserAction.AddIncomeAction) + errorFor error field = + if isJust field.liveError + then div [ class "error" ] [ text (getMessage error loggedData.translations) ] + else text "" + creation = Form.getFieldAsString "creation" addIncome + amount = Form.getFieldAsString "amount" addIncome + in + div + [] + [ label [] [ text "Creation" ] + , Input.textInput creation formAddress [] + , errorFor "DateValidationError" creation + + , label [] [ text "amount" ] + , Input.textInput amount formAddress [] + , errorFor "IncomeValidationError" amount + + , button + [ case Form.getOutput addIncome of + Just data -> + onClick Mailbox.address (Action.UpdateLoggedIn <| LoggedInAction.AddIncome data.creation data.amount) + Nothing -> + onClick formAddress Form.Submit + ] + [ text (getMessage "Add" loggedData.translations) ] + ] + +incomesView : LoggedData -> Html +incomesView loggedData = + ol + [] + ( loggedData.incomes + |> Dict.toList + |> List.filter ((==) loggedData.me << .userId << snd) + |> List.sortBy (.creation << snd) + |> List.reverse + |> List.map (incomeView loggedData) + ) + +incomeView : LoggedData -> (IncomeId, Income) -> Html +incomeView loggedData (incomeId, income) = + li + [] + [ text <| renderShortDate (Date.fromTime income.creation) loggedData.translations + , text " − " + , text <| price loggedData.conf income.amount + , text " − " + , button + [ onClick Mailbox.address (Action.UpdateLoggedIn <| LoggedInAction.DeleteIncome incomeId) ] + [ text "x" ] + ] -- cgit v1.2.3