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

Allow customer account block to center align #9750

Merged
merged 6 commits into from
Jun 22, 2023

Conversation

roykho
Copy link
Member

@roykho roykho commented Jun 7, 2023

Fixes #8412

This PR fixes the issue with the Customer Account block where using the center align layout is not working.

Screenshots

Editor Frontend
file.png file.png

Testing

User Facing Testing

  1. Add a post/page and insert the Customer account block.
  2. With the toolbar, change the width alignment to center. Update/Publish.
  3. Ensure you see the icon and text centered on the page.
  4. Go to the frontend and check that it is also centered on the page.
  • Do not include in the Testing Notes

WooCommerce Visibility

  • WooCommerce Core
  • Feature plugin
  • Experimental

Performance Impact

Changelog

Fix customer account block not able to center align

@roykho roykho added type: bug The issue/PR concerns a confirmed bug. block: customer account Issues related to the Customer account block. labels Jun 7, 2023
@woocommercebot woocommercebot requested review from a team and thealexandrelara and removed request for a team June 7, 2023 13:26
@github-actions
Copy link
Contributor

github-actions bot commented Jun 7, 2023

The release ZIP for this PR is accessible via:

https://wcblocks.wpcomstaging.com/wp-content/uploads/woocommerce-gutenberg-products-block-9750.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: 464
  • Total errors: 2213

🎉 🎉 This PR does not introduce new TS errors.

comments-aggregator

@github-actions
Copy link
Contributor

github-actions bot commented Jun 7, 2023

Size Change: +2.52 kB (0%)

Total Size: 1.1 MB

