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

[Experimental] Mini Cart Icon Control via theme.json. #7491

Closed
wants to merge 3 commits into from

Conversation

danielwrobert
Copy link
Contributor

This is an experimental PR that allows control over the Mini Cart Icon via a theme's theme.json file.

Test Plan

  • Apply PR and run npm start.
  • In the current theme, add the following config in the settings property in the theme.json file:
    "blocks": {
    	"woocommerce/mini-cart": {
    		"custom": {
    			"icon": "miniCartBasket"
    		}
    	}
    }
  • Confirm that the icon for the Mini Cart block has updated to use a basket icon.
  • Adjust the icon setting from miniCartBasket to miniCartBag and confirm that the Mini Cart block now uses a bag icon.
  • Confirm no JS or PHP errors.

Note: This current implementation also updates the icon for the block in the inserter. We likely want to keep this icon the same, as it can potentially lead to confusion for what a user is looking for when adding a block in the editor. I've left it in here for the sake of experimentation, however.

To Do

  • Confirm it is ok to add configs that we’re not using in CSS in this way.
  • Investigate if it is possible to set special settings in the JSON that will be ignored.
  • Confirm it is ok to include our settings on settings/block/custom or if it would be better to add a separate setting outside of settings.
  • Code cleanup (consider if and where we can put the PHP logic as well as the duplicate JS logic between the editor and front end).
  • Explore the possibility of using a block filter to allow theme developers more options in extending/overriding the icon.

@danielwrobert danielwrobert self-assigned this Oct 26, 2022
@github-actions
Copy link
Contributor

Refactor and/or abstract this to an external template, if...

Refactor and/or abstract this to an external template, if that makes more sense.


