Skip to main content

BundleProductAttributeController

You get this controller when useAttribute(...) resolves a bundle product attribute. A bundle attribute lets a shopper add other products to the configuration, optionally with per-value quantities, and supports single- or multi-select behavior.

import { useAttribute } from "@expivi/product-configurator";

const attribute = useAttribute(configurator, attributeCid);

Selecting bundle items and adjusting quantity​

Toggle a value with setValue(cid). For multi-select bundles, raise or lower the per-value quantity.

const item = attribute.allValues[0];

if (attribute.canChangeValueState(item)) {
attribute.setValue(item.cid); // toggles selection
}

if (attribute.isValueSelected(item.cid)) {
attribute.incrementQuantity(item.cid);
attribute.decrementQuantity(item.cid);
}

API​

settings​

The raw bundle settings object.

isBundle: boolean​

Always true.

isMandatory: boolean​

Whether settings.mandatory is true. A mandatory bundle cannot be reduced to an empty selection.

canChangeValueState(value): boolean​

Whether the given value can be toggled. Returns false for static attributes, and false when unselecting the last remaining value of a mandatory bundle.

isValueSelected(cid): boolean​

Whether the value with this cid is currently selected.

getSelectedValues(): BundleProductAttributeValueType[]​

The selected bundle values resolved against the current attribute values.

setValue(cid): void​

Toggles selection. Multi-select bundles add/remove the value; single-select bundles replace the current selection (or clear it when allowed). Overrides the base so selection can be intercepted via registerBeforeSetValue(...) — see the Common Attribute API.

incrementQuantity(cid): void​

Increments the quantity of a selected value by 1. No-op for static or single-select bundles. Honors a registerBeforeIncrementValue(...) interceptor when registered.

decrementQuantity(cid): void​

Decrements the quantity of a selected value by 1 (never below 0).

Adjacent-product connections​

For bundles that connect to an adjacent-add target, these members drive the connection-candidate UI:

connectionCandidateValueCids: string[]​

Cids of this attribute's values that can connect to the currently-selected adjacent-add target. Empty when no target is active.

cancelConnectionTargetIfActive(): boolean​

Clears an active adjacent-add target. Returns true if a target was active.

registerOnConnectionCandidateSelect(handler) / unregisterOnConnectionCandidateSelect()​

Register or remove a handler invoked when a connection candidate is selected. subscribe(...) also re-fires on adjacent-product changes so the UI re-renders candidates.

triggerConnectionCandidateSelect(valueCid): boolean​

Fires the registered handler for the value and clears the target once it resolves. Returns true if a handler was registered.

Behavior notes​

  • When selected values become disallowed by rules, the controller unselects them and raises a warning message with an "Undo" action.

For all other members, see the Common Attribute API.