diff --git a/packages/core-data/src/queried-data/selectors.js b/packages/core-data/src/queried-data/selectors.js index a3e6f322274ce..562aab7ce6b79 100644 --- a/packages/core-data/src/queried-data/selectors.js +++ b/packages/core-data/src/queried-data/selectors.js @@ -68,7 +68,7 @@ function getQueriedItemsUncached( state, query ) { const field = fields[ f ].split( '.' ); let value = item; field.forEach( ( fieldName ) => { - value = value[ fieldName ]; + value = value?.[ fieldName ]; } ); setNestedValue( filteredItem, field, value ); diff --git a/packages/core-data/src/selectors.ts b/packages/core-data/src/selectors.ts index 7d6cbeb4daeee..34445f73d2e60 100644 --- a/packages/core-data/src/selectors.ts +++ b/packages/core-data/src/selectors.ts @@ -344,7 +344,7 @@ export const getEntityRecord = createSelector( const field = fields[ f ].split( '.' ); let value = item; field.forEach( ( fieldName ) => { - value = value[ fieldName ]; + value = value?.[ fieldName ]; } ); setNestedValue( filteredItem, field, value ); } diff --git a/packages/core-data/src/test/selectors.js b/packages/core-data/src/test/selectors.js index 161d0af4ea5bc..5ae7a81fa144e 100644 --- a/packages/core-data/src/test/selectors.js +++ b/packages/core-data/src/test/selectors.js @@ -135,6 +135,43 @@ describe.each( [ } ) ).toEqual( { content: 'chicken' } ); } ); + + it( 'should work well for nested fields properties', () => { + const state = deepFreeze( { + entities: { + records: { + root: { + postType: { + queriedData: { + items: { + default: { + post: { + foo: undefined, + }, + }, + }, + itemIsComplete: { + default: { + post: true, + }, + }, + queries: {}, + }, + }, + }, + }, + }, + } ); + expect( + getEntityRecord( state, 'root', 'postType', 'post', { + _fields: [ 'foo.bar' ], + } ) + ).toEqual( { + foo: { + bar: undefined, + }, + } ); + } ); } ); describe( 'hasEntityRecords', () => {