@pisell/pisellos 2.3.158 → 2.3.159

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.
@@ -33,6 +33,7 @@ import { ResourceModule } from "./modules/resource";
33
33
  import { FloorPlanModule } from "./modules/floor-plan";
34
34
  import { FloorPlanHooks } from "./modules/floor-plan/types";
35
35
  import { PaymentServerModule } from "./modules/payment";
36
+ import { FormModule } from "./modules/form";
36
37
  import { extractScheduleIdsFromMenus, extractTimePointsFromSchedules } from "./utils/schedule";
37
38
  import { sortTimePoints } from "./utils/time";
38
39
  import { ProductsHooks } from "./modules/products/types";
@@ -186,6 +187,16 @@ var Server = /*#__PURE__*/function () {
186
187
  payMethods: []
187
188
  }
188
189
  },
190
+ form: {
191
+ name: 'form',
192
+ moduleClass: FormModule,
193
+ moduleName: 'server_form',
194
+ version: '1.0.0',
195
+ defaultStore: {
196
+ list: [],
197
+ map: new Map()
198
+ }
199
+ },
189
200
  resource: {
190
201
  name: 'resource',
191
202
  moduleClass: ResourceModule,
@@ -0,0 +1,19 @@
1
+ import { BaseModule } from '../../../modules/BaseModule';
2
+ import type { Module, ModuleOptions, PisellCore } from '../../../types';
3
+ /**
4
+ * 表单定义缓存。数据源负责 HTTP 与 Ably 订阅;本模块仅向 OS 消费方公开只读标题映射。
5
+ */
6
+ export declare class FormModule extends BaseModule implements Module {
7
+ protected defaultName: string;
8
+ protected defaultVersion: string;
9
+ private store;
10
+ private dataSource;
11
+ private refreshTimer?;
12
+ initialize(core: PisellCore, options?: ModuleOptions): Promise<void>;
13
+ preload(): Promise<void>;
14
+ getTitleMap(): Record<string, Record<string, string> | string>;
15
+ private scheduleRefresh;
16
+ private refresh;
17
+ destroy(): Promise<void>;
18
+ }
19
+ export default FormModule;
@@ -0,0 +1,205 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
3
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
4
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
5
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
6
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
7
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
8
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
9
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
10
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
11
+ function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
12
+ function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
13
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
14
+ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
15
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
16
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
17
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
18
+ import { BaseModule } from "../../../modules/BaseModule";
19
+ import { FormHooks } from "./types";
20
+ var FORM_LIST_URL = '/shop/form/simple/list';
21
+
22
+ /**
23
+ * 表单定义缓存。数据源负责 HTTP 与 Ably 订阅;本模块仅向 OS 消费方公开只读标题映射。
24
+ */
25
+ export var FormModule = /*#__PURE__*/function (_BaseModule) {
26
+ _inherits(FormModule, _BaseModule);
27
+ var _super = _createSuper(FormModule);
28
+ function FormModule() {
29
+ var _this;
30
+ _classCallCheck(this, FormModule);
31
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
32
+ args[_key] = arguments[_key];
33
+ }
34
+ _this = _super.call.apply(_super, [this].concat(args));
35
+ _defineProperty(_assertThisInitialized(_this), "defaultName", 'form');
36
+ _defineProperty(_assertThisInitialized(_this), "defaultVersion", '1.0.0');
37
+ _defineProperty(_assertThisInitialized(_this), "store", void 0);
38
+ _defineProperty(_assertThisInitialized(_this), "dataSource", void 0);
39
+ _defineProperty(_assertThisInitialized(_this), "refreshTimer", void 0);
40
+ return _this;
41
+ }
42
+ _createClass(FormModule, [{
43
+ key: "initialize",
44
+ value: function () {
45
+ var _initialize = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(core, options) {
46
+ var _serverOptions,
47
+ _this2 = this;
48
+ var initialStore, FormDataSource;
49
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
50
+ while (1) switch (_context.prev = _context.next) {
51
+ case 0:
52
+ this.core = core;
53
+ initialStore = options === null || options === void 0 ? void 0 : options.store;
54
+ this.store = {
55
+ list: Array.isArray(initialStore === null || initialStore === void 0 ? void 0 : initialStore.list) ? initialStore.list : [],
56
+ map: (initialStore === null || initialStore === void 0 ? void 0 : initialStore.map) instanceof Map ? initialStore.map : new Map()
57
+ };
58
+ FormDataSource = (_serverOptions = this.core.serverOptions) === null || _serverOptions === void 0 || (_serverOptions = _serverOptions.All_DATA_SOURCES) === null || _serverOptions === void 0 ? void 0 : _serverOptions.FormDataSource;
59
+ this.dataSource = FormDataSource ? new FormDataSource() : undefined;
60
+ if (!this.dataSource) {
61
+ _context.next = 8;
62
+ break;
63
+ }
64
+ _context.next = 8;
65
+ return this.dataSource.run({
66
+ pubsub: {
67
+ callback: function callback() {
68
+ return _this2.scheduleRefresh();
69
+ }
70
+ }
71
+ });
72
+ case 8:
73
+ case "end":
74
+ return _context.stop();
75
+ }
76
+ }, _callee, this);
77
+ }));
78
+ function initialize(_x, _x2) {
79
+ return _initialize.apply(this, arguments);
80
+ }
81
+ return initialize;
82
+ }()
83
+ }, {
84
+ key: "preload",
85
+ value: function () {
86
+ var _preload = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
87
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
88
+ while (1) switch (_context2.prev = _context2.next) {
89
+ case 0:
90
+ _context2.next = 2;
91
+ return this.refresh();
92
+ case 2:
93
+ case "end":
94
+ return _context2.stop();
95
+ }
96
+ }, _callee2, this);
97
+ }));
98
+ function preload() {
99
+ return _preload.apply(this, arguments);
100
+ }
101
+ return preload;
102
+ }()
103
+ }, {
104
+ key: "getTitleMap",
105
+ value: function getTitleMap() {
106
+ return this.store.list.reduce(function (result, item) {
107
+ if (item.id !== undefined && item.id !== null && item.title) result[String(item.id)] = item.title;
108
+ return result;
109
+ }, {});
110
+ }
111
+ }, {
112
+ key: "scheduleRefresh",
113
+ value: function scheduleRefresh() {
114
+ var _this3 = this;
115
+ if (this.refreshTimer) clearTimeout(this.refreshTimer);
116
+ this.refreshTimer = setTimeout(function () {
117
+ return void _this3.refresh();
118
+ }, 300);
119
+ }
120
+ }, {
121
+ key: "refresh",
122
+ value: function () {
123
+ var _refresh = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
124
+ var _getPlugin, response, data, list;
125
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
126
+ while (1) switch (_context3.prev = _context3.next) {
127
+ case 0:
128
+ _context3.prev = 0;
129
+ if (!this.dataSource) {
130
+ _context3.next = 7;
131
+ break;
132
+ }
133
+ _context3.next = 4;
134
+ return this.dataSource.run({
135
+ http: {
136
+ url: FORM_LIST_URL
137
+ }
138
+ });
139
+ case 4:
140
+ _context3.t0 = _context3.sent;
141
+ _context3.next = 10;
142
+ break;
143
+ case 7:
144
+ _context3.next = 9;
145
+ return (_getPlugin = this.core.getPlugin('request')) === null || _getPlugin === void 0 ? void 0 : _getPlugin.get(FORM_LIST_URL);
146
+ case 9:
147
+ _context3.t0 = _context3.sent;
148
+ case 10:
149
+ response = _context3.t0;
150
+ data = response === null || response === void 0 ? void 0 : response.data;
151
+ list = Array.isArray(data) ? data : (data === null || data === void 0 ? void 0 : data.list) || (data === null || data === void 0 ? void 0 : data.data) || [];
152
+ if (Array.isArray(list)) {
153
+ _context3.next = 15;
154
+ break;
155
+ }
156
+ return _context3.abrupt("return");
157
+ case 15:
158
+ this.store.list = list;
159
+ this.store.map = new Map(this.store.list.map(function (item) {
160
+ return [String(item.id), item];
161
+ }));
162
+ _context3.next = 19;
163
+ return this.core.effects.emit(FormHooks.onChanged, this.getTitleMap());
164
+ case 19:
165
+ _context3.next = 23;
166
+ break;
167
+ case 21:
168
+ _context3.prev = 21;
169
+ _context3.t1 = _context3["catch"](0);
170
+ case 23:
171
+ case "end":
172
+ return _context3.stop();
173
+ }
174
+ }, _callee3, this, [[0, 21]]);
175
+ }));
176
+ function refresh() {
177
+ return _refresh.apply(this, arguments);
178
+ }
179
+ return refresh;
180
+ }()
181
+ }, {
182
+ key: "destroy",
183
+ value: function () {
184
+ var _destroy = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
185
+ var _this$dataSource, _this$dataSource$dest;
186
+ return _regeneratorRuntime().wrap(function _callee4$(_context4) {
187
+ while (1) switch (_context4.prev = _context4.next) {
188
+ case 0:
189
+ if (this.refreshTimer) clearTimeout(this.refreshTimer);
190
+ (_this$dataSource = this.dataSource) === null || _this$dataSource === void 0 || (_this$dataSource$dest = _this$dataSource.destroy) === null || _this$dataSource$dest === void 0 || _this$dataSource$dest.call(_this$dataSource);
191
+ case 2:
192
+ case "end":
193
+ return _context4.stop();
194
+ }
195
+ }, _callee4, this);
196
+ }));
197
+ function destroy() {
198
+ return _destroy.apply(this, arguments);
199
+ }
200
+ return destroy;
201
+ }()
202
+ }]);
203
+ return FormModule;
204
+ }(BaseModule);
205
+ export default FormModule;
@@ -0,0 +1,13 @@
1
+ export interface FormDefinition {
2
+ id: string | number;
3
+ code?: string;
4
+ title?: Record<string, string> | string;
5
+ [key: string]: unknown;
6
+ }
7
+ export interface FormState {
8
+ list: FormDefinition[];
9
+ map: Map<string, FormDefinition>;
10
+ }
11
+ export declare const FormHooks: {
12
+ readonly onChanged: "form:onChanged";
13
+ };
@@ -0,0 +1,3 @@
1
+ export var FormHooks = {
2
+ onChanged: 'form:onChanged'
3
+ };
@@ -24,4 +24,7 @@ export { FloorPlanHooks } from './floor-plan/types';
24
24
  export { ResourceModule, resourceModule } from './resource';
