Skip to content
This repository was archived by the owner on Feb 23, 2024. It is now read-only.

Conversation

@dinhtungdu
Copy link
Member

@dinhtungdu dinhtungdu commented Jun 1, 2022

Fixes #6491

This PR:

  • Scans and copies the block.json file automatically to the build folder instead of hard-coding the file list (cc @senadir because you recently edited those entries).
  • Create block.json and register the block using metadata for filter blocks.

Note:

  • Translation for block title and description is handled by po file, not JSON.
  • make-pot doesn't pick the default value of attributes, so we have to override them on the JS side.

Accessibility

Other Checks

  • This PR adds/removes a feature flag & I've updated this doc .
  • This PR adds/removes an experimental interfaces and I've updated this doc
  • I tagged two reviewers because this PR makes queries to the database or I think it might have some security impact.

Screenshots

N/a

Testing

Automated Tests

  • Changes in this PR are covered by Automated Tests.
    • Unit tests
    • E2E tests

User Facing Testing

  1. Check out and build this branch.
  2. Edit a page, and see all filter blocks are working.
  3. See those blocks work on the front end too.
  • Do not include in the Testing Notes

WooCommerce Visibility

  • WooCommerce Core
  • Feature plugin
  • Experimental

Performance Impact

Changelog

Register filter blocks using block metadata.

@dinhtungdu dinhtungdu added status: needs review type: enhancement The issue is a request for an enhancement. block-type: filter blocks Issues related to all of the filter blocks. labels Jun 1, 2022
@dinhtungdu dinhtungdu self-assigned this Jun 1, 2022
@rubikuserbot rubikuserbot requested review from a team and sunyatasattva and removed request for a team June 1, 2022 03:14
@github-actions
Copy link
Contributor

github-actions bot commented Jun 1, 2022

Size Change: +657 B (0%)

Total Size: 863 kB

