@wix/headless-restaurants-olo 0.0.62 → 0.0.63

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.
@@ -11,6 +11,7 @@ export declare const getFirstPreSelectedModifier: (modifiers: EnhancedModifier[]
11
11
  export declare const getPreSelectedModifiers: (modifiers: EnhancedModifier[]) => string[];
12
12
  export declare const convertModifierToFormModifier: (modifier: EnhancedModifier, index: number) => {
13
13
  _id: string;
14
+ modifierId: string | null | undefined;
14
15
  revision?: string | null;
15
16
  _createdDate?: Date | null;
16
17
  _updatedDate?: Date | null;
@@ -40,6 +41,22 @@ export declare const getModifierGroupErrors: (selectedModifiers: Record<string,
40
41
  hasError: boolean;
41
42
  };
42
43
  export declare const getAreNotEnoughModifiersOfMandatoryModifierGroupInStock: (modifierGroups: EnhancedModifierGroup[]) => boolean;
44
+ export declare const findModifierByFormId: (modifierGroup: EnhancedModifierGroup | undefined, selectedModifierId: string) => {
45
+ _id: string;
46
+ modifierId: string | null | undefined;
47
+ revision?: string | null;
48
+ _createdDate?: Date | null;
49
+ _updatedDate?: Date | null;
50
+ name?: string | null;
51
+ extendedFields?: import("@wix/auto_sdk_restaurants_item-modifiers").ExtendedFields;
52
+ inStock?: boolean | null;
53
+ businessLocationIds?: string[];
54
+ additionalChargeInfo?: {
55
+ additionalCharge?: string;
56
+ formattedAdditionalCharge?: string;
57
+ };
58
+ preSelected?: boolean;
59
+ } | undefined;
43
60
  export declare const getLineItemModifiers: (selectedModifiers: Record<string, Array<string>>, modifierGroups: EnhancedModifierGroup[], formatCurrency: (price?: number) => string) => {
44
61
  id: string;
45
62
  modifiers: {
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getAvailabilityText = exports.calculateItemPrice = exports.getSelectedVariantPrice = exports.getSelectedModifierPrices = exports.getPriceVariantOptions = exports.getLineItemModifiers = exports.getAreNotEnoughModifiersOfMandatoryModifierGroupInStock = exports.getModifierGroupErrors = exports.checkModifiersValidation = exports.getRuleTypeMapValue = exports.hasToChooseBetweenXAndY = exports.chooseUpToX = exports.hasToChooseAtLeastX = exports.hasToChooseAtLeastOne = exports.hasToChooseX = exports.hasToChooseOne = exports.canChooseOne = exports.hasNoLimit = exports.getModifierGroupRuleType = exports.convertModifierToFormModifier = exports.getPreSelectedModifiers = exports.getFirstPreSelectedModifier = exports.isSingleSelectRule = exports.getModifiersInitState = void 0;
3
+ exports.getAvailabilityText = exports.calculateItemPrice = exports.getSelectedVariantPrice = exports.getSelectedModifierPrices = exports.getPriceVariantOptions = exports.getLineItemModifiers = exports.findModifierByFormId = exports.getAreNotEnoughModifiersOfMandatoryModifierGroupInStock = exports.getModifierGroupErrors = exports.checkModifiersValidation = exports.getRuleTypeMapValue = exports.hasToChooseBetweenXAndY = exports.chooseUpToX = exports.hasToChooseAtLeastX = exports.hasToChooseAtLeastOne = exports.hasToChooseX = exports.hasToChooseOne = exports.canChooseOne = exports.hasNoLimit = exports.getModifierGroupRuleType = exports.convertModifierToFormModifier = exports.getPreSelectedModifiers = exports.getFirstPreSelectedModifier = exports.isSingleSelectRule = exports.getModifiersInitState = void 0;
4
4
  const common_types_js_1 = require("./common-types.js");
5
5
  const getModifiersInitState = (modifierGroups, editingItemMode, editItemSelectedModifiers) => {
6
6
  const initialSelectedModifiers = {};
@@ -42,9 +42,13 @@ const getPreSelectedModifiers = (modifiers) => modifiers.reduce((acc, modifier)
42
42
  }, []);
43
43
  exports.getPreSelectedModifiers = getPreSelectedModifiers;
44
44
  const convertModifierToFormModifier = (modifier, index) => {
45
+ // Give each modifier a unique form id so duplicate-id modifiers stay
46
+ // distinct in the UI/selection state, while keeping the original id in
47
+ // `modifierId` so it can be read back without parsing the form id.
45
48
  return {
46
49
  ...modifier,
47
50
  _id: `${modifier._id}~${index}`,
51
+ modifierId: modifier._id,
48
52
  };
49
53
  };
50
54
  exports.convertModifierToFormModifier = convertModifierToFormModifier;
@@ -198,6 +202,17 @@ const getAreNotEnoughModifiersOfMandatoryModifierGroupInStock = (modifierGroups)
198
202
  return isModifierGroupMandatory && !areMinimumRequiredModifiersInStock;
199
203
  });
200
204
  exports.getAreNotEnoughModifiersOfMandatoryModifierGroupInStock = getAreNotEnoughModifiersOfMandatoryModifierGroupInStock;
205
+ // Resolve the selected modifier from a group. Selection state holds unique
206
+ // form ids (`${_id}~${index}`, see convertModifierToFormModifier), so we match
207
+ // the converted form modifiers by their unique `_id` — this keeps duplicate-id
208
+ // modifiers distinct and avoids parsing the id. Falls back to matching the
209
+ // original `modifierId` for edit-mode selections that are restored as base ids.
210
+ const findModifierByFormId = (modifierGroup, selectedModifierId) => {
211
+ const formModifiers = modifierGroup?.modifiers.map(exports.convertModifierToFormModifier);
212
+ return (formModifiers?.find((mod) => mod._id === selectedModifierId) ??
213
+ formModifiers?.find((mod) => mod.modifierId === selectedModifierId));
214
+ };
215
+ exports.findModifierByFormId = findModifierByFormId;
201
216
  const getLineItemModifiers = (selectedModifiers, modifierGroups, formatCurrency) => {
202
217
  const modifierGroupsOptions = modifierGroups
203
218
  .map((modifierGroup) => {
@@ -207,13 +222,12 @@ const getLineItemModifiers = (selectedModifiers, modifierGroups, formatCurrency)
207
222
  }
208
223
  const modifiers = selectedModifierIds
209
224
  .map((modifierIdWithIndex) => {
210
- const baseModifierId = modifierIdWithIndex.split('~')[0];
211
- const modifier = modifierGroup.modifiers.find((mod) => mod._id === baseModifierId);
225
+ const modifier = (0, exports.findModifierByFormId)(modifierGroup, modifierIdWithIndex);
212
226
  if (!modifier)
213
227
  return null;
214
228
  const price = Number(modifier?.additionalChargeInfo?.additionalCharge ?? 0);
215
229
  return {
216
- id: modifier._id ?? '',
230
+ id: modifier.modifierId ?? '',
217
231
  price: modifier?.additionalChargeInfo?.additionalCharge,
218
232
  formattedPrice: price > 0 ? formatCurrency(price) : undefined,
219
233
  };
@@ -248,11 +262,9 @@ const getPriceVariantOptions = (selectedPriceVariant, formatCurrency) => {
248
262
  exports.getPriceVariantOptions = getPriceVariantOptions;
249
263
  const getSelectedModifierPrices = (selectedModifiers, modifierGroups) => {
250
264
  return Object.entries(selectedModifiers).reduce((total, [modifierGroupId, modifierIds]) => {
265
+ const group = modifierGroups.find((g) => g._id === modifierGroupId);
251
266
  const groupTotal = modifierIds.reduce((groupSum, modifierId) => {
252
- const baseModifierId = modifierId.split('~')[0];
253
- const modifier = modifierGroups
254
- .find((group) => group._id === modifierGroupId)
255
- ?.modifiers.find((mod) => mod._id === baseModifierId);
267
+ const modifier = (0, exports.findModifierByFormId)(group, modifierId);
256
268
  return (groupSum +
257
269
  Number(modifier?.additionalChargeInfo?.additionalCharge ?? 0));
258
270
  }, 0);
@@ -11,6 +11,7 @@ export declare const getFirstPreSelectedModifier: (modifiers: EnhancedModifier[]
11
11
  export declare const getPreSelectedModifiers: (modifiers: EnhancedModifier[]) => string[];
12
12
  export declare const convertModifierToFormModifier: (modifier: EnhancedModifier, index: number) => {
13
13
  _id: string;
14
+ modifierId: string | null | undefined;
14
15
  revision?: string | null;
15
16
  _createdDate?: Date | null;
16
17
  _updatedDate?: Date | null;
@@ -40,6 +41,22 @@ export declare const getModifierGroupErrors: (selectedModifiers: Record<string,
40
41
  hasError: boolean;
41
42
  };
42
43
  export declare const getAreNotEnoughModifiersOfMandatoryModifierGroupInStock: (modifierGroups: EnhancedModifierGroup[]) => boolean;
44
+ export declare const findModifierByFormId: (modifierGroup: EnhancedModifierGroup | undefined, selectedModifierId: string) => {
45
+ _id: string;
46
+ modifierId: string | null | undefined;
47
+ revision?: string | null;
48
+ _createdDate?: Date | null;
49
+ _updatedDate?: Date | null;
50
+ name?: string | null;
51
+ extendedFields?: import("@wix/auto_sdk_restaurants_item-modifiers").ExtendedFields;
52
+ inStock?: boolean | null;
53
+ businessLocationIds?: string[];
54
+ additionalChargeInfo?: {
55
+ additionalCharge?: string;
56
+ formattedAdditionalCharge?: string;
57
+ };
58
+ preSelected?: boolean;
59
+ } | undefined;
43
60
  export declare const getLineItemModifiers: (selectedModifiers: Record<string, Array<string>>, modifierGroups: EnhancedModifierGroup[], formatCurrency: (price?: number) => string) => {
44
61
  id: string;
45
62
  modifiers: {
@@ -35,9 +35,13 @@ export const getPreSelectedModifiers = (modifiers) => modifiers.reduce((acc, mod
35
35
  return acc;
36
36
  }, []);
37
37
  export const convertModifierToFormModifier = (modifier, index) => {
38
+ // Give each modifier a unique form id so duplicate-id modifiers stay
39
+ // distinct in the UI/selection state, while keeping the original id in
40
+ // `modifierId` so it can be read back without parsing the form id.
38
41
  return {
39
42
  ...modifier,
40
43
  _id: `${modifier._id}~${index}`,
44
+ modifierId: modifier._id,
41
45
  };
42
46
  };
43
47
  export const getModifierGroupRuleType = (modifierGroupRule) => {
@@ -177,6 +181,16 @@ export const getAreNotEnoughModifiersOfMandatoryModifierGroupInStock = (modifier
177
181
  const areMinimumRequiredModifiersInStock = inStockModifiers.length >= minimumRequiredModifiers;
178
182
  return isModifierGroupMandatory && !areMinimumRequiredModifiersInStock;
179
183
  });
184
+ // Resolve the selected modifier from a group. Selection state holds unique
185
+ // form ids (`${_id}~${index}`, see convertModifierToFormModifier), so we match
186
+ // the converted form modifiers by their unique `_id` — this keeps duplicate-id
187
+ // modifiers distinct and avoids parsing the id. Falls back to matching the
188
+ // original `modifierId` for edit-mode selections that are restored as base ids.
189
+ export const findModifierByFormId = (modifierGroup, selectedModifierId) => {
190
+ const formModifiers = modifierGroup?.modifiers.map(convertModifierToFormModifier);
191
+ return (formModifiers?.find((mod) => mod._id === selectedModifierId) ??
192
+ formModifiers?.find((mod) => mod.modifierId === selectedModifierId));
193
+ };
180
194
  export const getLineItemModifiers = (selectedModifiers, modifierGroups, formatCurrency) => {
181
195
  const modifierGroupsOptions = modifierGroups
182
196
  .map((modifierGroup) => {
@@ -186,13 +200,12 @@ export const getLineItemModifiers = (selectedModifiers, modifierGroups, formatCu
186
200
  }
187
201
  const modifiers = selectedModifierIds
188
202
  .map((modifierIdWithIndex) => {
189
- const baseModifierId = modifierIdWithIndex.split('~')[0];
190
- const modifier = modifierGroup.modifiers.find((mod) => mod._id === baseModifierId);
203
+ const modifier = findModifierByFormId(modifierGroup, modifierIdWithIndex);
191
204
  if (!modifier)
192
205
  return null;
193
206
  const price = Number(modifier?.additionalChargeInfo?.additionalCharge ?? 0);
194
207
  return {
195
- id: modifier._id ?? '',
208
+ id: modifier.modifierId ?? '',
196
209
  price: modifier?.additionalChargeInfo?.additionalCharge,
197
210
  formattedPrice: price > 0 ? formatCurrency(price) : undefined,
198
211
  };
@@ -225,11 +238,9 @@ export const getPriceVariantOptions = (selectedPriceVariant, formatCurrency) =>
225
238
  };
226
239
  export const getSelectedModifierPrices = (selectedModifiers, modifierGroups) => {
227
240
  return Object.entries(selectedModifiers).reduce((total, [modifierGroupId, modifierIds]) => {
241
+ const group = modifierGroups.find((g) => g._id === modifierGroupId);
228
242
  const groupTotal = modifierIds.reduce((groupSum, modifierId) => {
229
- const baseModifierId = modifierId.split('~')[0];
230
- const modifier = modifierGroups
231
- .find((group) => group._id === modifierGroupId)
232
- ?.modifiers.find((mod) => mod._id === baseModifierId);
243
+ const modifier = findModifierByFormId(group, modifierId);
233
244
  return (groupSum +
234
245
  Number(modifier?.additionalChargeInfo?.additionalCharge ?? 0));
235
246
  }, 0);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wix/headless-restaurants-olo",
3
- "version": "0.0.62",
3
+ "version": "0.0.63",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -81,5 +81,5 @@
81
81
  "groupId": "com.wixpress.headless-components"
82
82
  }
83
83
  },
84
- "falconPackageHash": "805d8c5ecc7ef21b65074cd1880f383b6ded0ac85c3c8752fad83840"
84
+ "falconPackageHash": "7b2dc448774c9f7997e48a6683f7290b40c6ab6d0ced934655719da7"
85
85
  }