@pisell/private-materials 6.12.167 → 6.12.168
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 +1 -1
- package/build/lowcode/view.js +1 -1
- package/es/components/HDLKiosk/app/ScreenRenderer.js +6 -6
- package/es/components/HDLKiosk/app/workflow/barcode.js +4 -10
- package/es/components/HDLKiosk/docs/00-/346/226/207/344/273/266/345/257/274/350/210/252.md +1 -1
- package/es/components/HDLKiosk/docs/01-/346/240/270/345/277/203/350/277/220/350/241/214/346/234/272/345/210/266.md +12 -14
- package/es/components/HDLKiosk/docs/03-/344/270/232/345/212/241/346/265/201/347/250/213/344/270/216/344/272/244/344/272/222/350/247/204/345/210/231.md +2 -2
- package/es/components/HDLKiosk/docs/07-/345/220/216/347/273/255/345/267/245/344/275/234.md +1 -1
- package/es/components/HDLKiosk/kernel/README.md +1 -1
- package/es/components/HDLKiosk/kernel/workflow/actor.js +35 -5
- package/es/components/HDLKiosk/kernel/workflow/compiler.js +9 -14
- package/es/components/HDLKiosk/runtime/HDLKioskWorkflowView.js +3 -3
- package/es/components/HDLKiosk/slices/customization/Screen/index.js +3 -3
- package/es/components/HDLKiosk/slices/customization/slice.js +1 -1
- package/es/components/HDLKiosk/slices/identity/Screen/index.js +2 -2
- package/es/components/HDLKiosk/slices/identity/slice.js +1 -1
- package/es/components/HDLKiosk/slices/primaryProductPrompt/slice.js +1 -1
- package/es/components/HDLKiosk/slices/primaryProductPrompt/view.js +2 -2
- package/es/components/bigSale/components/BookingFloatingPanel/useBookingPanelController.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/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/saleDetail/Base.js +0 -1
- package/es/plus/saleDetail/components/Client/hooks/useClientSelectorProps.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/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/customerAuthGate.js +1 -1
- package/es/plus/salesSdk/utils/enrichCartLineHolderDisplay.js +1 -1
- 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 +1 -2
- package/es/pro/Login2.0/shared/types.d.ts +1 -1
- package/lib/components/HDLKiosk/app/ScreenRenderer.js +6 -6
- package/lib/components/HDLKiosk/app/workflow/barcode.js +4 -10
- package/lib/components/HDLKiosk/docs/00-/346/226/207/344/273/266/345/257/274/350/210/252.md +1 -1
- package/lib/components/HDLKiosk/docs/01-/346/240/270/345/277/203/350/277/220/350/241/214/346/234/272/345/210/266.md +12 -14
- package/lib/components/HDLKiosk/docs/03-/344/270/232/345/212/241/346/265/201/347/250/213/344/270/216/344/272/244/344/272/222/350/247/204/345/210/231.md +2 -2
- package/lib/components/HDLKiosk/docs/07-/345/220/216/347/273/255/345/267/245/344/275/234.md +1 -1
- package/lib/components/HDLKiosk/kernel/README.md +1 -1
- package/lib/components/HDLKiosk/kernel/workflow/actor.js +35 -5
- package/lib/components/HDLKiosk/kernel/workflow/compiler.js +9 -14
- package/lib/components/HDLKiosk/runtime/HDLKioskWorkflowView.js +3 -3
- package/lib/components/HDLKiosk/slices/customization/Screen/index.js +3 -3
- package/lib/components/HDLKiosk/slices/customization/slice.js +1 -1
- package/lib/components/HDLKiosk/slices/identity/Screen/index.js +2 -2
- package/lib/components/HDLKiosk/slices/identity/slice.js +1 -1
- package/lib/components/HDLKiosk/slices/primaryProductPrompt/slice.js +1 -1
- package/lib/components/HDLKiosk/slices/primaryProductPrompt/view.js +2 -2
- package/package.json +3 -3
- package/es/plus/pisellReservation/index.js +0 -17
- package/es/plus/salesSdk/index.js +0 -52
|
@@ -9,7 +9,6 @@ import { useSalesSdk } from "../../../salesSdk/hooks/useSalesSdk.js";
|
|
|
9
9
|
import { useSalesSdkCart } from "../../../salesSdk/hooks/useSalesSdkCart.js";
|
|
10
10
|
import { useSalesSdkGlobalScanActivity } from "../../../salesSdk/context/SalesSdkGlobalScanActivityContext.js";
|
|
11
11
|
import { useSalesSdkSummary } from "../../../salesSdk/hooks/useSalesSdkSummary.js";
|
|
12
|
-
import "../../../salesSdk/index.js";
|
|
13
12
|
import { getNumericAmount, getSalesHostModule, resolveSaleDetailOrderIdFromSales, resolveSaleDetailOrderIdFromSalesResult, shouldCloseDialogAfterCheckout, updateLocalOrder } from "./utils.js";
|
|
14
13
|
import { getRemotePrintActions, getWristbandList } from "../../serve.js";
|
|
15
14
|
import { deriveSaleOrderSubmitState } from "../../actions/state.js";
|
|
@@ -3,7 +3,6 @@ import { resolvePaymentMethodName, usePaymentMethodNameMap } from "../../../pise
|
|
|
3
3
|
import { useSalesSdk } from "../../../salesSdk/hooks/useSalesSdk.js";
|
|
4
4
|
import { useSalesSdkCart } from "../../../salesSdk/hooks/useSalesSdkCart.js";
|
|
5
5
|
import { useSalesSdkSummary } from "../../../salesSdk/hooks/useSalesSdkSummary.js";
|
|
6
|
-
import "../../../salesSdk/index.js";
|
|
7
6
|
import React, { memo, useMemo } from "react";
|
|
8
7
|
import { formatAmount, locales } from "@pisell/utils";
|
|
9
8
|
import Decimal from "decimal.js";
|
|
@@ -4,7 +4,6 @@ import { useSalesSdk } from "../salesSdk/hooks/useSalesSdk.js";
|
|
|
4
4
|
import { SalesSdkProvider } from "../salesSdk/context/SalesSdkProvider.js";
|
|
5
5
|
import { SalesSdkDishProvider } from "../salesSdk/context/SalesSdkDishContext.js";
|
|
6
6
|
import { SalesSdkBookingContextProvider } from "../salesSdk/context/SalesSdkBookingContext.js";
|
|
7
|
-
import "../salesSdk/index.js";
|
|
8
7
|
import Base_default from "./Base.js";
|
|
9
8
|
import React, { forwardRef, useImperativeHandle } from "react";
|
|
10
9
|
//#region src/plus/saleDetail/index.tsx
|
|
@@ -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 { _objectSpread2 } from "../../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/objectSpread2.js";
|
|
2
2
|
import useEngineContext from "../../../../hooks/useEngineContext.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 };
|
|
@@ -62,4 +62,4 @@ function normalizeCustomerAuthCustomer(value) {
|
|
|
62
62
|
return null;
|
|
63
63
|
}
|
|
64
64
|
//#endregion
|
|
65
|
-
export {
|
|
65
|
+
export { isValidOrderCustomerId, normalizeCustomerAuthCustomer, resolveCustomerAuthCurrentCustomerId, shouldPromptCustomerAuthForProduct };
|
|
@@ -71,4 +71,4 @@ function buildHolderListRequestKey(params) {
|
|
|
71
71
|
});
|
|
72
72
|
}
|
|
73
73
|
//#endregion
|
|
74
|
-
export { buildHolderListRequestKey, buildHolderListRequestParams, enrichCartBookingHolderDisplay,
|
|
74
|
+
export { buildHolderListRequestKey, buildHolderListRequestParams, enrichCartBookingHolderDisplay, resolveHolderDisplayConfig };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { AuthMethodType, EmailAuthConfig, EmailRegistrationVerification, LoginFormData, OAuthConfig, PhoneAuthConfig, RegisterFormData, UIConfig, VerificationMethod } from "./shared/types.js";
|
|
2
1
|
import { Login2, Login2Config, Login2Events, Login2Props } from "./Login2.js";
|
|
3
2
|
import { Register2, Register2Config, Register2Events, Register2Props } from "./Register2.js";
|
|
4
|
-
import { AuthModal } from "./AuthModal.js";
|
|
3
|
+
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 };
|
|
@@ -8,8 +8,8 @@ let _pisell_utils = require("@pisell/utils");
|
|
|
8
8
|
//#region src/components/HDLKiosk/app/ScreenRenderer.tsx
|
|
9
9
|
/**
|
|
10
10
|
* 文件角色:把当前 Workflow Node 交给其 Slice 自有 View 渲染。
|
|
11
|
-
* 运行机制:从应用 View 注册表按 Activity
|
|
12
|
-
*
|
|
11
|
+
* 运行机制:从应用 View 注册表按 Activity 读取同步组件;先渲染 Actor
|
|
12
|
+
* Surface 保留的 Page,再按顺序叠加 Modal Slice View。
|
|
13
13
|
* 边界:只组装 View Context,不调用 Host、不创建 ViewModel、不决定下一节点。
|
|
14
14
|
*/
|
|
15
15
|
function ScreenRenderer({ definition, snapshot, sales, send, commandState = { busy: false }, resetting, capabilities, businessMode = "prototype", scaleMinimumWeightKg = .01, renderIdentityAuth, memberAction = {
|
|
@@ -24,10 +24,10 @@ function ScreenRenderer({ definition, snapshot, sales, send, commandState = { bu
|
|
|
24
24
|
methods: [],
|
|
25
25
|
loading: false
|
|
26
26
|
} }) {
|
|
27
|
-
var
|
|
27
|
+
var _definition$nodes$sna, _commandState$error;
|
|
28
28
|
const activeNode = definition.nodes[snapshot.nodeId];
|
|
29
|
-
const
|
|
30
|
-
const
|
|
29
|
+
const pageNode = (_definition$nodes$sna = definition.nodes[snapshot.surface.pageStepId]) !== null && _definition$nodes$sna !== void 0 ? _definition$nodes$sna : activeNode;
|
|
30
|
+
const overlayNodes = snapshot.surface.overlays.map((stepId) => definition.nodes[stepId]).filter((node) => Boolean(node));
|
|
31
31
|
const bindActivity = (activityId) => (action) => {
|
|
32
32
|
send(action.kind === "intent" || action.kind === "navigation" ? require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, action), {}, { activityId }) : action);
|
|
33
33
|
};
|
|
@@ -66,7 +66,7 @@ function ScreenRenderer({ definition, snapshot, sales, send, commandState = { bu
|
|
|
66
66
|
};
|
|
67
67
|
return /* @__PURE__ */ react.default.createElement(SliceView, context);
|
|
68
68
|
};
|
|
69
|
-
return /* @__PURE__ */ react.default.createElement(react.default.Fragment, null, renderNode(
|
|
69
|
+
return /* @__PURE__ */ react.default.createElement(react.default.Fragment, null, renderNode(pageNode), overlayNodes.map((node) => /* @__PURE__ */ react.default.createElement(react.default.Fragment, { key: node.id }, renderNode(node))));
|
|
70
70
|
}
|
|
71
71
|
//#endregion
|
|
72
72
|
exports.ScreenRenderer = ScreenRenderer;
|
|
@@ -19,17 +19,11 @@ const barcodeWorkflow = require_defineApplication.defineWorkflow({
|
|
|
19
19
|
require_slice.catalogSlice,
|
|
20
20
|
{
|
|
21
21
|
slice: require_slice$4.primaryProductPromptSlice,
|
|
22
|
-
presentation: {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
},
|
|
26
|
-
visitPolicy: "reuseResolution",
|
|
27
|
-
on: { skip: "fulfillment" }
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
slice: require_slice$1.customizationSlice,
|
|
31
|
-
visitPolicy: "reuseResolution"
|
|
22
|
+
presentation: { mode: "modal" },
|
|
23
|
+
visitPolicy: "once",
|
|
24
|
+
on: { omit: "fulfillment" }
|
|
32
25
|
},
|
|
26
|
+
require_slice$1.customizationSlice,
|
|
33
27
|
require_slice$2.fulfillmentSlice,
|
|
34
28
|
require_slice$3.paymentMethodSlice,
|
|
35
29
|
{
|
|
@@ -84,7 +84,7 @@ slices/<name>/
|
|
|
84
84
|
|
|
85
85
|
`Slice` 是作者侧唯一业务能力概念:`defineSlice` 定义能力,`application.slices` 收集能力,Workflow 的 `slice` 字段引用能力;运行期再编译为 Activity Contract。
|
|
86
86
|
|
|
87
|
-
命名关系必须保持单向:Slice `id` 是业务 Activity;`screen.id` 是页面类别;`app/views.ts` 按 Activity 注册实际 UI。`catalog` 负责商品浏览,`primaryProductPrompt`
|
|
87
|
+
命名关系必须保持单向:Slice `id` 是业务 Activity;`screen.id` 是页面类别;`app/views.ts` 按 Activity 注册实际 UI。`catalog` 负责商品浏览,`primaryProductPrompt` 负责主商品询问;Prompt 以 Modal 覆盖 Actor Surface 中当前实际 Page,不引用固定背景 Step。支付派发和店员支付授权是 `paymentMethod` 页面内 Command,不创建流程 Intent。
|
|
88
88
|
|
|
89
89
|
## 5. `components/`:共享展示能力
|
|
90
90
|
|
|
@@ -175,13 +175,11 @@ Workflow 用有序 Slice 数组描述静态编排。数组顺序是默认主路
|
|
|
175
175
|
catalogSlice,
|
|
176
176
|
{
|
|
177
177
|
slice: primaryProductPromptSlice,
|
|
178
|
-
presentation: { mode: 'modal'
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
{
|
|
182
|
-
slice: customizationSlice,
|
|
183
|
-
on: { complete: 'fulfillment', skip: 'fulfillment' },
|
|
178
|
+
presentation: { mode: 'modal' },
|
|
179
|
+
visitPolicy: 'once',
|
|
180
|
+
on: { omit: 'fulfillment' },
|
|
184
181
|
},
|
|
182
|
+
customizationSlice,
|
|
185
183
|
fulfillmentSlice,
|
|
186
184
|
paymentMethodSlice,
|
|
187
185
|
{ slice: paymentCompletedSlice, end: 'success' },
|
|
@@ -206,7 +204,7 @@ Predicate 是本地可信的纯真假判断,例如 `cart.notEmpty`;Intent Pr
|
|
|
206
204
|
|
|
207
205
|
业务 Workflow 当前不启用 Slice `beforeEnter` 守卫。Actor 仍保留全局 `beforeEach` 管线,用于 `sessionExit` 等会话安全策略;它不承载 Identity、Fulfillment 等步骤的业务进入条件。
|
|
208
206
|
|
|
209
|
-
Actor 分别记录已成功向前离开的 Step、每个 Step 已提交的 `complete |
|
|
207
|
+
Actor 分别记录已成功向前离开的 Step、每个 Step 已提交的 `complete | omit` Resolution,以及用户实际访问过的页面历史。`complete` 保留页面的 Back 路径;`omit` 表示将该 Step 从当前流程路径中排除,后续遇到时沿已提交的 `omit` transition 继续,也不写入 Back 历史。Modal 不写入页面历史;历史为空时 Back 进入会话退出导航。Workflow occurrence 只有 `visitPolicy: 'always' | 'once'`:`always` 保留已 `complete` Step 的正常访问,`once` 表示任意 Resolution 提交后不再进入且不写入 Back 历史。用户通过 Back 退出一个已解决页面时,其旧 Resolution 失效。导航在执行 Activity Exit Effect 之前完成解析;被 cancel/defer 的导航不会先写 Host。
|
|
210
208
|
|
|
211
209
|
退出流程也是导航目标 `{ kind: 'sessionExit' }`。全局 `beforeEach` 对它返回 `defer({ kind: 'confirmEndOrder' })`,Actor 保存带唯一 `navigationId` 的 `pendingNavigation`。Shell 只根据该 request 展示确认;旧 ID 不能恢复后来的导航。
|
|
212
210
|
|
|
@@ -224,7 +222,7 @@ Step ID 只标识“一次出现”。Runtime 判断加载哪类数据、是否
|
|
|
224
222
|
- Screen 内有哪些不会离开节点的 Command;
|
|
225
223
|
- 使用该 Slice 的流程在支付前需要哪些业务事实。
|
|
226
224
|
|
|
227
|
-
例如 `identity.complete` / `identity.
|
|
225
|
+
例如 `identity.complete` / `identity.omit` 可在携带输入时执行 `identity.sync`,`customization.complete` 执行主商品同步,`paymentMethod.complete` 检查 Host 已确认支付成功。EFTPOS 派发和店员支付授权是 Payment 页面 Command,不作为流程 Intent。`defineKioskApplication` 从 Slice 自动生成 Activity Contract 与 Operation 注册信息;远端定义只看到 `Slice ID + 标准 Intent → target`,不能替换这些安全规则。
|
|
228
226
|
|
|
229
227
|
Slice 的业务定义与 React View 分离:Slice `id` 是 Workflow 和 Actor 使用的业务 Activity;`screen.id` 会被 Compiler 复制为 Workflow Node 的 `screenId`,供 Shell、Controller 和数据加载策略使用;`app/views.ts` 按 Activity 注册本地可信 View。各 Slice 的 `view.tsx` 仍负责 ViewModel 派生与组件装配,但不会进入 `defineSlice` 或 Workflow Definition。
|
|
230
228
|
|
|
@@ -240,15 +238,15 @@ Slice 的业务定义与 React View 分离:Slice `id` 是 Workflow 和 Actor
|
|
|
240
238
|
|
|
241
239
|
Compiler 从实际使用的 Slice 汇总 Checkout Requirement ID,但不把判断函数或 Host 字段写入 Workflow。当前 HDLKiosk 默认注册表为空;未来增加其他业务要求时仍由 [`checkoutRequirements.ts`](../app/operations/checkoutRequirements.ts) 集中判断。
|
|
242
240
|
|
|
243
|
-
`WorkflowEvent` 同时约束 Activity、Intent 和必要输入:例如 `identity.
|
|
241
|
+
`WorkflowEvent` 同时约束 Activity、Intent 和必要输入:例如 `identity.omit` 必须携带身份输入,`fulfillment.complete` 必须携带 fulfillment context patch。Back 使用不携带业务输入的 `NAVIGATE_BACK`。Barcode 入口的条码输入不是 Workflow Event,而是 Session Controller 在发布会话前交给 `barcode.consume` 的 Command 输入。Screen Command 由 `OperationInputMap` 约束 Command ID 与输入类型。
|
|
244
242
|
|
|
245
243
|
Step 可选声明 Modal 展示关系:
|
|
246
244
|
|
|
247
245
|
```ts
|
|
248
|
-
presentation: { mode: 'modal'
|
|
246
|
+
presentation: { mode: 'modal' }
|
|
249
247
|
```
|
|
250
248
|
|
|
251
|
-
这只控制渲染层级。Compiler
|
|
249
|
+
这只控制渲染层级。Actor Surface 保留进入 Modal 前实际展示的 Page,Workflow 不指定背景 Step。Compiler 会拒绝以 Modal 作为首节点或 Modal 直接进入另一个 Modal。
|
|
252
250
|
|
|
253
251
|
### 6.3 结构 Compiler 与业务 Policy 校验
|
|
254
252
|
|
|
@@ -412,7 +410,7 @@ BigSale Login2/Register2
|
|
|
412
410
|
→ 成功后进入下一节点
|
|
413
411
|
```
|
|
414
412
|
|
|
415
|
-
认证 UI 通过 HDLKiosk 应用展示层插槽注入,不进入 `defineSlice`、View 注册表或 Kernel。Slice 的 `complete` 在携带输入时执行 `identity.sync`;已登录客户的自动略过使用 `
|
|
413
|
+
认证 UI 通过 HDLKiosk 应用展示层插槽注入,不进入 `defineSlice`、View 注册表或 Kernel。Slice 的 `complete` 在携带输入时执行 `identity.sync`;已登录客户的自动略过使用 `omit` 且不携带输入,因此不会重复写客户。
|
|
416
414
|
|
|
417
415
|
Shell 登录不是 Workflow 跳转,而是 session-level 插入 Operation:
|
|
418
416
|
|
|
@@ -429,7 +427,7 @@ Shell Login
|
|
|
429
427
|
|
|
430
428
|
### 8.4 Screen Data Controller
|
|
431
429
|
|
|
432
|
-
只在相关节点加载 Catalog、Weighted Product 或 Customization DTO;使用 AbortController 防止离开页面后的结果写回。Modal
|
|
430
|
+
只在相关节点加载 Catalog、Weighted Product 或 Customization DTO;使用 AbortController 防止离开页面后的结果写回。Modal 激活时,Screen Data Controller 继续使用 Actor Surface 中保留的 `pageStepId`,底层 Page 保持挂载和原数据,不按 Modal Activity 清空或重新加载。
|
|
433
431
|
|
|
434
432
|
### 8.5 返回 Entry 能力接口
|
|
435
433
|
|
|
@@ -530,7 +528,7 @@ Workflow View 负责控制器组合、自动推进和会话级 Dialog;Renderer
|
|
|
530
528
|
|
|
531
529
|
OS 加购过程中的内部弹窗和业务判断不属于 HDLKiosk Activity、Host Contract 或 Checkout Requirement。HDLKiosk 不读写相关业务事实,只根据主商品加购操作的最终结果决定是否跳转。
|
|
532
530
|
|
|
533
|
-
Barcode 的主商品询问是独立 `primaryProductPrompt` Modal Slice:Yes 发出 `complete`,No 发出 `
|
|
531
|
+
Barcode 的主商品询问是独立 `primaryProductPrompt` Modal Slice:Yes 发出 `complete`,No 发出 `omit`。Prompt 声明 `visitPolicy: 'once'`,因此任一选择成功提交后不再询问;关闭 Modal 只执行 Back,没有 Resolution,下次仍会展示。Customization 使用缺省 `always`:`complete` 后保留 Back 编辑能力;`omit` 会先通过本地 Exit Effect 删除已有主商品,再将该 Step 从后续路径和 Back 历史中排除。
|
|
534
532
|
|
|
535
533
|
## 11. 四条端到端调用链
|
|
536
534
|
|
|
@@ -26,7 +26,7 @@ Entry → Identity → Customization → Catalog → Fulfillment
|
|
|
26
26
|
→ Payment Method / Payment Completed → Entry
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
-
- Quick 的 Identity occurrence 显式声明 `visitPolicy: 'once'`。登录或
|
|
29
|
+
- Quick 的 Identity occurrence 显式声明 `visitPolicy: 'once'`。登录或 Omit 成功后,该 Step 在本会话不再进入,也不写入 Back 页面历史。当没有更早的已访问页面时,Back 的导航目标为 `sessionExit`;全局会话策略返回 `defer(confirmEndOrder)` 并打开结束订单确认。确认后返回 Entry,取消则留在当前页。
|
|
30
30
|
- Fulfillment 统一位于 Payment 之前确认堂食/外带。
|
|
31
31
|
- Customization 只在稳定正净重且必选 options 完整时启用 Next。
|
|
32
32
|
- “I don't need Malatang” 直接跳过主商品并进入 Catalog;如果正在编辑已确认主商品,则先移除该行。
|
|
@@ -67,7 +67,7 @@ Entry 消费第一个有效重量边沿后启动以 Fulfillment 为首节点的
|
|
|
67
67
|
|
|
68
68
|
## 6. 会员中途插入
|
|
69
69
|
|
|
70
|
-
Identity 的
|
|
70
|
+
Identity 的 Omit 只表示当前以 Guest 继续。Shell 可在本地策略允许的页面执行 `identity.sync`。登录、Customer 写入、重报价和 Projection 验证成功后仍留在原节点;`partial`/`unknown` 不得带着未确认价格继续。
|
|
71
71
|
|
|
72
72
|
## 7. UI 和修改规则
|
|
73
73
|
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
### P1-1 商品和 Catalog
|
|
36
36
|
|
|
37
37
|
- 将模板内临时固定商品 ID 改为租户/门店正式称重商品配置;商品结构已经切换为 OS `queryProducts`,不得恢复本地 fallback;
|
|
38
|
-
- 确认 Quick
|
|
38
|
+
- 确认 Quick 是否允许排除称重主商品;若不允许,从 `customization` Activity Contract/Workflow 中移除 `omit` Intent;
|
|
39
39
|
- 大目录分页/虚拟滚动与分类切换性能;分类、子分类和本地搜索首版已完成;
|
|
40
40
|
- 缺货、下架、菜单不可用、价格变化;
|
|
41
41
|
- Barcode 细分 added/requiresSelection/notFound/cancelled;
|
|
@@ -50,7 +50,7 @@ function createWorkflowActor({ definition, context, sessionEpoch, transitionRunn
|
|
|
50
50
|
visited.add(stepId);
|
|
51
51
|
const node = definition.nodes[stepId];
|
|
52
52
|
const storedResolution = stepResolutions.get(stepId);
|
|
53
|
-
if (!node || !storedResolution ||
|
|
53
|
+
if (!node || !storedResolution || storedResolution !== "omit" && node.visitPolicy !== "once") return stepId;
|
|
54
54
|
const transition = node.on[storedResolution];
|
|
55
55
|
if (!transition) return stepId;
|
|
56
56
|
stepId = transition.target;
|
|
@@ -116,7 +116,16 @@ function createWorkflowActor({ definition, context, sessionEpoch, transitionRunn
|
|
|
116
116
|
const direction = !fromNodeId ? "initial" : delta < 0 ? "backward" : "forward";
|
|
117
117
|
for (let candidateIndex = targetIndex; candidateIndex >= 0 && candidateIndex < definition.stepOrder.length; candidateIndex += delta) {
|
|
118
118
|
const candidateStepId = definition.stepOrder[candidateIndex];
|
|
119
|
-
|
|
119
|
+
const candidateNode = definition.nodes[candidateStepId];
|
|
120
|
+
if (candidateNode.presentation.mode === "modal") {
|
|
121
|
+
const fromNode = fromNodeId ? definition.nodes[fromNodeId] : void 0;
|
|
122
|
+
if (!fromNode || fromNode.presentation.mode === "modal") return {
|
|
123
|
+
type: "block",
|
|
124
|
+
error: createWorkflowError(fromNode ? "workflowNestedModalUnsupported" : "workflowModalRequiresPage", "staff")
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
const candidateResolution = stepResolutions.get(candidateStepId);
|
|
128
|
+
if (candidateResolution === "omit" || candidateNode.visitPolicy === "once" && candidateResolution) continue;
|
|
120
129
|
const decision = beforeEach({
|
|
121
130
|
navigationId,
|
|
122
131
|
intentId,
|
|
@@ -176,6 +185,10 @@ function createWorkflowActor({ definition, context, sessionEpoch, transitionRunn
|
|
|
176
185
|
context: Object.freeze(require_objectSpread2._objectSpread2({}, context)),
|
|
177
186
|
completedStepIds: Object.freeze([]),
|
|
178
187
|
stepResolutions: Object.freeze({}),
|
|
188
|
+
surface: Object.freeze({
|
|
189
|
+
pageStepId: startingNodeId,
|
|
190
|
+
overlays: Object.freeze([])
|
|
191
|
+
}),
|
|
179
192
|
navigationHistory: Object.freeze([]),
|
|
180
193
|
lastError: (_ref2 = initialError !== null && initialError !== void 0 ? initialError : initialResolutionError) !== null && _ref2 !== void 0 ? _ref2 : startingNode.end === "blocked" ? createWorkflowError("workflowEndedBlocked", "staff") : void 0
|
|
181
194
|
});
|
|
@@ -184,6 +197,10 @@ function createWorkflowActor({ definition, context, sessionEpoch, transitionRunn
|
|
|
184
197
|
context: Object.freeze(require_objectSpread2._objectSpread2({}, next.context)),
|
|
185
198
|
completedStepIds: Object.freeze([...next.completedStepIds]),
|
|
186
199
|
stepResolutions: Object.freeze(require_objectSpread2._objectSpread2({}, next.stepResolutions)),
|
|
200
|
+
surface: Object.freeze({
|
|
201
|
+
pageStepId: next.surface.pageStepId,
|
|
202
|
+
overlays: Object.freeze([...next.surface.overlays])
|
|
203
|
+
}),
|
|
187
204
|
navigationHistory: Object.freeze([...next.navigationHistory]),
|
|
188
205
|
pendingNavigation: next.pendingNavigation ? Object.freeze(require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, next.pendingNavigation), {}, {
|
|
189
206
|
to: Object.freeze(require_objectSpread2._objectSpread2({}, next.pendingNavigation.to)),
|
|
@@ -197,12 +214,20 @@ function createWorkflowActor({ definition, context, sessionEpoch, transitionRunn
|
|
|
197
214
|
const commit = function() {
|
|
198
215
|
var _ref3 = require_asyncToGenerator._asyncToGenerator(function* (fromNodeId, nodeId, event, nextContext, blocked, lastError, confirmedCheckout) {
|
|
199
216
|
const node = definition.nodes[nodeId];
|
|
217
|
+
const surface = node.presentation.mode === "modal" ? Object.freeze({
|
|
218
|
+
pageStepId: snapshot.surface.pageStepId,
|
|
219
|
+
overlays: Object.freeze([nodeId])
|
|
220
|
+
}) : Object.freeze({
|
|
221
|
+
pageStepId: nodeId,
|
|
222
|
+
overlays: Object.freeze([])
|
|
223
|
+
});
|
|
200
224
|
publish(require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, snapshot), {}, {
|
|
201
225
|
nodeId,
|
|
202
226
|
status: blocked || node.end === "blocked" ? "blocked" : node.end === "success" ? "finished" : "idle",
|
|
203
227
|
context: nextContext,
|
|
204
228
|
completedStepIds: Object.freeze([...completedStepIds]),
|
|
205
229
|
stepResolutions: Object.freeze(readStepResolutions()),
|
|
230
|
+
surface,
|
|
206
231
|
navigationHistory: Object.freeze([...navigationHistory]),
|
|
207
232
|
pendingNavigation: void 0,
|
|
208
233
|
confirmedCheckout: confirmedCheckout !== null && confirmedCheckout !== void 0 ? confirmedCheckout : snapshot.confirmedCheckout,
|
|
@@ -357,7 +382,7 @@ function createWorkflowActor({ definition, context, sessionEpoch, transitionRunn
|
|
|
357
382
|
if (event.intent === "complete" && node.presentation.mode === "page" && movesForward && node.visitPolicy !== "once") {
|
|
358
383
|
navigationHistory = navigationHistory.filter((stepId) => stepId !== fromNodeId);
|
|
359
384
|
navigationHistory.push(fromNodeId);
|
|
360
|
-
} else if (event.intent === "
|
|
385
|
+
} else if (event.intent === "omit") navigationHistory = navigationHistory.filter((stepId) => stepId !== fromNodeId);
|
|
361
386
|
yield commit(fromNodeId, resolvedTarget, event, nextContext, false, void 0, result.confirmedCheckout);
|
|
362
387
|
return;
|
|
363
388
|
}
|
|
@@ -411,8 +436,13 @@ function createWorkflowActor({ definition, context, sessionEpoch, transitionRunn
|
|
|
411
436
|
if (resolution.type === "step") {
|
|
412
437
|
const fromIndex = definition.stepOrder.indexOf(fromNodeId);
|
|
413
438
|
if (definition.stepOrder.indexOf(resolution.stepId) < fromIndex) stepResolutions.delete(fromNodeId);
|
|
414
|
-
|
|
415
|
-
|
|
439
|
+
if (definition.nodes[resolution.stepId].presentation.mode === "modal" && definition.nodes[fromNodeId].presentation.mode === "page") {
|
|
440
|
+
navigationHistory = navigationHistory.filter((stepId) => stepId !== fromNodeId);
|
|
441
|
+
navigationHistory.push(fromNodeId);
|
|
442
|
+
} else {
|
|
443
|
+
const historyIndex = navigationHistory.lastIndexOf(resolution.stepId);
|
|
444
|
+
if (historyIndex >= 0) navigationHistory = navigationHistory.slice(0, historyIndex);
|
|
445
|
+
}
|
|
416
446
|
yield commit(fromNodeId, resolution.stepId, {
|
|
417
447
|
intentId,
|
|
418
448
|
intent: "directNavigation"
|
|
@@ -127,7 +127,7 @@ function compileWorkflowStructure(input, options) {
|
|
|
127
127
|
"screen"
|
|
128
128
|
], stepPath, issues);
|
|
129
129
|
if (rawStep.screen !== void 0) addIssue(issues, "step.screen.forbidden", `${stepPath}.screen`, "Screen is resolved by the local Activity Contract");
|
|
130
|
-
if (rawStep.visitPolicy !== void 0 && rawStep.visitPolicy !== "always" && rawStep.visitPolicy !== "
|
|
130
|
+
if (rawStep.visitPolicy !== void 0 && rawStep.visitPolicy !== "always" && rawStep.visitPolicy !== "once") addIssue(issues, "step.visitPolicy.invalid", `${stepPath}.visitPolicy`, "Step visitPolicy must be always or once");
|
|
131
131
|
const activityValue = rawStep.activity;
|
|
132
132
|
if (typeof activityValue !== "string" || !activities.has(activityValue)) addIssue(issues, "activity.unknown", `${stepPath}.activity`, `Unknown activity: ${String(activityValue)}`);
|
|
133
133
|
const fallbackActivityId = activities.ids[0];
|
|
@@ -161,15 +161,11 @@ function compileWorkflowStructure(input, options) {
|
|
|
161
161
|
const rawPresentation = rawStep.presentation;
|
|
162
162
|
let presentation = { mode: "page" };
|
|
163
163
|
if (rawPresentation !== void 0) {
|
|
164
|
-
if (isRecord(rawPresentation)) rejectUnknownFields(rawPresentation, ["mode"
|
|
164
|
+
if (isRecord(rawPresentation)) rejectUnknownFields(rawPresentation, ["mode"], `${stepPath}.presentation`, issues);
|
|
165
165
|
if (!isRecord(rawPresentation)) addIssue(issues, "step.presentation.invalid", `${stepPath}.presentation`, "Step presentation must be an object");
|
|
166
166
|
else if (rawPresentation.mode !== "page" && rawPresentation.mode !== "modal") addIssue(issues, "step.presentation.mode.invalid", `${stepPath}.presentation.mode`, "Presentation mode must be page or modal");
|
|
167
167
|
else if (!activity.allowedPresentations.includes(rawPresentation.mode)) addIssue(issues, "activity.presentation.unsupported", `${stepPath}.presentation.mode`, `Activity ${activity.id} does not support ${rawPresentation.mode}`);
|
|
168
|
-
else if (rawPresentation.mode === "modal")
|
|
169
|
-
else presentation = {
|
|
170
|
-
mode: "modal",
|
|
171
|
-
base: rawPresentation.base.trim()
|
|
172
|
-
};
|
|
168
|
+
else if (rawPresentation.mode === "modal") presentation = { mode: "modal" };
|
|
173
169
|
}
|
|
174
170
|
if (rawStep.readiness !== void 0 && rawStep.readiness !== "implemented" && rawStep.readiness !== "placeholder") addIssue(issues, "step.readiness.invalid", `${stepPath}.readiness`, "Step readiness must be implemented or placeholder");
|
|
175
171
|
if (rawStep.end !== void 0 && rawStep.end !== "success" && rawStep.end !== "blocked") addIssue(issues, "step.end.invalid", `${stepPath}.end`, "Step end must be success or blocked");
|
|
@@ -235,7 +231,7 @@ function compileWorkflowStructure(input, options) {
|
|
|
235
231
|
screenId: activity.screenId,
|
|
236
232
|
presentation,
|
|
237
233
|
readiness: rawStep.readiness === "placeholder" ? "placeholder" : void 0,
|
|
238
|
-
visitPolicy: rawStep.visitPolicy === "
|
|
234
|
+
visitPolicy: rawStep.visitPolicy === "once" ? "once" : "always",
|
|
239
235
|
guardPhases: Object.freeze([...guardPhases]),
|
|
240
236
|
on: Object.freeze(transitions),
|
|
241
237
|
end: rawStep.end === "success" || rawStep.end === "blocked" ? rawStep.end : void 0
|
|
@@ -246,13 +242,12 @@ function compileWorkflowStructure(input, options) {
|
|
|
246
242
|
Object.entries(nodes).forEach(([stepId, node]) => {
|
|
247
243
|
var _stepIndex$get;
|
|
248
244
|
const path = `steps.${(_stepIndex$get = stepIndex.get(stepId)) !== null && _stepIndex$get !== void 0 ? _stepIndex$get : 0}`;
|
|
249
|
-
if (node.presentation.mode === "modal") {
|
|
250
|
-
const base = nodes[node.presentation.base];
|
|
251
|
-
if (!base) addIssue(issues, "step.presentation.base.missing", `${path}.presentation.base`, `Modal base step does not exist: ${node.presentation.base}`);
|
|
252
|
-
else if (node.presentation.base === stepId) addIssue(issues, "step.presentation.base.self", `${path}.presentation.base`, "Modal step cannot use itself as its base");
|
|
253
|
-
else if (base.presentation.mode === "modal") addIssue(issues, "step.presentation.base.modal", `${path}.presentation.base`, "Modal step cannot use another modal step as its base");
|
|
254
|
-
}
|
|
245
|
+
if (node.presentation.mode === "modal" && stepId === stepIds[0]) addIssue(issues, "workflow.initial.modal", `${path}.presentation.mode`, "Workflow initial step must provide a page surface");
|
|
255
246
|
const transitions = Object.entries(node.on).filter((entry) => entry[1]);
|
|
247
|
+
transitions.forEach(([intent, transition]) => {
|
|
248
|
+
var _nodes$transition$tar;
|
|
249
|
+
if (node.presentation.mode === "modal" && transition && ((_nodes$transition$tar = nodes[transition.target]) === null || _nodes$transition$tar === void 0 ? void 0 : _nodes$transition$tar.presentation.mode) === "modal") addIssue(issues, "transition.modal.nested", `${path}.on.${intent}`, "A modal step cannot navigate directly to another modal step");
|
|
250
|
+
});
|
|
256
251
|
if (!node.end && transitions.length === 0) addIssue(issues, "step.deadEnd", path, "A step without outgoing transitions must declare its end state");
|
|
257
252
|
if (node.end && transitions.length > 0) addIssue(issues, "step.end.hasTransitions", path, "An end step cannot expose outgoing transitions");
|
|
258
253
|
transitions.forEach(([intent, transition]) => {
|
|
@@ -49,7 +49,7 @@ function HDLKioskWorkflowCartOverlay({ model, busy, memberAction, send, renderCa
|
|
|
49
49
|
* Host、Workflow Actor 或会话计时器。
|
|
50
50
|
*/
|
|
51
51
|
function HDLKioskWorkflowView({ session, host, sales, config, isActive, renderIdentityAuth, renderCartContent, cartOverlayActions, returnToEntry }) {
|
|
52
|
-
var _snapshot$pendingNavi, _snapshot$pendingNavi2,
|
|
52
|
+
var _snapshot$pendingNavi, _snapshot$pendingNavi2, _session$definition$n2, _customer$error, _activeNode$presentat;
|
|
53
53
|
const snapshot = require_useWorkflowSnapshot.useWorkflowSnapshot(session.actor);
|
|
54
54
|
const sequence = (0, react.useRef)(0);
|
|
55
55
|
const resetInFlight = (0, react.useRef)(false);
|
|
@@ -68,7 +68,7 @@ function HDLKioskWorkflowView({ session, host, sales, config, isActive, renderId
|
|
|
68
68
|
var _session$definition$n;
|
|
69
69
|
return ((_session$definition$n = session.definition.nodes[stepId]) === null || _session$definition$n === void 0 ? void 0 : _session$definition$n.activity) === "customization";
|
|
70
70
|
});
|
|
71
|
-
const screenDataNode = (
|
|
71
|
+
const screenDataNode = (_session$definition$n2 = session.definition.nodes[snapshot.surface.pageStepId]) !== null && _session$definition$n2 !== void 0 ? _session$definition$n2 : activeNode;
|
|
72
72
|
const paymentSafeForReset = sales.payment.status === "idle" || sales.payment.status === "failed";
|
|
73
73
|
const resetSession = (0, react.useCallback)(require_asyncToGenerator._asyncToGenerator(function* () {
|
|
74
74
|
if (resetInFlight.current) return;
|
|
@@ -246,7 +246,7 @@ function HDLKioskWorkflowView({ session, host, sales, config, isActive, renderId
|
|
|
246
246
|
memberAction,
|
|
247
247
|
variant: currentScreenId === "identity" ? "identityGate" : "default"
|
|
248
248
|
}, /* @__PURE__ */ react.default.createElement(require_index$5.HDLKioskBottomBarHost, {
|
|
249
|
-
mode: ((_activeNode$
|
|
249
|
+
mode: ((_activeNode$presentat = activeNode.presentation) === null || _activeNode$presentat === void 0 ? void 0 : _activeNode$presentat.mode) === "modal" || endOrderConfirmationOpen || memberLoginOpen ? "masked" : "visible",
|
|
250
250
|
fallback: endOrderBottomBar,
|
|
251
251
|
cartOverlayActions,
|
|
252
252
|
promotionsAvailable: Boolean(renderCartContent)
|
|
@@ -244,11 +244,11 @@ function CustomizationScreen({ product, loading, errorReference, errorMessage, b
|
|
|
244
244
|
send,
|
|
245
245
|
syncing
|
|
246
246
|
]);
|
|
247
|
-
const
|
|
247
|
+
const omitPrimaryProduct = (0, react.useCallback)(() => {
|
|
248
248
|
var _orderBar$primaryLine10;
|
|
249
249
|
send({
|
|
250
250
|
kind: "intent",
|
|
251
|
-
intent: "
|
|
251
|
+
intent: "omit",
|
|
252
252
|
operationInput: { lineId: (_orderBar$primaryLine10 = orderBar.primaryLine) === null || _orderBar$primaryLine10 === void 0 ? void 0 : _orderBar$primaryLine10.lineId }
|
|
253
253
|
});
|
|
254
254
|
}, [(_orderBar$primaryLine11 = orderBar.primaryLine) === null || _orderBar$primaryLine11 === void 0 ? void 0 : _orderBar$primaryLine11.lineId, send]);
|
|
@@ -335,7 +335,7 @@ function CustomizationScreen({ product, loading, errorReference, errorMessage, b
|
|
|
335
335
|
type: "button",
|
|
336
336
|
className: "hdl-customization-skip",
|
|
337
337
|
disabled: busy || syncing,
|
|
338
|
-
onClick:
|
|
338
|
+
onClick: omitPrimaryProduct
|
|
339
339
|
}, _pisell_utils.locales.getText("pisell2.hdl-kiosk.customization-skip")));
|
|
340
340
|
}
|
|
341
341
|
//#endregion
|
|
@@ -9,7 +9,7 @@ const customizationSlice = require_defineSlice.defineSlice({
|
|
|
9
9
|
commands: { removePrimaryProduct: require_cart.cartRemoveLineOperation },
|
|
10
10
|
intents: {
|
|
11
11
|
complete: require_defineSlice.effect(require_operation.productSyncPrimaryWeightedProductOperation, { navigate: "next" }),
|
|
12
|
-
|
|
12
|
+
omit: require_defineSlice.effect(require_operation.productRemovePrimaryProductOperation, { navigate: "next" })
|
|
13
13
|
}
|
|
14
14
|
});
|
|
15
15
|
//#endregion
|
|
@@ -10,7 +10,7 @@ const QR_CELLS = Object.freeze(Array.from({ length: 49 }, (_, index) => index *
|
|
|
10
10
|
* Quick Order 的前置会员提示页。
|
|
11
11
|
*
|
|
12
12
|
* 宿主可注入认证 UI;未注入时保留 QR / SMS 视觉 fallback。Skip 继续产生
|
|
13
|
-
* identity.
|
|
13
|
+
* identity.omit Intent,由本地 Exit Policy 同步访客后进入下一步。
|
|
14
14
|
*/
|
|
15
15
|
function IdentityScreen({ model, orderBar, send, renderIdentityAuth }) {
|
|
16
16
|
const [authBusy, setAuthBusy] = (0, react.useState)(false);
|
|
@@ -82,7 +82,7 @@ function IdentityScreen({ model, orderBar, send, renderIdentityAuth }) {
|
|
|
82
82
|
disabled: busy,
|
|
83
83
|
onClick: () => send({
|
|
84
84
|
kind: "intent",
|
|
85
|
-
intent: "
|
|
85
|
+
intent: "omit",
|
|
86
86
|
operationInput: {}
|
|
87
87
|
})
|
|
88
88
|
}, _pisell_utils.locales.getText("pisell2.hdl-kiosk.skip")), model.errorReference ? /* @__PURE__ */ react.default.createElement("div", {
|
|
@@ -7,7 +7,7 @@ const identitySlice = require_defineSlice.defineSlice({
|
|
|
7
7
|
screen: { id: "identity" },
|
|
8
8
|
intents: {
|
|
9
9
|
complete: require_defineSlice.effect(require_operation.identitySyncOperation, { navigate: "next" }),
|
|
10
|
-
|
|
10
|
+
omit: require_defineSlice.effect(require_operation.identitySyncOperation, { navigate: "next" })
|
|
11
11
|
}
|
|
12
12
|
});
|
|
13
13
|
//#endregion
|
|
@@ -7,7 +7,7 @@ const primaryProductPromptSlice = require_defineSlice.defineSlice({
|
|
|
7
7
|
presentation: "modal",
|
|
8
8
|
intents: {
|
|
9
9
|
complete: require_defineSlice.intentPrecondition("cart.notEmpty", { navigate: "next" }),
|
|
10
|
-
|
|
10
|
+
omit: require_defineSlice.intentPrecondition("cart.notEmpty")
|
|
11
11
|
}
|
|
12
12
|
});
|
|
13
13
|
//#endregion
|
|
@@ -3,13 +3,13 @@ const require_index = require("../catalog/PrimaryProductPromptDialog/index.js");
|
|
|
3
3
|
let react = require("react");
|
|
4
4
|
react = require_runtime.__toESM(react);
|
|
5
5
|
//#region src/components/HDLKiosk/slices/primaryProductPrompt/view.tsx
|
|
6
|
-
/** 主商品询问展示:将用户选择转换为标准
|
|
6
|
+
/** 主商品询问展示:将用户选择转换为标准 complete/omit 结果。 */
|
|
7
7
|
function PrimaryProductPromptView({ busy, send }) {
|
|
8
8
|
return /* @__PURE__ */ react.default.createElement(require_index.PrimaryProductPromptDialog, {
|
|
9
9
|
busy,
|
|
10
10
|
onDecline: () => send({
|
|
11
11
|
kind: "intent",
|
|
12
|
-
intent: "
|
|
12
|
+
intent: "omit"
|
|
13
13
|
}),
|
|
14
14
|
onAccept: () => send({
|
|
15
15
|
kind: "intent",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pisell/private-materials",
|
|
3
|
-
"version": "6.12.
|
|
3
|
+
"version": "6.12.168",
|
|
4
4
|
"main": "./lib/index.js",
|
|
5
5
|
"module": "./es/index.js",
|
|
6
6
|
"types": "./lib/index.d.ts",
|
|
@@ -70,10 +70,10 @@
|
|
|
70
70
|
"styled-components": "^6.0.0-rc.3",
|
|
71
71
|
"use-sync-external-store": "^1.6.0",
|
|
72
72
|
"@pisell/pi-payment-sdk": "0.0.3",
|
|
73
|
+
"@pisell/date-picker": "3.0.10",
|
|
73
74
|
"@pisell/utils": "3.0.4",
|
|
74
75
|
"@pisell/icon": "0.0.11",
|
|
75
|
-
"@pisell/materials": "6.12.50"
|
|
76
|
-
"@pisell/date-picker": "3.0.10"
|
|
76
|
+
"@pisell/materials": "6.12.50"
|
|
77
77
|
},
|
|
78
78
|
"peerDependencies": {
|
|
79
79
|
"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 {};
|