Filename Size Change
build/active-filters.js 7.57 kB +137 B (+2%)
build/all-products.js 33.5 kB +10 B (0%)
build/all-reviews.js 7.79 kB +1 B (0%)
build/attribute-filter.js 13.9 kB +168 B (+1%)
build/cart.js 44.1 kB +4 B (0%)
build/checkout.js 45.4 kB +4 B (0%)
build/featured-category.js 13.2 kB -3 B (0%)
build/featured-product.js 13.5 kB -2 B (0%)
build/handpicked-products.js 7.39 kB +1 B (0%)
build/legacy-template.js 2.45 kB +3 B (0%)
build/mini-cart-contents.js 22.8 kB -14 B (0%)
build/mini-cart.js 6.62 kB -1 B (0%)
build/price-filter.js 8.9 kB +154 B (+2%)
build/product-add-to-cart--product-button--product-image--product-title.js 2.65 kB +1 B (0%)
build/product-add-to-cart--product-button.js 565 B +1 B (0%)
build/product-add-to-cart.js 6.63 kB -1 B (0%)
build/product-best-sellers.js 7.47 kB +2 B (0%)
build/product-categories.js 2.78 kB -4 B (0%)
build/product-category.js 8.58 kB +3 B (0%)
build/product-on-sale.js 8.08 kB +4 B (0%)
build/product-rating.js 731 B -4 B (-1%)
build/product-sale-badge.js 678 B -1 B (0%)
build/product-summary.js 917 B +1 B (0%)
build/product-tag.js 8.12 kB +3 B (0%)
build/product-title.js 909 B -1 B (0%)
build/product-top-rated.js 8 kB +2 B (0%)
build/products-by-attribute.js 8.69 kB +6 B (0%)
build/reviews-by-category.js 11.3 kB +4 B (0%)
build/reviews-by-product.js 12.4 kB +6 B (0%)
build/single-product.js 10.1 kB +9 B (0%)
build/stock-filter.js 7.12 kB +169 B (+2%)
build/wc-blocks-vendors.js 59 kB -4 B (0%)
build/wc-blocks.js 2.63 kB -1 B (0%)
ℹ️ View Unchanged
Filename Size
build/active-filters-frontend.js 6.59 kB
build/all-products-frontend.js 18.1 kB
build/attribute-filter-frontend.js 17.7 kB
build/blocks-checkout.js 17.4 kB
build/cart-blocks/cart-accepted-payment-methods-frontend.js 1.16 kB
build/cart-blocks/cart-express-payment-frontend.js 5.06 kB
build/cart-blocks/cart-items-frontend.js 299 B
build/cart-blocks/cart-line-items--mini-cart-contents-block/products-table-frontend.js 5.27 kB
build/cart-blocks/cart-line-items-frontend.js 432 B
build/cart-blocks/cart-order-summary-frontend.js 1.11 kB
build/cart-blocks/cart-totals-frontend.js 322 B
build/cart-blocks/empty-cart-frontend.js 346 B
build/cart-blocks/filled-cart-frontend.js 782 B
build/cart-blocks/order-summary-coupon-form-frontend.js 2.62 kB
build/cart-blocks/order-summary-discount-frontend.js 2.13 kB
build/cart-blocks/order-summary-fee-frontend.js 273 B
build/cart-blocks/order-summary-heading-frontend.js 454 B
build/cart-blocks/order-summary-shipping--checkout-blocks/order-summary-shipping-frontend.js 6.34 kB
build/cart-blocks/order-summary-shipping-frontend.js 428 B
build/cart-blocks/order-summary-subtotal-frontend.js 273 B
build/cart-blocks/order-summary-taxes-frontend.js 433 B
build/cart-blocks/proceed-to-checkout-frontend.js 1.15 kB
build/cart-frontend.js 45.3 kB
build/checkout-blocks/actions-frontend.js 1.41 kB
build/checkout-blocks/billing-address--checkout-blocks/shipping-address-frontend.js 4.12 kB
build/checkout-blocks/billing-address-frontend.js 892 B
build/checkout-blocks/contact-information-frontend.js 2.83 kB
build/checkout-blocks/express-payment-frontend.js 5.35 kB
build/checkout-blocks/fields-frontend.js 345 B
build/checkout-blocks/order-note-frontend.js 1.07 kB
build/checkout-blocks/order-summary-cart-items-frontend.js 3.66 kB
build/checkout-blocks/order-summary-coupon-form-frontend.js 2.78 kB
build/checkout-blocks/order-summary-discount-frontend.js 2.25 kB
build/checkout-blocks/order-summary-fee-frontend.js 275 B
build/checkout-blocks/order-summary-frontend.js 1.11 kB
build/checkout-blocks/order-summary-shipping-frontend.js 603 B
build/checkout-blocks/order-summary-subtotal-frontend.js 273 B
build/checkout-blocks/order-summary-taxes-frontend.js 432 B
build/checkout-blocks/payment-frontend.js 7.67 kB
build/checkout-blocks/shipping-address-frontend.js 997 B
build/checkout-blocks/shipping-methods-frontend.js 4.71 kB
build/checkout-blocks/terms-frontend.js 1.22 kB
build/checkout-blocks/totals-frontend.js 326 B
build/checkout-frontend.js 47.5 kB
build/mini-cart-component-frontend.js 16.6 kB
build/mini-cart-contents-block/empty-cart-frontend.js 364 B
build/mini-cart-contents-block/filled-cart-frontend.js 230 B
build/mini-cart-contents-block/footer--mini-cart-contents-block/products-table-frontend.js 4.69 kB
build/mini-cart-contents-block/footer-frontend.js 5.63 kB
build/mini-cart-contents-block/items-frontend.js 225 B
build/mini-cart-contents-block/products-table-frontend.js 289 B
build/mini-cart-contents-block/shopping-button-frontend.js 287 B
build/mini-cart-contents-block/title-frontend.js 366 B
build/mini-cart-frontend.js 1.72 kB
build/price-filter-frontend.js 12.5 kB
build/price-format.js 1.19 kB
build/product-add-to-cart--product-button--product-category-list--product-image--product-price--product-r--a0326d00.js 223 B
build/product-add-to-cart-frontend.js 6.96 kB
build/product-button--product-category-list--product-image--product-price--product-rating--product-sale-b--e17c7c01.js 499 B
build/product-button-frontend.js 1.85 kB
build/product-button.js 1.09 kB
build/product-category-list-frontend.js 923 B
build/product-category-list.js 501 B
build/product-image-frontend.js 1.84 kB
build/product-image.js 1.07 kB
build/product-new.js 7.76 kB
build/product-price-frontend.js 1.94 kB
build/product-price.js 1.5 kB
build/product-rating-frontend.js 1.15 kB
build/product-sale-badge-frontend.js 1.09 kB
build/product-search.js 2.18 kB
build/product-sku-frontend.js 380 B
build/product-sku.js 381 B
build/product-stock-indicator-frontend.js 1.03 kB
build/product-stock-indicator.js 621 B
build/product-summary-frontend.js 1.33 kB
build/product-tag-list-frontend.js 917 B
build/product-tag-list.js 495 B
build/product-title-frontend.js 1.3 kB
build/reviews-frontend.js 7.02 kB
build/single-product-frontend.js 21.5 kB
build/stock-filter-frontend.js 6.87 kB
build/vendors--cart-blocks/cart-line-items--cart-blocks/cart-order-summary--cart-blocks/order-summary-shi--c02aad66-frontend.js 5.26 kB
build/vendors--cart-blocks/cart-line-items--checkout-blocks/order-summary-cart-items--mini-cart-contents---233ab542-frontend.js 3.14 kB
build/vendors--cart-blocks/order-summary-shipping--checkout-blocks/billing-address--checkout-blocks/order--5b8feb0b-frontend.js 4.75 kB
build/vendors--cart-blocks/order-summary-shipping--checkout-blocks/billing-address--checkout-blocks/order--decc3dc6-frontend.js 20.5 kB
build/vendors--mini-cart-contents-block/footer-frontend.js 6.86 kB
build/vendors--product-add-to-cart-frontend.js 7.53 kB
build/wc-blocks-data.js 9.87 kB
build/wc-blocks-editor-style-rtl.css 5.07 kB
build/wc-blocks-editor-style.css 5.07 kB
build/wc-blocks-google-analytics.js 1.56 kB
build/wc-blocks-middleware.js 930 B
build/wc-blocks-registry.js 2.7 kB
build/wc-blocks-shared-context.js 1.52 kB
build/wc-blocks-shared-hocs.js 1.14 kB
build/wc-blocks-style-rtl.css 22.2 kB
build/wc-blocks-style.css 22.1 kB
build/wc-blocks-vendors-style-rtl.css 1.28 kB
build/wc-blocks-vendors-style.css 1.28 kB
build/wc-payment-method-bacs.js 816 B
build/wc-payment-method-cheque.js 811 B
build/wc-payment-method-cod.js 909 B
build/wc-payment-method-paypal.js 837 B
build/wc-settings.js 2.61 kB

