diff --git a/superset/assets/javascripts/components/AsyncSelect.jsx b/superset/assets/javascripts/components/AsyncSelect.jsx index 409ec4cbc063..e045dc973c98 100644 --- a/superset/assets/javascripts/components/AsyncSelect.jsx +++ b/superset/assets/javascripts/components/AsyncSelect.jsx @@ -41,7 +41,7 @@ class AsyncSelect extends React.PureComponent { $.get(this.props.dataEndpoint, (data) => { this.setState({ options: mutator ? mutator(data) : data, isLoading: false }); - if (this.props.autoSelect && this.state.options.length) { + if (!this.props.value && this.props.autoSelect && this.state.options.length) { this.onChange(this.state.options[0]); } }) diff --git a/superset/assets/spec/javascripts/components/AsyncSelect_spec.jsx b/superset/assets/spec/javascripts/components/AsyncSelect_spec.jsx index 5b498464b0c7..c08cc664197c 100644 --- a/superset/assets/spec/javascripts/components/AsyncSelect_spec.jsx +++ b/superset/assets/spec/javascripts/components/AsyncSelect_spec.jsx @@ -66,5 +66,17 @@ describe('AsyncSelect', () => { expect(spy.callCount).to.equal(1); expect(spy.calledWith(wrapper.instance().state.options[0])).to.equal(true); }); + it('should not auto select when value prop is set', () => { + const wrapper = mount( + , + ); + const spy = sinon.spy(wrapper.instance(), 'onChange'); + + server.respond(); + + expect(spy.callCount).to.equal(0); + expect(wrapper.find(Select)).to.have.length(1); + expect(wrapper.find('.Select-value-label').children().first().text()).to.equal('another'); + }); }); });