@pisell/private-materials 6.12.363 → 6.12.365

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.
Files changed (47) hide show
  1. package/build/lowcode/assets-daily.json +11 -11
  2. package/build/lowcode/assets-dev.json +2 -2
  3. package/build/lowcode/assets-prod.json +11 -11
  4. package/build/lowcode/meta.js +1 -1
  5. package/build/lowcode/render/default/view.js +1 -1
  6. package/build/lowcode/view.js +1 -1
  7. package/es/components/bigSale/components/BookingFloatingPanel/useBookingPanelController.js +0 -1
  8. package/es/components/bigSale/components/ProductList/index.js +0 -1
  9. package/es/components/bigSale/components/TimeBar/index.js +0 -1
  10. package/es/components/bigSale/dialog.js +0 -1
  11. package/es/components/bigSale/hooks/useBigSaleContext.js +0 -1
  12. package/es/components/bigSale/hooks/useBigSaleProductListConfig.js +1 -0
  13. package/es/components/bigSale/hooks/useSelectFloorMapResourceForBigSale.js +0 -1
  14. package/es/components/bigSale/index.js +0 -1
  15. package/es/components/bigSale/templates/Kiosk/index.js +0 -1
  16. package/es/components/scanOrder/utils/toShoppingCartProducts.identity.test.cjs +79 -0
  17. package/es/components/scanOrder/utils/toShoppingCartProducts.js +7 -3
  18. package/es/components/sharedSecondaryBigSale/SharedSecondaryBigSaleReceiver.js +0 -1
  19. package/es/components/ticketBooking/components/ProductDisplayAdapter/index.js +3 -0
  20. package/es/components/ticketBooking/components/addServiceVariant/addService.js +1 -0
  21. package/es/index.js +0 -2
  22. package/es/plus/multiCurrencySettlement/index.js +1 -1
  23. package/es/plus/pisellReservation/data/bookingToReservationTables.js +1 -1
  24. package/es/plus/pisellReservation/floorMap/floorPlanApi.js +1 -1
  25. package/es/plus/pisellReservation/floorMap/reservationMock.js +1 -1
  26. package/es/plus/saasDevice/devicePasscodes/model.js +4 -4
  27. package/es/plus/saleDetail/Base.js +0 -1
  28. package/es/plus/saleDetail/components/Client/hooks/useClientSelectorProps.js +0 -1
  29. package/es/plus/saleDetail/components/DetailActions/PrintAction.js +0 -1
  30. package/es/plus/saleDetail/components/DetailActions/index.js +0 -1
  31. package/es/plus/saleDetail/components/SummaryFinancialSections/index.js +0 -1
  32. package/es/plus/saleDetail/index.js +0 -1
  33. package/es/plus/saleDetail/tmpl/B/components/Dish/index.js +0 -1
  34. package/es/plus/saleDetail/tmpl/B/index.js +0 -1
  35. package/es/plus/salesSdk/utils/addProductWithFlowDebounced.js +1 -1
  36. package/es/plus/salesSdk/utils/bookingDate.js +1 -1
  37. package/es/plus/salesSdk/utils/enrichCartLineHolderDisplay.js +1 -1
  38. package/es/plus/walletPassGallery/components/timelineSection/index.js +4 -4
  39. package/es/private-materials/lowcode/authmodal/meta.d.ts +1 -0
  40. package/es/pro/Login2.0/AuthModal.d.ts +1 -1
  41. package/es/pro/Login2.0/index.d.ts +2 -2
  42. package/es/pro/Login2.0/shared/types.d.ts +1 -1
  43. package/lib/components/scanOrder/utils/toShoppingCartProducts.identity.test.cjs +79 -0
  44. package/lib/components/scanOrder/utils/toShoppingCartProducts.js +7 -3
  45. package/package.json +4 -4
  46. package/es/plus/pisellReservation/index.js +0 -17
  47. package/es/plus/salesSdk/index.js +0 -54
@@ -1,6 +1,5 @@
1
1
  import useEngineContext from "../../../../hooks/useEngineContext.js";
2
2
  import { subscribeBookingDateChange } from "../../../../plus/salesSdk/utils/bookingDate.js";
3
- import "../../../../plus/salesSdk/index.js";
4
3
  import dayjs from "dayjs";
5
4
  import { useCallback, useEffect, useState } from "react";
6
5
  //#region src/components/bigSale/components/BookingFloatingPanel/useBookingPanelController.ts
@@ -15,7 +15,6 @@ import { useSalesSdkBusinessAvailability } from "../../../../plus/salesSdk/conte
15
15
  import { showAddToCartToast } from "../../../../plus/salesSdk/components/showAddToCartToast.js";
16
16
  import { mergeBookingsForDisplay } from "../../../../plus/salesSdk/utils/mergeBookingsForDisplay.js";
17
17
  import useSalesSdkGlobalScanHandler from "../../../../plus/salesSdk/hooks/useSalesSdkGlobalScanHandler.js";
18
- import "../../../../plus/salesSdk/index.js";
19
18
  import { buildBigSaleProductListPreferencesKey, readBigSaleProductListPreferences, readStoredBigSaleProductListPreferences, removeBigSaleProductListPreferences, resolveBigSaleAutoProductListPreferences, writeBigSaleProductListPreferences } from "../../utils/productListPreferences.js";
20
19
  import { resolveBigSaleProductDisplayConfig, useBigSaleProductListConfig } from "../../hooks/useBigSaleProductListConfig.js";
21
20
  import locales_default from "../../locales/index.js";
@@ -5,7 +5,6 @@ import useInitLocalesOnce from "../../../../hooks/useInitLocalesOnce.js";
5
5
  import { subscribeBookingDateChange } from "../../../../plus/salesSdk/utils/bookingDate.js";
