-
Notifications
You must be signed in to change notification settings - Fork 2k
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
Create pending sticker when loading the "how to migrate" step #95413
Conversation
Jetpack Cloud live (direct link)
Automattic for Agencies live (direct link)
|
This PR does not affect the size of JS and CSS bundles shipped to the user's browser. Generated by performance advisor bot at iscalypsofastyet.com. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The change looks very well done! Just for good measure, should we cover this particular behavior with a unit test?
baff4fd
to
7023a65
Compare
Hi @m1r0! It's a bug. Since it's not related to this PR, I just created another issue to handle it: #95560 |
Added some tests here: 970ce0c |
...low/internals/steps-repository/site-migration-how-to-migrate/use-pending-migration-status.ts
Outdated
Show resolved
Hide resolved
Co-authored-by: Gabriel Caires <[email protected]>
6cef19a
to
4c81714
Compare
This PR modifies the release build for the following Calypso Apps: For info about this notification, see here: PCYsg-OT6-p2
To test WordPress.com changes, run |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good. I found no issues while testing. 🚀
const usePendingMigrationStatus = ( { onSubmit }: PendingMigrationStatusProps ) => { | ||
const site = useSite(); | ||
const siteId = site?.ID; | ||
|
||
const canInstallPlugins = site?.plan?.features?.active.find( | ||
( feature ) => feature === 'install-plugins' | ||
) | ||
? true | ||
: false; | ||
|
||
const { updateMigrationStatus } = useUpdateMigrationStatus(); | ||
|
||
// Register pending migration status when loading the step. | ||
useEffect( () => { | ||
if ( siteId ) { | ||
updateMigrationStatus( siteId, 'migration-pending' ); | ||
} | ||
}, [ siteId, updateMigrationStatus ] ); | ||
|
||
const setPendingMigration = ( how: string ) => { | ||
const destination = canInstallPlugins ? 'migrate' : 'upgrade'; | ||
if ( siteId ) { | ||
const parsedHow = how === HOW_TO_MIGRATE_OPTIONS.DO_IT_MYSELF ? 'diy' : how; | ||
updateMigrationStatus( siteId, `migration-pending-${ parsedHow }` ); | ||
} | ||
|
||
if ( onSubmit ) { | ||
return onSubmit( { how, destination } ); | ||
} | ||
}; | ||
|
||
return { setPendingMigration }; | ||
}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hey folks! I stumbled upon this code today; I got really confused. I don't understand why we'd wrap the existing useUpdateMigrationStatus
in another hook. Can you enlighten me on the reasoning for this? Even for me, who worked on this, I had difficulties finding where the status was being updated.
Especially since the hook is strictly tightened with the How to migrate step, as it won't work anywhere else.
I also disagree that the action on the How to migrate
step is to "set a migration as pending", and that's the idea that it we give when we do:
onClick={ () => setPendingMigration( option.value ) }
For me, setting the pending state is a side effect of the submit action and not the other way around. I also feel that for future maintenance, removing the submit logic from the How to migrate step file just makes it harder to understand the code. We added a new layer for the onSubmit
event, which by itself is already deep enough.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree that it seems not necessary to have the submit inside the
usePendingMigrationStatus`
Hey folks! I stumbled upon this code today; I got really confused. I don't understand why we'd wrap the existing useUpdateMigrationStatus in another hook.
Another point is that we are not waiting for the request to be finished before calling the onSubmit.
I don't understand why we'd wrap the existing useUpdateMigrationStatus in another hook.
I am ok with the extraction because it removes business logic from the original component and prevents some components from re-rendering. For example, useEffects inside hooks don't trigger component rendering.
But I am unaware of why we need to use 2 states to set migration as pending.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
But I am unaware of why we need to use 2 states to set migration as pending.
I think the first one is to flag when the user gets to the How to migrate step so we can redirect them back to that stage. The migration-pending-{difm/diy}
means that the user has already submitted the intent.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For example, useEffects inside hooks don't trigger component rendering.
In this case, would it trigger the render? I asked this because we are not setting any states that would justify that.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't understand why we'd wrap the existing useUpdateMigrationStatus in another hook
The idea was to extract the portion of logic related to the sticker creation in the how to migrate. Otherwise, it would introduce a big complexity to the SiteMigrationHowToMigrate
, which already has many other logic too. I thought having it in the same folder as the component would be enough, but maybe we could try to rename the hook to something else to avoid the confusion? I tried to think something to add the HowToMigrate in the name, but my ideas seem too verbose. Something like usePendingMigrationStatusHandlerForHowToMigrateStep
?
I also disagree that the action on the How to migrate step is to "set a migration as pending", and that's the idea that it we give when we do:
onClick={ () => setPendingMigration( option.value ) }
For me, setting the pending state is a side effect of the submit action and not the other way around. I also feel that for future maintenance, removing the submit logic from the How to migrate step file just makes it harder to understand the code. We added a new layer for the onSubmit event, which by itself is already deep enough.
Hm! Looking at this again, I totally agree with you. Maybe we could refator it removing the onSubmit
dependency from that and adding a clickHandler that will call the setPendingMigration
and the navigation.submit
?
Another point is that we are not waiting for the request to be finished before calling the onSubmit.
This is already being fixed as part of #95612
Also, notice that any refactor would be nice to do on top of this last PR to avoid conflicts. 👆 @m1r0, I think we could merge that, right?
I think the first one is to flag when the user gets to the How to migrate step so we can redirect them back to that stage. The migration-pending-{difm/diy} means that the user has already submitted the intent.
That's correct!
In this case, would it trigger the render? I asked this because we are not setting any states that would justify that.
That's less about it and more about the separation of concerns to simplify the component logic and avoid the components with hundreds of lines complex to maintain! 🤭
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we could merge that, right?
Yep, I've merged it. 👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also, one important thing when moving the submit to the component, it needs to happen after the sticker is created. 😉
The #95612 does it fixing a race condition issue.
Related to #95288
Proposed Changes
Why are these changes being made?
migration-pending
when the user is navigating through the migration flow. See more in p1728684758970459/1728480467.656839-slack-C07N53UNUQJ.Testing Instructions
To check the status creation, you check the network tab of your browser filtering by
/site-migration-status-sticker
. To make sure the status was created, you can check it directly in your sandbox (p1729023356708799/1728480467.656839-slack-C07N53UNUQJ).Test the following steps in
/setup/migration
and in the/setup/hosted-site-migration
:Pre-merge Checklist