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

Add default Single Product HTML template #8515

Merged
merged 18 commits into from
Mar 22, 2023

Conversation

thealexandrelara
Copy link
Contributor

@thealexandrelara thealexandrelara commented Feb 22, 2023

Fixes #8480

Accessibility

Screenshots

Before After
image image

Testing

User Facing Testing

  1. Go to Appearance > Themes and activate a Blockfied theme, such as: Twenty-twenty Three;
  2. After the theme is activated, go to Appearance > Editor (Beta);
  3. Inside the Design section, click on Templates;
  4. Select the Single Product template;
  5. On the top left of the page, click on the Edit button;
  6. On the top right of the page, click on the three dots icon and open the Code Editor (or just hit Shift + Option + Command + M on the Mac);
  7. Replace the default wp-group section with the wp-group section inside the templates/templates/blockified/single-product.html file.
  8. Click on the Save button;
  9. Check if the information is correctly being displayed and well positioned on the page.
  • Do not include in the Testing Notes

Changelog

Add default Single Product HTML template

@thealexandrelara thealexandrelara self-assigned this Feb 22, 2023
@github-actions
Copy link
Contributor

github-actions bot commented Feb 22, 2023

The release ZIP for this PR is accessible via:

https://wcblocks.wpcomstaging.com/wp-content/uploads/woocommerce-gutenberg-products-block-8515.zip

Script Dependencies Report

There is no changed script dependency between this branch and trunk.

This comment was automatically generated by the ./github/compare-assets action.

TypeScript Errors Report

  • Files with errors: 479
  • Total errors: 2296

🎉 🎉 This PR does not introduce new TS errors.

comments-aggregator

@github-actions
Copy link
Contributor

github-actions bot commented Feb 22, 2023

Size Change: +10 B (0%)

Total Size: 1.06 MB

