From 9716f77d14ef43f96a1534d97bb9d336df1882be Mon Sep 17 00:00:00 2001 From: Joris Date: Mon, 13 Jun 2016 18:21:19 +0200 Subject: Use simple-form for search and set style --- src/client/elm/LoggedIn/Home/Model.elm | 16 ++++++++-- src/client/elm/LoggedIn/Home/Msg.elm | 4 ++- src/client/elm/LoggedIn/Home/Update.elm | 6 ++-- src/client/elm/LoggedIn/Home/View.elm | 8 ++++- src/client/elm/LoggedIn/Home/View/Search.elm | 19 +++++------ src/client/elm/View/Form.elm | 47 +++++++++++++++++++++------- 6 files changed, 71 insertions(+), 29 deletions(-) (limited to 'src/client') diff --git a/src/client/elm/LoggedIn/Home/Model.elm b/src/client/elm/LoggedIn/Home/Model.elm index 0a2b305..a653995 100644 --- a/src/client/elm/LoggedIn/Home/Model.elm +++ b/src/client/elm/LoggedIn/Home/Model.elm @@ -3,6 +3,9 @@ module LoggedIn.Home.Model exposing , init ) +import Form exposing (Form) +import Form.Validate as Validate exposing (Validation) + import Model.User exposing (Users, UserId) import Model.Payment exposing (PaymentId, Payments, Frequency(..)) import Model.Payer exposing (Payers) @@ -14,7 +17,11 @@ type alias Model = , paymentEdition : Maybe PaymentId , currentPage : Int , monthlyDetail : Bool - , search : String + , search : Form String Search + } + +type alias Search = + { searchText : Maybe String } init : Model @@ -23,5 +30,10 @@ init = , paymentEdition = Nothing , currentPage = 1 , monthlyDetail = False - , search = "" + , search = Form.initial [] validate } + +validate : Validation String Search +validate = + Validate.form1 Search + (Validate.get "searchText" (Validate.maybe Validate.string)) diff --git a/src/client/elm/LoggedIn/Home/Msg.elm b/src/client/elm/LoggedIn/Home/Msg.elm index 0791df0..17a88f8 100644 --- a/src/client/elm/LoggedIn/Home/Msg.elm +++ b/src/client/elm/LoggedIn/Home/Msg.elm @@ -2,6 +2,8 @@ module LoggedIn.Home.Msg exposing ( Msg(..) ) +import Form exposing (Form) + import Model.Payment exposing (PaymentId) import LoggedIn.Home.AddPayment.Msg as AddPaymentMsg @@ -13,4 +15,4 @@ type Msg = | UpdatePage Int | ShowMonthlyDetail | ToggleMonthlyDetail - | UpdateSearch String + | SearchMsg Form.Msg diff --git a/src/client/elm/LoggedIn/Home/Update.elm b/src/client/elm/LoggedIn/Home/Update.elm index 3b62abf..302509f 100644 --- a/src/client/elm/LoggedIn/Home/Update.elm +++ b/src/client/elm/LoggedIn/Home/Update.elm @@ -2,6 +2,8 @@ module LoggedIn.Home.Update exposing ( update ) +import Form exposing (Form) + import LoggedData exposing (LoggedData) import LoggedIn.Home.Msg as HomeMsg @@ -40,9 +42,9 @@ update loggedData action homeModel = , Cmd.none ) - HomeMsg.UpdateSearch search -> + HomeMsg.SearchMsg formMsg -> ( { homeModel - | search = search + | search = Form.update formMsg homeModel.search , currentPage = 1 } , Cmd.none diff --git a/src/client/elm/LoggedIn/Home/View.elm b/src/client/elm/LoggedIn/Home/View.elm index 213e4ab..5ed54b9 100644 --- a/src/client/elm/LoggedIn/Home/View.elm +++ b/src/client/elm/LoggedIn/Home/View.elm @@ -6,6 +6,8 @@ import Html exposing (..) import Html.Attributes exposing (..) import Date +import Form + import Msg exposing (Msg) import LoggedData exposing (LoggedData) @@ -22,7 +24,11 @@ import LoggedIn.Home.View.Paging exposing (paymentsPaging) view : LoggedData -> LoggedInModel.Model -> Html Msg view loggedData loggedIn = - let punctualPayments = Payment.sortedFiltredPunctual loggedIn.search loggedData.payments + let searchText = + Form.getFieldAsString "searchText" loggedIn.search + |> .value + |> Maybe.withDefault "" + punctualPayments = Payment.sortedFiltredPunctual searchText loggedData.payments in div [ class "home" ] [ AddPaymentView.view loggedData loggedIn diff --git a/src/client/elm/LoggedIn/Home/View/Search.elm b/src/client/elm/LoggedIn/Home/View/Search.elm index a4f727a..62db1b2 100644 --- a/src/client/elm/LoggedIn/Home/View/Search.elm +++ b/src/client/elm/LoggedIn/Home/View/Search.elm @@ -5,6 +5,10 @@ module LoggedIn.Home.View.Search exposing import Html exposing (..) import Html.Attributes exposing (..) import Html.Events exposing (..) +import Html.App as Html + +import Form exposing (Form) +import View.Form as Form import Msg exposing (Msg) import LoggedIn.Msg as LoggedInMsg @@ -16,14 +20,7 @@ import Model.Translations exposing (getMessage) paymentsSearch : LoggedData -> HomeModel.Model -> Html Msg paymentsSearch loggedData { search } = - Html.div - [ class "search" ] - [ span - [ class "label" ] - [ text (getMessage "Search" loggedData.translations) ] - , input - [ value search - , onInput (Msg.UpdateLoggedIn << LoggedInMsg.HomeMsg << HomeMsg.UpdateSearch) - ] - [] - ] + let htmlMap = Html.map (Msg.UpdateLoggedIn << LoggedInMsg.HomeMsg << HomeMsg.SearchMsg) + in Html.div + [ class "search" ] + [ Form.textInput loggedData.translations search htmlMap "searchText" ] diff --git a/src/client/elm/View/Form.elm b/src/client/elm/View/Form.elm index fd21a2c..a85ba8a 100644 --- a/src/client/elm/View/Form.elm +++ b/src/client/elm/View/Form.elm @@ -36,18 +36,41 @@ textInput translations form htmlMap fieldName = [ for fieldName ] [ text (Translations.getMessage fieldName translations) ] , case field.liveError of - Just error -> errorElement translations error + Just error -> formError translations error Nothing -> text "" ] -errorElement : Translations -> FormError.Error String -> Html msg -errorElement translations error = - case error of - CustomError key -> - div [ class "errorMessage" ] [ text (Translations.getMessage key translations) ] - SmallerIntThan n -> - div [ class "errorMessage" ] [ text (Translations.getParamMessage [toString n] "SmallerIntThan" translations) ] - GreaterIntThan n -> - div [ class "errorMessage" ] [ text (Translations.getParamMessage [toString n] "GreaterIntThan" translations) ] - error -> - div [ class "errorMessage" ] [ text (Translations.getMessage (toString error) translations) ] +simpleTextInput : Translations -> Form String a -> (Html Form.Msg -> Html msg) -> String -> Html msg +simpleTextInput translations form htmlMap fieldName = + let field = Form.getFieldAsString fieldName form + in div + [ classList + [ ("textInput", True) + , ("error", isJust field.liveError) + ] + ] + [ htmlMap <| + Input.textInput + field + [ id fieldName + , classList [ ("filled", isJust field.value) ] + ] + , label + [ for fieldName ] + [ text (Translations.getMessage fieldName translations) ] + , case field.liveError of + Just error -> formError translations error + Nothing -> text "" + ] + +formError : Translations -> FormError.Error String -> Html msg +formError translations error = + let errorElement error params = + div + [ class "errorMessage" ] + [ text (Translations.getParamMessage params error translations) ] + in case error of + CustomError key -> errorElement key [] + SmallerIntThan n -> errorElement "SmallerIntThan" [toString n] + GreaterIntThan n -> errorElement "GreaterIntThan" [toString n] + error -> errorElement (toString error) [] -- cgit v1.2.3