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 block variations to the slash inserter #23364

Merged
merged 1 commit into from
Jul 1, 2020

Conversation

youknowriad
Copy link
Contributor

@youknowriad youknowriad commented Jun 22, 2020

closes #20583

Uses the API introduced in #22853 to introduce support for block variations in the slash inserter.
More importantly, this PR makes the slash inserter behaves exactly like the global inserter by sharing logic.
We could for example easily consider adding patterns in a separate PR.

@youknowriad youknowriad added [Type] Enhancement A suggestion for improvement. General Interface Parts of the UI which don't fall neatly under other labels. labels Jun 22, 2020
@youknowriad youknowriad requested a review from gziolo June 22, 2020 14:23
@youknowriad youknowriad requested a review from ellatrix as a code owner June 22, 2020 14:23
@youknowriad youknowriad self-assigned this Jun 22, 2020
@github-actions
Copy link

github-actions bot commented Jun 22, 2020

Size Change: -48 B (0%)

Total Size: 1.13 MB

Filename Size Change
build/block-editor/index.js 109 kB -48 B (0%)
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.14 kB 0 B
build/annotations/index.js 3.62 kB 0 B
build/api-fetch/index.js 3.4 kB 0 B
build/autop/index.js 2.82 kB 0 B
build/blob/index.js 620 B 0 B
build/block-directory/index.js 7.39 kB 0 B
build/block-directory/style-rtl.css 941 B 0 B
build/block-directory/style.css 942 B 0 B
build/block-editor/style-rtl.css 10.7 kB 0 B
build/block-editor/style.css 10.7 kB 0 B
build/block-library/editor-rtl.css 7.41 kB 0 B
build/block-library/editor.css 7.41 kB 0 B
build/block-library/index.js 129 kB 0 B
build/block-library/style-rtl.css 8.04 kB 0 B
build/block-library/style.css 8.05 kB 0 B
build/block-library/theme-rtl.css 730 B 0 B
build/block-library/theme.css 732 B 0 B
build/block-serialization-default-parser/index.js 1.88 kB 0 B
build/block-serialization-spec-parser/index.js 3.1 kB 0 B
build/blocks/index.js 48.2 kB 0 B
build/components/index.js 198 kB 0 B
build/components/style-rtl.css 15.9 kB 0 B
build/components/style.css 15.9 kB 0 B
build/compose/index.js 9.65 kB 0 B
build/core-data/index.js 11.4 kB 0 B
build/data-controls/index.js 1.29 kB 0 B
build/data/index.js 8.44 kB 0 B
build/date/index.js 5.47 kB 0 B
build/deprecated/index.js 772 B 0 B
build/dom-ready/index.js 569 B 0 B
build/dom/index.js 3.19 kB 0 B
build/edit-navigation/index.js 9.88 kB 0 B
build/edit-navigation/style-rtl.css 1.02 kB 0 B
build/edit-navigation/style.css 1.02 kB 0 B
build/edit-post/index.js 303 kB 0 B
build/edit-post/style-rtl.css 5.51 kB 0 B
build/edit-post/style.css 5.51 kB 0 B
build/edit-site/index.js 16.6 kB 0 B
build/edit-site/style-rtl.css 3.04 kB 0 B
build/edit-site/style.css 3.04 kB 0 B
build/edit-widgets/index.js 9.32 kB 0 B
build/edit-widgets/style-rtl.css 2.42 kB 0 B
build/edit-widgets/style.css 2.42 kB 0 B
build/editor/editor-styles-rtl.css 537 B 0 B
build/editor/editor-styles.css 539 B 0 B
build/editor/index.js 44.8 kB 0 B
build/editor/style-rtl.css 3.85 kB 0 B
build/editor/style.css 3.86 kB 0 B
build/element/index.js 4.65 kB 0 B
build/escape-html/index.js 733 B 0 B
build/format-library/index.js 7.72 kB 0 B
build/format-library/style-rtl.css 547 B 0 B
build/format-library/style.css 548 B 0 B
build/hooks/index.js 2.13 kB 0 B
build/html-entities/index.js 622 B 0 B
build/i18n/index.js 3.56 kB 0 B
build/is-shallow-equal/index.js 710 B 0 B
build/keyboard-shortcuts/index.js 2.52 kB 0 B
build/keycodes/index.js 1.94 kB 0 B
build/list-reusable-blocks/index.js 3.12 kB 0 B
build/list-reusable-blocks/style-rtl.css 450 B 0 B
build/list-reusable-blocks/style.css 451 B 0 B
build/media-utils/index.js 5.29 kB 0 B
build/notices/index.js 1.79 kB 0 B
build/nux/index.js 3.4 kB 0 B
build/nux/style-rtl.css 671 B 0 B
build/nux/style.css 668 B 0 B
build/plugins/index.js 2.56 kB 0 B
build/primitives/index.js 1.5 kB 0 B
build/priority-queue/index.js 788 B 0 B
build/redux-routine/index.js 2.85 kB 0 B
build/rich-text/index.js 14 kB 0 B
build/server-side-render/index.js 2.67 kB 0 B
build/shortcode/index.js 1.69 kB 0 B
build/token-list/index.js 1.28 kB 0 B
build/url/index.js 4.06 kB 0 B
build/viewport/index.js 1.85 kB 0 B
build/warning/index.js 1.14 kB 0 B
build/wordcount/index.js 1.17 kB 0 B

