diff --git a/assets/js/modules/pagespeed-insights/datastore/service.js b/assets/js/modules/pagespeed-insights/datastore/service.js index 815016d45fd..4bb05a4f9d7 100644 --- a/assets/js/modules/pagespeed-insights/datastore/service.js +++ b/assets/js/modules/pagespeed-insights/datastore/service.js @@ -21,6 +21,13 @@ */ import { addQueryArgs } from '@wordpress/url'; +/** + * Internal dependencies + */ +import { createRegistrySelector } from 'googlesitekit-data'; +import { CORE_SITE } from '@/js/googlesitekit/datastore/site/constants'; +import { MODULES_PAGESPEED_INSIGHTS } from './constants'; + export const selectors = { /** * Gets a URL to the service. @@ -47,6 +54,22 @@ export const selectors = { utm_source: 'sitekit', } ); }, + + /** + * Gets the details link URL for the module. + * + * @since 1.184.0 + * + * @return {string} Details link URL. + */ + getDetailsLinkURL: createRegistrySelector( ( select ) => () => { + const referenceSiteURL = select( CORE_SITE ).getReferenceSiteURL(); + + return select( MODULES_PAGESPEED_INSIGHTS ).getServiceURL( { + path: 'report', + query: { url: referenceSiteURL }, + } ); + } ), }; const store = { diff --git a/assets/js/modules/pagespeed-insights/datastore/service.test.js b/assets/js/modules/pagespeed-insights/datastore/service.test.js index 350254a05db..712a95f459d 100644 --- a/assets/js/modules/pagespeed-insights/datastore/service.test.js +++ b/assets/js/modules/pagespeed-insights/datastore/service.test.js @@ -20,6 +20,7 @@ * * Internal dependencies */ +import { CORE_SITE } from '@/js/googlesitekit/datastore/site/constants'; import { CORE_USER } from '@/js/googlesitekit/datastore/user/constants'; import { createTestRegistry } from '@tests/js/utils'; import { MODULES_PAGESPEED_INSIGHTS } from './constants'; @@ -97,5 +98,30 @@ describe( 'module/pagespeed-insights service store', () => { } ); } ); } ); + + describe( 'getDetailsLinkURL', () => { + it( 'should return the service report URL for the reference site', () => { + const referenceSiteURL = 'https://example.com/'; + + registry.dispatch( CORE_SITE ).receiveSiteInfo( { + referenceSiteURL, + } ); + + const detailsLinkURL = registry + .select( MODULES_PAGESPEED_INSIGHTS ) + .getDetailsLinkURL(); + + const expectedURL = registry + .select( MODULES_PAGESPEED_INSIGHTS ) + .getServiceURL( { + path: 'report', + query: { url: referenceSiteURL }, + } ); + + expect( new URL( detailsLinkURL ) ).toEqual( + new URL( expectedURL ) + ); + } ); + } ); } ); } );