// TODO: Refactor and/or abstract this to an external template, if that makes more sense.
switch ( $this->icon_setting ) {
case 'miniCartBasket':
$icon = '<svg class="wc-block-mini-cart__icon" width="20" height="20" viewBox="0 0 512 512" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<g>
<g fill="#231F20" fillRule="evenodd">
<path d="m455.8,175.7h-145.4l63.3-122c2.7-5.1 0.7-11.4-4.5-14.1-5.1-2.6-11.4-0.7-14.1,4.4l-68.3,131.6h-61.8l-68.2-131.6c-2.7-5.1-8.9-7.1-14.1-4.4-5.1,2.7-7.1,8.9-4.5,14.1l63.3,122h-145.3c-24.9,0-45.2,20.3-45.2,45.2 0,24.9 20.2,45.2 45.1,45.2l41.2,199.3c1,4.8 5.3,8.3 10.2,8.3h296.9c4.9,0 9.2-3.5 10.2-8.3l41.3-199.4c24.9,0 45.1-20.3 45.1-45.2 0-24.9-20.3-45.1-45.2-45.1zm-59.8,277h-280l-38.6-186.7h357.1l-38.5,186.7zm59.8-207.6h-399.6c-13.4,0-24.3-10.9-24.3-24.3 0-13.4 10.9-24.3 24.3-24.3h399.7c13.4,0 24.3,10.9 24.3,24.3-0.1,13.4-11,24.3-24.4,24.3z" />
<path d="m137,337.4h16.2c5.8,0 10.4-4.7 10.4-10.4s-4.7-10.4-10.4-10.4h-16.2c-5.8,0-10.4,4.7-10.4,10.4s4.7,10.4 10.4,10.4z" />
<path d="m208.3,337.4h16.2c5.8,0 10.4-4.7 10.4-10.4s-4.7-10.4-10.4-10.4h-16.2c-5.8,0-10.4,4.7-10.4,10.4s4.6,10.4 10.4,10.4z" />
<path d="m279.5,337.4h16.2c5.8,0 10.4-4.7 10.4-10.4s-4.7-10.4-10.4-10.4h-16.2c-5.8,0-10.4,4.7-10.4,10.4s4.6,10.4 10.4,10.4z" />
<path d="m350.7,337.4h16.3c5.8,0 10.4-4.7 10.4-10.4s-4.7-10.4-10.4-10.4h-16.2c-5.8,0-10.4,4.7-10.4,10.4s4.6,10.4 10.3,10.4z" />
<path d="m172.6,402.2h16.2c5.8,0 10.4-4.7 10.4-10.4 0-5.8-4.7-10.4-10.4-10.4h-16.2c-5.8,0-10.4,4.7-10.4,10.4 0,5.7 4.7,10.4 10.4,10.4z" />

🚀 This comment was generated by the automations bot based on a todo comment in 68cde69 in #7491. cc @danielwrobert

@github-actions
Copy link
Contributor

Determine if we need to update the inserter icon.

Determine if we need to update the inserter icon. If so, we can abstract this out elsewhere because it is repeated in the block.


// TODO: Determine if we need to update the inserter icon. If so, we can abstract this out elsewhere because it is repeated in the block.
const getIconSetting: string = getSettingWithCoercion(
'miniCartIcon',
'default',
isString
);
const iconSettings: { [ key: string ]: JSX.Element } = {
default: miniCart,
miniCart,
miniCartBasket,
miniCartBag,
};

🚀 This comment was generated by the automations bot based on a todo comment in 68cde69 in #7491. cc @danielwrobert

@github-actions
Copy link
Contributor

The release ZIP for this PR is accessible via:

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

@github-actions
Copy link
Contributor

github-actions bot commented Oct 26, 2022

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.

@github-actions
Copy link
Contributor

github-actions bot commented Oct 26, 2022

Size Change: +1.9 kB (0%)

Total Size: 1 MB

Filename Size Change
build/active-filters-frontend.js 7.72 kB +1 B (0%)
build/active-filters-wrapper-frontend.js 6 kB -1 B (0%)
build/all-products-frontend.js 26.5 kB +8 B (0%)
build/all-products.js 33.7 kB -3 B (0%)
build/attribute-filter-frontend.js 22.6 kB +2 B (0%)
build/attribute-filter-wrapper-frontend.js 7.12 kB -1 B (0%)
build/cart-blocks/cart-accepted-payment-methods-frontend.js 1.38 kB -1 B (0%)
build/cart-blocks/cart-cross-sells-products--product-add-to-cart-frontend.js 5.63 kB -2 B (0%)
build/cart-blocks/cart-express-payment--checkout-blocks/express-payment-frontend.js 5.1 kB +3 B (0%)
build/cart-frontend.js 54.5 kB -8 B (0%)
build/cart.js 47.5 kB -3 B (0%)
build/checkout-blocks/actions-frontend.js 1.78 kB -1 B (0%)
build/checkout-blocks/billing-address--checkout-blocks/shipping-address-frontend.js 4.97 kB -1 B (0%)
build/checkout-frontend.js 56.7 kB -11 B (0%)
build/filter-wrapper-frontend.js 13.8 kB +2 B (0%)
build/handpicked-products.js 7.33 kB +1 B (0%)
build/mini-cart-component-frontend.js 21 kB +966 B (+5%) 🔍
build/mini-cart-contents-block/footer-frontend.js 2.97 kB -1 B (0%)
build/mini-cart.js 5.24 kB +956 B (+22%) 🚨
build/price-filter-wrapper-frontend.js 7.01 kB -2 B (0%)
build/product-add-to-cart--product-button--product-category-list--product-image--product-price--product-r--a0326d00.js 227 B -1 B (0%)
build/product-add-to-cart.js 8.57 kB +2 B (0%)
build/product-best-sellers.js 7.7 kB -1 B (0%)
build/product-new.js 7.69 kB -1 B (0%)
build/product-on-sale.js 8.01 kB -1 B (0%)
build/product-query.js 2.89 kB +1 B (0%)
build/product-summary.js 921 B +1 B (0%)
build/product-top-rated.js 7.93 kB -1 B (0%)
build/rating-filter-frontend.js 7.12 kB -4 B (0%)
build/rating-filter-wrapper-frontend.js 5.38 kB -2 B (0%)
build/reviews-by-category.js 11.3 kB -1 B (0%)
build/reviews-frontend.js 7.01 kB +1 B (0%)
build/single-product-frontend.js 32.3 kB +5 B (0%)
build/single-product.js 10.1 kB +1 B (0%)
build/stock-filter.js 6.7 kB -1 B (0%)
build/vendors--attribute-filter-wrapper--mini-cart-contents-block/footer-frontend.js 6.86 kB +1 B (0%)
build/vendors--attribute-filter-wrapper-frontend.js 8.21 kB -2 B (0%)
build/vendors--cart-blocks/cart-cross-sells-products--product-add-to-cart-frontend.js 7.53 kB +1 B (0%)
ℹ️ View Unchanged
Filename Size
build/active-filters.js 7.3 kB
build/all-reviews.js 7.79 kB
build/attribute-filter.js 12.3 kB
build/blocks-checkout.js 17.5 kB
build/cart-blocks/cart-cross-sells-frontend.js 253 B
build/cart-blocks/cart-cross-sells-products-frontend.js 4.68 kB
build/cart-blocks/cart-express-payment-frontend.js 785 B
build/cart-blocks/cart-items-frontend.js 299 B
build/cart-blocks/cart-line-items--mini-cart-contents-block/products-table-frontend.js 5.31 kB
build/cart-blocks/cart-line-items-frontend.js 1.07 kB
build/cart-blocks/cart-order-summary-frontend.js 1.11 kB
build/cart-blocks/cart-totals-frontend.js 320 B
build/cart-blocks/empty-cart-frontend.js 346 B
build/cart-blocks/filled-cart-frontend.js 783 B
build/cart-blocks/order-summary-coupon-form-frontend.js 2.73 kB
build/cart-blocks/order-summary-discount-frontend.js 2.16 kB
build/cart-blocks/order-summary-fee-frontend.js 272 B
build/cart-blocks/order-summary-heading-frontend.js 456 B
build/cart-blocks/order-summary-shipping--checkout-blocks/order-summary-shipping-frontend.js 6.61 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.19 kB
build/checkout-blocks/billing-address-frontend.js 952 B
build/checkout-blocks/contact-information-frontend.js 3.02 kB
build/checkout-blocks/express-payment-frontend.js 1.13 kB
build/checkout-blocks/fields-frontend.js 343 B
build/checkout-blocks/order-note-frontend.js 1.14 kB
build/checkout-blocks/order-summary-cart-items-frontend.js 3.67 kB
build/checkout-blocks/order-summary-coupon-form-frontend.js 2.88 kB
build/checkout-blocks/order-summary-discount-frontend.js 2.28 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 433 B
build/checkout-blocks/payment-frontend.js 7.86 kB
build/checkout-blocks/shipping-address-frontend.js 1.06 kB
build/checkout-blocks/shipping-methods-frontend.js 4.89 kB
build/checkout-blocks/terms-frontend.js 1.64 kB
build/checkout-blocks/totals-frontend.js 323 B
build/checkout.js 41.2 kB
build/featured-category.js 13.2 kB
build/featured-product.js 13.5 kB
build/filter-wrapper.js 2.88 kB
build/general-style-rtl.css 1.29 kB
build/general-style.css 1.29 kB
build/legacy-template.js 2.83 kB
build/mini-cart-contents-block/empty-cart-frontend.js 367 B
build/mini-cart-contents-block/filled-cart-frontend.js 230 B
build/mini-cart-contents-block/items-frontend.js 236 B
build/mini-cart-contents-block/products-table-frontend.js 590 B
build/mini-cart-contents-block/shopping-button-frontend.js 287 B
build/mini-cart-contents-block/title-frontend.js 367 B
build/mini-cart-contents.js 17.2 kB
build/mini-cart-frontend.js 1.82 kB
build/price-filter-frontend.js 13.6 kB
build/price-filter.js 8.37 kB
build/price-format.js 1.19 kB
build/product-add-to-cart--product-button--product-image--product-rating--product-title.js 151 B
build/product-add-to-cart-frontend.js 1.25 kB
build/product-button--product-category-list--product-image--product-price--product-rating--product-sale-b--e17c7c01.js 431 B
build/product-button--product-image--product-rating--product-sale-badge--product-title.js 301 B
build/product-button-frontend.js 1.89 kB
build/product-button.js 3.87 kB
build/product-categories.js 2.36 kB
build/product-category-list-frontend.js 884 B
build/product-category-list.js 502 B
build/product-category.js 8.69 kB
build/product-image-frontend.js 1.92 kB
build/product-image.js 3.99 kB
build/product-price-frontend.js 1.92 kB
build/product-price.js 1.53 kB
build/product-rating-frontend.js 1.2 kB
build/product-rating.js 788 B
build/product-sale-badge-frontend.js 1.15 kB
build/product-sale-badge.js 817 B
build/product-search.js 2.61 kB
build/product-sku-frontend.js 378 B
build/product-sku.js 377 B
build/product-stock-indicator-frontend.js 1 kB
build/product-stock-indicator.js 624 B
build/product-summary-frontend.js 1.29 kB
build/product-tag-list-frontend.js 877 B
build/product-tag-list.js 497 B
build/product-tag.js 8.05 kB
build/product-title-frontend.js 1.34 kB
build/product-title.js 3.36 kB
build/products-by-attribute.js 8.61 kB
build/rating-filter.js 6.19 kB
build/reviews-by-product.js 12.4 kB
build/stock-filter-frontend.js 7.78 kB
build/stock-filter-wrapper-frontend.js 6.03 kB
build/vendors--cart-blocks/cart-cross-sells-products--cart-blocks/cart-line-items--cart-blocks/cart-order--671ca56f-frontend.js 5.26 kB
build/vendors--cart-blocks/cart-cross-sells-products--cart-blocks/order-summary-shipping--checkout-blocks--18f9376a-frontend.js 19.1 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.85 kB
build/wc-blocks-data.js 18.3 kB
build/wc-blocks-editor-style-rtl.css 5.24 kB
build/wc-blocks-editor-style.css 5.24 kB
build/wc-blocks-google-analytics.js 1.56 kB
build/wc-blocks-middleware.js 932 B
build/wc-blocks-registry.js 2.93 kB
build/wc-blocks-shared-context.js 1.52 kB
build/wc-blocks-shared-hocs.js 1.72 kB
build/wc-blocks-style-rtl.css 24.2 kB
build/wc-blocks-style.css 24.2 kB
build/wc-blocks-vendors-style-rtl.css 1.95 kB
build/wc-blocks-vendors-style.css 1.95 kB
build/wc-blocks-vendors.js 62.4 kB
build/wc-blocks.js 2.62 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

compressed-size-action

@github-actions
Copy link
Contributor

github-actions bot commented Nov 3, 2022

This PR has been marked as stale because it has not seen any activity within the past 7 days. Our team uses this tool to help surface pull requests that have slipped through review.

If deemed still relevant, the pr can be kept active by ensuring it's up to date with the main branch and removing the stale label.

@github-actions github-actions bot added the status: stale Stale issues and PRs have had no updates for 60 days. label Nov 3, 2022
Allow for a set of options for the Mini Cart icon that can be controlled
via the theme.json file.
Note: We are currently using a Switch case in the main Mini Cart file.
It may be nice, as a follow-up task, to refactor a little bit and
abstract some of that template logic out.
It was noted at the meetup that, by changing the inserter icon, we run
the risk of making it more confusing for the user when looking for the
block in the editor. They are likely accustomed to seeing the icon as it
is and would look for that familiar item  when trying to add the block.
@github-actions
Copy link
Contributor

github-actions bot commented Nov 3, 2022

TypeScript Errors Report

Files with errors: 448
Total errors: 2121

🎉 🎉 This PR does not introduce new TS errors.

@github-actions github-actions bot removed the status: stale Stale issues and PRs have had no updates for 60 days. label Nov 4, 2022
@danielwrobert danielwrobert added type: enhancement The issue is a request for an enhancement. block: mini-cart Issues related to the Mini-Cart block. labels Nov 7, 2022
@github-actions
Copy link
Contributor

This PR has been marked as stale because it has not seen any activity within the past 7 days. Our team uses this tool to help surface pull requests that have slipped through review.

If deemed still relevant, the pr can be kept active by ensuring it's up to date with the main branch and removing the stale label.

@github-actions github-actions bot added the status: stale Stale issues and PRs have had no updates for 60 days. label Nov 15, 2022
@github-actions github-actions bot removed the status: stale Stale issues and PRs have had no updates for 60 days. label Dec 20, 2022
@albarin
Copy link
Contributor

albarin commented Mar 30, 2023

Related to this issue #6868

@danielwrobert
Copy link
Contributor Author

This PR (as noted in the title) was more of an experiment to be served as a reference point, should we decide to pursue this route in the future.

I am going to go ahead and close it out now, as it can still serve it's purpose as a reference while not being open.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
block: mini-cart Issues related to the Mini-Cart block. type: enhancement The issue is a request for an enhancement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants