Git Product home page Git Product logo

Comments (6)

pablohirafuji avatar pablohirafuji commented on May 23, 2024

Let me see if I understood correctly. You want to dinamically change the form field's values based on the value of other fields, while keeping some values?

If that is correct, I would use the Form.inital function to fill the form, because then you could change the fields based on the changed input you would like to listen for changes. Like:

    FormMsg (Form.Input "fieldToListen" inputType fieldValue) ->
      let
         newFormValue : List (String, Field)
         newFormValue =
            [ ( "fieldToListen", Field.value fieldValue )
            , Form.Init.setString "changeThiField" "toThisValue"
            , Form.Init.setBool "changeThiFieldToo" False
            ]

      in
        { model | form = Form.inital newFormValue formValidation }

Note: I haven't used the lastest version of the package, still didn't update my code to Elm 0.18. Code based on the lastest docs (elm-form 1.0.0), didn't test. I don't know if it's the best approach, but it is the one I use (elm-simple-form 4.0.0) and works pretty well.

from elm-form.

simonh1000 avatar simonh1000 commented on May 23, 2024

The problem with your example above is that you only handle one Form.Input message, which is what the library does anyway. The value of the Reset message is that you can pass a list of (input, value), but the challenge is that you cannot then work with them as easily as before. The code snippet above shows a way of tunneling multiple messages in a Reset but it is not very elegant.

I have another part of my app that has

        FormMulti msgs ->
            let
                newForm =
                    L.foldl Form.update model.form msgs

             
            in
                ( { model | form = newForm }
                , Cmd.none
                )

But this was possible because my Html elements did not have to return Form.Msg.

from elm-form.

etaque avatar etaque commented on May 23, 2024

Ok I see the problem. The desired function is Form.Tree.asValue, but isn't exported as the tree structure is an implementation detail:
https://github.com/etaque/elm-form/blob/master/src/Form/Tree.elm#L97

(note that type alias Field = Tree FieldValue)

Would a BatchInput (List (String, InputType, FieldValue)) message solve your case? How and from where would you emit this message?

from elm-form.

simonh1000 avatar simonh1000 commented on May 23, 2024

I'm not sure whether the Input type is necessary, in that it is implicit in the field name, but otherwise this would be ideal. The key need is to be able to create this BatchInput in the view function. I might have function that wants to return a Html Form.Msg but with multiple form updates. When I have a different return type I can create my own message to carry the data to update and then build Form.Msg from those to fold into the form.

(I have to say I don't really see the the need for the Field and Fieldvalue, as everything seemed to work well before.)

from elm-form.

etaque avatar etaque commented on May 23, 2024

(I have to say I don't really see the the need for the Field and Fieldvalue, as everything seemed to work well before.)

That's because the Tree structure has been extracted since list validation, before that logic was duplicated and scattered between field values and errors.

from elm-form.

etaque avatar etaque commented on May 23, 2024

doc needs tracked in #85

from elm-form.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.