tf-checkout-react 1.7.19 → 1.7.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3603,16 +3603,37 @@ var AddonStepper = function AddonStepper(_ref) {
3603
3603
  var id = _ref.id,
3604
3604
  selectOptions = _ref.selectOptions,
3605
3605
  handleAddonChange = _ref.handleAddonChange,
3606
- classNamePrefix = _ref.classNamePrefix;
3606
+ classNamePrefix = _ref.classNamePrefix,
3607
+ _ref$siblingIds = _ref.siblingIds,
3608
+ siblingIds = _ref$siblingIds === void 0 ? [] : _ref$siblingIds,
3609
+ _ref$allAddonIds = _ref.allAddonIds,
3610
+ allAddonIds = _ref$allAddonIds === void 0 ? [] : _ref$allAddonIds,
3611
+ maxTotalQuantity = _ref.maxTotalQuantity;
3607
3612
  var _useFormikContext = useFormikContext(),
3608
3613
  values = _useFormikContext.values,
3609
3614
  setFieldValue = _useFormikContext.setFieldValue;
3610
3615
  var qty = Number((_values$id = values[id]) != null ? _values$id : 0);
3611
3616
  var max = (selectOptions == null ? void 0 : selectOptions.length) > 0 ? selectOptions[selectOptions.length - 1].value : 0;
3617
+ var totalSelected = allAddonIds.length > 0 ? allAddonIds.reduce(function (sum, aid) {
3618
+ var _values$aid;
3619
+ return sum + Number((_values$aid = values[aid]) != null ? _values$aid : 0);
3620
+ }, 0) : 0;
3612
3621
  var change = function change(next) {
3622
+ if (next > qty) {
3623
+ if (maxTotalQuantity != null) {
3624
+ allAddonIds.forEach(function (aid) {
3625
+ if (aid !== id) setFieldValue(aid, 0);
3626
+ });
3627
+ } else {
3628
+ siblingIds.forEach(function (siblingId) {
3629
+ return setFieldValue(siblingId, 0);
3630
+ });
3631
+ }
3632
+ }
3613
3633
  setFieldValue(id, next);
3614
3634
  handleAddonChange(id, next);
3615
3635
  };
3636
+ var incrementDisabled = qty >= max || maxTotalQuantity != null && totalSelected >= maxTotalQuantity && qty === 0;
3616
3637
  return React.createElement("div", {
3617
3638
  className: classNamePrefix + "_stepper"
3618
3639
  }, React.createElement("button", {
@@ -3631,7 +3652,7 @@ var AddonStepper = function AddonStepper(_ref) {
3631
3652
  onClick: function onClick() {
3632
3653
  return change(qty + 1);
3633
3654
  },
3634
- disabled: qty >= max,
3655
+ disabled: incrementDisabled,
3635
3656
  "aria-label": "Increase quantity"
3636
3657
  }, "+"));
3637
3658
  };
@@ -3648,6 +3669,11 @@ var AddonComponent = function AddonComponent(_ref2) {
3648
3669
  errors = _ref2.errors,
3649
3670
  _ref2$useStepperQty = _ref2.useStepperQty,
3650
3671
  useStepperQty = _ref2$useStepperQty === void 0 ? false : _ref2$useStepperQty,
3672
+ _ref2$siblingIds = _ref2.siblingIds,
3673
+ siblingIds = _ref2$siblingIds === void 0 ? [] : _ref2$siblingIds,
3674
+ _ref2$allAddonIds = _ref2.allAddonIds,
3675
+ allAddonIds = _ref2$allAddonIds === void 0 ? [] : _ref2$allAddonIds,
3676
+ maxTotalQuantity = _ref2.maxTotalQuantity,
3651
3677
  _ref2$onCustomFieldCh = _ref2.onCustomFieldChange,
3652
3678
  onCustomFieldChange = _ref2$onCustomFieldCh === void 0 ? _identity : _ref2$onCustomFieldCh;
3653
3679
  var id = data.id,
@@ -3680,7 +3706,10 @@ var AddonComponent = function AddonComponent(_ref2) {
3680
3706
  id: id,
3681
3707
  selectOptions: selectOptions,
3682
3708
  handleAddonChange: handleAddonChange,
3683
- classNamePrefix: classNamePrefix
3709
+ classNamePrefix: classNamePrefix,
3710
+ siblingIds: siblingIds,
3711
+ allAddonIds: allAddonIds,
3712
+ maxTotalQuantity: maxTotalQuantity
3684
3713
  })) : React.createElement(Field, {
3685
3714
  name: id,
3686
3715
  selectOptions: selectOptions,
@@ -4402,6 +4431,11 @@ var AddonsContainter = function AddonsContainter(_ref) {
4402
4431
  data: variant,
4403
4432
  selectOptions: addonsOptions[variant.id],
4404
4433
  classNamePrefix: classNamePrefix,
4434
+ siblingIds: addon.variants.map(function (v) {
4435
+ return v.id;
4436
+ }).filter(function (vid) {
4437
+ return vid !== variant.id;
4438
+ }),
4405
4439
  handleAddonChange: function handleAddonChange(id, value) {
4406
4440
  onAddOnSelect(id, value, addon);
4407
4441
  onFieldChange(id, value, addon);
@@ -4463,6 +4497,7 @@ var SimpleAddonsContainer = function SimpleAddonsContainer(_ref) {
4463
4497
  eventId = _ref.eventId,
4464
4498
  _ref$useStepperQty = _ref.useStepperQty,
4465
4499
  useStepperQty = _ref$useStepperQty === void 0 ? false : _ref$useStepperQty,
4500
+ addonMaxQuantityGroups = _ref.addonMaxQuantityGroups,
4466
4501
  _ref$onAddOnSelect = _ref.onAddOnSelect,
4467
4502
  onAddOnSelect = _ref$onAddOnSelect === void 0 ? _identity : _ref$onAddOnSelect,
4468
4503
  _ref$handleConfirm = _ref.handleConfirm,
@@ -4479,12 +4514,15 @@ var SimpleAddonsContainer = function SimpleAddonsContainer(_ref) {
4479
4514
  var _useState4 = useState({}),
4480
4515
  groupsWithInitialVariantsValues = _useState4[0],
4481
4516
  setGroupsWithInitialVariantsValues = _useState4[1];
4482
- var _useState5 = useState(true),
4483
- loading = _useState5[0],
4484
- setLoading = _useState5[1];
4485
- var _useState6 = useState(null),
4486
- visibleDescription = _useState6[0],
4487
- setVisibleDescription = _useState6[1];
4517
+ var _useState5 = useState({}),
4518
+ crossGroupSelections = _useState5[0],
4519
+ setCrossGroupSelections = _useState5[1];
4520
+ var _useState6 = useState(true),
4521
+ loading = _useState6[0],
4522
+ setLoading = _useState6[1];
4523
+ var _useState7 = useState(null),
4524
+ visibleDescription = _useState7[0],
4525
+ setVisibleDescription = _useState7[1];
4488
4526
  var handleDescriptionToggle = function handleDescriptionToggle(ticketId) {
4489
4527
  setVisibleDescription(function (current) {
4490
4528
  return current === ticketId ? null : ticketId;
@@ -4613,6 +4651,37 @@ var SimpleAddonsContainer = function SimpleAddonsContainer(_ref) {
4613
4651
  recreateGroupVariantsSelectOptions(currGroupId, updatedGroupsWithSelectedVariants[currGroupId]);
4614
4652
  }
4615
4653
  };
4654
+ // Cross-group cap: when addonMaxQuantityGroups is set, limits total selections
4655
+ // across ALL addon groups to that number by capping each stepper's max.
4656
+ var effectiveAddonsOptions = useMemo(function () {
4657
+ if (!addonMaxQuantityGroups) return addonsOptions;
4658
+ var totalSelected = Object.values(crossGroupSelections).reduce(function (sum, v) {
4659
+ return sum + Number(v);
4660
+ }, 0);
4661
+ var globalRemaining = addonMaxQuantityGroups - totalSelected;
4662
+ var result = {};
4663
+ var _loop = function _loop() {
4664
+ var opts = addonsOptions[id] || [];
4665
+ var sdkMax = opts.length ? opts[opts.length - 1].value : 0;
4666
+ var currSelected = Number(crossGroupSelections[id] || 0);
4667
+ var allowedMax = Math.max(0, Math.min(sdkMax, globalRemaining + currSelected));
4668
+ result[id] = opts.filter(function (opt) {
4669
+ return opt.value <= allowedMax;
4670
+ });
4671
+ };
4672
+ for (var id in addonsOptions) {
4673
+ _loop();
4674
+ }
4675
+ return result;
4676
+ }, [addonsOptions, crossGroupSelections, addonMaxQuantityGroups]);
4677
+ var handleCrossGroupChange = function handleCrossGroupChange(id, value) {
4678
+ if (addonMaxQuantityGroups) {
4679
+ setCrossGroupSelections(function (prev) {
4680
+ var _extends6;
4681
+ return _extends({}, prev, (_extends6 = {}, _extends6[id] = Number(value), _extends6));
4682
+ });
4683
+ }
4684
+ };
4616
4685
  var initialValues = useMemo(function () {
4617
4686
  var _addOnDataWithCustomF2;
4618
4687
  var addOnsData = {};
@@ -4722,10 +4791,15 @@ var SimpleAddonsContainer = function SimpleAddonsContainer(_ref) {
4722
4791
  React.createElement(AddonComponent, {
4723
4792
  key: variant.id,
4724
4793
  data: variant,
4725
- selectOptions: addonsOptions[variant.id],
4794
+ selectOptions: effectiveAddonsOptions[variant.id],
4726
4795
  classNamePrefix: classNamePrefix,
4796
+ siblingIds: addon.variants.filter(function (v) {
4797
+ return v.id !== variant.id;
4798
+ }).map(function (v) {
4799
+ return v.id;
4800
+ }),
4727
4801
  handleAddonChange: function handleAddonChange(id, value) {
4728
- console.log('handleAddonChange', id, value);
4802
+ handleCrossGroupChange(id, value);
4729
4803
  onFieldChange(id, value, addon);
4730
4804
  var fieldUpdates = collectAddonFieldUpdates(addon, values);
4731
4805
  onAddOnSelect(id, value, addon, fieldUpdates);
@@ -4743,9 +4817,10 @@ var SimpleAddonsContainer = function SimpleAddonsContainer(_ref) {
4743
4817
  React.createElement(AddonComponent, {
4744
4818
  key: addon.id,
4745
4819
  data: addon,
4746
- selectOptions: addonsOptions[addon.id],
4820
+ selectOptions: effectiveAddonsOptions[addon.id],
4747
4821
  classNamePrefix: classNamePrefix,
4748
4822
  handleAddonChange: function handleAddonChange(id, value) {
4823
+ handleCrossGroupChange(id, value);
4749
4824
  onFieldChange(id, value, addon);
4750
4825
  var fieldUpdates = collectAddonFieldUpdates(addon, values);
4751
4826
  onAddOnSelect(id, value, addon, fieldUpdates);