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

Issue / 9284 Refactor AuthError Error Notification to Use New Notifications Datastore #9818

Conversation

10upsimon
Copy link
Collaborator

@10upsimon 10upsimon commented Dec 5, 2024

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.

Copy link

github-actions bot commented Dec 5, 2024

Build files for c329711 have been deleted.

Copy link

github-actions bot commented Dec 5, 2024

Size Change: -472 B (-0.02%)

Total Size: 1.99 MB

Filename Size Change
./dist/assets/js/googlesitekit-activation-********************.js 23.9 kB +127 B (+0.53%)
./dist/assets/js/googlesitekit-ad-blocking-recovery-********************.js 54 kB -50 B (-0.09%)
./dist/assets/js/googlesitekit-adminbar-********************.js 34.8 kB +62 B (+0.18%)
./dist/assets/js/googlesitekit-api-********************.js 10.1 kB -6 B (-0.06%)
./dist/assets/js/googlesitekit-components-gm3-********************.js 10.1 kB -3 B (-0.03%)
./dist/assets/js/googlesitekit-data-********************.js 2.37 kB -1 B (-0.04%)
./dist/assets/js/googlesitekit-datastore-forms-********************.js 8.95 kB +2 B (+0.02%)
./dist/assets/js/googlesitekit-datastore-site-********************.js 20.2 kB -5 B (-0.02%)
./dist/assets/js/googlesitekit-datastore-ui-********************.js 10 kB +3 B (+0.03%)
./dist/assets/js/googlesitekit-datastore-user-********************.js 28.2 kB -1 B (0%)
./dist/assets/js/googlesitekit-entity-dashboard-********************.js 82.4 kB -75 B (-0.09%)
./dist/assets/js/googlesitekit-main-dashboard-********************.js 167 kB -192 B (-0.11%)
./dist/assets/js/googlesitekit-metric-selection-********************.js 51.8 kB -84 B (-0.16%)
./dist/assets/js/googlesitekit-modules-********************.js 22.4 kB +3 B (+0.01%)
./dist/assets/js/googlesitekit-modules-ads-********************.js 35.7 kB +26 B (+0.07%)
./dist/assets/js/googlesitekit-modules-adsense-********************.js 119 kB -100 B (-0.08%)
./dist/assets/js/googlesitekit-modules-analytics-4-********************.js 190 kB -13 B (-0.01%)
./dist/assets/js/googlesitekit-modules-pagespeed-insights-********************.js 22.6 kB -4 B (-0.02%)
./dist/assets/js/googlesitekit-modules-reader-revenue-manager-********************.js 40.1 kB +11 B (+0.03%)
./dist/assets/js/googlesitekit-modules-search-console-********************.js 69.2 kB +7 B (+0.01%)
./dist/assets/js/googlesitekit-modules-tagmanager-********************.js 32.1 kB +15 B (+0.05%)
./dist/assets/js/googlesitekit-notifications-********************.js 38 kB +123 B (+0.32%)
./dist/assets/js/googlesitekit-settings-********************.js 127 kB -195 B (-0.15%)
./dist/assets/js/googlesitekit-splash-********************.js 68.5 kB -103 B (-0.15%)
./dist/assets/js/googlesitekit-user-input-********************.js 43.7 kB +4 B (+0.01%)
./dist/assets/js/googlesitekit-vendor-********************.js 325 kB -1 B (0%)
./dist/assets/js/googlesitekit-widgets-********************.js 102 kB +5 B (0%)
./dist/assets/js/googlesitekit-wp-dashboard-********************.js 63.2 kB -24 B (-0.04%)
./dist/assets/js/runtime-********************.js 1.4 kB -3 B (-0.21%)
ℹ️ 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.48 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/43-********************.js 3.12 kB
./dist/assets/js/analytics-advanced-tracking-********************.js 901 B
./dist/assets/js/googlesitekit-components-gm2-********************.js 6.17 kB
./dist/assets/js/googlesitekit-consent-mode-********************.js 25.6 kB
./dist/assets/js/googlesitekit-datastore-location-********************.js 2.08 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-sign-in-with-google-********************.js 31.5 kB
./dist/assets/js/googlesitekit-polyfills-********************.js 377 B
./dist/assets/js/googlesitekit-reader-revenue-manager-block-editor-********************.js 477 B

compressed-size-action

Copy link
Collaborator

@zutigrm zutigrm left a comment

Choose a reason for hiding this comment

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

Thanks @10upsimon almost there, I left you few small comments