compressed-size-action

* @param {Array} items Denormalized inserter items
* @return {Array} Normalized inserter items.
*/
export function includeVariationsInInserterItems( items ) {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

I think should probably be bundled in the getInserterItems selector. But I'd leave that for a separate PR as this is already how it works today in the global inserter, it's just extracted as a function. cc @gziolo @noisysocks

Copy link
Member

Choose a reason for hiding this comment

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

I need to double-check the initial implementation for block variation tomorrow. I think there was a reason to keep it as is initially. It might be no longer valid concern :)

Copy link
Member

Choose a reason for hiding this comment

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

I found related PR: #19243. I can't think of any blocker for further refactoring. It seems like producing multiple items for blocks with variations followed-up with array flattening would do the trick. We just need to give it a try :)

function defaultGetSelectedBlockName() {
const { getSelectedBlockClientId, getBlockName } = select(
'core/block-editor'
const createBlocksFromInnerBlocksTemplate = ( innerBlocksTemplate ) => {
Copy link
Member

Choose a reason for hiding this comment

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

It's copied in a few places, we should extract it and put in @wordpress/blocks as public API.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Right

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Do you know if the "variations" are the only place where we could have this shape of innerBlocks.
It seems to me there's an inconsistency here. The variationIItem has a shape of a block object { name, innerBlocks, attributes } but its innerBlocks have a shape of a template [ name, attributes, innerBlocks ] which make me thing we should consolidate or rename innerBlocks to innerBlocksTemplate here.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I just figured that it's because in the variations API we have innerBlocks property with the template shape too. I think that's not great as it's inconsistent with "example" API and it's inconsistent with it's self since a variation is an object with attributes and innerBlocks so you'd assume its innerBlocks keep the same shape.

I'll address this in a separate PR and I'll drop the template format from the variations while retaining backward compatibility.

Copy link
Member

Choose a reason for hiding this comment

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

Yes, I agree that it is confusing. If you have some ideas on how to improve that, go for it :)

I thought about using so innerBlocksTemplate (I called the variable like that in the mapping helper) inside the variation item object but I left what was there before.

@apeatling
Copy link
Contributor

This fixes #20583

@apeatling apeatling linked an issue Jun 29, 2020 that may be closed by this pull request
@gziolo
Copy link
Member

gziolo commented Jun 30, 2020

I tested a few cases and it works with both 3rd party block variations and with variations registered for core blocks:
Screen Shot 2020-06-30 at 16 11 01
Screen Shot 2020-06-30 at 16 21 34

The only issue I found out is that I can't click to select an item from the dropdown menu. I can only select one of the variations using arrow keys plus enter.

@youknowriad
Copy link
Contributor Author

The only issue I found out is that I can't click to select an item from the dropdown menu

We had this issue on master too, I think a rebase should fix it.

@youknowriad youknowriad force-pushed the add/variations-slash-inserter branch from 266b4f7 to ae66586 Compare June 30, 2020 14:54
Copy link
Member

@gziolo gziolo left a comment

Choose a reason for hiding this comment

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

I tested after rebase and everything works perfectly fine. Great work 💯

@gziolo
Copy link
Member

gziolo commented Jun 30, 2020

I quickly drafted #23585 to see if that would fit as an e2e test covering this integration.

@youknowriad youknowriad merged commit df55dee into master Jul 1, 2020
@youknowriad youknowriad deleted the add/variations-slash-inserter branch July 1, 2020 08:55
@github-actions github-actions bot added this to the Gutenberg 8.5 milestone Jul 1, 2020
@mtias
Copy link
Member

mtias commented Jul 1, 2020

Thanks! This really helps tie the inserter APIs together and I like it's more red code than green :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
General Interface Parts of the UI which don't fall neatly under other labels. [Type] Enhancement A suggestion for improvement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Block API: Integrate variations with the / inserter
4 participants