Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor waitFor* actions with resolveSelect. #9978

Open
wants to merge 17 commits into
base: develop
Choose a base branch
from

Conversation

techanvil
Copy link
Collaborator

@techanvil techanvil commented Jan 6, 2025

Summary

Addresses issue:

Relevant technical choices

PR Author Checklist

  • My code is tested and passes existing unit tests.
  • My code has an appropriate set of unit tests which all pass.
  • My code is backward-compatible with WordPress 5.2 and PHP 7.4.
  • My code follows the WordPress coding standards.
  • My code has proper inline documentation.
  • I have added a QA Brief on the issue linked above.
  • I have signed the Contributor License Agreement (see https://cla.developers.google.com/).

Do not alter or remove anything below. The following sections will be managed by moderators only.

Code Reviewer Checklist

  • Run the code.
  • Ensure the acceptance criteria are satisfied.
  • Reassess the implementation with the IB.
  • Ensure no unrelated changes are included.
  • Ensure CI checks pass.
  • Check Storybook where applicable.
  • Ensure there is a QA Brief.
  • Ensure there are no unexpected significant changes to file sizes.

Merge Reviewer Checklist

  • Ensure the PR has the correct target branch.
  • Double-check that the PR is okay to be merged.
  • Ensure the corresponding issue has a ZenHub release assigned.
  • Add a changelog message to the issue.

@techanvil techanvil force-pushed the enhancement/9008-remove-waitfor-actions branch from dfc9788 to 7cea708 Compare January 6, 2025 17:20
Copy link

github-actions bot commented Jan 6, 2025

Build files for df6be4e are ready:

Copy link

github-actions bot commented Jan 6, 2025

Size Change: -1.09 kB (-0.06%)

Total Size: 1.98 MB

Filename Size Change
./dist/assets/js/43-********************.js 3.12 kB +1 B (+0.03%)
./dist/assets/js/googlesitekit-ad-blocking-recovery-********************.js 54.2 kB +1 B (0%)
./dist/assets/js/googlesitekit-adminbar-********************.js 34.8 kB +1 B (0%)
./dist/assets/js/googlesitekit-api-********************.js 10.1 kB +2 B (+0.02%)
./dist/assets/js/googlesitekit-components-gm2-********************.js 6.18 kB +3 B (+0.05%)
./dist/assets/js/googlesitekit-components-gm3-********************.js 10.1 kB -1 B (-0.01%)
./dist/assets/js/googlesitekit-datastore-forms-********************.js 8.97 kB -1 B (-0.01%)
./dist/assets/js/googlesitekit-datastore-location-********************.js 2.08 kB -2 B (-0.1%)
./dist/assets/js/googlesitekit-datastore-site-********************.js 20.3 kB -21 B (-0.1%)
./dist/assets/js/googlesitekit-entity-dashboard-********************.js 81.5 kB +30 B (+0.04%)
./dist/assets/js/googlesitekit-main-dashboard-********************.js 166 kB +12 B (+0.01%)
./dist/assets/js/googlesitekit-metric-selection-********************.js 52.1 kB +4 B (+0.01%)
./dist/assets/js/googlesitekit-modules-********************.js 22.4 kB +1 B (0%)
./dist/assets/js/googlesitekit-modules-adsense-********************.js 119 kB -102 B (-0.09%)
./dist/assets/js/googlesitekit-modules-analytics-4-********************.js 190 kB -957 B (-0.5%)
./dist/assets/js/googlesitekit-modules-pagespeed-insights-********************.js 22.6 kB +12 B (+0.05%)
./dist/assets/js/googlesitekit-modules-reader-revenue-manager-********************.js 43.2 kB +6 B (+0.01%)
./dist/assets/js/googlesitekit-modules-search-console-********************.js 69.1 kB +5 B (+0.01%)
./dist/assets/js/googlesitekit-modules-sign-in-with-google-********************.js 31.2 kB +1 B (0%)
./dist/assets/js/googlesitekit-modules-tagmanager-********************.js 32.2 kB -126 B (-0.39%)
./dist/assets/js/googlesitekit-notifications-********************.js 37.1 kB +42 B (+0.11%)
./dist/assets/js/googlesitekit-polyfills-********************.js 377 B -1 B (-0.26%)
./dist/assets/js/googlesitekit-settings-********************.js 127 kB +5 B (0%)
./dist/assets/js/googlesitekit-splash-********************.js 68.7 kB -4 B (-0.01%)
./dist/assets/js/googlesitekit-vendor-********************.js 324 kB -4 B (0%)
./dist/assets/js/googlesitekit-widgets-********************.js 102 kB -4 B (0%)
./dist/assets/js/googlesitekit-wp-dashboard-********************.js 63.2 kB +3 B (0%)
./dist/assets/js/runtime-********************.js 1.4 kB -1 B (-0.07%)
ℹ️ View Unchanged
Filename Size
./dist/assets/css/googlesitekit-admin-css-********************.min.css 62.2 kB
./dist/assets/css/googlesitekit-adminbar-css-********************.min.css 11.8 kB
./dist/assets/css/googlesitekit-authorize-application-css-********************.min.css 846 B
./dist/assets/css/googlesitekit-wp-dashboard-css-********************.min.css 8.44 kB
./dist/assets/js/33-********************.js 2.76 kB
./dist/assets/js/34-********************.js 2.25 kB
./dist/assets/js/35-********************.js 3.64 kB
./dist/assets/js/36-********************.js 936 B
./dist/assets/js/37-********************.js 892 B
./dist/assets/js/38-********************.js 1.61 kB
./dist/assets/js/39-********************.js 1.57 kB
./dist/assets/js/40-********************.js 1.61 kB
./dist/assets/js/41-********************.js 1.59 kB
./dist/assets/js/42-********************.js 1.83 kB
./dist/assets/js/analytics-advanced-tracking-********************.js 901 B
./dist/assets/js/googlesitekit-activation-********************.js 24 kB
./dist/assets/js/googlesitekit-consent-mode-********************.js 25.6 kB
./dist/assets/js/googlesitekit-data-********************.js 2.37 kB
./dist/assets/js/googlesitekit-datastore-ui-********************.js 10 kB
./dist/assets/js/googlesitekit-datastore-user-********************.js 28.2 kB
./dist/assets/js/googlesitekit-events-provider-contact-form-7-********************.js 646 B
./dist/assets/js/googlesitekit-events-provider-easy-digital-downloads-********************.js 624 B
./dist/assets/js/googlesitekit-events-provider-mailchimp-********************.js 630 B
./dist/assets/js/googlesitekit-events-provider-ninja-forms-********************.js 712 B
./dist/assets/js/googlesitekit-events-provider-optin-monster-********************.js 675 B
./dist/assets/js/googlesitekit-events-provider-popup-maker-********************.js 634 B
./dist/assets/js/googlesitekit-events-provider-woocommerce-********************.js 657 B
./dist/assets/js/googlesitekit-events-provider-wpforms-********************.js 633 B
./dist/assets/js/googlesitekit-i18n-********************.js 3.93 kB
./dist/assets/js/googlesitekit-modules-ads-********************.js 35.8 kB
./dist/assets/js/googlesitekit-user-input-********************.js 43.9 kB

compressed-size-action

@ankitrox
Copy link
Collaborator

ankitrox commented Jan 7, 2025

LGTM 💯

Moving this to MR.

Copy link
Collaborator

@aaemnnosttv aaemnnosttv left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @techanvil – this looks solid overall. Looks like I missed the detail about AMP containers in the IB but it should be quick to address. A few other questions/suggestions below as well.

assets/js/googlesitekit/data/create-existing-tag-store.js Outdated Show resolved Hide resolved
Comment on lines +88 to +90
fetchMock.getOnce(
new RegExp(
'^/google-site-kit/v1/modules/analytics-4/data/account-summaries'
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this intentionally defined after render? I don't think we could be sure it would work this way.

Copy link
Collaborator Author

@techanvil techanvil Jan 9, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is, yup. It was a bit of an odd one that took some digging to figure out what was going on.

I've added a clarifying comment, basically it's a side effect of adding the resolver for getPropertySummaries() which resolves getAccountSummaries().

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @techanvil – is it important that the resolver finishes? It seems to me that it would be more appropriate to update the fetch mock for the same endpoint above to freeze fetch "manually" using fetchMock.get rather than once so that it would handle both requests. I think the context of the comment is useful, but even if we keep the same mock, we should define it before render. This should be possible since it supports defining multiple matchers/mocks as well as simple repetition. See https://www.wheresrhys.co.uk/fetch-mock/docs/legacy-api/Usage/cheatsheet#timing-and-repetition

assets/js/modules/tagmanager/datastore/containers.js Outdated Show resolved Hide resolved
Copy link
Collaborator

@aaemnnosttv aaemnnosttv left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @techanvil ! This is almost there, just a few comments left to address.

Comment on lines +88 to +90
fetchMock.getOnce(
new RegExp(
'^/google-site-kit/v1/modules/analytics-4/data/account-summaries'
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @techanvil – is it important that the resolver finishes? It seems to me that it would be more appropriate to update the fetch mock for the same endpoint above to freeze fetch "manually" using fetchMock.get rather than once so that it would handle both requests. I think the context of the comment is useful, but even if we keep the same mock, we should define it before render. This should be possible since it supports defining multiple matchers/mocks as well as simple repetition. See https://www.wheresrhys.co.uk/fetch-mock/docs/legacy-api/Usage/cheatsheet#timing-and-repetition

Comment on lines +766 to +774
const summaries =
select( MODULES_ANALYTICS_4 ).getAccountSummaries( accountID );

if ( summaries === undefined ) {
yield commonActions.await(
resolveSelect( MODULES_ANALYTICS_4 ).getAccountSummaries(
accountID
)
);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we can and should simplify this to be unconditional since there's no downside to calling the selector here. This kind of guard is only really necessary around fetch actions, but the WP data resolver infra will only run once regardless of when this is called so it should be perfectly safe to do.

Also, there could be a situation where the underlying resolver is invalidated where, using the current logic here would prevent it from running when it should.

Comment on lines +211 to +213
if ( ! isValidPropertyID( propertyID ) ) {
return;
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about we move this guard to getWebDataStreams below? Then this function can resolve-select that here unconditionally similar to my comment above.

Comment on lines +224 to +232
const { select, resolveSelect } = yield commonActions.getRegistry();

const containers = select( MODULES_TAGMANAGER ).getContainers( accountID );

if ( containers === undefined ) {
yield commonActions.await(
resolveSelect( MODULES_TAGMANAGER ).getContainers( accountID )
);
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same as above – let's resolve select this unconditionally

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants