woocommerce/plugins/woocommerce-blocks/assets/js/blocks/product-collection/collections
Christopher Allford 7d71e2235a
Product Collection: Redesigned Collection Insertion Selection (#48911)
* Updated Collection Selection Buttons

Rather than using normal buttons we're going to replace these with cards
that we want to use instead.

* Reworked Product Catalog Creation

* Added Dropdown Collection Option

* Changelog

* Added Collection Dashicon Support

* Fixed Collection Change Modal

This is going to get replaced soon but it may as well look nicer than it
does right now.

* Type Fix

* Fixed `:focus` Hover Border

* Simplified Click Handler

* Style Fixes

* Gutenberg Style Fixes

* E2E Fixes

* Fixed E2E Test

* Added Dropdown Inserter E2E Support

* Logging

* Fixed Default Insertion Options

* Prevent Premature Rendering

* E2E Fix Attempt

* Lint Fix

* E2E Fix

* Fix test chaking if custom registred collections are available in the collection chooser

* Improve logic of choosing collection to cover both dropdown and placeholder

---------

Co-authored-by: Karol Manijak <20098064+kmanijak@users.noreply.github.com>
2024-07-09 13:53:48 +02:00
..
README.md New flow of adding Product Collection and basic set of Collections (#42696) 2023-12-27 11:07:27 +01:00
best-sellers.tsx Product Collection: Redesigned Collection Insertion Selection (#48911) 2024-07-09 13:53:48 +02:00
featured.tsx Product Collection: Redesigned Collection Insertion Selection (#48911) 2024-07-09 13:53:48 +02:00
index.tsx Expose `__experimentalRegisterProductCollection` in @woocommerce/blocks-registry Package (#48141) 2024-07-05 16:55:35 +05:30
new-arrivals.tsx Product Collection: Redesigned Collection Insertion Selection (#48911) 2024-07-09 13:53:48 +02:00
on-sale.tsx Product Collection: Redesigned Collection Insertion Selection (#48911) 2024-07-09 13:53:48 +02:00
product-collection.tsx Product Collection: Redesigned Collection Insertion Selection (#48911) 2024-07-09 13:53:48 +02:00
top-rated.tsx Product Collection: Redesigned Collection Insertion Selection (#48911) 2024-07-09 13:53:48 +02:00

README.md

Product Collection - Collections

Note: Collections documented here are internal implementation. It's not a way to register custom Collections, however we're going to expose public API for that.

Collections are a variations of Product Collection block with the predefined attributes which includes:

  • UI aspect - you can define layout, number of columns etc.
  • Query - specify the filters and sorting of the products
  • Inner blocks structure - define the Product Template structure

Interface

Collections are in fact Variations and they are registered via Variation API. Hence they should follow the BlockVariation type, providing at least:

type Collection ={
	name: string;
	title: string;
	icon: Icon;
	description: string;
	attributes: ProductCollectionAttributes;
	innerBlocks: InnerBlockTemplate[];
	isActive?:
		(blockAttrs: BlockAttributes, variationAttributes: BlockAttributes) => boolean;
}

Please be aware you can specify isActive function, but if not, the default one will compare the variation's name with attributes.collection value.

As an example please follow ./new-arrivals.tsx.

Collection can hide Inspector Controls filters from users

Let's take New Arrivals as an example. What defines New Arrivals is the product order: from newest to oldest. Users can apply additional filters on top of it, for example, "On Sale" but shouldn't be able to change ordering because that would no longer be New Arrivals Collection.

To achieve this add additional property to collection definition:

type Collection = {
	...;
	hideControls: FilterName[];
}

Registering Collection

To register collection import it in ./index.ts file and add to the collections array.