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

Add 'Clear customizations' button to template list page #36802

Merged
merged 3 commits into from
Nov 24, 2021
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
68 changes: 42 additions & 26 deletions packages/edit-site/src/components/list/table.js
Expand Up @@ -18,21 +18,50 @@ import { addQueryArgs } from '@wordpress/url';
*/
import { store as editSiteStore } from '../../store';
import isTemplateRemovable from '../../utils/is-template-removable';
import isTemplateRevertable from '../../utils/is-template-revertable';

function Actions( { template, onClose } ) {
const { removeTemplate } = useDispatch( editSiteStore );
function Actions( { template } ) {
const { removeTemplate, revertTemplate } = useDispatch( editSiteStore );

const isRemovable = isTemplateRemovable( template );
const isRevertable = isTemplateRevertable( template );

if ( ! isRemovable && ! isRevertable ) {
return null;
}

return (
<MenuGroup>
<MenuItem
onClick={ () => {
removeTemplate( template );
onClose();
} }
>
{ __( 'Remove template' ) }
</MenuItem>
</MenuGroup>
<DropdownMenu
icon={ moreVertical }
label={ __( 'Actions' ) }
className="edit-site-list-table__actions"
>
{ ( { onClose } ) => (
<MenuGroup>
{ isRemovable && (
<MenuItem
onClick={ () => {
removeTemplate( template );
onClose();
} }
>
{ __( 'Remove template' ) }
</MenuItem>
) }
{ isRevertable && (
<MenuItem
info={ __( 'Restore template to theme default' ) }
onClick={ () => {
revertTemplate( template );
Copy link
Contributor Author

@talldan talldan Nov 24, 2021

Choose a reason for hiding this comment

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

The main outstanding issue seems to be that revertTemplate doesn't actually save the edited entity records to complete the reversion. The listing page doesn't update because of that.

It's really designed for use in the editor where there's a separate save button. It also treats the revert as something that can be undone. That may be more difficult to achieve here if we have to save the changes.

The options here:

  • Don't use this action, create an entirely different action or make the revert code local to this component
  • Customize revertTemplate so that it accepts additional params to make it work on this screen
  • Something else that I haven't thought of

Copy link
Member

Choose a reason for hiding this comment

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

We could, not that it's preferred, add the entity saving workflow to this screen too. I think it would look weird though.

Could we add an optional option force: true to indicate that it should save immediately after edited? If that doesn't work we can create a separate action for it.

Copy link
Member

Choose a reason for hiding this comment

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

I implemented something similar to force: true but I didn't like how it means that passing an argument completely changes the behaviour of the action.

Ideally I'd split revertTemplate up into two functions—one that saves, one that doesn't—and have them both call into a private action which does the entity editing bits. This is really difficult to do unless we change edit-site to use thunks, though.

So instead I went with e9e7ede which has the button immediately save the entity after reverting. I added a allowUndo option so that the success notice, when we implement notices, doesn't allow the user to undo something that's been already saved.

Copy link
Member

Choose a reason for hiding this comment

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

I think we should also inform users that this is an irreversible action.

Copy link
Member

Choose a reason for hiding this comment

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

I think we should also inform users that this is an irreversible action.

I think let's follow up on that. I see "Ability to undo an action" on the list (#36597). We have the same problem with the Remove action.

onClose();
} }
>
{ __( 'Clear customizations' ) }
</MenuItem>
) }
</MenuGroup>
) }
</DropdownMenu>
);
}

Expand Down Expand Up @@ -126,20 +155,7 @@ export default function Table( { templateType } ) {
{ template.theme }
</td>
<td className="edit-site-list-table-column" role="cell">
{ isTemplateRemovable( template ) && (
<DropdownMenu
icon={ moreVertical }
label={ __( 'Actions' ) }
className="edit-site-list-table__actions"
>
{ ( { onClose } ) => (
<Actions
template={ template }
onClose={ onClose }
/>
) }
</DropdownMenu>
) }
<Actions template={ template } />
</td>
</tr>
) ) }
Expand Down