@pisell/private-materials 6.12.355 → 6.12.356
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.
- package/build/lowcode/assets-daily.json +11 -11
- package/build/lowcode/assets-dev.json +2 -2
- package/build/lowcode/assets-prod.json +11 -11
- package/build/lowcode/meta.js +1 -1
- package/build/lowcode/render/default/view.js +12 -12
- package/build/lowcode/view.js +12 -12
- package/es/components/bigSale/components/BookingFloatingPanel/useBookingPanelController.js +0 -1
- package/es/components/bigSale/components/ProductList/index.js +0 -1
- package/es/components/bigSale/components/TimeBar/index.js +0 -1
- package/es/components/bigSale/dialog.js +0 -1
- package/es/components/bigSale/hooks/useBigSaleContext.js +0 -1
- package/es/components/bigSale/hooks/useSelectFloorMapResourceForBigSale.js +0 -1
- package/es/components/bigSale/index.js +0 -1
- package/es/components/bigSale/templates/Kiosk/index.js +0 -1
- package/es/components/sharedSecondaryBigSale/SharedSecondaryBigSaleReceiver.js +0 -1
- package/es/index.js +0 -2
- package/es/plus/invoice/README.md +8 -2
- package/es/plus/invoice/ReceiptRenderer.js +1 -1
- package/es/plus/invoice/receipt.d.ts +2 -0
- package/es/plus/invoice/receipt.js +38 -8
- package/es/plus/invoice/receiptTranslations.js +8 -2
- package/es/plus/multiCurrencySettlement/index.js +1 -1
- package/es/plus/pisellReservation/data/bookingToReservationTables.js +1 -1
- package/es/plus/pisellReservation/floorMap/floorPlanApi.js +1 -1
- package/es/plus/pisellReservation/floorMap/reservationMock.js +1 -1
- package/es/plus/saasDevice/devicePasscodes/model.js +4 -4
- package/es/plus/saleDetail/Base.js +0 -1
- package/es/plus/saleDetail/components/Client/hooks/useClientSelectorProps.js +0 -1
- package/es/plus/saleDetail/components/DetailActions/PrintAction.js +0 -1
- package/es/plus/saleDetail/components/DetailActions/index.js +0 -1
- package/es/plus/saleDetail/components/SummaryFinancialSections/index.js +0 -1
- package/es/plus/saleDetail/index.js +0 -1
- package/es/plus/saleDetail/tmpl/B/components/Dish/index.js +0 -1
- package/es/plus/saleDetail/tmpl/B/components/Invoice/useInvoiceReceiptPreview.js +19 -13
- package/es/plus/saleDetail/tmpl/B/index.js +0 -1
- package/es/plus/salesSdk/utils/addProductWithFlowDebounced.js +1 -1
- package/es/plus/salesSdk/utils/bookingDate.js +1 -1
- package/es/plus/salesSdk/utils/enrichCartLineHolderDisplay.js +1 -1
- package/es/plus/walletPassGallery/components/timelineSection/index.js +4 -4
- package/es/private-materials/lowcode/authmodal/meta.d.ts +1 -0
- package/es/pro/Login2.0/AuthModal.d.ts +1 -1
- package/es/pro/Login2.0/index.d.ts +2 -2
- package/es/pro/Login2.0/shared/types.d.ts +1 -1
- package/lib/plus/invoice/README.md +8 -2
- package/lib/plus/invoice/ReceiptRenderer.js +1 -1
- package/lib/plus/invoice/receipt.d.ts +2 -0
- package/lib/plus/invoice/receipt.js +38 -8
- package/lib/plus/invoice/receiptTranslations.js +8 -2
- package/lib/plus/saleDetail/tmpl/B/components/Invoice/useInvoiceReceiptPreview.js +18 -12
- package/package.json +3 -3
- package/es/plus/pisellReservation/index.js +0 -17
- 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
|
/**
|
|
@@ -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";
|
|
@@ -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
|
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";
|
|
@@ -77,8 +77,14 @@ type OrderInvoiceHandle = {
|
|
|
77
77
|
|
|
78
78
|
OS `OrderInvoicePreview` 从模板 language 中提供 `languageOptions` 和
|
|
79
79
|
`selectedLanguage`;宿主选择器调用实例 `selectLanguage(code)`,不重新准备订单或
|
|
80
|
-
加载低代码页面。`result.locale`
|
|
81
|
-
`
|
|
80
|
+
加载低代码页面。`result.locale` 为主语言;`cn_en` 沿用英语在前、简体中文在后,
|
|
81
|
+
`ja_en` 为日语在前、英语在后,`secondaryLocale` 为对应的第二语言。
|
|
82
|
+
页面 UI 的 `locale` 不随此选择改变。
|
|
83
|
+
|
|
84
|
+
POS Invoice 预览从同一份 `getInvoiceTemplateSettings()` 配置取得 modules 和
|
|
85
|
+
language,展示首个启用的语言模式(打印份数不重复预览),并请求该模式所需的所有
|
|
86
|
+
语言快照。双语模式任一语言缺失时保留重试提示,不静默降级为单语。旧 OS 仅提供
|
|
87
|
+
layout 或 DEFAULT 模板未指定语言时,继续按界面语言选择。
|
|
82
88
|
|
|
83
89
|
物料使用 `receipt_key` 关联来源相同的双语节点,保留仅次语言有内容的行。
|
|
84
90
|
`receipt_item_kind` / `receipt_value_kind` 区分共享值和翻译文本,避免时间、编号和
|
|
@@ -26,7 +26,7 @@ function ReceiptRows({ locale, rows }) {
|
|
|
26
26
|
return /* @__PURE__ */ React.createElement("div", {
|
|
27
27
|
className: `${PREFIX}__receipt-row ${row.size === 2 ? `${PREFIX}__receipt-row--strong` : ""} ${singleValue ? `${PREFIX}__receipt-row--single` : ""} ${alignment ? `${PREFIX}__receipt-row--align-${alignment}` : ""}`,
|
|
28
28
|
key: `${row.item}-${row.value}-${index}`
|
|
29
|
-
}, row.item ? /* @__PURE__ */ React.createElement("span", null, label(String(row.item), locale)) : null, row.value ? /* @__PURE__ */ React.createElement("span", null, row.value) : null);
|
|
29
|
+
}, row.item ? /* @__PURE__ */ React.createElement("span", null, label(String(row.item), row.labelLocale || locale)) : null, row.value ? /* @__PURE__ */ React.createElement("span", null, row.value) : null);
|
|
30
30
|
}));
|
|
31
31
|
}
|
|
32
32
|
function ReceiptSectionTitle({ children }) {
|
|
@@ -10,6 +10,8 @@ interface InvoiceLayoutConfig {
|
|
|
10
10
|
module: InvoiceModuleConfig[];
|
|
11
11
|
}
|
|
12
12
|
interface SmallTicketItem {
|
|
13
|
+
/** View-only locale retained when primary and secondary rows are merged. */
|
|
14
|
+
labelLocale?: string;
|
|
13
15
|
receipt_key?: string;
|
|
14
16
|
receipt_value_kind?: 'shared' | 'text';
|
|
15
17
|
receipt_item_kind?: 'shared' | 'text';
|
|
@@ -317,12 +317,8 @@ function findLocaleKey(data, candidate) {
|
|
|
317
317
|
const lowerCandidate = candidate.toLowerCase().replace(/-/g, "_");
|
|
318
318
|
return Object.keys(data).find((key) => key.toLowerCase().replace(/-/g, "_") === lowerCandidate);
|
|
319
319
|
}
|
|
320
|
-
function selectSmallTicketLocale(data, appLocale, primaryLocale) {
|
|
321
|
-
const candidates = [
|
|
322
|
-
...localeCandidates(appLocale),
|
|
323
|
-
"en",
|
|
324
|
-
...localeCandidates(primaryLocale || "")
|
|
325
|
-
];
|
|
320
|
+
function selectSmallTicketLocale(data, appLocale, primaryLocale, allowFallback = true) {
|
|
321
|
+
const candidates = [...localeCandidates(appLocale), ...allowFallback ? ["en", ...localeCandidates(primaryLocale || "")] : []];
|
|
326
322
|
for (const candidate of candidates) {
|
|
327
323
|
const key = findLocaleKey(data, candidate);
|
|
328
324
|
if (key && hasLocalePayload(data[key])) return {
|
|
@@ -330,7 +326,7 @@ function selectSmallTicketLocale(data, appLocale, primaryLocale) {
|
|
|
330
326
|
locale: key
|
|
331
327
|
};
|
|
332
328
|
}
|
|
333
|
-
const first = Object.keys(data).find((key) => hasLocalePayload(data[key]));
|
|
329
|
+
const first = allowFallback ? Object.keys(data).find((key) => hasLocalePayload(data[key])) : void 0;
|
|
334
330
|
return first ? {
|
|
335
331
|
data: data[first],
|
|
336
332
|
locale: first
|
|
@@ -362,6 +358,40 @@ function _resolveInvoiceLayoutConfig() {
|
|
|
362
358
|
});
|
|
363
359
|
return _resolveInvoiceLayoutConfig.apply(this, arguments);
|
|
364
360
|
}
|
|
361
|
+
const INVOICE_PREVIEW_LANGUAGES = {
|
|
362
|
+
en: ["en"],
|
|
363
|
+
zh_cn: ["zh_CN"],
|
|
364
|
+
zh_hk: ["zh_HK"],
|
|
365
|
+
ja: ["ja"],
|
|
366
|
+
pt: ["pt"],
|
|
367
|
+
cn_en: ["en", "zh_CN"],
|
|
368
|
+
ja_en: ["ja", "en"]
|
|
369
|
+
};
|
|
370
|
+
/** Use the first enabled print mode once, regardless of its copy count. */
|
|
371
|
+
function resolveInvoicePreviewConfig(_x2) {
|
|
372
|
+
return _resolveInvoicePreviewConfig.apply(this, arguments);
|
|
373
|
+
}
|
|
374
|
+
function _resolveInvoicePreviewConfig() {
|
|
375
|
+
_resolveInvoicePreviewConfig = _asyncToGenerator(function* (salesModule) {
|
|
376
|
+
if (typeof (salesModule === null || salesModule === void 0 ? void 0 : salesModule.getInvoiceTemplateSettings) === "function") {
|
|
377
|
+
const settings = yield salesModule.getInvoiceTemplateSettings();
|
|
378
|
+
if (isRecord(settings)) {
|
|
379
|
+
const layout = normalizeInvoiceLayoutConfig({ module: settings.modules });
|
|
380
|
+
if (typeof settings.template === "string" && settings.template.trim() && settings.template.trim().toUpperCase() !== "DEFAULT" && isRecord(settings.language)) for (const [rawCode, count] of Object.entries(settings.language)) {
|
|
381
|
+
if (typeof count !== "number" || !Number.isFinite(count) || count <= 0) continue;
|
|
382
|
+
const locales = INVOICE_PREVIEW_LANGUAGES[rawCode.trim().toLowerCase().replace(/-/g, "_")];
|
|
383
|
+
if (Array.isArray(locales)) return {
|
|
384
|
+
layout,
|
|
385
|
+
locales: [...locales]
|
|
386
|
+
};
|
|
387
|
+
}
|
|
388
|
+
return { layout };
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
return { layout: yield resolveInvoiceLayoutConfig(salesModule) };
|
|
392
|
+
});
|
|
393
|
+
return _resolveInvoicePreviewConfig.apply(this, arguments);
|
|
394
|
+
}
|
|
365
395
|
function text(value) {
|
|
366
396
|
return value === void 0 || value === null ? "" : String(value).trim();
|
|
367
397
|
}
|
|
@@ -893,4 +923,4 @@ function getModuleImage(module) {
|
|
|
893
923
|
return text(module.image.value);
|
|
894
924
|
}
|
|
895
925
|
//#endregion
|
|
896
|
-
export { buildInvoiceReceiptViewModel, formatReceiptPreviewTime, getModuleImage, getModuleText, getReceiptBookingId, getReceiptLabel, getReceiptProductTotal, isSmallTicketData, multiplyReceiptMoney, receiptMoneyValuesDiffer,
|
|
926
|
+
export { buildInvoiceReceiptViewModel, formatReceiptPreviewTime, getModuleImage, getModuleText, getReceiptBookingId, getReceiptLabel, getReceiptProductTotal, isSmallTicketData, multiplyReceiptMoney, receiptMoneyValuesDiffer, resolveInvoicePreviewConfig, resolveSmallTicketData, selectSmallTicketLocale, subtractReceiptMoney, sumReceiptMoney };
|
|
@@ -42,9 +42,14 @@ function receiptLabel(receipt, key) {
|
|
|
42
42
|
return bilingualText(getReceiptLabel(receipt.locale, key), receipt.secondary && getReceiptLabel(receipt.secondary.locale, key));
|
|
43
43
|
}
|
|
44
44
|
function mergeTranslatedRows(primary, secondary, locale, secondaryLocale, sharedValues = false) {
|
|
45
|
+
const primaryRows = new Set(primary);
|
|
45
46
|
return pairReceiptEntries(primary, secondary, (row) => row.receipt_key).flatMap(({ primary: row, secondary: other }) => {
|
|
46
|
-
const
|
|
47
|
-
const
|
|
47
|
+
const labelLocale = primaryRows.has(row) ? locale : secondaryLocale;
|
|
48
|
+
const item = getReceiptLabel(labelLocale, row.item || "");
|
|
49
|
+
const result = [_objectSpread2(_objectSpread2({}, row), {}, {
|
|
50
|
+
item,
|
|
51
|
+
labelLocale
|
|
52
|
+
})];
|
|
48
53
|
if (!other) return result;
|
|
49
54
|
let secondItem = getReceiptLabel(secondaryLocale, other.item || "");
|
|
50
55
|
if (row.receipt_key === "settlement/tax-included") secondItem = secondItem.replace(/\s-?[^\s\d]*\d[\d,.]*\s(?=\()/, " ");
|
|
@@ -53,6 +58,7 @@ function mergeTranslatedRows(primary, secondary, locale, secondaryLocale, shared
|
|
|
53
58
|
if (!secondItem && !secondValue) return result;
|
|
54
59
|
result.push(_objectSpread2(_objectSpread2({}, other), {}, {
|
|
55
60
|
item: secondItem,
|
|
61
|
+
labelLocale: secondaryLocale,
|
|
56
62
|
value: secondValue,
|
|
57
63
|
receipt_key: `${other.receipt_key}/secondary`
|
|
58
64
|
}));
|
|
@@ -280,4 +280,4 @@ function attachSelectedSettlement(item, selectedSettlement) {
|
|
|
280
280
|
});
|
|
281
281
|
}
|
|
282
282
|
//#endregion
|
|
283
|
-
export { attachSelectedSettlement, buildSettlementPriceRows, createVirtualOnlySkuDisplayProduct,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
4
|
-
import
|
|
3
|
+
import timezonePlugin from "dayjs/plugin/timezone";
|
|
4
|
+
import utcPlugin from "dayjs/plugin/utc";
|
|
5
5
|
//#region src/plus/saasDevice/devicePasscodes/model.ts
|
|
6
|
-
dayjs.extend(
|
|
7
|
-
dayjs.extend(
|
|
6
|
+
dayjs.extend(utcPlugin);
|
|
7
|
+
dayjs.extend(timezonePlugin);
|
|
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";
|
|
@@ -6,7 +6,7 @@ import { isVirtualSettlementTempOrder } from "../../../../../multiCurrencySettle
|
|
|
6
6
|
import { getLocalOrderReceiptSnapshot, getOrderSmallTicketData } from "../../../../serve.js";
|
|
7
7
|
import { withDisplayedReceiptFormTitles } from "../../../../utils/formTitleDisplay.js";
|
|
8
8
|
import { hasInvoiceDetailSettings, hasInvoicePaymentTimeKeys, isInvoiceResourceTitleVisible, requiresInvoiceDataFiltering, requiresInvoicePaymentTimeKeys } from "../../../../../invoice/invoiceVisibility.js";
|
|
9
|
-
import { buildInvoiceReceiptViewModel, formatReceiptPreviewTime, isSmallTicketData,
|
|
9
|
+
import { buildInvoiceReceiptViewModel, formatReceiptPreviewTime, isSmallTicketData, resolveInvoicePreviewConfig, resolveSmallTicketData, selectSmallTicketLocale } from "../../../../../invoice/receipt.js";
|
|
10
10
|
import { useEffect, useMemo, useState } from "react";
|
|
11
11
|
//#region src/plus/saleDetail/tmpl/B/components/Invoice/useInvoiceReceiptPreview.ts
|
|
12
12
|
const LOADING_STATE = {
|
|
@@ -81,13 +81,12 @@ function useInvoiceReceiptPreview(context) {
|
|
|
81
81
|
setState(_objectSpread2(_objectSpread2({}, LOADING_STATE), {}, { scope }));
|
|
82
82
|
(function() {
|
|
83
83
|
var _ref3 = _asyncToGenerator(function* () {
|
|
84
|
-
var _bookingTicket$getFor;
|
|
85
84
|
const { appLocale, bookingTicket, engineContext, orderId, platform, previewCreatedAt, salesDetail, salesModule, tempOrder } = scope;
|
|
86
|
-
const layout = yield
|
|
85
|
+
const { layout, locales } = yield resolveInvoicePreviewConfig(salesModule);
|
|
87
86
|
if (cancelled) return null;
|
|
88
87
|
const mustFilter = requiresInvoiceDataFiltering(layout);
|
|
89
88
|
const needsPaymentTimeKeys = requiresInvoicePaymentTimeKeys(layout);
|
|
90
|
-
const useSharedConfig = hasInvoiceDetailSettings(layout) || mustFilter;
|
|
89
|
+
const useSharedConfig = hasInvoiceDetailSettings(layout) || mustFilter || Boolean(locales);
|
|
91
90
|
const isVirtualOrder = isVirtualSettlementTempOrder(tempOrder) || isVirtualSettlementTempOrder(salesDetail === null || salesDetail === void 0 ? void 0 : salesDetail.raw);
|
|
92
91
|
const legacyVirtualResult = {
|
|
93
92
|
receipt: null,
|
|
@@ -97,11 +96,12 @@ function useInvoiceReceiptPreview(context) {
|
|
|
97
96
|
};
|
|
98
97
|
if (isVirtualOrder && !useSharedConfig) return legacyVirtualResult;
|
|
99
98
|
const requiresSource = isVirtualOrder && useSharedConfig;
|
|
99
|
+
const requiresFreshSnapshot = mustFilter || needsPaymentTimeKeys || requiresSource || ((locales === null || locales === void 0 ? void 0 : locales.length) || 0) > 1;
|
|
100
100
|
const embeddedSnapshot = resolveSmallTicketData(salesDetail, tempOrder);
|
|
101
101
|
const { snapshot, source } = yield function() {
|
|
102
102
|
var _ref2 = _asyncToGenerator(function* () {
|
|
103
103
|
if (platform !== "h5" && orderId !== null && orderId !== void 0) try {
|
|
104
|
-
const freshSnapshot = yield getLocalOrderReceiptSnapshot(orderId, [appLocale], layout);
|
|
104
|
+
const freshSnapshot = yield getLocalOrderReceiptSnapshot(orderId, locales || [appLocale], layout);
|
|
105
105
|
if (!freshSnapshot || !isSmallTicketData(freshSnapshot.small_ticket_data)) throw new Error("Receipt snapshot is unavailable");
|
|
106
106
|
if (mustFilter && freshSnapshot.template_visibility_applied !== true) throw new Error("Receipt snapshot does not support template filtering");
|
|
107
107
|
if (needsPaymentTimeKeys && !hasInvoicePaymentTimeKeys(freshSnapshot.small_ticket_data)) throw new Error("Receipt snapshot does not identify payment history times");
|
|
@@ -111,10 +111,10 @@ function useInvoiceReceiptPreview(context) {
|
|
|
111
111
|
source: freshSnapshot.source || null
|
|
112
112
|
};
|
|
113
113
|
} catch (error) {
|
|
114
|
-
if (
|
|
114
|
+
if (requiresFreshSnapshot) throw error;
|
|
115
115
|
console.warn("[SaleDetail.Invoice] Failed to rebuild local receipt snapshot", error);
|
|
116
116
|
}
|
|
117
|
-
if (
|
|
117
|
+
if (requiresFreshSnapshot) throw new Error("A template-aware local receipt snapshot is required");
|
|
118
118
|
return {
|
|
119
119
|
snapshot: embeddedSnapshot || (orderId !== null && orderId !== void 0 ? yield getOrderSmallTicketData(orderId) : null),
|
|
120
120
|
source: null
|
|
@@ -128,17 +128,23 @@ function useInvoiceReceiptPreview(context) {
|
|
|
128
128
|
const isVirtualSource = isVirtualSettlementTempOrder(source);
|
|
129
129
|
if (isVirtualSource && !useSharedConfig) return legacyVirtualResult;
|
|
130
130
|
const shopInfo = getShopInfo(engineContext);
|
|
131
|
-
const
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
131
|
+
const buildReceipt = (locale) => {
|
|
132
|
+
var _bookingTicket$getFor;
|
|
133
|
+
const selected = selectSmallTicketLocale(snapshot, locale, shopInfo.primary_locale, !locales);
|
|
134
|
+
if (!selected) throw new Error(`Receipt language data is unavailable: ${locale}`);
|
|
135
|
+
return buildInvoiceReceiptViewModel({
|
|
136
|
+
data: isInvoiceResourceTitleVisible(layout) ? withDisplayedReceiptFormTitles(selected.data, (bookingTicket === null || bookingTicket === void 0 || (_bookingTicket$getFor = bookingTicket.getFormTitleMap) === null || _bookingTicket$getFor === void 0 ? void 0 : _bookingTicket$getFor.call(bookingTicket)) || {}, selected.locale, (salesDetail === null || salesDetail === void 0 ? void 0 : salesDetail.bookings) || []) : selected.data,
|
|
136
137
|
layout,
|
|
137
138
|
locale: selected.locale,
|
|
138
139
|
previewTime: formatReceiptPreviewTime(previewCreatedAt, selected.locale),
|
|
139
140
|
shopLogo: getShopLogo(shopInfo),
|
|
140
141
|
taxNumberLabel: shopInfo.tax_number_title || (String(shopInfo.tax_country_code || "").toUpperCase() === "AU" ? "ABN" : void 0)
|
|
141
|
-
})
|
|
142
|
+
});
|
|
143
|
+
};
|
|
144
|
+
const receipt = buildReceipt((locales === null || locales === void 0 ? void 0 : locales[0]) || appLocale);
|
|
145
|
+
if (locales === null || locales === void 0 ? void 0 : locales[1]) receipt.secondary = buildReceipt(locales[1]);
|
|
146
|
+
return {
|
|
147
|
+
receipt,
|
|
142
148
|
source,
|
|
143
149
|
useLegacyVirtualCurrencyInvoice: false,
|
|
144
150
|
useVirtualCurrencyReceipt: useSharedConfig && isVirtualSource
|
|
@@ -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";
|
|
@@ -31,4 +31,4 @@ function subscribeBookingDateChange(bookingTicket, callback) {
|
|
|
31
31
|
return typeof off === "function" ? off : () => {};
|
|
32
32
|
}
|
|
33
33
|
//#endregion
|
|
34
|
-
export {
|
|
34
|
+
export { formatBookingDateTime, subscribeBookingDateChange };
|
|
@@ -102,4 +102,4 @@ function buildHolderListRequestKey(params) {
|
|
|
102
102
|
});
|
|
103
103
|
}
|
|
104
104
|
//#endregion
|
|
105
|
-
export { buildHolderListRequestKey, buildHolderListRequestParams, enrichCartBookingHolderDisplay, enrichCartProductHolderDisplay,
|
|
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
|
|
10
|
-
import
|
|
9
|
+
import timezonePlugin from "dayjs/plugin/timezone";
|
|
10
|
+
import utcPlugin from "dayjs/plugin/utc";
|
|
11
11
|
import "./index.less";
|
|
12
12
|
//#region src/plus/walletPassGallery/components/timelineSection/index.tsx
|
|
13
|
-
dayjs.extend(
|
|
14
|
-
dayjs.extend(
|
|
13
|
+
dayjs.extend(timezonePlugin);
|
|
14
|
+
dayjs.extend(utcPlugin);
|
|
15
15
|
const stateTimeUnix = 1723255863;
|
|
16
16
|
const POLL_INTERVAL = 2e3;
|
|
17
17
|
const POLL_MAX_TIMES = 5;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AuthMethodType,
|
|
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,
|
|
229
|
+
export { AuthMethodType, EmailAuthConfig, LegalTermsConfig, LoginFormData, LoginMethodItem, OAuthConfig, PhoneAuthConfig, RegisterFormData, RegistrationMethodItem, UIConfig, VerificationMethod };
|
|
@@ -77,8 +77,14 @@ type OrderInvoiceHandle = {
|
|
|
77
77
|
|
|
78
78
|
OS `OrderInvoicePreview` 从模板 language 中提供 `languageOptions` 和
|
|
79
79
|
`selectedLanguage`;宿主选择器调用实例 `selectLanguage(code)`,不重新准备订单或
|
|
80
|
-
加载低代码页面。`result.locale`
|
|
81
|
-
`
|
|
80
|
+
加载低代码页面。`result.locale` 为主语言;`cn_en` 沿用英语在前、简体中文在后,
|
|
81
|
+
`ja_en` 为日语在前、英语在后,`secondaryLocale` 为对应的第二语言。
|
|
82
|
+
页面 UI 的 `locale` 不随此选择改变。
|
|
83
|
+
|
|
84
|
+
POS Invoice 预览从同一份 `getInvoiceTemplateSettings()` 配置取得 modules 和
|
|
85
|
+
language,展示首个启用的语言模式(打印份数不重复预览),并请求该模式所需的所有
|
|
86
|
+
语言快照。双语模式任一语言缺失时保留重试提示,不静默降级为单语。旧 OS 仅提供
|
|
87
|
+
layout 或 DEFAULT 模板未指定语言时,继续按界面语言选择。
|
|
82
88
|
|
|
83
89
|
物料使用 `receipt_key` 关联来源相同的双语节点,保留仅次语言有内容的行。
|
|
84
90
|
`receipt_item_kind` / `receipt_value_kind` 区分共享值和翻译文本,避免时间、编号和
|
|
@@ -29,7 +29,7 @@ function ReceiptRows({ locale, rows }) {
|
|
|
29
29
|
return /* @__PURE__ */ react.default.createElement("div", {
|
|
30
30
|
className: `${PREFIX}__receipt-row ${row.size === 2 ? `${PREFIX}__receipt-row--strong` : ""} ${singleValue ? `${PREFIX}__receipt-row--single` : ""} ${alignment ? `${PREFIX}__receipt-row--align-${alignment}` : ""}`,
|
|
31
31
|
key: `${row.item}-${row.value}-${index}`
|
|
32
|
-
}, row.item ? /* @__PURE__ */ react.default.createElement("span", null, label(String(row.item), locale)) : null, row.value ? /* @__PURE__ */ react.default.createElement("span", null, row.value) : null);
|
|
32
|
+
}, row.item ? /* @__PURE__ */ react.default.createElement("span", null, label(String(row.item), row.labelLocale || locale)) : null, row.value ? /* @__PURE__ */ react.default.createElement("span", null, row.value) : null);
|
|
33
33
|
}));
|
|
34
34
|
}
|
|
35
35
|
function ReceiptSectionTitle({ children }) {
|
|
@@ -10,6 +10,8 @@ interface InvoiceLayoutConfig {
|
|
|
10
10
|
module: InvoiceModuleConfig[];
|
|
11
11
|
}
|
|
12
12
|
interface SmallTicketItem {
|
|
13
|
+
/** View-only locale retained when primary and secondary rows are merged. */
|
|
14
|
+
labelLocale?: string;
|
|
13
15
|
receipt_key?: string;
|
|
14
16
|
receipt_value_kind?: 'shared' | 'text';
|
|
15
17
|
receipt_item_kind?: 'shared' | 'text';
|