Filename Size Change
build/wc-blocks-style-rtl.css 26.9 kB +5 B (0%)
build/wc-blocks-style.css 26.9 kB +5 B (0%)
ℹ️ View Unchanged
Filename Size
build/active-filters-frontend.js 7.97 kB
build/active-filters-wrapper-frontend.js 5.99 kB
build/active-filters.js 7.47 kB
build/all-products-frontend.js 11.8 kB
build/all-products.js 36.8 kB
build/all-reviews.js 7.66 kB
build/attribute-filter-frontend.js 22.4 kB
build/attribute-filter-wrapper--stock-filter-wrapper-frontend.js 3.35 kB
build/attribute-filter-wrapper-frontend.js 4.5 kB
build/attribute-filter.js 13.2 kB
build/blocks-checkout.js 43.9 kB
build/breadcrumbs.js 2.05 kB
build/cart-blocks/cart-accepted-payment-methods-frontend.js 1.38 kB
build/cart-blocks/cart-cross-sells-frontend.js 253 B
build/cart-blocks/cart-cross-sells-products-frontend.js 9.76 kB
build/cart-blocks/cart-express-payment--checkout-blocks/express-payment-frontend.js 5.19 kB
build/cart-blocks/cart-express-payment-frontend.js 720 B
build/cart-blocks/cart-items-frontend.js 301 B
build/cart-blocks/cart-line-items--mini-cart-contents-block/products-table-frontend.js 5.36 kB
build/cart-blocks/cart-line-items-frontend.js 1.06 kB
build/cart-blocks/cart-order-summary-frontend.js 1.24 kB
build/cart-blocks/cart-totals-frontend.js 307 B
build/cart-blocks/empty-cart-frontend.js 345 B
build/cart-blocks/filled-cart-frontend.js 655 B
build/cart-blocks/order-summary-coupon-form-frontend.js 1.62 kB
build/cart-blocks/order-summary-discount-frontend.js 2.12 kB
build/cart-blocks/order-summary-fee-frontend.js 274 B
build/cart-blocks/order-summary-heading-frontend.js 456 B
build/cart-blocks/order-summary-shipping-frontend.js 10.7 kB
build/cart-blocks/order-summary-subtotal-frontend.js 275 B
build/cart-blocks/order-summary-taxes-frontend.js 434 B
build/cart-blocks/proceed-to-checkout-frontend.js 1.33 kB
build/cart-frontend.js 29.3 kB
build/cart.js 48.2 kB
build/catalog-sorting.js 1.7 kB
build/checkout-blocks/actions-frontend.js 1.84 kB
build/checkout-blocks/billing-address-frontend.js 4.19 kB
build/checkout-blocks/contact-information-frontend.js 2.05 kB
build/checkout-blocks/express-payment-frontend.js 1.13 kB
build/checkout-blocks/fields-frontend.js 331 B
build/checkout-blocks/order-note-frontend.js 1.14 kB
build/checkout-blocks/order-summary-cart-items-frontend.js 3.68 kB
build/checkout-blocks/order-summary-coupon-form-frontend.js 1.78 kB
build/checkout-blocks/order-summary-discount-frontend.js 2.29 kB
build/checkout-blocks/order-summary-fee-frontend.js 277 B
build/checkout-blocks/order-summary-frontend.js 1.24 kB
build/checkout-blocks/order-summary-shipping-frontend.js 10.8 kB
build/checkout-blocks/order-summary-subtotal-frontend.js 275 B
build/checkout-blocks/order-summary-taxes-frontend.js 434 B
build/checkout-blocks/payment-frontend.js 8.39 kB
build/checkout-blocks/pickup-options-frontend.js 4.04 kB
build/checkout-blocks/shipping-address-frontend.js 4.14 kB
build/checkout-blocks/shipping-method-frontend.js 2.61 kB
build/checkout-blocks/shipping-methods-frontend.js 4.82 kB
build/checkout-blocks/terms-frontend.js 1.56 kB
build/checkout-blocks/totals-frontend.js 310 B
build/checkout-frontend.js 30.9 kB
build/checkout.js 45.7 kB
build/customer-account.js 3.17 kB
build/featured-category.js 14 kB
build/featured-product.js 14.4 kB
build/filter-wrapper-frontend.js 14.1 kB
build/filter-wrapper.js 2.39 kB
build/general-style-rtl.css 1.31 kB
build/general-style.css 1.31 kB
build/handpicked-products.js 7.9 kB
build/legacy-template.js 5.32 kB
build/mini-cart-component-frontend.js 28 kB
build/mini-cart-contents-block/empty-cart-frontend.js 360 B
build/mini-cart-contents-block/filled-cart-frontend.js 268 B
build/mini-cart-contents-block/footer-frontend.js 2.86 kB
build/mini-cart-contents-block/items-frontend.js 237 B
build/mini-cart-contents-block/products-table-frontend.js 589 B
build/mini-cart-contents-block/shopping-button-frontend.js 572 B
build/mini-cart-contents-block/title-frontend.js 368 B
build/mini-cart-contents.js 17 kB
build/mini-cart-frontend.js 2.02 kB
build/mini-cart.js 4.49 kB
build/price-filter-frontend.js 13.9 kB
build/price-filter-wrapper-frontend.js 6.99 kB
build/price-filter.js 8.39 kB
build/price-format.js 1.19 kB
build/product-add-to-cart-frontend.js 6.43 kB
build/product-add-to-cart.js 178 B
build/product-best-sellers.js 8.25 kB
build/product-button-frontend.js 1.98 kB
build/product-categories.js 2.36 kB
build/product-category.js 9.24 kB
build/product-image-frontend.js 1.83 kB
build/product-image.js 178 B
build/product-new.js 8.25 kB
build/product-on-sale.js 8.58 kB
build/product-price-frontend.js 2.14 kB
build/product-query.js 11 kB
build/product-rating-frontend.js 1.4 kB
build/product-results-count.js 1.66 kB
build/product-sale-badge-frontend.js 1.04 kB
build/product-search.js 2.63 kB
build/product-sku-frontend.js 453 B
build/product-stock-indicator-frontend.js 1.07 kB
build/product-summary-frontend.js 1.35 kB
build/product-tag.js 8.73 kB
build/product-title-frontend.js 1.41 kB
build/product-title.js 178 B
build/product-top-rated.js 8.49 kB
build/products-by-attribute.js 9.57 kB
build/rating-filter-frontend.js 20.8 kB
build/rating-filter-wrapper-frontend.js 5.61 kB
build/rating-filter.js 7.42 kB
build/reviews-by-category.js 11.9 kB
build/reviews-by-product.js 13 kB
build/reviews-frontend.js 7.11 kB
build/stock-filter-frontend.js 21 kB
build/stock-filter-wrapper-frontend.js 3.15 kB
build/stock-filter.js 8.13 kB
build/store-notices.js 1.69 kB
build/vendors--attribute-filter-wrapper--cart-blocks/cart-cross-sells-products--cart-blocks/order-summary--ef6753df-frontend.js 6.86 kB
build/vendors--attribute-filter-wrapper--rating-filter-wrapper--stock-filter-wrapper-frontend.js 7.69 kB
build/vendors--cart-blocks/cart-cross-sells-products--cart-blocks/cart-line-items--cart-blocks/cart-order--3c5fe802-frontend.js 5.26 kB
build/vendors--cart-blocks/cart-cross-sells-products--cart-blocks/order-summary-shipping--checkout-blocks--18f9376a-frontend.js 19.4 kB
build/vendors--cart-blocks/cart-cross-sells-products--product-add-to-cart-frontend.js 7.25 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/order-summary-shipping--checkout-block--24d3fc0c-frontend.js 8.24 kB
build/vendors--checkout-blocks/billing-address--checkout-blocks/shipping-address-frontend.js 5.44 kB
build/vendors--checkout-blocks/shipping-method-frontend.js 12 kB
build/wc-blocks-data.js 21.8 kB
build/wc-blocks-editor-style-rtl.css 5.78 kB
build/wc-blocks-editor-style.css 5.78 kB
build/wc-blocks-google-analytics.js 1.56 kB
build/wc-blocks-middleware.js 930 B
build/wc-blocks-registry.js 3.15 kB
build/wc-blocks-shared-context.js 1.52 kB
build/wc-blocks-shared-hocs.js 1.73 kB
build/wc-blocks-vendors-style-rtl.css 1.96 kB
build/wc-blocks-vendors-style.css 1.96 kB
build/wc-blocks-vendors.js 64.2 kB
build/wc-blocks.js 2.63 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.6 kB
build/wc-shipping-method-pickup-location.js 29.9 kB
build/woo-directives-runtime.js 2.73 kB
build/woo-directives-vendors.js 7.91 kB

