@pisell/private-materials 6.3.103 → 6.3.105

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/build/lowcode/assets-daily.json +11 -11
  2. package/build/lowcode/assets-dev.json +2 -2
  3. package/build/lowcode/assets-prod.json +11 -11
  4. package/build/lowcode/index.js +1 -1
  5. package/build/lowcode/meta.js +2 -2
  6. package/build/lowcode/preview.js +152 -152
  7. package/build/lowcode/render/default/view.css +1 -1
  8. package/build/lowcode/render/default/view.js +18 -10
  9. package/build/lowcode/view.css +1 -1
  10. package/build/lowcode/view.js +18 -10
  11. package/es/components/booking/notes/NoteBlock/index.js +3 -2
  12. package/es/components/eftposPay/store/index.d.ts +1 -1
  13. package/es/components/eventBooking/components/ErrorTip/index.d.ts +0 -1
  14. package/es/components/eventBooking/components/bookingAvailabilityCalendar/components/CalendarDate/CalenDateWeek/WeekItem/index.d.ts +0 -1
  15. package/es/components/eventBooking/components/bookingAvailabilityCalendar/components/CalendarDate/CalenDateWeek/index.d.ts +0 -1
  16. package/es/components/pay/toC/PaymentMethods/MWCreditCard/List/index.js +32 -16
  17. package/es/components/pay/toC/PaymentMethods/MWCreditCard/tds2.js +16 -10
  18. package/es/components/shoppingCart/components/Empty/index.d.ts +0 -1
  19. package/es/hooks/usePaymentLogger.d.ts +1 -0
  20. package/es/index.d.ts +4 -2
  21. package/es/index.js +3 -1
  22. package/es/plus/contactInfo/components/SwipeAction/index.js +1 -1
  23. package/es/plus/orderList/components/HandleActions.d.ts +1 -0
  24. package/es/plus/orderList/components/HandleActions.js +5 -2
  25. package/es/plus/orderList/components/Toolbar.d.ts +1 -0
  26. package/es/plus/orderList/components/Toolbar.js +4 -2
  27. package/es/plus/orderList/index.d.ts +1 -0
  28. package/es/plus/orderList/index.js +7 -2
  29. package/es/plus/pisellSalesGrid/PisellSalesGrid.d.ts +5 -0
  30. package/es/plus/pisellSalesGrid/PisellSalesGrid.js +363 -0
  31. package/es/plus/pisellSalesGrid/PisellSalesGrid.less +16 -0
  32. package/es/plus/pisellSalesGrid/PisellSalesGrid.stories.d.ts +14 -0
  33. package/es/plus/pisellSalesGrid/PisellSalesGrid.stories.js +559 -0
  34. package/es/plus/pisellSalesGrid/hooks/useActions.d.ts +19 -0
  35. package/es/plus/pisellSalesGrid/hooks/useActions.js +723 -0
  36. package/es/plus/pisellSalesGrid/index.d.ts +4 -0
  37. package/es/plus/pisellSalesGrid/index.js +3 -0
  38. package/es/plus/pisellSalesGrid/locales.d.ts +9 -0
  39. package/es/plus/pisellSalesGrid/locales.js +8 -0
  40. package/es/plus/pisellSalesGrid/serve.d.ts +19 -0
  41. package/es/plus/pisellSalesGrid/serve.js +151 -0
  42. package/es/plus/pisellSalesGrid/types.d.ts +170 -0
  43. package/es/plus/pisellSalesGrid/types.js +1 -0
  44. package/es/plus/pisellSalesManagement/components/BookingFormsPreview.d.ts +15 -0
  45. package/es/plus/pisellSalesManagement/components/BookingFormsPreview.js +211 -0
  46. package/es/plus/pisellSalesManagement/components/BookingNotesPreview.d.ts +19 -0
  47. package/es/plus/pisellSalesManagement/components/BookingNotesPreview.js +167 -0
  48. package/es/plus/pisellSalesManagement/components/ResourceSelector.d.ts +9 -0
  49. package/es/plus/pisellSalesManagement/components/ResourceSelector.js +102 -0
  50. package/es/plus/pisellSalesManagement/config/booking.d.ts +186 -0
  51. package/es/plus/pisellSalesManagement/config/booking.js +380 -0
  52. package/es/plus/pisellSalesManagement/config/index.d.ts +2 -0
  53. package/es/plus/pisellSalesManagement/config/index.js +11 -0
  54. package/es/plus/pisellSalesManagement/config/order.d.ts +172 -0
  55. package/es/plus/pisellSalesManagement/config/order.js +460 -0
  56. package/es/plus/pisellSalesManagement/hooks/perspectiveUtils.d.ts +15 -0
  57. package/es/plus/pisellSalesManagement/hooks/perspectiveUtils.js +66 -0
  58. package/es/plus/pisellSalesManagement/hooks/useBookingPerspective.d.ts +2 -0
  59. package/es/plus/pisellSalesManagement/hooks/useBookingPerspective.js +651 -0
  60. package/es/plus/pisellSalesManagement/hooks/useOrderPerspective.d.ts +2 -0
  61. package/es/plus/pisellSalesManagement/hooks/useOrderPerspective.js +656 -0
  62. package/es/plus/pisellSalesManagement/hooks/usePerspectives.d.ts +5 -0
  63. package/es/plus/pisellSalesManagement/hooks/usePerspectives.js +12 -0
  64. package/es/plus/pisellSalesManagement/index.d.ts +10 -0
  65. package/es/plus/pisellSalesManagement/index.js +84 -0
  66. package/es/plus/pisellSalesManagement/locales.d.ts +303 -0
  67. package/es/plus/pisellSalesManagement/locales.js +302 -0
  68. package/es/plus/pisellSalesManagement/serve.d.ts +26 -0
  69. package/es/plus/pisellSalesManagement/serve.js +222 -0
  70. package/es/plus/selectHolder/components/ErrorTip/index.d.ts +0 -1
  71. package/lib/components/booking/notes/NoteBlock/index.js +2 -1
  72. package/lib/components/eftposPay/store/index.d.ts +1 -1
  73. package/lib/components/eventBooking/components/ErrorTip/index.d.ts +0 -1
  74. package/lib/components/eventBooking/components/bookingAvailabilityCalendar/components/CalendarDate/CalenDateWeek/WeekItem/index.d.ts +0 -1
  75. package/lib/components/eventBooking/components/bookingAvailabilityCalendar/components/CalendarDate/CalenDateWeek/index.d.ts +0 -1
  76. package/lib/components/pay/toC/PaymentMethods/MWCreditCard/List/index.js +19 -11
  77. package/lib/components/pay/toC/PaymentMethods/MWCreditCard/tds2.js +21 -22
  78. package/lib/components/shoppingCart/components/Empty/index.d.ts +0 -1
  79. package/lib/hooks/usePaymentLogger.d.ts +1 -0
  80. package/lib/index.d.ts +4 -2
  81. package/lib/index.js +8 -2
  82. package/lib/plus/contactInfo/components/SwipeAction/index.js +23 -23
  83. package/lib/plus/orderList/components/HandleActions.d.ts +1 -0
  84. package/lib/plus/orderList/components/HandleActions.js +2 -2
  85. package/lib/plus/orderList/components/Toolbar.d.ts +1 -0
  86. package/lib/plus/orderList/components/Toolbar.js +2 -2
  87. package/lib/plus/orderList/index.d.ts +1 -0
  88. package/lib/plus/orderList/index.js +3 -3
  89. package/lib/plus/pisellSalesGrid/PisellSalesGrid.d.ts +5 -0
  90. package/lib/plus/pisellSalesGrid/PisellSalesGrid.js +339 -0
  91. package/lib/plus/pisellSalesGrid/PisellSalesGrid.less +16 -0
  92. package/lib/plus/pisellSalesGrid/PisellSalesGrid.stories.d.ts +14 -0
  93. package/lib/plus/pisellSalesGrid/PisellSalesGrid.stories.js +455 -0
  94. package/lib/plus/pisellSalesGrid/hooks/useActions.d.ts +19 -0
  95. package/lib/plus/pisellSalesGrid/hooks/useActions.js +545 -0
  96. package/lib/plus/pisellSalesGrid/index.d.ts +4 -0
  97. package/lib/plus/pisellSalesGrid/index.js +42 -0
  98. package/lib/plus/pisellSalesGrid/locales.d.ts +9 -0
  99. package/lib/plus/pisellSalesGrid/locales.js +29 -0
  100. package/lib/plus/pisellSalesGrid/serve.d.ts +19 -0
  101. package/lib/plus/pisellSalesGrid/serve.js +142 -0
  102. package/lib/plus/pisellSalesGrid/types.d.ts +170 -0
  103. package/lib/plus/pisellSalesGrid/types.js +17 -0
  104. package/lib/plus/pisellSalesManagement/components/BookingFormsPreview.d.ts +15 -0
  105. package/lib/plus/pisellSalesManagement/components/BookingFormsPreview.js +250 -0
  106. package/lib/plus/pisellSalesManagement/components/BookingNotesPreview.d.ts +19 -0
  107. package/lib/plus/pisellSalesManagement/components/BookingNotesPreview.js +193 -0
  108. package/lib/plus/pisellSalesManagement/components/ResourceSelector.d.ts +9 -0
  109. package/lib/plus/pisellSalesManagement/components/ResourceSelector.js +106 -0
  110. package/lib/plus/pisellSalesManagement/config/booking.d.ts +186 -0
  111. package/lib/plus/pisellSalesManagement/config/booking.js +500 -0
  112. package/lib/plus/pisellSalesManagement/config/index.d.ts +2 -0
  113. package/lib/plus/pisellSalesManagement/config/index.js +43 -0
  114. package/lib/plus/pisellSalesManagement/config/order.d.ts +172 -0
  115. package/lib/plus/pisellSalesManagement/config/order.js +492 -0
  116. package/lib/plus/pisellSalesManagement/hooks/perspectiveUtils.d.ts +15 -0
  117. package/lib/plus/pisellSalesManagement/hooks/perspectiveUtils.js +113 -0
  118. package/lib/plus/pisellSalesManagement/hooks/useBookingPerspective.d.ts +2 -0
  119. package/lib/plus/pisellSalesManagement/hooks/useBookingPerspective.js +699 -0
  120. package/lib/plus/pisellSalesManagement/hooks/useOrderPerspective.d.ts +2 -0
  121. package/lib/plus/pisellSalesManagement/hooks/useOrderPerspective.js +700 -0
  122. package/lib/plus/pisellSalesManagement/hooks/usePerspectives.d.ts +5 -0
  123. package/lib/plus/pisellSalesManagement/hooks/usePerspectives.js +42 -0
  124. package/lib/plus/pisellSalesManagement/index.d.ts +10 -0
  125. package/lib/plus/pisellSalesManagement/index.js +113 -0
  126. package/lib/plus/pisellSalesManagement/locales.d.ts +303 -0
  127. package/lib/plus/pisellSalesManagement/locales.js +326 -0
  128. package/lib/plus/pisellSalesManagement/serve.d.ts +26 -0
  129. package/lib/plus/pisellSalesManagement/serve.js +120 -0
  130. package/lib/plus/selectHolder/components/ErrorTip/index.d.ts +0 -1
  131. package/lowcode/eco-cup-list/meta.ts +1 -1
  132. package/lowcode/eco-customer-list/meta.ts +1 -1
  133. package/lowcode/pisell-sales-management/meta.ts +88 -0
  134. package/package.json +3 -3