Filename Size Change
build/active-filters-frontend.js 8.64 kB -3 B (0%)
build/active-filters-wrapper-frontend.js 7.61 kB +2 B (0%)
build/active-filters.js 7.48 kB +1 B (0%)
build/all-products.js 40.3 kB +145 B (0%)
build/all-reviews.js 7.86 kB +1 B (0%)
build/attribute-filter-wrapper--stock-filter-wrapper-frontend.js 4.04 kB -2 B (0%)
build/attribute-filter-wrapper-frontend.js 4.29 kB +2 B (0%)
build/attribute-filter.js 13.2 kB +11 B (0%)
build/cart-blocks/cart-cross-sells-frontend.js 253 B -1 B (0%)
build/cart-blocks/cart-cross-sells-products--product-price-frontend.js 2.92 kB +2 B (0%)
build/cart-blocks/cart-cross-sells-products-frontend.js 3.77 kB -1 B (0%)
build/cart-blocks/cart-express-payment--checkout-blocks/express-payment-frontend.js 5.17 kB -2 B (0%)
build/cart-blocks/cart-express-payment-frontend.js 719 B -1 B (0%)
build/cart-blocks/cart-line-items--mini-cart-contents-block/products-table-frontend.js 5.57 kB -4 B (0%)
build/cart-blocks/cart-order-summary-frontend.js 1.27 kB +2 B (0%)
build/cart-blocks/cart-totals-frontend.js 309 B +1 B (0%)
build/cart-blocks/order-summary-discount-frontend.js 2.12 kB -1 B (0%)
build/cart-blocks/order-summary-shipping-frontend.js 17.1 kB -14 B (0%)
build/cart-blocks/order-summary-subtotal-frontend.js 273 B -1 B (0%)
build/cart-blocks/proceed-to-checkout-frontend.js 1.44 kB +59 B (+4%)
build/cart-frontend.js 30 kB +118 B (0%)
build/cart.js 45.2 kB +16 B (0%)
build/checkout-blocks/actions-frontend.js 1.88 kB -3 B (0%)
build/checkout-blocks/billing-address--checkout-blocks/shipping-address-frontend.js 4.7 kB +3 B (0%)
build/checkout-blocks/billing-address-frontend.js 1.19 kB +1 B (0%)
build/checkout-blocks/contact-information-frontend.js 2.05 kB +3 B (0%)
build/checkout-blocks/express-payment-frontend.js 1.14 kB -1 B (0%)
build/checkout-blocks/fields-frontend.js 331 B -1 B (0%)
build/checkout-blocks/order-note-frontend.js 1.13 kB -2 B (0%)
build/checkout-blocks/order-summary-cart-items-frontend.js 3.75 kB -3 B (0%)
build/checkout-blocks/order-summary-coupon-form-frontend.js 1.79 kB -1 B (0%)
build/checkout-blocks/order-summary-discount-frontend.js 2.29 kB +1 B (0%)
build/checkout-blocks/order-summary-fee-frontend.js 276 B -1 B (0%)
build/checkout-blocks/order-summary-frontend.js 1.27 kB +1 B (0%)
build/checkout-blocks/order-summary-shipping-frontend.js 17 kB -10 B (0%)
build/checkout-blocks/payment-frontend.js 8.28 kB -3 B (0%)
build/checkout-blocks/pickup-options-frontend.js 4.84 kB -3 B (0%)
build/checkout-blocks/shipping-address-frontend.js 1.17 kB +1 B (0%)
build/checkout-blocks/shipping-method-frontend.js 2.63 kB -2 B (0%)
build/checkout-blocks/shipping-methods-frontend.js 6.4 kB -1 B (0%)
build/checkout-blocks/totals-frontend.js 362 B +1 B (0%)
build/checkout-frontend.js 31.9 kB -35 B (0%)
build/checkout.js 46.6 kB +6 B (0%)
build/featured-category.js 15.1 kB +2 B (0%)
build/featured-product.js 15.3 kB +2 B (0%)
build/filter-wrapper-frontend.js 14.3 kB -2 B (0%)
build/legacy-template.js 6.8 kB +87 B (+1%)
build/mini-cart-component-frontend.js 30.6 kB +1.12 kB (+4%)
build/mini-cart-contents-block/cart-button-frontend.js 1.72 kB -4 B (0%)
build/mini-cart-contents-block/checkout-button-frontend.js 1.81 kB +76 B (+4%)
build/mini-cart-contents-block/empty-cart-frontend.js 361 B -1 B (0%)
build/mini-cart-contents-block/footer-frontend.js 3.81 kB -281 B (-7%)
build/mini-cart-contents-block/products-table-frontend.js 594 B +1 B (0%)
build/mini-cart-contents-block/shopping-button-frontend.js 527 B +1 B (0%)
build/mini-cart-contents-block/title-frontend.js 1.89 kB -5 B (0%)
build/mini-cart-contents-block/title-items-counter-frontend.js 1.59 kB -5 B (0%)
build/mini-cart-contents-block/title-label-frontend.js 1.52 kB -6 B (0%)
build/mini-cart-contents.js 18.1 kB +2 B (0%)
build/mini-cart-frontend.js 2.84 kB +120 B (+4%)
build/mini-cart.js 5.92 kB +600 B (+11%) ⚠️
build/price-filter-wrapper-frontend.js 6.75 kB +3 B (0%)
build/price-filter.js 8.55 kB +1 B (0%)
build/product-add-to-cart-frontend.js 6.51 kB -4 B (0%)
build/product-add-to-cart.js 8.84 kB +3 B (0%)
build/product-best-sellers.js 8.36 kB +1 B (0%)
build/product-button-frontend.js 2.65 kB -5 B (0%)
build/product-button.js 3.98 kB +4 B (0%)
build/product-category.js 9.37 kB +2 B (0%)
build/product-collection.js 12.3 kB +6 B (0%)
build/product-image-frontend.js 2.61 kB -7 B (0%)
build/product-image.js 4.14 kB -1 B (0%)
build/product-new.js 8.65 kB -2 B (0%)
build/product-on-sale.js 8.65 kB +1 B (0%)
build/product-price-frontend.js 204 B +1 B (0%)
build/product-query.js 11.9 kB +122 B (+1%)
build/product-rating-frontend.js 2.33 kB -7 B (0%)
build/product-rating.js 1.03 kB +1 B (0%)
build/product-sale-badge-frontend.js 1.78 kB -7 B (0%)
build/product-search.js 2.63 kB +1 B (0%)
build/product-sku-frontend.js 1.83 kB -7 B (0%)
build/product-stock-indicator-frontend.js 2.02 kB -4 B (0%)
build/product-summary-frontend.js 2.24 kB -7 B (0%)
build/product-summary.js 1.01 kB -2 B (0%)
build/product-tag.js 9.01 kB +1 B (0%)
build/product-title-frontend.js 2.21 kB -5 B (0%)
build/product-title.js 3.66 kB +1 B (0%)
build/product-top-rated.js 8.91 kB +1 B (0%)
build/products-by-attribute.js 9.75 kB +4 B (0%)
build/rating-filter-frontend.js 21.4 kB -2 B (0%)
build/rating-filter-wrapper-frontend.js 6.2 kB +3 B (0%)
build/rating-filter.js 6.9 kB +7 B (0%)
build/reviews-by-category.js 12.1 kB +14 B (0%)
build/reviews-by-product.js 13.3 kB -1 B (0%)
build/reviews-frontend.js 7.17 kB -2 B (0%)
build/single-product.js 11.1 kB -6 B (0%)
build/vendors--attribute-filter-wrapper--cart-blocks/order-summary-shipping--checkout-blocks/billing-addr--d9f38f9d-frontend.js 4.21 kB +1 B (0%)
build/vendors--attribute-filter-wrapper--stock-filter-wrapper-frontend.js 5.11 kB -3 B (0%)
build/vendors--cart-blocks/cart-line-items--checkout-blocks/order-summary-cart-items--mini-cart-contents---233ab542-frontend.js 3.58 kB +1 B (0%)
build/vendors--cart-blocks/order-summary-shipping--checkout-blocks/billing-address--checkout-blocks/order--decc3dc6-frontend.js 19.4 kB +2 B (0%)
build/vendors--checkout-blocks/pickup-options--checkout-blocks/shipping-methods-frontend.js 8.25 kB +1 B (0%)
build/vendors--checkout-blocks/shipping-method-frontend.js 12.5 kB +1 B (0%)
build/vendors--price-filter-wrapper-frontend.js 2.2 kB +1 B (0%)
build/vendors--rating-filter-wrapper-frontend.js 5.1 kB -3 B (0%)
build/wc-blocks-editor-style-rtl.css 6.21 kB +155 B (+3%)
build/wc-blocks-editor-style.css 6.21 kB +156 B (+3%)
build/wc-blocks-style-rtl.css 28 kB +51 B (0%)
build/wc-blocks-style.css 28 kB +52 B (0%)
ℹ️ View Unchanged
Filename Size
build/all-products-frontend.js 12 kB
build/blocks-checkout.js 35.1 kB
build/breadcrumbs.js 2.13 kB
build/cart-blocks/cart-accepted-payment-methods-frontend.js 1.39 kB
build/cart-blocks/cart-items-frontend.js 301 B
build/cart-blocks/cart-line-items-frontend.js 1.06 kB
build/cart-blocks/empty-cart-frontend.js 346 B
build/cart-blocks/filled-cart-frontend.js 656 B
build/cart-blocks/order-summary-coupon-form-frontend.js 1.63 kB
build/cart-blocks/order-summary-fee-frontend.js 273 B
build/cart-blocks/order-summary-heading-frontend.js 334 B
build/cart-blocks/order-summary-taxes-frontend.js 433 B
build/catalog-sorting.js 1.7 kB
build/checkout-blocks/order-summary-subtotal-frontend.js 274 B
build/checkout-blocks/order-summary-taxes-frontend.js 434 B
build/checkout-blocks/terms-frontend.js 1.56 kB
build/customer-account.js 3.18 kB
build/filter-wrapper.js 2.4 kB
build/general-style-rtl.css 1.31 kB
build/general-style.css 1.31 kB
build/handpicked-products.js 8.04 kB
build/mini-cart-contents-block/filled-cart-frontend.js 267 B
build/mini-cart-contents-block/items-frontend.js 237 B
build/price-format.js 1.19 kB
build/product-add-to-cart--product-button--product-image--product-price--product-rating--product-sale-bad--49d3ecb2.js 250 B
build/product-add-to-cart--product-button--product-image--product-rating--product-title.js 151 B
build/product-button--product-image--product-price--product-rating--product-sale-badge--product-sku--prod--5bce0384.js 955 B
build/product-categories.js 2.71 kB
build/product-price.js 1.68 kB
build/product-results-count.js 1.66 kB
build/product-sale-badge.js 666 B
build/product-sku.js 535 B
build/product-stock-indicator.js 731 B
build/product-template.js 3.34 kB
build/stock-filter-wrapper-frontend.js 2.98 kB
build/stock-filter.js 7.62 kB
build/store-notices.js 1.68 kB
build/vendors--attribute-filter-wrapper--cart-blocks/order-summary-coupon-form--cart-blocks/order-summary--48e1e4bb-frontend.js 6.82 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--product-add-to-cart-frontend.js 7.26 kB
build/wc-blocks-data.js 22.3 kB
build/wc-blocks-google-analytics.js 1.56 kB
build/wc-blocks-middleware.js 934 B
build/wc-blocks-registry.js 3.15 kB
build/wc-blocks-shared-context.js 1.1 kB
build/wc-blocks-shared-hocs.js 1.75 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 65.1 kB
build/wc-blocks.js 3.7 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 30.4 kB
build/woo-directives-runtime.js 2.73 kB
build/woo-directives-vendors.js 7.91 kB