compressed-size-action

@thealexandrelara thealexandrelara marked this pull request as ready for review February 23, 2023 18:20
@woocommercebot woocommercebot requested a review from a team February 23, 2023 18:20
@@ -0,0 +1,3 @@
.woocommerce .wp-block-woocommerce-product-image-gallery div.images {
width: unset !important;
Copy link
Contributor

Choose a reason for hiding this comment

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

Do we need to use !important here?

I typically try to avoid this, if at all possible. It seems like increasing the specificity just a little bit would do the trick:

.woocommerce .wp-block-woocommerce-product-image-gallery .woocommerce-product-gallery.images {
    width: unset;
}

I'm also wondering about the choice to use unset as opposed to initial (which is how unset behaves here on a non-inherited property), auto, or even 100%. I'm not mentioning it because I think it's wrong, I'm really just curious. 🙂

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Thank you for reviewing this, you're right, we can avoid using !important if we increase the specificity of the css rule.

I'm also wondering about the choice to use unset as opposed to initial (which is how unset behaves here on a non-inherited property), auto, or even 100%. I'm not mentioning it because I think it's wrong, I'm really just curious. 🙂

Well, I think that I just put the first value that worked and solved the issue, but now that you mentioned initial would be much better. I just committed a new version with your suggestions 🙌

Copy link
Contributor

Choose a reason for hiding this comment

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

Thanks @thealexandrelara!

And to clarify, I wasn't implying that unset was necessarily wrong. I was really more curious if there was a particular reason for going with that option.

IMO, there are tradeoffs – unset can be a little confusing because its behavior depends on if the element is an inherited or non-inherited property. On the other hand, it does show up as unset in the dev tools where initial seems to display the initial value. I typically go with initial because I don't have to think about the inheritance type.

Anyhow, thanks for updating. Everything LGTM and tests as described! 🚀

@nefeline
Copy link
Contributor

nefeline commented Mar 13, 2023

Hey @thealexandrelara ! Are we still planning to make additional changes here to include the product price and meta blocks ( p1677488996782979/1677266906.480569-slack-C04GYS4JGUB )? Based on that previous discussion with Luigi, I was postponing the review until we do.

@gigitux
Copy link
Contributor

gigitux commented Mar 13, 2023

Hey @thealexandrelara ! Are we still planning to make additional changes here to include the product price and meta blocks ( p1677488996782979/1677266906.480569-slack-C04GYS4JGUB )? Based on that previous discussion with Luigi, I was postponing the review until we do.

Yep! It is better to postpone the review of this PR. I created another PR that will be merged in this branch where I added the Product Price and Product Meta blocks.

@nefeline
Copy link
Contributor

Yep! It is better to postpone the review of this PR. I created #8632 that will be merged in this branch where I added the Product Price and Product Meta blocks.

Cool, thanks for confirming 👍 !

gigitux and others added 5 commits March 20, 2023 16:55
* Add minimum structure for Single Product Details block

* Add Product Image Gallery #8233

Add Product Image Gallery

* Add tests for Single Product Details block

* Add the initial basis for the Add to Cart button

* Trigger the single product add to cart action for each product type.

* wip: create block structure and add initial styles

* Add block details to the SingleProductDetails.php file

* Rename the block from add-to-cart-button to add-to-cart-form

* Update to use the cart icon.

* Implement the skeleton for the editor preview.

* Render tabs title with empty content

* Use woocommerce_output_product_data_tabs function to retrieve tabs data

* Update styles and add Notice for the display in the Editor.

* Update CSS.

* Add base tests for the new Add to Cart Form component.

* Add Product Image Gallery block

* remove support global styles

* remove support global styles

* Update the button CSS.

* Remove customizations for the Single Product Details block

* Update styles for the cart form.

* update td style.

* Update divs and CSS.

* Use conventional input instead of the experimental InputControl

* address CSS feedback

* add support for the custom classname

* remove save function

* Remove unnecessary console.log from the Edit.tsx file

* Remove block classname from block wrapper

* Remove unnecessary WooCommerce tabs filter from the BlockTemplatesController

* Remove attributes property from the block registration

* Remove isExperimental flag for the Single Product Details block

* Remove get_classes_and_styles_by_attributes method from SingleProductDetails block

* Prevent Single Product Details block from apppearing in Pages or Posts

* add second parameter to the subscribe function

* Implement the new design and copy provided for the editor.

* Make the notice compatible with dark themes.

* Some additional CSS tweaks

* adjust the padding for the input

* wrap the Single Product Template in a div with the product class

* Fix PHP Coding Standards warnings

* improve logic and increase coverage of unit test

* improve logic and increase coverage of unit test

* fix test

* format HTML

* fix edge case

* update @types/wordpress__data package

* update placeholder, icon and description

* update tsconfig

* update block name

* fix SCSS linter error

* address feedback

* create SingleProductTemplateCompatibility class

* Add Hooks compatibility

* remove not used file

* remove not used files

* Add compatibility layer for the Single Product template

* fix check

* implement Product meta template header

* Product Price Block: Add support Single Product Template

* fix missing import

* add comment

* return a value

* improve comment

* fix import

* Add Product Meta block

* wrap up default single product html

* fix: related products and grouped products result #8589

* remove classname

* fix crash

* update template

---------

Co-authored-by: Alexandre Lara <allexandrelara@gmail.com>
Co-authored-by: Patricia Hillebrandt <patriciahillebrandt@gmail.com>
@gigitux
Copy link
Contributor

gigitux commented Mar 21, 2023

Hey folks,
this PR is ready to be reviewed! @nefeline @danielwrobert

@gigitux gigitux force-pushed the feat/add-default-single-product-html-template branch 3 times, most recently from ba585ab to bcc5642 Compare March 22, 2023 11:16
@gigitux gigitux force-pushed the feat/add-default-single-product-html-template branch from bcc5642 to 394ef49 Compare March 22, 2023 11:18
Copy link
Contributor

@nefeline nefeline left a comment

Choose a reason for hiding this comment

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

Nice work 🎉 !

I just left a question regarding the header and footer, but other than that, everything works as expected.

Test Results

Go to Appearance > Themes and activate a Blockfied theme, such as: Twenty-twenty Three;
After the theme is activated, go to Appearance > Editor (Beta);
Inside the Design section, click on Templates;
Select the Single Product template;
On the top left of the page, click on the Edit button;
On the top right of the page, click on the three dots icon and open the Code Editor (or just hit Shift + Option + Command + M on the Mac);
Replace the default wp-group section with the wp-group section inside the templates/templates/blockified/single-product.html file of this PR.
Click on the Save button;
Check if the information is correctly being displayed and well positioned on the page.

✅ Confirmed the information is displayed and well positioned on the page both on the editor side and on the FE:

Screen.Recording.2023-03-22.at.11.41.52.mov

<!-- wp:paragraph -->
<p>Single product blockified</p>
<!-- /wp:paragraph --></div>
<!-- wp:template-part {"slug":"header","theme":"twentytwentythree","tagName":"header"} /-->
Copy link
Contributor

Choose a reason for hiding this comment

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

Are we sure we wanna add the header and footer for twentytwentythree theme here? What happens if the user is using another theme?

Copy link
Contributor

Choose a reason for hiding this comment

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

Great catch! I fixed via 1822c58

@github-actions github-actions bot added this to the 9.9.0 milestone Mar 22, 2023
@gigitux gigitux enabled auto-merge (squash) March 22, 2023 14:47
@gigitux gigitux merged commit 84acc01 into trunk Mar 22, 2023
@gigitux gigitux deleted the feat/add-default-single-product-html-template branch March 22, 2023 15:00
@@ -6,8 +6,9 @@
"description": "A block that allows your customers to see details and reviews about the product.",
"category": "woocommerce",
"keywords": [ "WooCommerce" ],
"supports": {},
"attributes": {},
Copy link
Contributor

@danielwrobert danielwrobert Mar 22, 2023

Choose a reason for hiding this comment

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

How come we're removing the attributes property here and adding it in product-image-gallery/block.json below?

I couldn't find the specific commit that made this change. Everything still tests as described, I'm really just curious! 🙂

Copy link
Contributor

@gigitux gigitux Mar 22, 2023

Choose a reason for hiding this comment

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

I updated this PR multiple times these weeks, so I'm unsure who and when the attributes key was removed.

I agree with you, we should remove the empty attributes on the product image gallery block.json. I created a PR #8825

Copy link
Contributor

Choose a reason for hiding this comment

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

Perfect, thank you. I'll put that on my list to review today!

@tarunvijwani tarunvijwani added the type: enhancement The issue is a request for an enhancement. label Mar 27, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
type: enhancement The issue is a request for an enhancement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Provide a default HTML for the Single Product Template
5 participants