diff --git a/src/browser/ui/dom/components/LinkedValueUtils.js b/src/browser/ui/dom/components/LinkedValueUtils.js index 727af85844..84d3f8a9ae 100644 --- a/src/browser/ui/dom/components/LinkedValueUtils.js +++ b/src/browser/ui/dom/components/LinkedValueUtils.js @@ -26,26 +26,26 @@ var hasReadOnlyValue = { 'submit': true }; -function _assertSingleLink(input) { +function _assertSingleLink(inputProps) { invariant( - input.props.checkedLink == null || input.props.valueLink == null, + inputProps.checkedLink == null || inputProps.valueLink == null, 'Cannot provide a checkedLink and a valueLink. If you want to use ' + 'checkedLink, you probably don\'t want to use valueLink and vice versa.' ); } -function _assertValueLink(input) { - _assertSingleLink(input); +function _assertValueLink(inputProps) { + _assertSingleLink(inputProps); invariant( - input.props.value == null && input.props.onChange == null, + inputProps.value == null && inputProps.onChange == null, 'Cannot provide a valueLink and a value or onChange event. If you want ' + 'to use value or onChange, you probably don\'t want to use valueLink.' ); } -function _assertCheckedLink(input) { - _assertSingleLink(input); +function _assertCheckedLink(inputProps) { + _assertSingleLink(inputProps); invariant( - input.props.checked == null && input.props.onChange == null, + inputProps.checked == null && inputProps.onChange == null, 'Cannot provide a checkedLink and a checked property or onChange event. ' + 'If you want to use checked or onChange, you probably don\'t want to ' + 'use checkedLink' @@ -109,43 +109,43 @@ var LinkedValueUtils = { }, /** - * @param {ReactComponent} input Form component + * @param {object} inputProps Props for form component * @return {*} current value of the input either from value prop or link. */ - getValue: function(input) { - if (input.props.valueLink) { - _assertValueLink(input); - return input.props.valueLink.value; + getValue: function(inputProps) { + if (inputProps.valueLink) { + _assertValueLink(inputProps); + return inputProps.valueLink.value; } - return input.props.value; + return inputProps.value; }, /** - * @param {ReactComponent} input Form component + * @param {object} inputProps Props for form component * @return {*} current checked status of the input either from checked prop * or link. */ - getChecked: function(input) { - if (input.props.checkedLink) { - _assertCheckedLink(input); - return input.props.checkedLink.value; + getChecked: function(inputProps) { + if (inputProps.checkedLink) { + _assertCheckedLink(inputProps); + return inputProps.checkedLink.value; } - return input.props.checked; + return inputProps.checked; }, /** - * @param {ReactComponent} input Form component + * @param {object} inputProps Props for form component * @return {function} change callback either from onChange prop or link. */ - getOnChange: function(input) { - if (input.props.valueLink) { - _assertValueLink(input); + getOnChange: function(inputProps) { + if (inputProps.valueLink) { + _assertValueLink(inputProps); return _handleLinkedValueChange; - } else if (input.props.checkedLink) { - _assertCheckedLink(input); + } else if (inputProps.checkedLink) { + _assertCheckedLink(inputProps); return _handleLinkedCheckChange; } - return input.props.onChange; + return inputProps.onChange; } }; diff --git a/src/browser/ui/dom/components/ReactDOMInput.js b/src/browser/ui/dom/components/ReactDOMInput.js index 618894f913..49f783c1e1 100644 --- a/src/browser/ui/dom/components/ReactDOMInput.js +++ b/src/browser/ui/dom/components/ReactDOMInput.js @@ -72,10 +72,10 @@ var ReactDOMInput = ReactClass.createClass({ props.defaultChecked = null; props.defaultValue = null; - var value = LinkedValueUtils.getValue(this); + var value = LinkedValueUtils.getValue(this.props); props.value = value != null ? value : this.state.initialValue; - var checked = LinkedValueUtils.getChecked(this); + var checked = LinkedValueUtils.getChecked(this.props); props.checked = checked != null ? checked : this.state.initialChecked; props.onChange = this._handleChange; @@ -104,7 +104,7 @@ var ReactDOMInput = ReactClass.createClass({ ); } - var value = LinkedValueUtils.getValue(this); + var value = LinkedValueUtils.getValue(this.props); if (value != null) { // Cast `value` to a string to ensure the value is set correctly. While // browsers typically do this as necessary, jsdom doesn't. @@ -114,7 +114,7 @@ var ReactDOMInput = ReactClass.createClass({ _handleChange: function(event) { var returnValue; - var onChange = LinkedValueUtils.getOnChange(this); + var onChange = LinkedValueUtils.getOnChange(this.props); if (onChange) { returnValue = onChange.call(this, event); } diff --git a/src/browser/ui/dom/components/ReactDOMOption.js b/src/browser/ui/dom/components/ReactDOMOption.js index 946e6ed420..dcc593afcc 100644 --- a/src/browser/ui/dom/components/ReactDOMOption.js +++ b/src/browser/ui/dom/components/ReactDOMOption.js @@ -13,12 +13,18 @@ var ReactBrowserComponentMixin = require('ReactBrowserComponentMixin'); var ReactClass = require('ReactClass'); +var ReactDOMSelect = require('ReactDOMSelect'); var ReactElement = require('ReactElement'); +var ReactInstanceMap = require('ReactInstanceMap'); +var ReactPropTypes = require('ReactPropTypes'); +var assign = require('Object.assign'); var warning = require('warning'); var option = ReactElement.createFactory('option'); +var valueContextKey = ReactDOMSelect.valueContextKey; + /** * Implements an