diff --git a/src/client/dapi/DataApiMediator.js b/src/client/dapi/DataApiMediator.js index 89b600b..58f9fae 100644 --- a/src/client/dapi/DataApiMediator.js +++ b/src/client/dapi/DataApiMediator.js @@ -166,22 +166,26 @@ module.exports = Class( 'DataApiMediator', : this._getDefaultValue( val_label ) ); - indexes.forEach( ( _, i ) => - group.setOptions( name, i, val_label, existing[ i ] ) - ); - - - const update = this._populateWithMap( - dapi_manager, name, indexes, quote - ); - - update[ name ] = field_update; - // allow the stack to clear before setting data to allow any // existing bucket processing to complete before hooks are kicked // off yet again (which, in practice, could otherwise result in - // infinite recursion depending on what the hooks are doing) - setTimeout( () => quote.setData( update ) ); + // infinite recursion depending on what the hooks are doing), and to + // allow the UI to update with any new elements we might be about to + // populate + setTimeout( () => + { + indexes.forEach( ( _, i ) => + group.setOptions( name, i, val_label, existing[ i ] ) + ); + + const update = this._populateWithMap( + dapi_manager, name, indexes, quote + ); + + update[ name ] = field_update; + + quote.setData( update ); + } ); }, diff --git a/test/client/dapi/DataApiMediatorTest.js b/test/client/dapi/DataApiMediatorTest.js index 62e12b1..6bf2017 100644 --- a/test/client/dapi/DataApiMediatorTest.js +++ b/test/client/dapi/DataApiMediatorTest.js @@ -368,6 +368,8 @@ describe( "DataApiMediator", () => [name]: { setOptions( given_name, given_index, given_data, given_cur ) { + expect( stack_cleared ).to.be.true; + // index is implicitly tested by the given_cur line expect( given_name ).to.equal( name ); expect( given_data ).to.deep.equal( val_label );