diff --git a/packages/data/src/redux-store/index.js b/packages/data/src/redux-store/index.js index 11bda27c128ac1..942efcadb00be4 100644 --- a/packages/data/src/redux-store/index.js +++ b/packages/data/src/redux-store/index.js @@ -214,6 +214,18 @@ export default function createReduxStore( key, options ) { }, store ); + + let resolvers; + if ( options.resolvers ) { + resolvers = mapResolvers( options.resolvers ); + selectors = mapSelectorsWithResolvers( + selectors, + resolvers, + store, + resolversCache + ); + } + lock( selectors, new Proxy( privateSelectors, { @@ -235,17 +247,6 @@ export default function createReduxStore( key, options ) { } ) ); - let resolvers; - if ( options.resolvers ) { - resolvers = mapResolvers( options.resolvers ); - selectors = mapSelectorsWithResolvers( - selectors, - resolvers, - store, - resolversCache - ); - } - const resolveSelectors = mapResolveSelectors( selectors, store ); const suspendSelectors = mapSuspendSelectors( selectors, store ); diff --git a/packages/data/src/test/privateAPIs.js b/packages/data/src/test/privateAPIs.js index 93df00d287d600..1ccf6adb0c5115 100644 --- a/packages/data/src/test/privateAPIs.js +++ b/packages/data/src/test/privateAPIs.js @@ -96,6 +96,37 @@ describe( 'Private data APIs', () => { ); } ); + it( 'should support combination of private selectors and resolvers', async () => { + const testStore = createReduxStore( 'test', { + reducer: ( state = {}, action ) => { + if ( action.type === 'RECEIVE' ) { + return { ...state, [ action.key ]: action.value }; + } + return state; + }, + selectors: { + get: ( state, key ) => state[ key ], + }, + resolvers: { + get: + ( key ) => + async ( { dispatch } ) => { + const value = await ( 'resolved-' + key ); + dispatch( { type: 'RECEIVE', key, value } ); + }, + }, + } ); + unlock( testStore ).registerPrivateSelectors( { + peek: ( state, key ) => state[ key ], + } ); + registry.register( testStore ); + + await registry.resolveSelect( testStore ).get( 'x' ); + expect( unlock( registry.select( testStore ) ).peek( 'x' ) ).toBe( + 'resolved-x' + ); + } ); + it( 'should give private selectors access to the state', () => { const groceryStore = createStore(); unlock( groceryStore ).registerPrivateSelectors( {