compressed-size-action

@roykho
Copy link
Member Author

roykho commented Jun 14, 2023

Hi @thealexandrelara - just checking if you had a chance to look at this PR? Let me know if you have questions.

Copy link
Contributor

@thealexandrelara thealexandrelara left a comment

Choose a reason for hiding this comment

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

Hey @roykho, sorry I totally missed your PR. I left some suggestions here that I'd like to know your opinion about them

assets/js/blocks/customer-account/editor.scss Outdated Show resolved Hide resolved
Comment on lines 2 to 4
&.aligncenter > a {
justify-content: center;
}
Copy link
Contributor

Choose a reason for hiding this comment

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

If you accept the solution that I posted above, we can also change this css:

Suggested change
&.aligncenter > a {
justify-content: center;
}
&.aligncenter {
width: fit-content; // or max-content
}

@roykho
Copy link
Member Author

roykho commented Jun 15, 2023

@thealexandrelara - I pushed up changes to use Flexbox to see if you think it is better.

Copy link
Contributor

@thealexandrelara thealexandrelara left a comment

Choose a reason for hiding this comment

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

I'm still not sure if we should modify the display, float and justify-content for this block instead of just modifying the block width. I tested your solution and it is working as expected so I'll be approving this one. Thank you for working on this! 🚀

