Coder Social home page Coder Social logo

Comments (7)

stunaz avatar stunaz commented on June 6, 2024 1

Can't reproduce. Its working fine.

from redux-form-material-ui.

JeffreyATW avatar JeffreyATW commented on June 6, 2024

@prawana-perera This is an issue with Material UI. The SelectField's onBlur hooks don't seem to work properly, so there's no way to hook into Redux Form and tell it that the field has been touched.

from redux-form-material-ui.

stunaz avatar stunaz commented on June 6, 2024

@JeffreyATW Indeed

from redux-form-material-ui.

prawana-perera avatar prawana-perera commented on June 6, 2024

Thanks for your response. Yes, there are some open issues in material-ui around this. Closing issue.

from redux-form-material-ui.

otajor avatar otajor commented on June 6, 2024

@prawana-perera @JeffreyATW any workaround for this? Did you end up using another component? Or manually setting the touched field somehow?

from redux-form-material-ui.

JeffreyATW avatar JeffreyATW commented on June 6, 2024

Nope, still waiting for Material-UI "next" to be released.

from redux-form-material-ui.

mattste avatar mattste commented on June 6, 2024

I also ran into this today. A few possible workarounds:

  1. Set touchOnChange to true. I believe the downside of this is that if any value in your form changes, the field will be marked as touched. You may not want that behavior.

  2. Pass a custom onChange function that will be called (alongside the standard change dispatch) when the SelectField changes. This was added recently in P/R #50.

Solution:

class MyForm extends Component {
  render() {
    const { changeWithTouch } = this.props
    return (
      <Field name="mySelect" component={SelectField} onChange={(val) => changeWithTouch('mySelect', val, true /* touched prop */)}>
        <MenuItem value="Option 1" primaryText="Option 1" />
      </Field>
    )
  }
}

let MyForm = reduxForm({
  form: 'myForm',
})(MyForm)

const changeWithTouch = (field, val, touch) => change('myForm', field, val, touch)
const mapDispatchToProps = (dispatch) => (bindActionCreators({ changeWithTouch }, dispatch))
MyForm = connect(undefined, mapDispatchToProps)(MyForm)

Unfortunately, the bound action creators passed to your redux-form do not allow for setting the touched property (see: https://github.com/erikras/redux-form/blob/ac3b6da74b6939f621b7e4c659eec0af451395d9/src/reduxForm.js#L526). You can only set it through the method described above. Ideally, we could do something like this:

class MyForm extends Component {
  render() {
    const { change } = this.props
    return (
      <Field name="mySelect" component={SelectField} onChange={(val) => change('mySelect', val, true /* touched prop */)}>
        <MenuItem value="Option 1" primaryText="Option 1" />
      </Field>
    )
  }
}

let MyForm = reduxForm({
  form: 'myForm',
})(MyForm)

If @erikras thinks it's okay to allow the redux-form bound action creators to pass in a touch parameter that overrides the touchOnChange, then I'll submit a P/R in the redux-form repo.

Hope this helps @oturnermajor

from redux-form-material-ui.

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.