6
6
  import { setBookingTimeSelectionIntent } from "../../../../plus/salesSdk/utils/bookingTimeSelection.js";
7
7
  import { useSalesSdkBookingContext } from "../../../../plus/salesSdk/context/SalesSdkBookingContext.js";
8
- import "../../../../plus/salesSdk/index.js";
9
8
  import locales_default from "../../locales/index.js";
10
9
  import { getPosWeekStartsOn, resolvePosCountryCode } from "../../../../utils/posDateLocale.js";
11
10
  import dayjs from "dayjs";
@@ -6,7 +6,6 @@ import { buildInitBookingContextParams, collectBookingIdsFromTempOrder } from ".
6
6
  import { useSalesSdk } from "../../plus/salesSdk/hooks/useSalesSdk.js";
7
7
  import { useSalesSdkCart } from "../../plus/salesSdk/hooks/useSalesSdkCart.js";
8
8
  import { SalesSdkPrepareOrderSwitchContext, SalesSdkRootRefreshContext } from "../../plus/salesSdk/context/SalesSdkProvider.js";
9
- import "../../plus/salesSdk/index.js";
10
9
  import { isPersistedBigSaleOrderId } from "./utils/orderIdentity.js";
11
10
  import { seedDineInReservationToCart } from "../../plus/pisellReservation/utils/seedDineInReservationToCart.js";
12
11
  import BigSale from "./index.js";
@@ -4,7 +4,6 @@ import { useSalesSdkCustomer } from "../../../plus/salesSdk/hooks/useSalesSdkCus
4
4
  import { useSalesSdkBookingContext } from "../../../plus/salesSdk/context/SalesSdkBookingContext.js";
5
5
  import { useSalesSdkSummary } from "../../../plus/salesSdk/hooks/useSalesSdkSummary.js";
6
6
  import { useSalesSdkProducts } from "../../../plus/salesSdk/hooks/useSalesSdkProducts.js";
7
- import "../../../plus/salesSdk/index.js";
8
7
  import { useMemo } from "react";
9
8
  //#region src/components/bigSale/hooks/useBigSaleContext.ts