@github-actions github-actions bot added this to the 10.5.0 milestone Jun 15, 2023
@roykho
Copy link
Member Author

roykho commented Jun 15, 2023

I'm still not sure if we should modify the display, float and justify-content

Yeah I am not sure either however I do know using Flexbox is much better than floats and it also self clears so we don't need any hacky way to clear the floats. Let's get more opinions just in case. cc @Aljullu @imanish003 to see what you think?

@imanish003
Copy link
Contributor

@roykho @thealexandrelara

Thanks for looping me into this discussion. 🙏

I tend to agree with the use of flexbox over floats. It's more flexible, and easier to maintain in the long run. Additionally, it provides better control over alignment and distribution of space among items in the container.

One concern that comes to mind is the potential impact on themes having custom CSS for the Customer Account block. I believe we should consider the implications carefully. 🤔 CC: @tjcafferkey

Furthermore, is there a particular reason why we're not combining these styles? From my perspective, these styles are shared between the editor and frontend. Hence, we can consolidate all these into a single file, namely, style.scss. This file is specifically designed for styles intended to be applicable to both frontend and editor, as elaborated here.

What do you think?

@gigitux gigitux modified the milestones: 10.5.0, 10.6.0 Jun 19, 2023
@gigitux
Copy link
Contributor

gigitux commented Jun 19, 2023

I bumped the PR to the next milestone.

@roykho
Copy link
Member Author

roykho commented Jun 19, 2023

Furthermore, is there a particular reason why we're not combining these styles?

The reason is because the editor has a very specific CSS declaration of the float property seen below and the only way to override the specificity is to add in editor specific styles.

file.png

@imanish003
Copy link
Contributor

Hi @roykho, Can't we combine the selectors like this?

