module Dialog.Update exposing ( update ) import Dom exposing (Id) import Form exposing (Form) import Form.Field as Field import Task import Dialog.AddCategory.Model as AddCategory import Dialog.AddIncome.Model as AddIncome import Dialog.AddPayment.Model as AddPayment import Dialog.Model as Dialog import Dialog.Msg as Dialog import Model.Category exposing (Categories) import Model.PaymentCategory as PaymentCategory exposing (PaymentCategories) update : Dialog.Msg -> Dialog.Model -> (Dialog.Model, Cmd Dialog.Msg) update msg model = case msg of Dialog.NoOp -> ( model , Cmd.none ) Dialog.Init inputId dialogMsg -> update dialogMsg model |> Tuple.mapSecond (\cmd -> Cmd.batch [cmd, inputFocus inputId]) Dialog.AddPaymentMsg categories paymentCategories formMsg -> ( { model | addPayment = Form.update (AddPayment.validation categories) formMsg model.addPayment |> updateCategory categories paymentCategories formMsg } , Cmd.none ) Dialog.AddIncomeMsg formMsg -> ( { model | addIncome = Form.update AddIncome.validation formMsg model.addIncome } , Cmd.none ) Dialog.AddCategoryMsg formMsg -> ( { model | addCategory = Form.update AddCategory.validation formMsg model.addCategory } , Cmd.none ) inputFocus : Id -> Cmd Dialog.Msg inputFocus id = Dom.focus id |> Task.map (always Dialog.NoOp) |> Task.onError (\_ -> Task.succeed Dialog.NoOp) |> Task.perform (always Dialog.NoOp) updateCategory : Categories -> PaymentCategories -> Form.Msg -> (Form String AddPayment.Model -> Form String AddPayment.Model) updateCategory categories paymentCategories formMsg = case formMsg of Form.Input "name" Form.Text (Field.String paymentName) -> case PaymentCategory.search paymentName paymentCategories of Just category -> Form.update (AddPayment.validation categories) (Form.Input "category" Form.Text (Field.String <| toString category)) Nothing -> identity _ -> identity