@@ -566,6 +567,29 @@ export const DEFAULT_NOTIFICATIONS = {
);
},
},
'auth-error': {
Copy link
Collaborator

Choose a reason for hiding this comment

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

Let's group errors together, this one should go more up, just after the setup_plugin_error one

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Thanks @zutigrm , this has been moved in my latest commits.

Comment on lines 582 to 585
await Promise.all( [
// The getAuthError() selector relies on the resolution of getAuthentication().
resolveSelect( CORE_USER ).getAuthentication(),
] );
Copy link
Collaborator

Choose a reason for hiding this comment

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

Since getAuthentication resolver is the only one that needs to be resolved, we do not need to use Promise.all, we can just resolve it directly:

Suggested change
await Promise.all( [
// The getAuthError() selector relies on the resolution of getAuthentication().
resolveSelect( CORE_USER ).getAuthentication(),
] );
await resolveSelect( CORE_USER ).getAuthentication();

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Thanks @zutigrm , this has been change to a single resolve in my latest commits.

Copy link
Collaborator

Choose a reason for hiding this comment

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

@zutigrm this actually wasn't needed. See #9818 (comment)

Comment on lines 38 to 52
setupRegistry: ( registry ) => {
provideUserAuthentication( registry );

const authError = {
code: 'missing_delegation_consent',
status: 401,
message:
'Looks like your site is not allowed access to Google account data and can’t display stats in the dashboard.',
data: {
reconnectURL: 'https://example.com/',
},
};

registry.dispatch( CORE_USER ).setAuthError( authError );
},
Copy link
Collaborator

Choose a reason for hiding this comment

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

Since this file contains only one scenario data provided here covers the default one, we can move this down to the main export, above the args.setupRegistry( registry ); or instead, since we do not expect more stories, and this can be added in the future if there is a need to expand on scenarios. So this scenario does not need to pass any arguments as they will be handled in the defaul export

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Thanks @zutigrm , this has been moved into the default export in my latest commits.

@10upsimon 10upsimon requested a review from zutigrm January 6, 2025 14:46
Copy link
Collaborator

@zutigrm zutigrm left a comment

Choose a reason for hiding this comment

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

Thanks @10upsimon , LGTM

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 @10upsimon ! A few minor things to address here but this overall LGTM 👍

Just as a reminder, please also keep your branch up to date whenever you're iterating on it. I sync'd it here to also run E2E again (as they're all failing) but it was quite far behind
image

assets/js/components/notifications/AuthError.stories.js Outdated Show resolved Hide resolved
assets/js/googlesitekit/notifications/register-defaults.js Outdated Show resolved Hide resolved
Comment on lines 246 to 247
await resolveSelect( CORE_USER ).getAuthentication();
const error = select( CORE_USER ).getAuthError();
Copy link
Collaborator

Choose a reason for hiding this comment

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

getAuthError doesn't depend on data from getAuthentication, so the resolveSelect isn't needed/relevant here.

See

getAuthError( state ) {
const { authError } = state;
return authError;
},

All selectors that depend on data from the server-side authentication state should use

function createGetAuthenticationSelector( property ) {
return createRegistrySelector( ( select ) => () => {
const data = select( CORE_USER ).getAuthentication() || {};
return data[ property ];
} );
}

A quick search through the code shows that authError only exists on the client side which is only called here

export const dispatchAPIError = ( error ) => {
// Check to see if this error was a `ERROR_CODE_MISSING_REQUIRED_SCOPE` error;
// if so and there is a data store available to dispatch on, dispatch a
// `setPermissionScopeError()` action.
// Kind of a hack, but scales to all components.
const dispatch = global.googlesitekit?.data?.dispatch?.( CORE_USER );
if ( dispatch ) {
if ( isPermissionScopeError( error ) ) {
dispatch.setPermissionScopeError( error );
} else if ( isAuthError( error ) ) {
dispatch.setAuthError( error );
}
}
};

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Thanks @aaemnnosttv , I've since removed the call to the resolver, there are now none 👍

@10upsimon 10upsimon requested a review from aaemnnosttv January 21, 2025 14:25
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.

Great, thanks @10upsimon !

@aaemnnosttv aaemnnosttv merged commit 1d98c6f into develop Jan 21, 2025
22 of 23 checks passed
@aaemnnosttv aaemnnosttv deleted the issue/9284-refactor-AuthError-error-notification-use-new-notifications-datastore branch January 21, 2025 16:20
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