10
9
  /**
@@ -2,6 +2,7 @@ import { _objectSpread2 } from "../../../_virtual/_@oxc-project_runtime@0.122.0/
2
2
  import { _objectWithoutProperties } from "../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/objectWithoutProperties.js";
3
3
  import { generateProductTabs, sortProductsByTabOrder } from "../../ticketBooking/components/ProductDisplayAdapter/utils.js";
4
4
  import { ProductDisplayPresets } from "../../ticketBooking/components/ProductDisplayAdapter/types.js";
5
+ import "../../ticketBooking/components/ProductDisplayAdapter/index.js";
5
6
  import { mergeBigSaleProductListPreferences } from "../utils/productListPreferences.js";
6
7
  import { useMemo, useRef } from "react";
7
8
  import isEqual from "lodash/isEqual";
@@ -3,7 +3,6 @@ import { _asyncToGenerator } from "../../../_virtual/_@oxc-project_runtime@0.122
3
3
  import { buildInitBookingContextParams, collectBookingIdsFromTempOrder } from "../../../plus/salesSdk/utils/buildDefaultLoadProductsParams.js";
4
4
  import { useSalesSdkUIHosts } from "../../../plus/salesSdk/context/SalesSdkUIHostsContext.js";
5
5
  import { SalesSdkRootRefreshContext } from "../../../plus/salesSdk/context/SalesSdkProvider.js";
6
- import "../../../plus/salesSdk/index.js";
7
6
  import { isPersistedBigSaleOrderId } from "../utils/orderIdentity.js";
8
7
  import { resolveOrderIdForHostActions } from "../../../plus/pisellReservation/components/bookingDetailModal/bookingDetailHostActions.js";
9
8
  import { usePicoCodingOpenData } from "../../../plus/pisellReservation/hooks/usePicoCodingOpenData.js";
@@ -8,7 +8,6 @@ import { useSalesSdk } from "../../plus/salesSdk/hooks/useSalesSdk.js";
8
8
  import { useSalesSdkCustomer } from "../../plus/salesSdk/hooks/useSalesSdkCustomer.js";
9
9
  import { SalesSdkProvider } from "../../plus/salesSdk/context/SalesSdkProvider.js";
10
10
  import { SalesSdkBookingContextProvider } from "../../plus/salesSdk/context/SalesSdkBookingContext.js";
11
- import "../../plus/salesSdk/index.js";
12
11
  import { resolveCustomerDetailAppearance } from "../../pro/skuDetailModal/customerDetailPolicy.js";
13
12
  import { ResponsiveBigSaleBase } from "./Base.js";
14
13
  import { isBigSaleProductSelectionFlowScene, resolveBigSaleSelectionFlowConfig } from "./selectionFlowConfig.js";
@@ -12,7 +12,6 @@ import { useSalesSdkBusinessAvailability } from "../../../../plus/salesSdk/conte
12
12
  import { collectUnassignedHolderLines } from "../../../../plus/salesSdk/utils/holderSubmitValidation.js";
13
13
  import { isFulfillmentTimingBooking } from "../../../../plus/salesSdk/utils/fulfillmentTimingBooking.js";
14
14
  import { useSalesSdk } from "../../../../plus/salesSdk/hooks/useSalesSdk.js";
15
- import "../../../../plus/salesSdk/index.js";
16
15
  import { usePickSaleDetailContext } from "../../hooks/usePickSaleDetailContext.js";
17
16
  import { resolveBigSaleAutoProductListPreferences } from "../../utils/productListPreferences.js";
18
17
  import { resolveBigSaleProductDisplayConfig } from "../../hooks/useBigSaleProductListConfig.js";
@@ -0,0 +1,79 @@
1
+ const assert = require('node:assert/strict');
2
+ const { readFileSync } = require('node:fs');
3
+ const { join } = require('node:path');
4
+ const test = require('node:test');
5
+ const ts = require('typescript');
6
+
7
+ // Run with node --test; load the pure adapter in memory without a materials build.
8
+ const source = readFileSync(join(__dirname, 'toShoppingCartProducts.ts'), 'utf8');
9
+ const output = ts.transpileModule(source, {
10
+ compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 },
11
+ });
12
+ const adapter = { exports: {} };
13
+ new Function('exports', output.outputText)(adapter.exports);
14
+ const { toShoppingCartProducts } = adapter.exports;
15
+
16
+ const product = {
17
+ product_id: 477300,
18
+ product_variant_id: 493720,
19
+ product_title: 'Latte',
20
+ selling_price: '5.70',
21
+ num: 1,
22
+ product_sku: {
23
+ option: [{ product_option_item_id: 101, name: 'Almond Milk', add_price: 0.7, num: 1 }],
24
+ },
25
+ };
26
+ const toCart = (...products) => toShoppingCartProducts({ orderProducts: products });
27
+
28
+ test('current OS rows retain their metadata identity for cart delete and edit callbacks', () => {
29
+ const uid = '0dd325cf-545e-4665-bda0-d1a26046f78e';
30
+ const input = { ...product, metadata: { unique_identification_number: uid } };
31
+ const [row] = toCart(input);
32
+ assert.equal(row.identity_key, uid);
33
+ assert.equal(row.rowKey, uid);
34
+ assert.equal(row._id, uid);
35
+ assert.equal(row.price, 5.7);
36
+ assert.equal(row.options[0].name, 'Almond Milk');
37
+ assert.equal(input.identity_key, undefined);
38
+ });
39
+
40
+ test('same-SKU option rows remain independently addressable when cart order changes', () => {
41
+ const almond = { ...product, metadata: { unique_identification_number: 'almond-row' } };
42
+ const regular = {
43
+ ...product,
44
+ product_sku: { option: [] },
45
+ metadata: { unique_identification_number: 'regular-row' },
46
+ };
47
+ const original = toCart(almond, regular);
48
+ const reordered = toCart(regular, almond);
49
+ assert.notEqual(original[0].identity_key, original[1].identity_key);
50
+ assert.equal(original[0].identity_key, reordered[1].identity_key);
51
+ assert.equal(original[1].identity_key, reordered[0].identity_key);
52
+ });
53
+
54
+ test('metadata identity takes precedence over stale top-level compatibility fields', () => {
55
+ const [row] = toCart({
56
+ ...product,
57
+ metadata: { unique_identification_number: 'canonical-row' },
58
+ unique_identification_number: 'old-top-level-row',
59
+ identity_key: 'old-alias-row',
60
+ });
61
+ assert.equal(row.identity_key, 'canonical-row');
62
+ });
63
+
64
+ test('accepts top-level and legacy OS identities when metadata has no valid identity', () => {
65
+ for (const metadata of [undefined, {}, { unique_identification_number: '' }, { unique_identification_number: 123 }]) {
66
+ const [current, legacy] = toCart(
67
+ { ...product, metadata, unique_identification_number: 'top-level-row' },
68
+ { ...product, metadata, identity_key: 'legacy-row' },
69
+ );
70
+ assert.equal(current.identity_key, 'top-level-row');
71
+ assert.equal(legacy.identity_key, 'legacy-row');
72
+ }
73
+ });
74
+
75
+ test('a display-only row key never becomes a deletion identity', () => {
76
+ const [row] = toCart(product);
77
+ assert.equal(row.rowKey, '477300_493720_0');
78
+ assert.equal(row.identity_key, undefined);
79
+ });
@@ -174,11 +174,15 @@ function toShoppingCartProducts(params) {
174
174
  const { orderProducts, amountSymbol = "$" } = params;
175
175
  if (!Array.isArray(orderProducts)) return [];
176
176
  return orderProducts.map((productItem, index) => {
177
- var _productItem$_origin, _productItem$product_, _productItem$metadata;
177
+ var _productItem$_origin, _productItem$metadata, _productItem$product_, _productItem$metadata2;
178
178
  const productNum = toSafeNum(productItem === null || productItem === void 0 ? void 0 : productItem.num);
179
179
  const unitPrice = getUnitPrice(productItem);
180
180
  const callbackData = (productItem === null || productItem === void 0 || (_productItem$_origin = productItem._origin) === null || _productItem$_origin === void 0 ? void 0 : _productItem$_origin.callbackData) || {};
181
- const identityKey = typeof (productItem === null || productItem === void 0 ? void 0 : productItem.identity_key) === "string" && productItem.identity_key.length > 0 ? productItem.identity_key : void 0;
181
+ const identityKey = [
182
+ productItem === null || productItem === void 0 || (_productItem$metadata = productItem.metadata) === null || _productItem$metadata === void 0 ? void 0 : _productItem$metadata.unique_identification_number,
183
+ productItem === null || productItem === void 0 ? void 0 : productItem.unique_identification_number,
184
+ productItem === null || productItem === void 0 ? void 0 : productItem.identity_key
185
+ ].find((value) => typeof value === "string" && value.length > 0);
182
186
  const rowKey = identityKey !== null && identityKey !== void 0 ? identityKey : `${(_productItem$product_ = productItem.product_id) !== null && _productItem$product_ !== void 0 ? _productItem$product_ : "p"}_${productItem.product_variant_id}_${index}`;
183
187
  const productOptionString = (typeof (callbackData === null || callbackData === void 0 ? void 0 : callbackData.product_option_string) === "string" ? callbackData.product_option_string.trim() : "") || getVariantProductOptionString(productItem) || void 0;
184
188
  const base = _objectSpread2({
@@ -204,7 +208,7 @@ function toShoppingCartProducts(params) {
204
208
  if (productItem.product_sku) base.product_sku = productItem.product_sku;
205
209
  else if (Array.isArray(productItem.product_option_item) && productItem.product_option_item.length) base.product_option_item = productItem.product_option_item;
206
210
  if (Array.isArray(productItem.product_bundle) && productItem.product_bundle.length) base.product_bundle = productItem.product_bundle;
207
- if (productItem === null || productItem === void 0 || (_productItem$metadata = productItem.metadata) === null || _productItem$metadata === void 0 ? void 0 : _productItem$metadata.venue_booking) {
211
+ if (productItem === null || productItem === void 0 || (_productItem$metadata2 = productItem.metadata) === null || _productItem$metadata2 === void 0 ? void 0 : _productItem$metadata2.venue_booking) {
208
212
  var _origin$resources2;
209
213
  const origin = productItem._origin || {};
210
214
  const meta = productItem.metadata || {};
@@ -2,7 +2,6 @@ import useEngineContext from "../../hooks/useEngineContext.js";
2
2
  import { _asyncToGenerator } from "../../_virtual/_@oxc-project_runtime@0.122.0/helpers/asyncToGenerator.js";
3
3
  import { useSalesSdk } from "../../plus/salesSdk/hooks/useSalesSdk.js";
4
4
  import { getTempOrderSyncPayload, shouldApplySharedTempOrderPayload } from "../../plus/salesSdk/tempOrderSync.js";
5
- import "../../plus/salesSdk/index.js";
6
5
  import { useEffect, useRef } from "react";
7
6
  import { useMemoizedFn } from "ahooks";
8
7
  //#region src/components/sharedSecondaryBigSale/SharedSecondaryBigSaleReceiver.tsx
@@ -0,0 +1,3 @@
1
+ import "./ProductDisplayAdapter.js";
2
+ import "./types.js";
3
+ export {};
@@ -19,6 +19,7 @@ import { useProducts } from "../../hooks/pisellos/useProducts.js";
19
19
  import { useService } from "../../../booking/info/service/serviceManager/index.js";
20
20
  import ProductDisplayAdapter_default from "../ProductDisplayAdapter/ProductDisplayAdapter.js";
21
21
  import { resolveProductDisplayConfig } from "../ProductDisplayAdapter/types.js";
22
+ import "../ProductDisplayAdapter/index.js";
22
23
  import notAvailable_default from "../notAvailable/index.js";
23
24
  import MultiDayTimeSelectModal from "./MultiDayTimeSelectModal.js";
24
25
  import dayjs from "dayjs";
package/es/index.js CHANGED
@@ -90,7 +90,6 @@ import { useSalesSdkProducts } from "./plus/salesSdk/hooks/useSalesSdkProducts.j
90
90
  import SalesSdkDemo from "./plus/salesSdk/demo/index.js";
91
91
  import { useSalesSdkDish } from "./plus/salesSdk/hooks/useSalesSdkDish.js";
92
92
  import { useSyncOsModule } from "./plus/salesSdk/hooks/useSyncOsModule.js";
93
- import "./plus/salesSdk/index.js";
94
93
  import BigSaleRightActionPanel from "./components/BigSaleRightActionPanel/index.js";
95
94
  import ResponsiveWrapper from "./components/list/ResponsiveWrapper.js";
96
95
  import { resolveBigSaleSelectionFlowConfig } from "./components/bigSale/selectionFlowConfig.js";
@@ -145,7 +144,6 @@ import PisellVenueControlPage from "./plus/pisellReservation/PisellVenueControlP
145
144
  import PisellVenueWallPage from "./plus/pisellReservation/PisellVenueWallPage.js";
146
145
  import PisellReservationTablePage from "./plus/pisellReservation/PisellReservationTablePage.js";
147
146
  import SelectFloorMapResourceDialog from "./plus/pisellReservation/components/SelectFloorMapResourceDialog.js";
148
- import "./plus/pisellReservation/index.js";
149
147
  import { PisellTopology, PisellTopologyCore } from "./plus/pisellTopology/PisellTopology.js";
150
148
  import cupProject_default from "./components/ecocup/cupProject/index.js";
151
149
  import CupList from "./components/ecocup/cupList/index.js";
@@ -280,4 +280,4 @@ function attachSelectedSettlement(item, selectedSettlement) {
280
280
  });
281
281
  }
282
282
  //#endregion
283
- export { attachSelectedSettlement, buildSettlementPriceRows, createVirtualOnlySkuDisplayProduct, findFirstVirtualCurrencyAsset, formatSettlementAmount, formatSettlementSelectionTotal, formatTempOrderSettlementAmount, getReservedVirtualSettlementAmount, getSettlementKey, getSettlementOptions, hasSettlementOptions, hasSufficientVirtualCurrencyBalance, isVirtualOnlySettlementProduct, isVirtualSettlementTempOrder, resolveConfiguredUnavailableReason, resolveLegalSettlementAddOnUnitPrice, resolveSettlementOptionEntries, resolveVirtualSettlementErrorMessage, showVirtualSettlementErrorToast };
283
+ export { attachSelectedSettlement, buildSettlementPriceRows, createVirtualOnlySkuDisplayProduct, formatSettlementAmount, formatSettlementSelectionTotal, formatTempOrderSettlementAmount, getSettlementKey, getSettlementOptions, hasSettlementOptions, hasSufficientVirtualCurrencyBalance, isVirtualOnlySettlementProduct, isVirtualSettlementTempOrder, resolveConfiguredUnavailableReason, resolveLegalSettlementAddOnUnitPrice, resolveSettlementOptionEntries, resolveVirtualSettlementErrorMessage, showVirtualSettlementErrorToast };
@@ -259,4 +259,4 @@ function bookingListToReservationTableRows(bookings) {
259
259
  return rows;
260
260
  }
261
261
  //#endregion
262
- export { applyHostResourceShellToBaseRow, bookingListToReservationTableRows, customerBrief, extractResourceRecordIds, filterBookingsByResourceIds, hostBookingStatusToCardStatus, hostBookingUiPatchFromRecord, mergeBookingsForResourceRecord };
262
+ export { applyHostResourceShellToBaseRow, bookingListToReservationTableRows, customerBrief, extractResourceRecordIds, filterBookingsByResourceIds, hostBookingUiPatchFromRecord, mergeBookingsForResourceRecord };
@@ -78,4 +78,4 @@ function toastFloorPlanLoadError(err) {
78
78
  PisellToast({ content: err instanceof Error ? err.message : String(err) });
79
79
  }
80
80
  //#endregion
81
- export { PISELL_RESERVATION_FLOOR_PLAN_CODE, buildDefaultReservationFloorPlanPostBody, ensureShopFloorPlanByCode, putShopFloorPlan, saveViewConfigToShopFloorPlan, shopLayoutToSceneElements$1 as shopLayoutToSceneElements, toastFloorPlanLoadError, toastFloorPlanSaveError, unsubscribeShopFloorPlanCodeQuery };
81
+ export { PISELL_RESERVATION_FLOOR_PLAN_CODE, ensureShopFloorPlanByCode, saveViewConfigToShopFloorPlan, shopLayoutToSceneElements$1 as shopLayoutToSceneElements, toastFloorPlanLoadError, toastFloorPlanSaveError, unsubscribeShopFloorPlanCodeQuery };
@@ -927,4 +927,4 @@ function getReservationDataSourceFormColumns() {
927
927
  ];
928
928
  }
929
929
  //#endregion
930
- export { RESERVATION_BOUND_ROUND_TABLE_ELEMENT_KIND, RESERVATION_BOUND_TABLE_ELEMENT_KIND, applyReservationFloorMapLiveLabels, defaultReservationSceneElements, defaultReservationTableRows, getDefaultReservationFloorMapConfig, getReservationDataSourceFormColumns, getReservationFloorMapShellConfig, mergeFloorMapElementKindCategoriesWithDefaults, mergeFloorMapElementKindsWithDefaults };
930
+ export { RESERVATION_BOUND_ROUND_TABLE_ELEMENT_KIND, RESERVATION_BOUND_TABLE_ELEMENT_KIND, applyReservationFloorMapLiveLabels, defaultReservationTableRows, getDefaultReservationFloorMapConfig, getReservationDataSourceFormColumns, getReservationFloorMapShellConfig, mergeFloorMapElementKindCategoriesWithDefaults, mergeFloorMapElementKindsWithDefaults };
@@ -1,10 +1,10 @@
1
1
  import { _objectSpread2 } from "../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/objectSpread2.js";
2
2
  import dayjs from "dayjs";
3
- import timezonePlugin from "dayjs/plugin/timezone";
4
- import utcPlugin from "dayjs/plugin/utc";
3
+ import timezone from "dayjs/plugin/timezone";
4
+ import utc from "dayjs/plugin/utc";
5
5
  //#region src/plus/saasDevice/devicePasscodes/model.ts
6
- dayjs.extend(utcPlugin);
7
- dayjs.extend(timezonePlugin);
6
+ dayjs.extend(utc);
7
+ dayjs.extend(timezone);
8
8
  const INITIAL_DEVICE_PASSCODE_STATE = {
9
9
  deviceIds: [],
10
10
  devicesById: {}
@@ -13,7 +13,6 @@ import { useSalesSdkCustomer } from "../salesSdk/hooks/useSalesSdkCustomer.js";
13
13
  import locales_default from "./locales.js";
14
14
  import { useSalesSdkBookingContext } from "../salesSdk/context/SalesSdkBookingContext.js";
15
15
  import { useSalesSdkSummary } from "../salesSdk/hooks/useSalesSdkSummary.js";
16
- import "../salesSdk/index.js";
17
16
  import locales_default$1 from "./components/LineItem/locales.js";
18
17
  import { SaleOrderActionBoundary } from "./actions/index.js";
19
18
  import { SaleDetailTemplateRenderer } from "./tmpl/index.js";
@@ -1,7 +1,6 @@
1
1
  import useEngineContext from "../../../../../hooks/useEngineContext.js";
2
2
  import { _objectSpread2 } from "../../../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/objectSpread2.js";
3
3
  import { useSalesSdkBookingContext } from "../../../../salesSdk/context/SalesSdkBookingContext.js";
4
- import "../../../../salesSdk/index.js";
5
4
  import { useMemo } from "react";
6
5
  import { useMemoizedFn } from "ahooks";
7
6
  //#region src/plus/saleDetail/components/Client/hooks/useClientSelectorProps.ts
@@ -4,7 +4,6 @@ import { _asyncToGenerator } from "../../../../_virtual/_@oxc-project_runtime@0.
4
4
  import { _objectWithoutProperties } from "../../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/objectWithoutProperties.js";
5
5
  import useLogger from "../../../../hooks/useLogger.js";
6
6
  import { useSalesSdk } from "../../../salesSdk/hooks/useSalesSdk.js";
7
- import "../../../salesSdk/index.js";
8
7
  import { invokeLocalReceiptPrint, resolveLocalReceiptPrintModule, resolveSaleDetailOrderIdFromSales } from "./utils.js";
9
8
  import { getRemotePrintActions, getWristbandList } from "../../serve.js";
10
9
  import { EBizPrintType } from "./types.js";
@@ -10,7 +10,6 @@ import { useSalesSdk } from "../../../salesSdk/hooks/useSalesSdk.js";
10
10
  import { useSalesSdkCart } from "../../../salesSdk/hooks/useSalesSdkCart.js";
11
11
  import { useSalesSdkGlobalScanActivity } from "../../../salesSdk/context/SalesSdkGlobalScanActivityContext.js";
12
12
  import { useSalesSdkSummary } from "../../../salesSdk/hooks/useSalesSdkSummary.js";
13
- import "../../../salesSdk/index.js";
14
13
  import { resolveSaleDetailTempOrder } from "../../utils.js";
15
14
  import { getNumericAmount, getSalesHostModule, resolveSaleDetailOrderIdFromSales, resolveSaleDetailOrderIdFromSalesResult, shouldCloseDialogAfterCheckout, updateLocalOrder } from "./utils.js";
16
15
  import { deriveSaleOrderSubmitState } from "../../actions/state.js";
@@ -5,7 +5,6 @@ import { isAppliedPaymentRecord } from "../../../salesSdk/utils/paymentStatus.js
5
5
  import { useSalesSdk } from "../../../salesSdk/hooks/useSalesSdk.js";
6
6
  import { useSalesSdkCart } from "../../../salesSdk/hooks/useSalesSdkCart.js";
7
7
  import { useSalesSdkSummary } from "../../../salesSdk/hooks/useSalesSdkSummary.js";
8
- import "../../../salesSdk/index.js";
9
8
  import { resolveSaleDetailTempOrder } from "../../utils.js";
10
9
  import React, { memo, useMemo } from "react";
11
10
  import { formatAmount, locales } from "@pisell/utils";
@@ -5,7 +5,6 @@ import { useSalesSdk } from "../salesSdk/hooks/useSalesSdk.js";
5
5
  import { SalesSdkProvider } from "../salesSdk/context/SalesSdkProvider.js";
6
6
  import { SalesSdkDishProvider } from "../salesSdk/context/SalesSdkDishContext.js";
7
7
  import { SalesSdkBookingContextProvider } from "../salesSdk/context/SalesSdkBookingContext.js";
8
- import "../salesSdk/index.js";
9
8
  import Base_default from "./Base.js";
10
9
  import { resolveSaleDetailOsProps } from "./osProps.js";
11
10
  import React, { forwardRef, useImperativeHandle } from "react";
@@ -1,7 +1,6 @@
1
1
  import useStableInstanceId from "../../../../../../hooks/useStableInstanceId.js";
2
2
  import { useSalesSdkDish } from "../../../../../salesSdk/hooks/useSalesSdkDish.js";
3
3
  import { useCurrentSalesSdkDish } from "../../../../../salesSdk/hooks/useCurrentSalesSdkDish.js";
4
- import "../../../../../salesSdk/index.js";
5
4
  import { SaleDetailStatusOverview } from "../shared/StatusOverview.js";
6
5
  import { DishGroupView } from "./DishGroupView.js";
7
6
  import dayjs from "dayjs";
@@ -1,7 +1,6 @@
1
1
  import useEngineContext from "../../../../hooks/useEngineContext.js";
2
2
  import { _objectSpread2 } from "../../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/objectSpread2.js";
3
3
  import { useCurrentSalesSdkDish } from "../../../salesSdk/hooks/useCurrentSalesSdkDish.js";
4
- import "../../../salesSdk/index.js";
5
4
  import { getInternalNotesByScheduleEvent } from "../../serve.js";
6
5
  import { TEMPLATE_B_PAY_ACTIONS, TEMPLATE_B_SUMMARY_ACTIONS } from "../../components/DetailActions/configs/index.js";
7
6
  import { DetailActions } from "../../components/DetailActions/index.js";
@@ -407,4 +407,4 @@ function createAddProductWithFlowDebounced(deps) {
407
407
  };
408
408
  }
409
409
  //#endregion
410
- export { createAddProductWithFlowDebounced, shouldBypassAddProductDebounce };
410
+ export { createAddProductWithFlowDebounced };
@@ -31,4 +31,4 @@ function subscribeBookingDateChange(bookingTicket, callback) {
31
31
  return typeof off === "function" ? off : () => {};
32
32
  }
33
33
  //#endregion
34
- export { BOOKING_CONTEXT_DATE_EVENT, formatBookingDateTime, subscribeBookingDateChange };
34
+ export { formatBookingDateTime, subscribeBookingDateChange };
@@ -102,4 +102,4 @@ function buildHolderListRequestKey(params) {
102
102
  });
103
103
  }
104
104
  //#endregion
105
- export { buildHolderListRequestKey, buildHolderListRequestParams, enrichCartBookingHolderDisplay, enrichCartProductHolderDisplay, pickHolderIdFromBooking, resolveHolderDisplayConfig };
105
+ export { buildHolderListRequestKey, buildHolderListRequestParams, enrichCartBookingHolderDisplay, enrichCartProductHolderDisplay, resolveHolderDisplayConfig };
@@ -6,12 +6,12 @@ import React, { useCallback, useEffect, useMemo, useRef } from "react";
6
6
  import { locales } from "@pisell/utils";
7
7
  import { Button, PisellEmpty, PisellModal, PisellStatisticList, Skeleton, Timeline, usePisellConfig } from "@pisell/materials";
8
8
  import { useRequest } from "ahooks";
9
- import timezonePlugin from "dayjs/plugin/timezone";
10
- import utcPlugin from "dayjs/plugin/utc";
9
+ import timezone from "dayjs/plugin/timezone";
10
+ import utc from "dayjs/plugin/utc";
11
11
  import "./index.less";
12
12
  //#region src/plus/walletPassGallery/components/timelineSection/index.tsx
13
- dayjs.extend(timezonePlugin);
14
- dayjs.extend(utcPlugin);
13
+ dayjs.extend(timezone);
14
+ dayjs.extend(utc);
15
15
  const stateTimeUnix = 1723255863;
16
16
  const POLL_INTERVAL = 2e3;
17
17
  const POLL_MAX_TIMES = 5;
@@ -0,0 +1 @@
1
+ export { };
@@ -14,4 +14,4 @@ interface AuthModalProps {
14
14
  */