25
25
  export type { ResourceState, ResourceData, ResourceId, ResourceBooking, ResourcePageQuery, ResourcePageResult, QueryOptions, ScheduleEventResource, } from './resource';
26
26
  export { ResourceHooks } from './resource';
27
+ export { FormModule } from './form';
28
+ export type { FormDefinition, FormState } from './form/types';
29
+ export { FormHooks } from './form/types';
27
30
  export type { RouteHandler, HttpMethod, RouteDefinition, Router, ModuleRegistryConfig, } from '../types';
@@ -31,4 +31,8 @@ export { FloorPlanHooks } from "./floor-plan/types";
31
31
  export { ResourceModule, resourceModule } from "./resource";
32
32
  export { ResourceHooks } from "./resource";
33
33
 
34
+ // 预约表单定义
35
+ export { FormModule } from "./form";
36
+ export { FormHooks } from "./form/types";
37
+
34
38
  // Server 类型
@@ -328,7 +328,7 @@ export declare class BookingByStepImpl extends BaseModule implements Module {
328
328
  date: string;
329
329
  status: string;
330
330
  week: string;
331
- weekNum: 0 | 2 | 1 | 3 | 5 | 4 | 6;
331
+ weekNum: 0 | 1 | 2 | 3 | 4 | 5 | 6;
332
332
  }[]>;