@@ -0,0 +1,699 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/plus/pisellSalesManagement/hooks/useBookingPerspective.tsx
30
+ var useBookingPerspective_exports = {};
31
+ __export(useBookingPerspective_exports, {
32
+ useBookingPerspective: () => useBookingPerspective
33
+ });
34
+ module.exports = __toCommonJS(useBookingPerspective_exports);
35
+ var import_react = __toESM(require("react"));
36
+ var import_materials = require("@pisell/materials");
37
+ var import_utils = require("@pisell/utils");
38
+ var import_clientName = __toESM(require("../../clientName"));
39
+ var import_booking = require("../config/booking");
40
+ var import_order = require("../config/order");
41
+ var import_config = require("../config");
42
+ var import_perspectiveUtils = require("./perspectiveUtils");
43
+ var import_useEngineContext = __toESM(require("../../../hooks/useEngineContext"));
44
+ var import_BookingNotesPreview = __toESM(require("../components/BookingNotesPreview"));
45
+ var import_BookingFormsPreview = __toESM(require("../components/BookingFormsPreview"));
46
+ var import_serve = require("../serve");
47
+ function getBookingType(record) {
48
+ var _a;
49
+ if ((_a = record == null ? void 0 : record.metadata) == null ? void 0 : _a.multiple_resource_flag) {
50
+ return "pisell2";
51
+ }
52
+ if (record.parent_id > 0 && record.item_type !== "recurring_booking") {
53
+ return "pisell2";
54
+ }
55
+ return "pisell1";
56
+ }
57
+ var useBookingPerspective = (params) => {
58
+ var _a, _b, _c;
59
+ const context = (0, import_useEngineContext.default)();
60
+ const utils = (_a = context == null ? void 0 : context.appHelper) == null ? void 0 : _a.utils;
61
+ const locale = (_c = (_b = context == null ? void 0 : context.engine) == null ? void 0 : _b.props) == null ? void 0 : _c.locale;
62
+ const staticData = (0, import_react.useMemo)(() => {
63
+ const BOOKING_STATUS_LABEL_MAP = (0, import_booking.getBookingStatusMap)();
64
+ const BOOKING_PLATFORM_LABEL_MAP = (0, import_booking.getBookingPlatformMap)();
65
+ const PAYMENT_STATUS_LABEL_MAP = (0, import_order.getPaymentStatusMap)();
66
+ const BUSINESS_LABEL_MAP = (0, import_config.getBusinessLabelMap)();
67
+ const bookingLabels = (0, import_booking.getBookingHeaderLabels)();
68
+ const { relationTables } = params || {};
69
+ const _relationTables = (relationTables || []).filter(
70
+ (item) => [
71
+ "appointment_booking",
72
+ "ticket",
73
+ "party_room",
74
+ "therapist",
75
+ "table-order",
76
+ "voucher_ticket",
77
+ "mobile_order"
78
+ ].includes(item.relation_type)
79
+ );
80
+ const uniqueTables = _relationTables.reduce((pre, cur) => {
81
+ let exists = pre.some((obj) => obj.form_id === cur.form_id);
82
+ if (!exists) {
83
+ pre.push(cur);
84
+ }
85
+ return pre;
86
+ }, []);
87
+ return {
88
+ BOOKING_STATUS_LABEL_MAP,
89
+ BOOKING_PLATFORM_LABEL_MAP,
90
+ PAYMENT_STATUS_LABEL_MAP,
91
+ BUSINESS_LABEL_MAP,
92
+ bookingLabels,
93
+ uniqueTables
94
+ };
95
+ }, [params == null ? void 0 : params.relationTables, locale]);
96
+ const buildColumns = (0, import_react.useCallback)(
97
+ (ctx) => {
98
+ const {
99
+ BOOKING_STATUS_LABEL_MAP,
100
+ BOOKING_PLATFORM_LABEL_MAP,
101
+ PAYMENT_STATUS_LABEL_MAP,
102
+ BUSINESS_LABEL_MAP,
103
+ bookingLabels,
104
+ uniqueTables
105
+ } = staticData;
106
+ return [
107
+ {
108
+ title: bookingLabels.bookingBrief,
109
+ key: "booking_brief",
110
+ width: 225,
111
+ render: (_, record) => {
112
+ var _a2, _b2, _c2;
113
+ const startAt = (0, import_perspectiveUtils.buildDateTime)(record == null ? void 0 : record.start_date, record == null ? void 0 : record.start_time) || (record == null ? void 0 : record.start_at);
114
+ const status = record == null ? void 0 : record.appointment_status;
115
+ const statusLabel = BOOKING_STATUS_LABEL_MAP[status] || status || "-";
116
+ const statusColor = import_booking.BOOKING_STATUS_COLOR_MAP[status] || "";
117
+ const orderNote = (_a2 = record == null ? void 0 : record.order) == null ? void 0 : _a2.note;
118
+ const internalNotes = record == null ? void 0 : record.notes;
119
+ const noteApis = (0, import_serve.createNoteApis)((_b2 = record == null ? void 0 : record.order) == null ? void 0 : _b2.id);
120
+ return /* @__PURE__ */ import_react.default.createElement("div", { style: { display: "flex", flexDirection: "column" } }, /* @__PURE__ */ import_react.default.createElement(import_clientName.default, { dataSource: (_c2 = record == null ? void 0 : record.order) == null ? void 0 : _c2.customer }), startAt ? /* @__PURE__ */ import_react.default.createElement(
121
+ import_materials.PisellDateTimeDisplay,
122
+ {
123
+ value: startAt,
124
+ layout: "inline",
125
+ textAlign: "left",
126
+ timeFormat: { padHour: true },
127
+ dateFormat: {
128
+ order: "DMY",
129
+ showYear: false,
130
+ shortMonth: true,
131
+ showRelativeDay: true,
132
+ useCommaBeforeYear: false
133
+ },
134
+ fields: {
135
+ fieldOrder: ["time", "weekday", "date"]
136
+ // inlineSeparators: [' ', ', '],
137
+ }
138
+ }
139
+ ) : null, /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement(
140
+ import_perspectiveUtils.Tag,
141
+ {
142
+ style: {
143
+ backgroundColor: statusColor,
144
+ whiteSpace: "nowrap",
145
+ border: "none",
146
+ fontWeight: 500
147
+ }
148
+ },
149
+ statusLabel
150
+ )), /* @__PURE__ */ import_react.default.createElement(
151
+ import_BookingNotesPreview.default,
152
+ {
153
+ dataSource: {
154
+ note: orderNote,
155
+ internalNotes,
156
+ apis: noteApis,
157
+ bookingId: record == null ? void 0 : record.id,
158
+ onChange: (value, type, noteType) => {
159
+ ctx.refresh();
160
+ }
161
+ },
162
+ labels: {
163
+ orderNote: bookingLabels.orderNote,
164
+ internalNote: bookingLabels.internalNote,
165
+ more: bookingLabels.more
166
+ },
167
+ style: {
168
+ maxWidth: 160
169
+ }
170
+ }
171
+ ));
172
+ }
173
+ },
174
+ {
175
+ title: bookingLabels.serviceTime,
176
+ key: "service_time",
177
+ align: "center",
178
+ width: 165,
179
+ render: (_, record) => {
180
+ const startAt = (0, import_perspectiveUtils.buildDateTime)(record == null ? void 0 : record.start_date, record == null ? void 0 : record.start_time) || (record == null ? void 0 : record.start_at);
181
+ const endAt = (0, import_perspectiveUtils.buildDateTime)(record == null ? void 0 : record.end_date, record == null ? void 0 : record.end_time) || (record == null ? void 0 : record.end_at);
182
+ if (!startAt || !endAt) {
183
+ return null;
184
+ }
185
+ return /* @__PURE__ */ import_react.default.createElement("div", { style: { textAlign: "center" } }, /* @__PURE__ */ import_react.default.createElement(import_materials.PisellTimeRangeDisplay, { startAt, endAt }));
186
+ },
187
+ uniformCompare: (_, record) => {
188
+ const {
189
+ start_date = "",
190
+ start_time = "",
191
+ end_date = "",
192
+ end_time = ""
193
+ } = record;
194
+ return `${start_date}${start_time}${end_date}${end_time}`;
195
+ }
196
+ },
197
+ {
198
+ title: bookingLabels.customer,
199
+ key: "customer",
200
+ align: "center",
201
+ width: 150,
202
+ uniformCompare: (_, record) => {
203
+ const value = record.order;
204
+ const customer = value == null ? void 0 : value.customer;
205
+ if (!customer) return "-";
206
+ const guestCode = customer == null ? void 0 : customer.guest_code;
207
+ if (guestCode) return `${guestCode}`;
208
+ if (customer.user_id === 1) return "walk-in";
209
+ return customer;
210
+ },
211
+ render: (_, record) => {
212
+ const value = record.order;
213
+ const customer = value == null ? void 0 : value.customer;
214
+ const guestCode = customer == null ? void 0 : customer.guest_code;
215
+ if (guestCode) {
216
+ return /* @__PURE__ */ import_react.default.createElement(
217
+ "div",
218
+ {
219
+ style: {
220
+ display: "flex",
221
+ flexDirection: "column",
222
+ alignItems: "center",
223
+ textAlign: "center"
224
+ }
225
+ },
226
+ /* @__PURE__ */ import_react.default.createElement("div", { style: { fontWeight: "bold" } }, bookingLabels.guest)
227
+ );
228
+ }
229
+ const phone = (0, import_perspectiveUtils.formatPhone)(
230
+ (customer == null ? void 0 : customer.phone) || (record == null ? void 0 : record.phone),
231
+ (customer == null ? void 0 : customer.country_calling_code) || (record == null ? void 0 : record.country_calling_code)
232
+ );
233
+ const email = customer == null ? void 0 : customer.email;
234
+ const lines = (0, import_perspectiveUtils.getDisplayLines)([phone, email]);
235
+ return /* @__PURE__ */ import_react.default.createElement(
236
+ "div",
237
+ {
238
+ style: {
239
+ display: "flex",
240
+ flexDirection: "column",
241
+ alignItems: "center",
242
+ textAlign: "center"
243
+ }
244
+ },
245
+ /* @__PURE__ */ import_react.default.createElement(import_clientName.default, { dataSource: customer, style: { fontSize: 14 } }),
246
+ lines.map((line, index) => /* @__PURE__ */ import_react.default.createElement("div", { key: `${line}-${index}`, style: import_perspectiveUtils.textStyles.text }, line))
247
+ );
248
+ }
249
+ },
250
+ {
251
+ title: bookingLabels.contact,
252
+ key: "contact",
253
+ align: "center",
254
+ width: 150,
255
+ uniformCompare: (_, record) => {
256
+ const value = record.order;
257
+ const contactValue = value == null ? void 0 : value.contacts_info;
258
+ if (!contactValue) return "-";
259
+ return contactValue;
260
+ },
261
+ render: (_, record) => {
262
+ const value = record.order;
263
+ const contactValue = value == null ? void 0 : value.contacts_info;
264
+ if (!contactValue) return "-";
265
+ const phone = (0, import_perspectiveUtils.formatPhone)(contactValue == null ? void 0 : contactValue.phone);
266
+ const lines = (0, import_perspectiveUtils.getDisplayLines)([phone, contactValue == null ? void 0 : contactValue.email]);
267
+ return /* @__PURE__ */ import_react.default.createElement(
268
+ "div",
269
+ {
270
+ style: {
271
+ display: "flex",
272
+ flexDirection: "column",
273
+ alignItems: "center",
274
+ textAlign: "center"
275
+ }
276
+ },
277
+ /* @__PURE__ */ import_react.default.createElement(
278
+ import_clientName.default,
279
+ {
280
+ dataSource: contactValue,
281
+ style: { fontSize: 14 }
282
+ }
283
+ ),
284
+ lines.map((line, index) => /* @__PURE__ */ import_react.default.createElement("div", { key: `${line}-${index}`, style: import_perspectiveUtils.textStyles.text }, line))
285
+ );
286
+ }
287
+ },
288
+ {
289
+ title: bookingLabels.holder,
290
+ dataIndex: "holder_data",
291
+ key: "holder_data",
292
+ align: "center",
293
+ width: 110,
294
+ uniformCompare: (value, record) => {
295
+ if (!value) return "-";
296
+ return value;
297
+ },
298
+ render: (value, record) => {
299
+ var _a2;
300
+ if (!value) return "-";
301
+ const holderValue = Array.isArray(value) ? value[0] : value;
302
+ if (!holderValue) return "-";
303
+ let holderPhone;
304
+ if ((_a2 = holderValue == null ? void 0 : holderValue.data) == null ? void 0 : _a2.customer_phone) {
305
+ holderPhone = (0, import_perspectiveUtils.formatPhone)(holderValue == null ? void 0 : holderValue.phone);
306
+ }
307
+ const lines = (0, import_perspectiveUtils.getDisplayLines)([holderPhone]);
308
+ return /* @__PURE__ */ import_react.default.createElement(
309
+ "div",
310
+ {
311
+ style: {
312
+ display: "flex",
313
+ flexDirection: "column",
314
+ alignItems: "center",
315
+ textAlign: "center"
316
+ }
317
+ },
318
+ /* @__PURE__ */ import_react.default.createElement(
319
+ import_clientName.default,
320
+ {
321
+ dataSource: { display_name: holderValue.main_field },
322
+ style: { fontSize: 14 }
323
+ }
324
+ ),
325
+ lines.map((line, index) => /* @__PURE__ */ import_react.default.createElement("div", { key: `${line}-${index}`, style: import_perspectiveUtils.textStyles.text }, line))
326
+ );
327
+ }
328
+ },
329
+ {
330
+ title: bookingLabels.services,
331
+ key: "services",
332
+ align: "center",
333
+ width: 120,
334
+ render: (_, record) => {
335
+ const detail = (0, import_perspectiveUtils.parseJson)(record == null ? void 0 : record.order_detail);
336
+ const items = (0, import_perspectiveUtils.normalizeList)(detail);
337
+ const displayItems = items.slice(0, 3);
338
+ const moreCount = items.length - displayItems.length;
339
+ const lines = displayItems.map((item) => {
340
+ const title = utils.translation(item.product_title);
341
+ const qty = item == null ? void 0 : item.product_quantity;
342
+ if (!title) return null;
343
+ return qty ? `${title} x${qty}` : String(title);
344
+ }).filter((item) => item);
345
+ if (moreCount > 0) {
346
+ lines.push(`+${moreCount} ${bookingLabels.more}`);
347
+ }
348
+ if (lines.length === 0) return null;
349
+ return /* @__PURE__ */ import_react.default.createElement(
350
+ "div",
351
+ {
352
+ style: {
353
+ display: "flex",
354
+ flexDirection: "column",
355
+ alignItems: "center",
356
+ textAlign: "center"
357
+ }
358
+ },
359
+ lines.map((line, index) => /* @__PURE__ */ import_react.default.createElement("div", { key: `${line}-${index}`, style: import_perspectiveUtils.textStyles.text }, line))
360
+ );
361
+ },
362
+ uniformCompare: (_value, record) => {
363
+ return (record == null ? void 0 : record.order_detail) || "";
364
+ }
365
+ },
366
+ {
367
+ title: bookingLabels.pax,
368
+ dataIndex: "number",
369
+ key: "number",
370
+ align: "center",
371
+ width: 110,
372
+ render: (_, record) => {
373
+ const count = record == null ? void 0 : record.number;
374
+ return /* @__PURE__ */ import_react.default.createElement("span", { style: { ...import_perspectiveUtils.textStyles.text, textAlign: "center" } }, count ?? "-");
375
+ }
376
+ },
377
+ {
378
+ title: bookingLabels.resource,
379
+ dataIndex: "relation_form_name",
380
+ key: "relation_form_name",
381
+ align: "center",
382
+ width: 100,
383
+ render: (value) => {
384
+ if (!value) return "-";
385
+ return /* @__PURE__ */ import_react.default.createElement("div", { style: import_perspectiveUtils.textStyles.text }, value);
386
+ }
387
+ },
388
+ {
389
+ title: bookingLabels.forms,
390
+ key: "appointment_form",
391
+ // width: 128,
392
+ align: "center",
393
+ render: (_, record) => {
394
+ var _a2;
395
+ return /* @__PURE__ */ import_react.default.createElement(
396
+ import_BookingFormsPreview.default,
397
+ {
398
+ value: record == null ? void 0 : record.appointment_form,
399
+ uniqueTables,
400
+ bookingLabels,
401
+ textStyles: import_perspectiveUtils.textStyles,
402
+ relationId: record.parent_id || record.id,
403
+ relationType: record.item_type,
404
+ customer: (_a2 = record.order) == null ? void 0 : _a2.customer
405
+ }
406
+ );
407
+ }
408
+ },
409
+ {
410
+ title: bookingLabels.orderInfo,
411
+ key: "order_info",
412
+ width: 124,
413
+ align: "center",
414
+ render: (_, record) => {
415
+ const order = (record == null ? void 0 : record.order) || {};
416
+ const orderCode = order == null ? void 0 : order.shop_full_order_number;
417
+ const totalAmount = order == null ? void 0 : order.total_amount;
418
+ const currencySymbol = order == null ? void 0 : order.currency_symbol;
419
+ const paymentStatus = order == null ? void 0 : order.payment_status;
420
+ const paymentLabel = PAYMENT_STATUS_LABEL_MAP[paymentStatus] || "-";
421
+ const paymentColor = import_order.PAYMENT_STATUS_COLOR_MAP[paymentStatus] || "";
422
+ return /* @__PURE__ */ import_react.default.createElement(
423
+ "div",
424
+ {
425
+ style: {
426
+ display: "flex",
427
+ flexDirection: "column",
428
+ alignItems: "flex-start"
429
+ }
430
+ },
431
+ /* @__PURE__ */ import_react.default.createElement(
432
+ "div",
433
+ {
434
+ style: {
435
+ fontWeight: 600,
436
+ textDecoration: "underline",
437
+ color: "var(--theme-color, #7f56d9)"
438
+ }
439
+ },
440
+ orderCode || "-"
441
+ ),
442
+ totalAmount != null ? /* @__PURE__ */ import_react.default.createElement("div", { style: import_perspectiveUtils.textStyles.text }, (0, import_perspectiveUtils.formatAmount)(totalAmount, currencySymbol)) : null,
443
+ paymentLabel ? /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement(
444
+ import_perspectiveUtils.Tag,
445
+ {
446
+ style: {
447
+ backgroundColor: paymentColor,
448
+ whiteSpace: "nowrap",
449
+ border: "none",
450
+ fontWeight: 500
451
+ }
452
+ },
453
+ paymentLabel
454
+ )) : null
455
+ );
456
+ }
457
+ },
458
+ {
459
+ title: bookingLabels.bookingId,
460
+ dataIndex: "booking_id",
461
+ key: "booking_id",
462
+ align: "center",
463
+ width: 120,
464
+ render: (value) => /* @__PURE__ */ import_react.default.createElement(
465
+ "span",
466
+ {
467
+ style: {
468
+ ...import_perspectiveUtils.textStyles.text,
469
+ textAlign: "center",
470
+ fontSize: 14,
471
+ fontWeight: 400
472
+ }
473
+ },
474
+ value
475
+ )
476
+ },
477
+ {
478
+ title: bookingLabels.orderOrigin,
479
+ key: "order_origin",
480
+ width: 160,
481
+ align: "center",
482
+ render: (_, record) => {
483
+ var _a2, _b2, _c2, _d, _e, _f;
484
+ const businessKey = ((_a2 = record == null ? void 0 : record.order) == null ? void 0 : _a2.business_code) || (record == null ? void 0 : record.business_code);
485
+ const businessLabel = BUSINESS_LABEL_MAP[businessKey];
486
+ const channel = BOOKING_PLATFORM_LABEL_MAP[(_b2 = record == null ? void 0 : record.order) == null ? void 0 : _b2.order_sales_channel] || BOOKING_PLATFORM_LABEL_MAP[record == null ? void 0 : record.order_platform] || BOOKING_PLATFORM_LABEL_MAP[(_c2 = record == null ? void 0 : record.order) == null ? void 0 : _c2.order_platform] || ((_d = record == null ? void 0 : record.order) == null ? void 0 : _d.order_sales_channel) || (record == null ? void 0 : record.order_platform);
487
+ const device = (record == null ? void 0 : record.device_name) || (record == null ? void 0 : record.device) || (record == null ? void 0 : record.terminal);
488
+ const time = (record == null ? void 0 : record.created_at) || ((_e = record == null ? void 0 : record.order) == null ? void 0 : _e.created_at);
489
+ const actor = ((_f = record == null ? void 0 : record.order) == null ? void 0 : _f.create_account) || (record == null ? void 0 : record.create_account) || (record == null ? void 0 : record.operator_name);
490
+ const lines = (0, import_perspectiveUtils.getDisplayLines)([channel, device]);
491
+ return /* @__PURE__ */ import_react.default.createElement(
492
+ "div",
493
+ {
494
+ style: {
495
+ display: "flex",
496
+ flexDirection: "column",
497
+ alignItems: "flex-start"
498
+ }
499
+ },
500
+ businessLabel ? /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement(
501
+ import_perspectiveUtils.Tag,
502
+ {
503
+ color: import_config.BUSINESS_COLOR_MAP[businessKey],
504
+ style: {
505
+ color: "black",
506
+ fontWeight: 500
507
+ }
508
+ },
509
+ businessLabel
510
+ )) : null,
511
+ lines.map((line, index) => /* @__PURE__ */ import_react.default.createElement("div", { key: `${line}-${index}`, style: import_perspectiveUtils.textStyles.text }, line)),
512
+ actor ? /* @__PURE__ */ import_react.default.createElement(
513
+ "div",
514
+ {
515
+ style: {
516
+ display: "flex",
517
+ alignItems: "center",
518
+ ...import_perspectiveUtils.textStyles.text
519
+ }
520
+ },
521
+ /* @__PURE__ */ import_react.default.createElement("span", null, bookingLabels.createdBy, ":"),
522
+ /* @__PURE__ */ import_react.default.createElement(import_clientName.default, { dataSource: actor, style: { fontSize: 12 } })
523
+ ) : null,
524
+ /* @__PURE__ */ import_react.default.createElement(
525
+ import_materials.PisellDateTimeDisplay,
526
+ {
527
+ value: time,
528
+ layout: "inline",
529
+ textAlign: "left",
530
+ timeFormat: { padHour: true },
531
+ dateFormat: {
532
+ order: "DMY",
533
+ showYear: false,
534
+ shortMonth: true,
535
+ showRelativeDay: true,
536
+ useCommaBeforeYear: false
537
+ },
538
+ fields: {
539
+ fieldOrder: ["time", "weekday", "date"]
540
+ // inlineSeparators: [' ', ', '],
541
+ },
542
+ style: {
543
+ whiteSpace: "nowrap"
544
+ }
545
+ }
546
+ )
547
+ );
548
+ }
549
+ },
550
+ {
551
+ title: bookingLabels.updated,
552
+ key: "updated",
553
+ width: 132,
554
+ align: "center",
555
+ render: (_, record) => {
556
+ var _a2;
557
+ const time = (record == null ? void 0 : record.updated_at) || ((_a2 = record == null ? void 0 : record.order) == null ? void 0 : _a2.updated_at);
558
+ const channel = BOOKING_PLATFORM_LABEL_MAP[record == null ? void 0 : record.order_platform] || (record == null ? void 0 : record.order_platform);
559
+ const lines = (0, import_perspectiveUtils.getDisplayLines)([channel]);
560
+ return /* @__PURE__ */ import_react.default.createElement(
561
+ "div",
562
+ {
563
+ style: {
564
+ display: "flex",
565
+ flexDirection: "column",
566
+ alignItems: "flex-start"
567
+ }
568
+ },
569
+ /* @__PURE__ */ import_react.default.createElement(
570
+ import_materials.PisellDateTimeDisplay,
571
+ {
572
+ value: time,
573
+ layout: "inline",
574
+ textAlign: "left",
575
+ timeFormat: { padHour: true },
576
+ dateFormat: {
577
+ order: "DMY",
578
+ showYear: false,
579
+ shortMonth: true,
580
+ showRelativeDay: true,
581
+ useCommaBeforeYear: false
582
+ },
583
+ fields: {
584
+ fieldOrder: ["time", "weekday", "date"]
585
+ // inlineSeparators: [' ', ', '],
586
+ },
587
+ style: {
588
+ whiteSpace: "nowrap"
589
+ }
590
+ }
591
+ ),
592
+ lines.map((line, index) => /* @__PURE__ */ import_react.default.createElement("div", { key: `${line}-${index}`, style: import_perspectiveUtils.textStyles.text }, line))
593
+ );
594
+ }
595
+ }
596
+ ];
597
+ },
598
+ [staticData]
599
+ );
600
+ const _perspective = (0, import_react.useMemo)(
601
+ () => ({
602
+ key: "monitor",
603
+ label: "Monitor",
604
+ getChildComponentProps: (ctx) => ({
605
+ grid: {
606
+ bordered: true,
607
+ collapseUniformColumns: true,
608
+ columns: buildColumns(ctx),
609
+ defaultHiddenColumnKeys: ["order_origin", "updated"],
610
+ scroll: {
611
+ // x: '1800px',
612
+ x: "max-content",
613
+ autoCalc: true,
614
+ scrollToFirstRowOnChange: true
615
+ },
616
+ rowSelection: false,
617
+ onRow: (record) => ({
618
+ onClick: () => {
619
+ var _a2, _b2;
620
+ if (!record.id) return;
621
+ const time = /* @__PURE__ */ new Date();
622
+ utils == null ? void 0 : utils.action({
623
+ type: "pisell1.bookingDetail",
624
+ data: {
625
+ component_type: getBookingType(record),
626
+ booking_id: record.order.id,
627
+ type: record.parent_id === 0 ? "list" : "detail",
628
+ id: record.id,
629
+ isParallelResourcesBooking: record.relation_id === 0 && record.relation_type === "",
630
+ preliminaryBookingDetail: {
631
+ customer: (_a2 = record == null ? void 0 : record.order) == null ? void 0 : _a2.customer,
632
+ id: record.order.id,
633
+ order_sales_channel: (_b2 = record == null ? void 0 : record.order) == null ? void 0 : _b2.order_sales_channel,
634
+ bookings: {
635
+ booking_id: record == null ? void 0 : record.booking_id,
636
+ appointment_status: record == null ? void 0 : record.appointment_status,
637
+ list: [
638
+ {
639
+ start_date: record == null ? void 0 : record.start_date,
640
+ start_time: record == null ? void 0 : record.start_time
641
+ }
642
+ ]
643
+ }
644
+ }
645
+ },
646
+ callback: (cbParams) => {
647
+ const { type } = cbParams || {};
648
+ if (Date.now() - time.getTime() < 500) {
649
+ return;
650
+ }
651
+ if (type === "close") {
652
+ return;
653
+ }
654
+ ctx.refresh();
655
+ }
656
+ });
657
+ }
658
+ })
659
+ },
660
+ toolBar: {
661
+ search: { showConfirmButton: false },
662
+ sort: { list: (0, import_booking.getSortList)() },
663
+ filter: {
664
+ hiddenQuickFilter: true,
665
+ defaultFilterValue: {
666
+ quickFilter: [],
667
+ otherFilter: (0, import_booking.getFilterButtonList)(),
668
+ values: {}
669
+ }
670
+ },
671
+ quickFilter: {
672
+ filterList: [
673
+ {
674
+ type: "rangePicker",
675
+ name: "booking_time_start_between",
676
+ key: "bookingTimeStartBetween",
677
+ props: {
678
+ placeholder: import_utils.locales.getText(
679
+ "pisell2.salesManagement.booking.filter.bookingDate.label"
680
+ ),
681
+ showTime: true
682
+ }
683
+ }
684
+ ]
685
+ }
686
+ },
687
+ batchActionBar: {
688
+ overflowThreshold: 2
689
+ }
690
+ })
691
+ }),
692
+ [buildColumns, utils, locale]
693
+ );
694
+ return _perspective;
695
+ };
696
+ // Annotate the CommonJS export names for ESM import in node:
697
+ 0 && (module.exports = {
698
+ useBookingPerspective
699
+ });