From 86e7c23377d9c71fc9ffb7e216332ab1c385b366 Mon Sep 17 00:00:00 2001 From: Kelly Dwan Date: Fri, 4 Dec 2020 18:39:34 -0500 Subject: [PATCH 1/3] Core Data: Normalize _fields value for use in stableKey --- .../src/queried-data/get-query-parts.js | 4 ++- .../src/queried-data/test/get-query-parts.js | 12 +++++++ packages/core-data/src/test/selectors.js | 33 +++++++++++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-) diff --git a/packages/core-data/src/queried-data/get-query-parts.js b/packages/core-data/src/queried-data/get-query-parts.js index ad6ed09792c001..9b54bd4c7cfa20 100644 --- a/packages/core-data/src/queried-data/get-query-parts.js +++ b/packages/core-data/src/queried-data/get-query-parts.js @@ -48,7 +48,7 @@ export function getQueryParts( query ) { for ( let i = 0; i < keys.length; i++ ) { const key = keys[ i ]; - const value = query[ key ]; + let value = query[ key ]; switch ( key ) { case 'page': @@ -73,6 +73,8 @@ export function getQueryParts( query ) { // Example: Asking for titles in posts without title support. if ( key === '_fields' ) { parts.fields = getNormalizedCommaSeparable( value ); + // Make sure to normalize value for `stableKey` + value = parts.fields.join(); } // While it could be any deterministic string, for simplicity's diff --git a/packages/core-data/src/queried-data/test/get-query-parts.js b/packages/core-data/src/queried-data/test/get-query-parts.js index 9390c1b36ac160..156e18c995cc4c 100644 --- a/packages/core-data/src/queried-data/test/get-query-parts.js +++ b/packages/core-data/src/queried-data/test/get-query-parts.js @@ -79,4 +79,16 @@ describe( 'getQueryParts', () => { include: null, } ); } ); + + it( 'encodes stable string key with fields parameters', () => { + const parts = getQueryParts( { _fields: [ 'id', 'title' ] } ); + + expect( parts ).toEqual( { + page: 1, + perPage: 10, + stableKey: '_fields=id%2Ctitle', + fields: [ 'id', 'title' ], + include: null, + } ); + } ); } ); diff --git a/packages/core-data/src/test/selectors.js b/packages/core-data/src/test/selectors.js index 0ec684a21d33d6..f0350af96e2b7e 100644 --- a/packages/core-data/src/test/selectors.js +++ b/packages/core-data/src/test/selectors.js @@ -248,6 +248,39 @@ describe( 'getEntityRecords', () => { ] ); } ); + it( 'should return filtered items', () => { + const state = deepFreeze( { + entities: { + data: { + postType: { + post: { + queriedData: { + items: { + 1: { + id: 1, + content: 'chicken', + author: 'bob', + }, + }, + itemIsComplete: { + 1: true, + }, + queries: { + '_fields=id%2Ccontent': [ 1 ], + }, + }, + }, + }, + }, + }, + } ); + expect( + getEntityRecords( state, 'postType', 'post', { + _fields: [ 'id', 'content' ], + } ) + ).toEqual( [ { id: 1, content: 'chicken' } ] ); + } ); + it( 'should return the same instance with the same arguments', () => { let state = deepFreeze( { entities: { From e034c936eb9e0fd7bbba8246f5e64d48a6892aba Mon Sep 17 00:00:00 2001 From: Kelly Dwan Date: Fri, 4 Dec 2020 19:07:02 -0500 Subject: [PATCH 2/3] Fix existing tests --- packages/core-data/src/queried-data/test/selectors.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core-data/src/queried-data/test/selectors.js b/packages/core-data/src/queried-data/test/selectors.js index f9aa52e1176cac..59ccd92016c02d 100644 --- a/packages/core-data/src/queried-data/test/selectors.js +++ b/packages/core-data/src/queried-data/test/selectors.js @@ -94,7 +94,7 @@ describe( 'getQueriedItems', () => { 2: true, }, queries: { - '_fields%5B0%5D=content': [ 1, 2 ], + '_fields=content': [ 1, 2 ], }, }; @@ -133,7 +133,7 @@ describe( 'getQueriedItems', () => { 2: true, }, queries: { - '_fields%5B0%5D=content&_fields%5B1%5D=meta.template': [ 1, 2 ], + '_fields=content,meta.template': [ 1, 2 ], }, }; From ffe270c7be948f458e36259693c4789f2f51743f Mon Sep 17 00:00:00 2001 From: Kelly Dwan Date: Fri, 8 Jan 2021 15:01:17 -0500 Subject: [PATCH 3/3] Fix selector used in tests --- packages/core-data/src/queried-data/test/selectors.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core-data/src/queried-data/test/selectors.js b/packages/core-data/src/queried-data/test/selectors.js index 59ccd92016c02d..76dec520a73589 100644 --- a/packages/core-data/src/queried-data/test/selectors.js +++ b/packages/core-data/src/queried-data/test/selectors.js @@ -133,7 +133,7 @@ describe( 'getQueriedItems', () => { 2: true, }, queries: { - '_fields=content,meta.template': [ 1, 2 ], + '_fields=content%2Cmeta.template': [ 1, 2 ], }, };