From 7bcb16d5e6510610637a08aeefa3045365e77676 Mon Sep 17 00:00:00 2001 From: Shawn Erquhart Date: Mon, 25 Sep 2017 14:19:24 -0400 Subject: [PATCH] fix nested field updates --- src/components/Widgets/ObjectControl.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/components/Widgets/ObjectControl.js b/src/components/Widgets/ObjectControl.js index ae3dd43d..fea66f01 100644 --- a/src/components/Widgets/ObjectControl.js +++ b/src/components/Widgets/ObjectControl.js @@ -21,6 +21,13 @@ export default class ObjectControl extends Component { className: PropTypes.string, }; + /** + * In case the `onChange` function is frozen by a child widget implementation, + * e.g. when debounced, always get the latest object value instead of usin + * `this.props.value` directly. + */ + getObjectValue = () => this.props.value; + controlFor(field) { const { onAddAsset, onRemoveAsset, getAsset, value, onChange } = this.props; if (field.get('widget') === 'hidden') { @@ -38,7 +45,7 @@ export default class ObjectControl extends Component { field, value: fieldValue, onChange: (val, metadata) => { - onChange((value || Map()).set(field.get('name'), val), metadata); + onChange((this.getObjectValue() || Map()).set(field.get('name'), val), metadata); }, onAddAsset, onRemoveAsset,