compressed-size-action

@dinhtungdu dinhtungdu marked this pull request as draft June 1, 2022 05:48
@dinhtungdu dinhtungdu marked this pull request as ready for review June 1, 2022 06:56
@rubikuserbot rubikuserbot requested a review from a team June 1, 2022 06:57
Comment on lines +263 to +272
from: './assets/js/blocks/**/block.json',
to( { absoluteFilename } ) {
const blockName = absoluteFilename
.split( '/' )
.at( -2 );
return `./${ blockName }/block.json`;
},
globOptions: {
ignore: [ '**/inner-blocks/**' ],
},
Copy link
Member

Choose a reason for hiding this comment

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

To have a cleaner (and less conflict) folder structure, we might want to pivot away from ${ blockName }/block.json toward ${ blockName }.block.json instead, but I'm not sure how would that play into translation.

ignore: [ '**/inner-blocks/**' ],

I believe lack of having assets in our releases (not confirmed?) and not having them in build is the reason why block metadata translation isn't loading in the editor :/

Copy link
Member Author

Choose a reason for hiding this comment

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

I believe lack of having assets in our releases (not confirmed?) and not having them in build is the reason why block metadata translation isn't loading in the editor :/

We only need block.json files in the build to translate the block metadata. asset is unnecessary to get translation working in my test.