333
333
  submitTimeSlot(timeSlots: TimeSliceItem): void;
334
334
  private getScheduleDataByIds;
@@ -42,6 +42,10 @@ export declare class BookingTicketImpl extends BaseSalesImpl implements Module {
42
42
  */
43
43
  protected getRegisteredModuleNames(): readonly string[];
44
44
  protected getSubmitOrderSalesChannel(): string;
45
+ /** 供销售展示层按 booking.resources[].form_id 读取当前多语言表单标题。 */
46
+ getFormTitleMap(): Record<string, Record<string, string> | string>;
47
+ /** 表单定义由 Ably 更新后通知展示层刷新,不改动订单里的历史 metadata。 */
48
+ onFormTitlesChanged(callback: (titles: Record<string, Record<string, string> | string>) => void): () => void;
45
49
  /**
46
50
  * 业务侧子模块工厂:BookingTicket 自带的 createBookingTicketModule 优先匹配;
47
51
  * 未识别的模块名(如 BookingByStep 公共类型)回退到父类工厂。
@@ -51,6 +51,7 @@ import { buildProductOptionStringFromOrderLine } from "../../modules/BookingCont
51
51
  import { applyBookingsStatus, applyChildBookingStatus, resolveScheduleId, resolveStatusAfterTransition, restoreBookingsStatus, restoreChildBookingStatus } from "./utils/bookingStatus";
52
52
  import { resolveBestAddTimePlan as _resolveBestAddTimePlan } from "./utils/resolveBestAddTimePlan";
53
53
  import { createUuidV4 } from "../../modules/Order/utils";
54
+ import { FormHooks } from "../../server/modules/form/types";
54
55
  var OPEN_DATA_SECTION_CODES = ['sale', 'reservation', 'fulfillment', 'menu', 'workflow', 'documents'];
55
56
  var OPEN_DATA_CACHE_TTL = 5 * 60 * 1000;
56
57
  var USER_PLATFORM = ['pc', 'h5'];
@@ -206,6 +207,21 @@ export var BookingTicketImpl = /*#__PURE__*/function (_BaseSalesImpl) {
206
207
  return !channel || channel === 'system' ? 'pos' : channel;
207
208
  }
208
209
 
210
+ /** 供销售展示层按 booking.resources[].form_id 读取当前多语言表单标题。 */
211
+ }, {
212
+ key: "getFormTitleMap",
213
+ value: function getFormTitleMap() {
214
+ var _this$core2, _this$core2$getTitleM;
215
+ return ((_this$core2 = this.core) === null || _this$core2 === void 0 || (_this$core2 = _this$core2.server) === null || _this$core2 === void 0 || (_this$core2 = _this$core2.form) === null || _this$core2 === void 0 || (_this$core2$getTitleM = _this$core2.getTitleMap) === null || _this$core2$getTitleM === void 0 ? void 0 : _this$core2$getTitleM.call(_this$core2)) || {};
216
+ }
217
+
218
+ /** 表单定义由 Ably 更新后通知展示层刷新,不改动订单里的历史 metadata。 */
219
+ }, {
220
+ key: "onFormTitlesChanged",
221
+ value: function onFormTitlesChanged(callback) {
222
+ return this.core.effects.on(FormHooks.onChanged, callback);
223
+ }
224
+
209
225
  /**
210
226
  * 业务侧子模块工厂:BookingTicket 自带的 createBookingTicketModule 优先匹配;
211
227
  * 未识别的模块名(如 BookingByStep 公共类型)回退到父类工厂。
@@ -1,46 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "BUY_X_GET_Y_FREE_STRATEGY", {
7
- enumerable: true,
8
- get: function () {
9
- return _examples.BUY_X_GET_Y_FREE_STRATEGY;
10
- }
11
- });
12
- Object.defineProperty(exports, "ITEM_REWARD_STRATEGY", {
13
- enumerable: true,
14
- get: function () {
15
- return _examples.ITEM_REWARD_STRATEGY;
16
- }
17
- });
18
- Object.defineProperty(exports, "PromotionAdapter", {
19
- enumerable: true,
20
- get: function () {
21
- return _adapter.PromotionAdapter;
22
- }
23
- });
24
- Object.defineProperty(exports, "PromotionEvaluator", {
25
- enumerable: true,
26
- get: function () {
27
- return _evaluator.PromotionEvaluator;
28
- }
29
- });
30
- Object.defineProperty(exports, "X_ITEMS_FOR_Y_PRICE_STRATEGY", {
31
- enumerable: true,
32
- get: function () {
33
- return _examples.X_ITEMS_FOR_Y_PRICE_STRATEGY;
34
- }
35
- });
36
- Object.defineProperty(exports, "default", {
37
- enumerable: true,
38
- get: function () {
39
- return _adapter.default;
40
- }
41
- });
42
- var _evaluator = require("./evaluator");
43
- var _adapter = _interopRequireWildcard(require("./adapter"));
44
- var _examples = require("./examples");
45
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
46
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
1
+ "use strict";
@@ -17,6 +17,7 @@ var _resource = require("./modules/resource");
17
17
  var _floorPlan = require("./modules/floor-plan");
18
18
  var _types = require("./modules/floor-plan/types");
19
19
  var _payment = require("./modules/payment");
20
+ var _form = require("./modules/form");
20
21
  var _schedule2 = require("./utils/schedule");
21
22
  var _time = require("./utils/time");
22
23
  var _types2 = require("./modules/products/types");
@@ -183,6 +184,16 @@ class Server {
183
184
  payMethods: []
184
185
  }
185
186
  },
187
+ form: {
188
+ name: 'form',
189
+ moduleClass: _form.FormModule,
190
+ moduleName: 'server_form',
191
+ version: '1.0.0',
192
+ defaultStore: {
193
+ list: [],
194
+ map: new Map()
195
+ }
196
+ },
186
197
  resource: {
187
198
  name: 'resource',
188
199
  moduleClass: _resource.ResourceModule,
@@ -0,0 +1,19 @@
1
+ import { BaseModule } from '../../../modules/BaseModule';
2
+ import type { Module, ModuleOptions, PisellCore } from '../../../types';
3
+ /**
4
+ * 表单定义缓存。数据源负责 HTTP 与 Ably 订阅;本模块仅向 OS 消费方公开只读标题映射。
5
+ */
6
+ export declare class FormModule extends BaseModule implements Module {
7
+ protected defaultName: string;
8
+ protected defaultVersion: string;
9
+ private store;
10
+ private dataSource;
11
+ private refreshTimer?;
12
+ initialize(core: PisellCore, options?: ModuleOptions): Promise<void>;
13
+ preload(): Promise<void>;
14
+ getTitleMap(): Record<string, Record<string, string> | string>;
15
+ private scheduleRefresh;
16
+ private refresh;
17
+ destroy(): Promise<void>;
18
+ }
19
+ export default FormModule;
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.FormModule = void 0;
7
+ var _BaseModule = require("../../../modules/BaseModule");
8
+ var _types = require("./types");
9
+ const FORM_LIST_URL = '/shop/form/simple/list';
10
+
11
+ /**
12
+ * 表单定义缓存。数据源负责 HTTP 与 Ably 订阅;本模块仅向 OS 消费方公开只读标题映射。
13
+ */
14
+ class FormModule extends _BaseModule.BaseModule {
15
+ defaultName = 'form';
16
+ defaultVersion = '1.0.0';
17
+ store;
18
+ dataSource;
19
+ refreshTimer;
20
+ async initialize(core, options) {
21
+ this.core = core;
22
+ const initialStore = options?.store;
23
+ this.store = {
24
+ list: Array.isArray(initialStore?.list) ? initialStore.list : [],
25
+ map: initialStore?.map instanceof Map ? initialStore.map : new Map()
26
+ };
27
+ const FormDataSource = this.core.serverOptions?.All_DATA_SOURCES?.FormDataSource;
28
+ this.dataSource = FormDataSource ? new FormDataSource() : undefined;
29
+ if (this.dataSource) {
30
+ await this.dataSource.run({
31
+ pubsub: {
32
+ callback: () => this.scheduleRefresh()
33
+ }
34
+ });
35
+ }
36
+ }
37
+ async preload() {
38
+ await this.refresh();
39
+ }
40
+ getTitleMap() {
41
+ return this.store.list.reduce((result, item) => {
42
+ if (item.id !== undefined && item.id !== null && item.title) result[String(item.id)] = item.title;
43
+ return result;
44
+ }, {});
45
+ }
46
+ scheduleRefresh() {
47
+ if (this.refreshTimer) clearTimeout(this.refreshTimer);
48
+ this.refreshTimer = setTimeout(() => void this.refresh(), 300);
49
+ }
50
+ async refresh() {
51
+ try {
52
+ const response = this.dataSource ? await this.dataSource.run({
53
+ http: {
54
+ url: FORM_LIST_URL
55
+ }
56
+ }) : await this.core.getPlugin('request')?.get(FORM_LIST_URL);
57
+ const data = response?.data;
58
+ const list = Array.isArray(data) ? data : data?.list || data?.data || [];
59
+ if (!Array.isArray(list)) return;
60
+ this.store.list = list;
61
+ this.store.map = new Map(this.store.list.map(item => [String(item.id), item]));
62
+ await this.core.effects.emit(_types.FormHooks.onChanged, this.getTitleMap());
63
+ } catch {
64
+ // 接口尚未发布或临时失败时保留现有缓存,展示层会回退订单历史标题。
65
+ }
66
+ }
67
+ async destroy() {
68
+ if (this.refreshTimer) clearTimeout(this.refreshTimer);
69
+ this.dataSource?.destroy?.();
70
+ }
71
+ }
72
+ exports.FormModule = FormModule;
73
+ var _default = exports.default = FormModule;
@@ -0,0 +1,13 @@
1
+ export interface FormDefinition {
2
+ id: string | number;
3
+ code?: string;
4
+ title?: Record<string, string> | string;
5
+ [key: string]: unknown;
6
+ }
7
+ export interface FormState {
8
+ list: FormDefinition[];
9
+ map: Map<string, FormDefinition>;
10
+ }
11
+ export declare const FormHooks: {
12
+ readonly onChanged: "form:onChanged";
13
+ };
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.FormHooks = void 0;
7
+ const FormHooks = exports.FormHooks = {
8
+ onChanged: 'form:onChanged'
9
+ };
@@ -24,4 +24,7 @@ export { FloorPlanHooks } from './floor-plan/types';
24
24
  export { ResourceModule, resourceModule } from './resource';
25
25
  export type { ResourceState, ResourceData, ResourceId, ResourceBooking, ResourcePageQuery, ResourcePageResult, QueryOptions, ScheduleEventResource, } from './resource';
26
26
  export { ResourceHooks } from './resource';
27
+ export { FormModule } from './form';
28
+ export type { FormDefinition, FormState } from './form/types';
29
+ export { FormHooks } from './form/types';
27
30
  export type { RouteHandler, HttpMethod, RouteDefinition, Router, ModuleRegistryConfig, } from '../types';
@@ -15,6 +15,18 @@ Object.defineProperty(exports, "FloorPlanModule", {
15
15
  return _floorPlan.FloorPlanModule;
16
16
  }
17
17
  });
