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