15
15
  declare const AuthModal: React.FC<AuthModalProps>;
16
16
  //#endregion
17
- export { AuthModal };
17
+ export { AuthModal, AuthModalProps };
@@ -1,4 +1,4 @@
1
- import { AuthMethodType, EmailAuthConfig, EmailRegistrationVerification, LoginFormData, OAuthConfig, PhoneAuthConfig, RegisterFormData, UIConfig, VerificationMethod } from "./shared/types.js";
1
+ import { AuthMethodType, VerificationMethod } from "./shared/types.js";
2
2
  import { Login2, Login2Config, Login2Events, Login2Props } from "./Login2.js";
3
3
  import { Register2, Register2Config, Register2Events, Register2Props } from "./Register2.js";
4
- import { AuthModal } from "./AuthModal.js";
4
+ import { AuthModal, AuthModalProps } from "./AuthModal.js";
@@ -226,4 +226,4 @@ interface RegisterFormData {
226
226
  verification_token?: string;
227
227
  }
228
228
  //#endregion
229
- export { AuthMethodType, EmailAuthConfig, EmailRegistrationVerification, LegalTermsConfig, LoginFormData, LoginMethodItem, OAuthConfig, PhoneAuthConfig, RegisterFormData, RegistrationMethodItem, UIConfig, VerificationMethod };
229
+ export { AuthMethodType, EmailAuthConfig, LegalTermsConfig, LoginFormData, LoginMethodItem, OAuthConfig, PhoneAuthConfig, RegisterFormData, RegistrationMethodItem, UIConfig, VerificationMethod };
@@ -0,0 +1,79 @@
1
+ const assert = require('node:assert/strict');
2
+ const { readFileSync } = require('node:fs');
3
+ const { join } = require('node:path');
4
+ const test = require('node:test');
5
+ const ts = require('typescript');
6
+
7
+ // Run with node --test; load the pure adapter in memory without a materials build.
8
+ const source = readFileSync(join(__dirname, 'toShoppingCartProducts.ts'), 'utf8');
9
+ const output = ts.transpileModule(source, {
10
+ compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 },
11
+ });
12
+ const adapter = { exports: {} };
13
+ new Function('exports', output.outputText)(adapter.exports);
14
+ const { toShoppingCartProducts } = adapter.exports;
15
+
16
+ const product = {
17
+ product_id: 477300,
18
+ product_variant_id: 493720,
19
+ product_title: 'Latte',
20
+ selling_price: '5.70',
21
+ num: 1,
22
+ product_sku: {
23
+ option: [{ product_option_item_id: 101, name: 'Almond Milk', add_price: 0.7, num: 1 }],
24
+ },
25
+ };
26
+ const toCart = (...products) => toShoppingCartProducts({ orderProducts: products });
27
+
28
+ test('current OS rows retain their metadata identity for cart delete and edit callbacks', () => {
29
+ const uid = '0dd325cf-545e-4665-bda0-d1a26046f78e';
30
+ const input = { ...product, metadata: { unique_identification_number: uid } };
31
+ const [row] = toCart(input);
32
+ assert.equal(row.identity_key, uid);
33
+ assert.equal(row.rowKey, uid);
34
+ assert.equal(row._id, uid);
35
+ assert.equal(row.price, 5.7);
36
+ assert.equal(row.options[0].name, 'Almond Milk');
37
+ assert.equal(input.identity_key, undefined);
38
+ });
39
+
40
+ test('same-SKU option rows remain independently addressable when cart order changes', () => {
41
+ const almond = { ...product, metadata: { unique_identification_number: 'almond-row' } };
42
+ const regular = {
43
+ ...product,
44
+ product_sku: { option: [] },
45
+ metadata: { unique_identification_number: 'regular-row' },
46
+ };
47
+ const original = toCart(almond, regular);
48
+ const reordered = toCart(regular, almond);
49
+ assert.notEqual(original[0].identity_key, original[1].identity_key);
50
+ assert.equal(original[0].identity_key, reordered[1].identity_key);
51
+ assert.equal(original[1].identity_key, reordered[0].identity_key);
52
+ });
53
+
54
+ test('metadata identity takes precedence over stale top-level compatibility fields', () => {
55
+ const [row] = toCart({
56
+ ...product,
57
+ metadata: { unique_identification_number: 'canonical-row' },
58
+ unique_identification_number: 'old-top-level-row',
59
+ identity_key: 'old-alias-row',
60
+ });
61
+ assert.equal(row.identity_key, 'canonical-row');
62
+ });
63
+
64
+ test('accepts top-level and legacy OS identities when metadata has no valid identity', () => {
65
+ for (const metadata of [undefined, {}, { unique_identification_number: '' }, { unique_identification_number: 123 }]) {
66
+ const [current, legacy] = toCart(
67
+ { ...product, metadata, unique_identification_number: 'top-level-row' },
68
+ { ...product, metadata, identity_key: 'legacy-row' },
69
+ );
70
+ assert.equal(current.identity_key, 'top-level-row');
71
+ assert.equal(legacy.identity_key, 'legacy-row');
72
+ }
73
+ });
74
+
75
+ test('a display-only row key never becomes a deletion identity', () => {
76
+ const [row] = toCart(product);
77
+ assert.equal(row.rowKey, '477300_493720_0');
78
+ assert.equal(row.identity_key, undefined);
79
+ });
@@ -174,11 +174,15 @@ function toShoppingCartProducts(params) {
174
174
  const { orderProducts, amountSymbol = "$" } = params;
175
175
  if (!Array.isArray(orderProducts)) return [];
176
176
  return orderProducts.map((productItem, index) => {
177
- var _productItem$_origin, _productItem$product_, _productItem$metadata;
177
+ var _productItem$_origin, _productItem$metadata, _productItem$product_, _productItem$metadata2;
178
178
  const productNum = toSafeNum(productItem === null || productItem === void 0 ? void 0 : productItem.num);
179
179
  const unitPrice = getUnitPrice(productItem);
180
180
  const callbackData = (productItem === null || productItem === void 0 || (_productItem$_origin = productItem._origin) === null || _productItem$_origin === void 0 ? void 0 : _productItem$_origin.callbackData) || {};
181
- const identityKey = typeof (productItem === null || productItem === void 0 ? void 0 : productItem.identity_key) === "string" && productItem.identity_key.length > 0 ? productItem.identity_key : void 0;
181
+ const identityKey = [
182
+ productItem === null || productItem === void 0 || (_productItem$metadata = productItem.metadata) === null || _productItem$metadata === void 0 ? void 0 : _productItem$metadata.unique_identification_number,
183
+ productItem === null || productItem === void 0 ? void 0 : productItem.unique_identification_number,
184
+ productItem === null || productItem === void 0 ? void 0 : productItem.identity_key
185
+ ].find((value) => typeof value === "string" && value.length > 0);
182
186
  const rowKey = identityKey !== null && identityKey !== void 0 ? identityKey : `${(_productItem$product_ = productItem.product_id) !== null && _productItem$product_ !== void 0 ? _productItem$product_ : "p"}_${productItem.product_variant_id}_${index}`;
183
187
  const productOptionString = (typeof (callbackData === null || callbackData === void 0 ? void 0 : callbackData.product_option_string) === "string" ? callbackData.product_option_string.trim() : "") || getVariantProductOptionString(productItem) || void 0;
184
188
  const base = require_objectSpread2._objectSpread2({
@@ -204,7 +208,7 @@ function toShoppingCartProducts(params) {
204
208
  if (productItem.product_sku) base.product_sku = productItem.product_sku;
205
209
  else if (Array.isArray(productItem.product_option_item) && productItem.product_option_item.length) base.product_option_item = productItem.product_option_item;
206
210
  if (Array.isArray(productItem.product_bundle) && productItem.product_bundle.length) base.product_bundle = productItem.product_bundle;
207
- if (productItem === null || productItem === void 0 || (_productItem$metadata = productItem.metadata) === null || _productItem$metadata === void 0 ? void 0 : _productItem$metadata.venue_booking) {
211
+ if (productItem === null || productItem === void 0 || (_productItem$metadata2 = productItem.metadata) === null || _productItem$metadata2 === void 0 ? void 0 : _productItem$metadata2.venue_booking) {
208
212
  var _origin$resources2;
209
213
  const origin = productItem._origin || {};
210
214
  const meta = productItem.metadata || {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pisell/private-materials",
3
- "version": "6.12.363",
3
+ "version": "6.12.365",
4
4
  "main": "./lib/index.js",
5
5
  "module": "./es/index.js",
6
6
  "types": "./lib/index.d.ts",
@@ -74,10 +74,10 @@
74
74
  "styled-components": "^6.0.0-rc.3",
75
75
  "use-sync-external-store": "^1.6.0",
76
76
  "@pisell/pi-payment-sdk": "0.0.4",
77
- "@pisell/utils": "3.0.7",
78
- "@pisell/icon": "0.0.11",
77
+ "@pisell/materials": "6.12.87",
79
78
  "@pisell/date-picker": "3.0.12",
80
- "@pisell/materials": "6.12.86"
79
+ "@pisell/icon": "0.0.11",
80
+ "@pisell/utils": "3.0.7"
81
81
  },
82
82
  "peerDependencies": {
83
83
  "react": "^18.0.0",
@@ -1,17 +0,0 @@
1
- import "./serve/formResourcePage.js";
2
- import "./floorRoomCard/mapRowToFloorRoomCardData.js";
3
- import "./floorRoomCard/ReservationFloorRoomCard.js";
4
- import "./floorMap/reservationMock.js";
5
- import "./floorMap/floorPlanApi.js";
6
- import "./reservationConstants.js";
7
- import "./data/bookingToReservationTables.js";
8
- import "./data/formResourceToReservationTables.js";
9
- import "./data/salesEmbeddedResourceToTableRows.js";
10
- import "./floorMap/reservationCards.js";
11
- import "./PisellReservation.js";
12
- import "./PisellReservationBookingPage.js";
13
- import "./PisellVenueControlPage.js";
14
- import "./PisellVenueWallPage.js";
15
- import "./PisellReservationTablePage.js";
16
- import "./components/SelectFloorMapResourceDialog.js";
17
- export {};