Skip to main content

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 configItems collection can only contain Containers.
  • A Container's configItems collection can only contain Products.

This guarantees a clean, predictable nesting structure.

Container selection options

A Container's behaviour is controlled by several properties:

PropertyDescription
minMinimum number of products the customer must select (0 = optional)
maxMaximum number of products the customer can select (unbounded = no limit)
isNegatedWhen true, selected products represent removals (e.g. a "Remove" container)
isSelectedByDefaultOn 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.