we might want to pivot away from ${ blockName }/block.json toward ${ blockName }.block.json instead, but I'm not sure how would that play into translation.

I will test this. But it's possible that make-pot scans only block.json files.

Copy link
Member Author

Choose a reason for hiding this comment

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

Copy link
Contributor

@Aljullu Aljullu left a comment

Choose a reason for hiding this comment

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

Thanks for working on this, @dinhtungdu! I have a couple of questions:

Translation for block title and description is handled by po file, not JSON.

That means we will break existing translations, right? At least until this version of WC Blocks is merged into WC core and translations are generated again?

make-pot doesn't pick the default value of attributes, so we have to override them on the JS side.

Just curious, couldn't we just declare those attributes in the JS file, then? Or is there any benefit on duplicating them between the JSON and JS files?

@dinhtungdu
Copy link
Member Author

Translation for block title and description is handled by po file, not JSON.

That means we will break existing translations, right? At least until this version of WC Blocks is merged into WC core and translations are generated again?

@Aljullu Yes.

Just curious, couldn't we just declare those attributes in the JS file, then? Or is there any benefit on duplicating them between the JSON and JS files?

Yes. I did that so we can grasp all block attributes by looking only at the block.json file. I admit that it also creates confusion at the same time. I don't have a strong opinion on this, I'm happy to delete the duplicated entry in the block.json if it makes more sense.

@Aljullu
Copy link
Contributor

Aljullu commented Jun 8, 2022

@Aljullu Yes.

Thanks for clarifying! That's unfortunate, do you think we could work around it? One idea would be to:

  • Add the strings to block.json, as you are doing in this PR.
  • For now, keep the strings in index.js, so we override them with the localized ones.
  • Once the translations have been updated, remove the strings from index.js (we will need to create a follow-up issue for that).

Do you think that will work?

Yes. I did that so we can grasp all block attributes by looking only at the block.json file. I admit that it also creates confusion at the same time. I don't have a strong opinion on this, I'm happy to delete the duplicated entry in the block.json if it makes more sense.

I don't have a strong opinion either. 😄 I think your solution makes sense, but I might remove the default value from the JSON files so it's only defined in the JS ones. The reason is that this way we have the strings defined only in one place. But as I said, I don't have a strong opinion on this, so I'm fine with any decision.

…d title and translation to index file to make translation work during the transition phase
@dinhtungdu dinhtungdu requested a review from Aljullu June 9, 2022 02:00
@dinhtungdu
Copy link
Member Author

@Aljullu I address the translation issue per your suggestion. Thanks for that! After consideration, I also remove the duplicated attribute entries because they create more confusion than they solve.

Copy link
Contributor

@Aljullu Aljullu left a comment

Choose a reason for hiding this comment

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

LGTM, thanks for updating the PR, @dinhtungdu!

  • Once the translations have been updated, remove the strings from index.js (we will need to create a follow-up issue for that).

Will you be able to create an issue for this one so we don't forget? ☝️

@dinhtungdu
Copy link
Member Author

Will you be able to create an issue for this one so we don't forget? ☝️

I created #6543 for this.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

block-type: filter blocks Issues related to all of the filter blocks. type: enhancement The issue is a request for an enhancement.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Register Filter Blocks using block.json

4 participants