18
+ Object.defineProperty(exports, "FormHooks", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _types6.FormHooks;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "FormModule", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _form.FormModule;
28
+ }
29
+ });
18
30
  Object.defineProperty(exports, "MenuHooks", {
19
31
  enumerable: true,
20
32
  get: function () {
@@ -105,4 +117,6 @@ var _types4 = require("./order/types");
105
117
  var _payment = require("./payment");
106
118
  var _floorPlan = require("./floor-plan");
107
119
  var _types5 = require("./floor-plan/types");
108
- var _resource = require("./resource");
120
+ var _resource = require("./resource");
121
+ var _form = require("./form");
122
+ var _types6 = require("./form/types");
@@ -328,7 +328,7 @@ export declare class BookingByStepImpl extends BaseModule implements Module {
328
328
  date: string;
329
329
  status: string;
330
330
  week: string;
331
- weekNum: 0 | 2 | 1 | 3 | 5 | 4 | 6;
331
+ weekNum: 0 | 1 | 2 | 3 | 4 | 5 | 6;
332
332
  }[]>;
333
333
  submitTimeSlot(timeSlots: TimeSliceItem): void;
334
334
  private getScheduleDataByIds;
@@ -42,6 +42,10 @@ export declare class BookingTicketImpl extends BaseSalesImpl implements Module {
42
42
  */
43
43
  protected getRegisteredModuleNames(): readonly string[];
44
44
  protected getSubmitOrderSalesChannel(): string;
45
+ /** 供销售展示层按 booking.resources[].form_id 读取当前多语言表单标题。 */
46
+ getFormTitleMap(): Record<string, Record<string, string> | string>;
47
+ /** 表单定义由 Ably 更新后通知展示层刷新,不改动订单里的历史 metadata。 */
48
+ onFormTitlesChanged(callback: (titles: Record<string, Record<string, string> | string>) => void): () => void;
45
49
  /**
46
50
  * 业务侧子模块工厂:BookingTicket 自带的 createBookingTicketModule 优先匹配;
47
51
  * 未识别的模块名(如 BookingByStep 公共类型)回退到父类工厂。
@@ -39,6 +39,7 @@ var _orderLineDisplay = require("../../modules/BookingContext/utils/orderLineDis
39
39
  var _bookingStatus = require("./utils/bookingStatus");
40
40
  var _resolveBestAddTimePlan = require("./utils/resolveBestAddTimePlan");
41
41
  var _utils = require("../../modules/Order/utils");
42
+ var _types2 = require("../../server/modules/form/types");
42
43
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
43
44
  const OPEN_DATA_SECTION_CODES = ['sale', 'reservation', 'fulfillment', 'menu', 'workflow', 'documents'];
44
45
  const OPEN_DATA_CACHE_TTL = 5 * 60 * 1000;
@@ -179,6 +180,16 @@ class BookingTicketImpl extends _BaseSales.BaseSalesImpl {
179
180
  return !channel || channel === 'system' ? 'pos' : channel;
180
181
  }
181
182
 
183
+ /** 供销售展示层按 booking.resources[].form_id 读取当前多语言表单标题。 */
184
+ getFormTitleMap() {
185
+ return this.core?.server?.form?.getTitleMap?.() || {};
186
+ }
187
+
188
+ /** 表单定义由 Ably 更新后通知展示层刷新,不改动订单里的历史 metadata。 */
189
+ onFormTitlesChanged(callback) {
190
+ return this.core.effects.on(_types2.FormHooks.onChanged, callback);
191
+ }
192
+
182
193
  /**
183
194
  * 业务侧子模块工厂:BookingTicket 自带的 createBookingTicketModule 优先匹配;
184
195
  * 未识别的模块名(如 BookingByStep 公共类型)回退到父类工厂。
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "private": false,
3
3
  "name": "@pisell/pisellos",
4
- "version": "2.3.158",
4
+ "version": "2.3.159",
5
5
  "description": "一个可扩展的前端模块化SDK框架,支持插件系统",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",