IO Base Component
Last updated
Last updated
📢 Use this project, contribute to it or open issues to help evolve it using Store Discussion.
⚠️
*Condition Layout app v1 has been deprecated in favor of Condition Layout app v2. Although support for the former version is still granted, we strongly recommend you to access the Migration Guide and update your store theme with the app's newest version in order to keep up with the components' evolution. If you’re still using the former version, you can find its documentation here.
The Condition Layout app allows a component to be rendered in your store if predefined conditions are met.
In your theme's manifest.json
, add the Condition Layout app as a dependency:
You are now able to use all blocks that are exported by the condition-layout
app. Check out the full list below:
condition-layout.product
Defines the condition logic on the product context and the children blocks that are going to be rendered in case the predefined conditions are met.
condition-layout.binding
Defines the condition logic on the current binding and the children blocks that are going to be rendered in case the predefined conditions are met.
condition-layout.category
Defines the condition logic on the current category page or department page and the children blocks that are going to be rendered in case the predefined conditions are met.
condition-layout.user
Define condition logic on current user and the children blocks that are going to be rendered in case the predefined conditions are met.
condition-layout.urlParam
Define condition logic on current page based in url parameters and the children blocks that are going to be rendered in case the predefined conditions are met.
condition-layout.product
block to your theme's templatesIn the product theme template, add the condition-layout.product
block as a children. For example:
Or the condition-layout.binding
block, for example:
Or the condition-layout.category
block, for example:
Now it is time to configure the condition-layout.product
block!
Use the block's props to define your layout condition. You can also declare as the children the condition-layout.product
's children some blocks of your choosing to be rendered if the condition is met.
For example:
Or for condition-layout.binding
:
Or for condition-layout.category
:
conditions
object
List of desired conditions.
undefined
matchType
enum
Layout rendering criteria. Possible values are: all
(all conditions must be matched in order to render the layout), any
(at least one of the conditions must be matched in order to render the layout) or none
(no conditions must be matched in order to render the layout).
all
Then
block
Name of the block to be rendered if the conditions are met. If no value is defined, the blocks declared as children of condition-layout.product
will be rendered instead.
undefined
Else
block
Name of the block to be rendered if the conditions are not met.
undefined
conditions
object:
subject
string
Defines, according to the product context where the block in declared in, which data is needed from the UI to validate the value chosen in the object
prop. Check below the possible values for this prop.
undefined
arguments
object
Defines the condition parameters. Notice: this prop value varies according to the value set to the subject
prop. Check below the table for the subject
's possible values and their expected arguments.
undefined
toBe
boolean
Whether the data fetched in the subject
prop must met the predefined conditions to render the new layout (true
) or not (false
).
true
Possible values for the condition-layout.product
's subject
prop:
productId
Product's IDs currently displayed on the UI.
{ id: string }
categoryId
Category's IDs currently displayed on the UI.
{ id: string }
brandId
Brand's IDs currently displayed on the UI.
{ id: string }
selectedItemId
ID of the item currently selected by the user.
{ id: string }
productClusters
List of product clusters currently displayed on the UI.
{ id: string }
categoryTree
List of categories currently displayed on the UI. Note: only available in the Product Detail Page.
{ id: string }
specificationProperties
List of product specifications currently displayed on the UI.
{ name: string, value: string }
. Notice: value
is an optional prop. If omitted, only the specification name (name
) will be checked.
areAllVariationsSelected
Whether all product variations currently available on the UI were selected by the user (true
) or not (false
).
No arguments are expected.
isProductAvailable
Whether the product is available (true
) or not (false
).
No arguments are expected.
isBestPrice
Whether the current product has the best price
No arguments are expected.
hasMoreSellersThan
Whether the quantity of sellers for the product is more than argument passed.
{ quantity: number }
isUniqueSku
If the product has no variations
No arguments are expected
hasVideo
If the product has video
No arguments are expected
hasListPrice
If the product has list price
No arguments are expected
description
If the product has description
No arguments are expected
specificationGroups
If the product has specification groups
{ name: string}
Possible values for the condition-layout.binding
's subject
prop:
bindingId
ID of the desired store binding.
{ id: string }
Possible values for the condition-layout.category
's subject
prop:
category
Category's IDs currently displayed on the UI.
{ ids: string[] }
department
Department's IDs currently displayed on the UI.
{ ids: string[] }
categoryTree
Department's or Category's IDs that are parent of the currently displayed on the UI.
{ ids: string[] }
Possible values for the condition-layout.user
's subject
prop:
isAuthenticated
Check if user is authenticated
no argument are expected
priceTables
Check if user has a specific price table (on Client Entity)
{ value: string }
The condition-layout.product
mainly uses the matchType
and conditions
props to set, respectively, the criteria and the conditions that blocks must meet to be rendered or not.
The conditions
prop, in turn, does not rely on any automatic grammar to define the desired conditions. Instead, it relies on its two props, namely subject
and arguments
, that together define which condition must be met by using an underlying data validation method (with specific arguments) according to the UI behavior.
Lastly, the matchType
prop has the responsibility for deciding the necessary number of valid conditions for the layout rendering to actually occur.
The Condition Layout merely establishes a logic to render other blocks. Therefore, the app doesn't have CSS Handles for its specific customization.
Instead, you should use its child block's Handles.
Thanks goes out to these wonderful people:
This project follows the all-contributors specification. Contributions of any kind are welcome!
Never use condition-layout
directly. Make sure to always use it with the context variant, such as condition-layout.product
.
According to the example above, whenever users interact with a product whose ID is equal to 12, the block flex-layout.row#custom-pdp-layout-12
is rendered. If users interact with a product whose ID is not equal to 12, the rendered block is the flex-layout.row#default
.