Items
An item is either a Product or a Container.
- A Product is a sellable item in a menu — for example, a snack bar, a burger, or a coffee. It appears at the root of the menu or as a selectable option inside a Container.
- A Container is a configurable slot inside a Product. It holds a list of Products that the customer can select or deselect.
Alternation rule
Products and Containers alternate strictly in the hierarchy:
- A Product's
configItemscollection can only contain Containers. - A Container's
configItemscollection can only contain Products.
This guarantees a clean, predictable nesting structure.
Container selection options
A Container's behaviour is controlled by several properties:
| Property | Description |
|---|---|
min | Minimum number of products the customer must select (0 = optional) |
max | Maximum number of products the customer can select (unbounded = no limit) |
isNegated | When true, selected products represent removals (e.g. a "Remove" container) |
isSelectedByDefault | On a product inside a container: whether it is pre-selected for the customer |
Example: hamburger with Add, Remove, and Select Bread
Hamburger — id: 1, type: product, price: 47
Add — id: 2, type: container, min: 0, max: unbounded
Bacon — id: 3, type: product, price: 5, isSelectedByDefault: false
Tomato — id: 4, type: product, price: 3, isSelectedByDefault: false
Cheese — id: 5, type: product, price: 3, isSelectedByDefault: false
Remove — id: 6, type: container, min: 0, max: unbounded, isNegated: true
Tomato — id: 4, type: product, price: 0, isSelectedByDefault: false
Cheese — id: 5, type: product, price: 0, isSelectedByDefault: false
Select Bread — id: 7, type: container, min: 1, max: 1
Normal Bread — id: 8, type: product, price: 0, isSelectedByDefault: true
Gluten Free Bread — id: 9, type: product, price: 0, isSelectedByDefault: false
Luxury Bread — id: 10, type: product, price: 5, isSelectedByDefault: false
If a customer adds Bacon, removes Cheese, and changes to Luxury Bread, the total is:
47 (burger) + 5 (bacon) + 0 (remove cheese) + 5 (luxury bread) = 57
Item visibility
For an item to be visible to a customer it must either be presented by one of the categories or subcategories in the Menu Instance, or be surfaced by an upselling rule.