fdc07e5a96
* Add PQ support for client-side. Set up the block for PQ support and add necessary adjustments for the editor. Will address dynamic save functionality in a following commit. * Add dynamic render function for PQ support. * Add dynamic render callback for SSR. * Remove client-side Save function. * Add PQ Context interface to shared type defs. * Convert all block JS files to TS. * Remove commented import from block file. * Add typecasting to block function params. As a workaround, added a general Record type but left a TODO to revisit the proper object, as there is a mismatch in the shape of the default object property types and the actual types. * Update inserter behavior. Allows for the ability to add the rating block from in the inserter (as long as it's an inner block of the listed parents in the config). Also disables the placeholder product selector from being rendered unnecessarily (i.e., when the context ID is present). * Update parent inner blocks config. Reassign parent array to ancestor array which allows for blocks to be included with more flexibility - i.e., added within groups that are children of the ancestor block. * Add productID to rating Attributes interface. * TS type casting and import adustments. Some adjustments to utilize types that we already have available, along with some syntax adjustments and more sensible import tweaks. * Update type-casting to use ProductResponseItem Instead of using the generic Record, we can utilize the ProductResponseItem interface and set an omission for the average_rating property until that is corrected to properly reflect the API response. * Add alias to blocks dir for imports. Allows us to use exports from the blocks dir as "external" imports. This way we do not need to write long, relative import paths (which can be fragile in the long run). |
||
---|---|---|
.. | ||
active-filters | ||
attribute-filter | ||
cart | ||
cart-checkout-shared | ||
checkout | ||
classic-template | ||
featured-items | ||
filter-wrapper | ||
handpicked-products | ||
mini-cart | ||
price-filter | ||
product-best-sellers | ||
product-categories | ||
product-category | ||
product-new | ||
product-on-sale | ||
product-query | ||
product-search | ||
product-tag | ||
product-top-rated | ||
products | ||
products-by-attribute | ||
rating-filter | ||
reviews | ||
single-product | ||
stock-filter | ||
README.md |
README.md
Blocks
Our blocks are generally made up of up to 4 files:
|- block.js
|- editor.scss
|- index.js
|- style.scss
The only required file is index.js
, this sets up the block using registerBlockType
. Each block has edit and save functions.
The scss files are split so that things in style
are added to the editor and frontend, while styles in editor
are only added to the editor. Most of our blocks should use core components that won't need CSS though.
Editing
A simple edit function can live in index.js
, but most blocks are a little more complicated, so the edit function instead returns a Block component, which lives in block.js
. By using a component, we can use React lifecycle methods to fetch data or save state.
The Newest Products block is a good example to read over, this is a simple block that fetches the products and renders them using the ProductPreview component.
We include settings in the sidebar, called the Inspector in gutenberg. See an example of this.
Other blocks have the concept of an "edit state", like when you need to pick a product in the Featured Product block, or pick a category in the Products by Category block.