.editor-styles-wrapper .is-layout-constrained > .wc-block-editor-customer-account.alignright,
.is-layout-constrained > .wp-block-woocommerce-customer-account.alignright {
	float: none;
	justify-content: flex-end;
}

.editor-styles-wrapper .is-layout-constrained > .wc-block-editor-customer-account.alignleft,
.is-layout-constrained > .wp-block-woocommerce-customer-account.alignleft {
	float: none;
	justify-content: flex-start;
}

.editor-styles-wrapper .is-layout-constrained > .wc-block-editor-customer-account.aligncenter,
.is-layout-constrained > .wp-block-woocommerce-customer-account.aligncenter {
	justify-content: center;
}

By combining the selectors, it becomes much easier to manage and modify the styles. Instead of updating multiple separate selectors, we can make uniform changes by modifying a single combined selector. This approach improves maintenance and reduces the chances of inconsistencies.

What are your thoughts on this? Am I missing something? 🙂

@roykho
Copy link
Member Author

roykho commented Jun 20, 2023

Hi @imanish003 - yes you can combine them however then you would have editor only classnames mixed into your frontend stylesheet. That's the reason why I didn't do that. But if you think that is ok, I can do that.

@imanish003
Copy link
Contributor

@roykho I see your point about keeping the editor only classnames separate from the frontend stylesheet for cleanliness and organization.

One potential solution could be to use a SASS mixin, where the shared styles are defined once and then included wherever they're needed. This way, we can maintain the separation of editor and frontend stylesheets, while still keeping the shared styles in one place. Something like this:

@mixin align-styles($justify-content) {
	float: none;
	justify-content: $justify-content;
}

.is-layout-constrained > .wp-block-woocommerce-customer-account.alignright {
	@include align-styles(flex-end);
}

.is-layout-constrained > .wp-block-woocommerce-customer-account.alignleft {
	@include align-styles(flex-start);
}

.is-layout-constrained > .wp-block-woocommerce-customer-account.aligncenter {
	@include align-styles(center);
}

And then importing it into editor.scss like this:

@import './style.scss';

.editor-styles-wrapper .is-layout-constrained > .wc-block-editor-customer-account.alignright {
	@include align-styles(flex-end);
}

.editor-styles-wrapper .is-layout-constrained > .wc-block-editor-customer-account.alignleft {
	@include align-styles(flex-start);
}

.editor-styles-wrapper .is-layout-constrained > .wc-block-editor-customer-account.aligncenter {
	@include align-styles(center);
}

What are your thoughts on this? 🙂

@roykho
Copy link
Member Author

roykho commented Jun 21, 2023

@imanish003 - ok I made the changes based on your recommendation. Just changed the mixin name to more closely match what it is doing.

Copy link
Contributor

@imanish003 imanish003 left a comment

Choose a reason for hiding this comment

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

Hi @roykho, I tested the PR, and it's working as expected. Well done! 🚀 I genuinely appreciate your patience with my nitpicking 🙏

@Aljullu
Copy link
Contributor

Aljullu commented Jun 22, 2023

Answering as I was pinged (sorry, I know I'm a few days late 😓 ).

Yeah I am not sure either however I do know using Flexbox is much better than floats and it also self clears so we don't need any hacky way to clear the floats. Let's get more opinions just in case. cc @Aljullu @imanish003 to see what you think?

I don't have a strong opinion, to be honest. I think there are pros and cons of each approach. My first inclination when reading the issue was to set a width to the wrapper (something like width: max-content;) and then let Gutengerg handle what to do with the .align classes. The main reason being that it keeps our codebase leaner and delegates the responsibility of aligning the block to Gutenberg.

Having said that, I think the solution implemented in this PR makes sense as well, so 👍 from my side. In the end, I expect this block to be used inside a Group or Row block, so alignment shouldn't be something that is frequently used.

@roykho roykho merged commit 6d3c789 into trunk Jun 22, 2023
@roykho roykho deleted the fix/customer-account-align-center branch June 22, 2023 12:41
@nielslange nielslange mentioned this pull request Jul 6, 2023
5 tasks
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
block: customer account Issues related to the Customer account block. type: bug The issue/PR concerns a confirmed bug.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Customer Account Block: Center Align doesn't work
5 participants