Added

Minimum and maximum different options

Modifier groups now support limits on how many different options a customer can select. These limits are separate from the existing quantity limits (min, max, multiMin, multiMax).

FieldDescriptionType
minUniqueOptionsMinimum number of distinct options that must be selectedinteger
maxUniqueOptionsMaximum number of distinct options that can be selectedinteger

Example

A 10-wing combo offers 5 sauces, but customers can choose no more than 3 different ones. The channel UI should prevent customers from e.g. selecting a fourth sauce.

%%{init: { "theme": "base", "themeVariables": { "fontSize": "13px", "background": "transparent", "lineColor": "#64748b", "edgeLabelBackground": "transparent", "actorBkg": "#038851", "actorTextColor": "#ffffff", "actorBorder": "#026139", "actorLineColor": "#94a3b8", "signalColor": "#64748b", "signalTextColor": "#059669", "noteBkgColor": "#e6f4ee", "noteTextColor": "#02502f", "noteBorderColor": "#038851", "activationBkgColor": "#c6ebdc", "activationBorderColor": "#026139", "sequenceNumberColor": "#ffffff" }, "flowchart": { "nodeSpacing": 25, "rankSpacing": 35, "padding": 8, "useMaxWidth": true }, "sequence": { "useMaxWidth": true, "actorMargin": 70, "width": 150, "height": 60, "boxMargin": 12, "noteMargin": 14, "messageMargin": 50, "diagramMarginX": 20, "diagramMarginY": 20, "actorFontSize": 18, "actorFontWeight": 700, "noteFontSize": 15, "noteFontFamily": "ui-monospace, SFMono-Regular, Menlo, Consolas, monospace", "messageFontSize": 16, "messageFontWeight": 700, "noteAlign": "left", "mirrorActors": false } }}%%
flowchart TD
    Product["<b>10 Wings - choice of 5 sauces</b>"]
    Rules["<div style='text-align:left;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace'><b>Choose your Sauce</b><br/>{<br/>#nbsp;#nbsp;#quot;min#quot;: 10,<br/>#nbsp;#nbsp;#quot;max#quot;: 10,<br/>#nbsp;#nbsp;#quot;multiMax#quot;: 10,<br/>#nbsp;#nbsp;#quot;minUniqueOptions#quot;: 1,<br/>#nbsp;#nbsp;#quot;maxUniqueOptions#quot;: 3<br/>}</div>"]
    S1["<b>Selection</b><br/>🥭 ×10 Mango"]
    S2["<b>Selection</b><br/>🥭 ×5 Mango<br/>🍋 ×2 Lemon & Pepper<br/>🌶️ ×3 Korean"]
    S3["<b>Selection</b><br/>🥭 ×4 Mango<br/>🍋 ×2 Lemon & Pepper<br/>🌶️ ×2 Korean<br/>🔥 ×2 BBQ"]
    OK1["<b>✅ Permitted</b><br/>×1 different sauce"]
    OK2["<b>✅ Permitted</b><br/>×3 different sauces"]
    NO["<b>❌ Not Permitted</b><br/>×4 different sauces"]

    Product --> Rules
    Rules --> S1
    Rules --> S2
    Rules --> S3
    S1 --> OK1
    S2 --> OK2
    S3 --> NO

    classDef product fill:#fdf1dc,stroke:#8a7a4f,color:#3a2f1a,stroke-width:2px;
    classDef modgroup fill:#038851,stroke:#026139,color:#ffffff,stroke-width:2px;
    classDef modifier fill:#EBFBF1,stroke:#8fc9a8,color:#02502f,stroke-width:2px;
    classDef accepted fill:#c6ebdc,stroke:#026139,color:#02502f,stroke-width:2px;
    classDef rejected fill:#fde8e8,stroke:#b91c1c,color:#7f1d1d,stroke-width:2px;

    class Product product;
    class Rules modgroup;
    class S1,S2,S3 modifier;
    class OK1,OK2 accepted;
    class NO rejected;

Product config as shown on Deliverect

Menu Model Update ( see Menu Update Webhook and GET Store Menu)

"6aaa0baf19b0b96fd78acaea": {
    "_id": "6aaa0baf19b0b96fd78acaea",
    "name": "Choose your Flavour",
    "max": 12,              // at most 12 selections in total
    "min": 12,              // at least 12 selections in total
    "multiMax": 12,         // up to 12 of any one flavour
    "multiMin": 3,          // at least 3 of each flavour chosen
    "minUniqueOptions": 1,  // at least 1 different flavour
    "maxUniqueOptions": 4,  // at most 4 different flavours


POS Product Sync Update (see Insert Products)

    {
      "name": "Choose your Flavour",
      "max": 12,              // at most 12 selections in total
      "min": 12,              // at least 12 selections in total
      "multiMax": 12,         // up to 12 of any one flavour
      "multiMin": 3,          // at least 3 of each flavour chosen
      "multiply": 0,
      "minUniqueOptions": 1,  // at least 1 different flavour
      "maxUniqueOptions": 4,  // at most 4 different flavours
      "productType": 3,
      "subProducts": [
        "PROD-0035",
        "PROD-0018",
        "PROD-0019"
      ]
    },