@aglyn/plugins-commerce 1.0.0-beta.285 → 1.0.0-beta.287

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 (420) hide show
  1. package/README.md +1 -1
  2. package/package.json +13 -13
  3. package/src/lib/components/cart.js +25 -12
  4. package/src/lib/components/cart.js.map +1 -1
  5. package/src/lib/components/commerce-console-page.js +70 -13
  6. package/src/lib/components/commerce-console-page.js.map +1 -1
  7. package/src/lib/components/console/order-detail-dialog.component.js +2 -1
  8. package/src/lib/components/console/order-detail-dialog.component.js.map +1 -1
  9. package/src/lib/components/console/payment-methods-card.component.js +1 -1
  10. package/src/lib/components/console/payment-methods-card.component.js.map +1 -1
  11. package/src/lib/components/console/pos/pos-cart-panel.component.d.ts +5 -0
  12. package/src/lib/components/console/pos/pos-cart-panel.component.js +18 -12
  13. package/src/lib/components/console/pos/pos-cart-panel.component.js.map +1 -1
  14. package/src/lib/components/console/pos/pos-hardware-api.d.ts +76 -5
  15. package/src/lib/components/console/pos/pos-hardware-api.js +53 -11
  16. package/src/lib/components/console/pos/pos-hardware-api.js.map +1 -1
  17. package/src/lib/components/console/pos/pos-hardware-buyer.component.d.ts +18 -0
  18. package/src/lib/components/console/pos/pos-hardware-buyer.component.js +629 -0
  19. package/src/lib/components/console/pos/pos-hardware-buyer.component.js.map +1 -0
  20. package/src/lib/components/console/pos/pos-hardware-sale-api.d.ts +162 -0
  21. package/src/lib/components/console/pos/pos-hardware-sale-api.js +122 -0
  22. package/src/lib/components/console/pos/pos-hardware-sale-api.js.map +1 -0
  23. package/src/lib/components/console/pos/pos-hardware-sale-terms.component.d.ts +39 -0
  24. package/src/lib/components/console/pos/pos-hardware-sale-terms.component.js +251 -0
  25. package/src/lib/components/console/pos/pos-hardware-sale-terms.component.js.map +1 -0
  26. package/src/lib/components/console/pos/use-pos-display.js +50 -0
  27. package/src/lib/components/console/pos/use-pos-display.js.map +1 -1
  28. package/src/lib/components/console/pos-cellular-control.component.d.ts +41 -0
  29. package/src/lib/components/console/pos-cellular-control.component.js +211 -0
  30. package/src/lib/components/console/pos-cellular-control.component.js.map +1 -0
  31. package/src/lib/components/console/pos-devices-card.component.d.ts +9 -1
  32. package/src/lib/components/console/pos-devices-card.component.js +47 -15
  33. package/src/lib/components/console/pos-devices-card.component.js.map +1 -1
  34. package/src/lib/components/console/pos-display/pos-display-api.d.ts +6 -0
  35. package/src/lib/components/console/pos-display/pos-display-api.js +8 -1
  36. package/src/lib/components/console/pos-display/pos-display-api.js.map +1 -1
  37. package/src/lib/components/console/pos-display-page.component.d.ts +13 -0
  38. package/src/lib/components/console/pos-display-page.component.js +44 -2
  39. package/src/lib/components/console/pos-display-page.component.js.map +1 -1
  40. package/src/lib/components/console/pos-hardware-card.component.d.ts +12 -4
  41. package/src/lib/components/console/pos-hardware-card.component.js +157 -36
  42. package/src/lib/components/console/pos-hardware-card.component.js.map +1 -1
  43. package/src/lib/components/console/pos-hardware-orders-staff-page.component.js +360 -80
  44. package/src/lib/components/console/pos-hardware-orders-staff-page.component.js.map +1 -1
  45. package/src/lib/components/console/pos-hardware-terms-page.component.d.ts +34 -0
  46. package/src/lib/components/console/pos-hardware-terms-page.component.js +257 -0
  47. package/src/lib/components/console/pos-hardware-terms-page.component.js.map +1 -0
  48. package/src/lib/components/console/pos-hardware-terms-sign-page.component.d.ts +27 -0
  49. package/src/lib/components/console/pos-hardware-terms-sign-page.component.js +104 -0
  50. package/src/lib/components/console/pos-hardware-terms-sign-page.component.js.map +1 -0
  51. package/src/lib/components/console/pos-hardware-waiting-card.component.d.ts +24 -0
  52. package/src/lib/components/console/pos-hardware-waiting-card.component.js +205 -0
  53. package/src/lib/components/console/pos-hardware-waiting-card.component.js.map +1 -0
  54. package/src/lib/components/console/pos-ops/pos-check-in-dialog.component.js +297 -201
  55. package/src/lib/components/console/pos-ops/pos-check-in-dialog.component.js.map +1 -1
  56. package/src/lib/components/console/pos-ops/pos-check-ins-card.component.d.ts +3 -0
  57. package/src/lib/components/console/pos-ops/pos-check-ins-card.component.js +260 -92
  58. package/src/lib/components/console/pos-ops/pos-check-ins-card.component.js.map +1 -1
  59. package/src/lib/components/console/pos-ops/pos-operations-bar.component.d.ts +9 -0
  60. package/src/lib/components/console/pos-ops/pos-operations-bar.component.js +15 -6
  61. package/src/lib/components/console/pos-ops/pos-operations-bar.component.js.map +1 -1
  62. package/src/lib/components/console/pos-ops/pos-rain-check-dialog.component.d.ts +25 -0
  63. package/src/lib/components/console/pos-ops/pos-rain-check-dialog.component.js +136 -0
  64. package/src/lib/components/console/pos-ops/pos-rain-check-dialog.component.js.map +1 -0
  65. package/src/lib/components/console/pos-ops/pos-shift-panel.component.d.ts +6 -0
  66. package/src/lib/components/console/pos-ops/pos-shift-panel.component.js +48 -31
  67. package/src/lib/components/console/pos-ops/pos-shift-panel.component.js.map +1 -1
  68. package/src/lib/components/console/pos-page.component.d.ts +1 -1
  69. package/src/lib/components/console/pos-page.component.js +63 -12
  70. package/src/lib/components/console/pos-page.component.js.map +1 -1
  71. package/src/lib/components/console/pos-reader-splash-setting.component.js +1 -1
  72. package/src/lib/components/console/pos-reader-splash-setting.component.js.map +1 -1
  73. package/src/lib/components/console/product-check-in-fields.component.d.ts +4 -2
  74. package/src/lib/components/console/product-check-in-fields.component.js +60 -14
  75. package/src/lib/components/console/product-check-in-fields.component.js.map +1 -1
  76. package/src/lib/components/console/product-editor-dialog.component.js +44 -1
  77. package/src/lib/components/console/product-editor-dialog.component.js.map +1 -1
  78. package/src/lib/components/console/product-hardware-sku-field.component.d.ts +19 -0
  79. package/src/lib/components/console/product-hardware-sku-field.component.js +92 -0
  80. package/src/lib/components/console/product-hardware-sku-field.component.js.map +1 -0
  81. package/src/lib/components/console/product-kiosk-offer-field.component.d.ts +22 -0
  82. package/src/lib/components/console/product-kiosk-offer-field.component.js +94 -0
  83. package/src/lib/components/console/product-kiosk-offer-field.component.js.map +1 -0
  84. package/src/lib/components/console/product-register-fields.component.d.ts +4 -0
  85. package/src/lib/components/console/product-register-fields.component.js +31 -2
  86. package/src/lib/components/console/product-register-fields.component.js.map +1 -1
  87. package/src/lib/components/console/products-hub-card.component.js +11 -2
  88. package/src/lib/components/console/products-hub-card.component.js.map +1 -1
  89. package/src/lib/components/console/register-hardware-card.component.d.ts +11 -0
  90. package/src/lib/components/console/register-hardware-card.component.js +56 -27
  91. package/src/lib/components/console/register-hardware-card.component.js.map +1 -1
  92. package/src/lib/components/console/reservation-guests-dialog.component.d.ts +28 -0
  93. package/src/lib/components/console/reservation-guests-dialog.component.js +189 -0
  94. package/src/lib/components/console/reservation-guests-dialog.component.js.map +1 -0
  95. package/src/lib/components/console/reservations-card.component.d.ts +9 -0
  96. package/src/lib/components/console/reservations-card.component.js +158 -23
  97. package/src/lib/components/console/reservations-card.component.js.map +1 -1
  98. package/src/lib/components/console/shippingeasy-card.component.js +1 -1
  99. package/src/lib/components/console/shippingeasy-card.component.js.map +1 -1
  100. package/src/lib/components/console/shipstation-card.component.d.ts +1 -1
  101. package/src/lib/components/console/shipstation-card.component.js +3 -3
  102. package/src/lib/components/console/shipstation-card.component.js.map +1 -1
  103. package/src/lib/components/product-detail.d.ts +4 -0
  104. package/src/lib/components/product-detail.js +40 -5
  105. package/src/lib/components/product-detail.js.map +1 -1
  106. package/src/lib/components/product-reviews.js +28 -11
  107. package/src/lib/components/product-reviews.js.map +1 -1
  108. package/src/lib/components/reservation-widget.js +28 -5
  109. package/src/lib/components/reservation-widget.js.map +1 -1
  110. package/src/lib/components/use-day-picker.d.ts +25 -0
  111. package/src/lib/components/use-day-picker.js +57 -0
  112. package/src/lib/components/use-day-picker.js.map +1 -0
  113. package/src/lib/constants/operator-alerts.d.ts +55 -0
  114. package/src/lib/constants/operator-alerts.js +156 -1
  115. package/src/lib/constants/operator-alerts.js.map +1 -1
  116. package/src/lib/declarations.console-server.js +54 -1
  117. package/src/lib/declarations.console-server.js.map +1 -1
  118. package/src/lib/declarations.d.ts +4 -2
  119. package/src/lib/declarations.js +11 -4
  120. package/src/lib/declarations.js.map +1 -1
  121. package/src/lib/declarations.server.js +9 -0
  122. package/src/lib/declarations.server.js.map +1 -1
  123. package/src/lib/model/commerce-cart.d.ts +9 -1
  124. package/src/lib/model/commerce-cart.js +4 -3
  125. package/src/lib/model/commerce-cart.js.map +1 -1
  126. package/src/lib/model/commerce-check-in-product.d.ts +26 -0
  127. package/src/lib/model/commerce-check-in-product.js +64 -2
  128. package/src/lib/model/commerce-check-in-product.js.map +1 -1
  129. package/src/lib/model/commerce-check-in-record.d.ts +127 -0
  130. package/src/lib/model/commerce-check-in-record.js +36 -0
  131. package/src/lib/model/commerce-check-in-record.js.map +1 -0
  132. package/src/lib/model/commerce-check-in.d.ts +91 -87
  133. package/src/lib/model/commerce-check-in.js +186 -62
  134. package/src/lib/model/commerce-check-in.js.map +1 -1
  135. package/src/lib/model/commerce-kiosk-offer.d.ts +31 -0
  136. package/src/lib/model/commerce-kiosk-offer.js +35 -0
  137. package/src/lib/model/commerce-kiosk-offer.js.map +1 -0
  138. package/src/lib/model/commerce-orders.d.ts +76 -0
  139. package/src/lib/model/commerce-orders.js +6 -0
  140. package/src/lib/model/commerce-orders.js.map +1 -1
  141. package/src/lib/model/commerce-pos-day-report.d.ts +54 -1
  142. package/src/lib/model/commerce-pos-day-report.js +39 -2
  143. package/src/lib/model/commerce-pos-day-report.js.map +1 -1
  144. package/src/lib/model/commerce-pos-offline.d.ts +1 -1
  145. package/src/lib/model/commerce-pos-offline.js +6 -1
  146. package/src/lib/model/commerce-pos-offline.js.map +1 -1
  147. package/src/lib/model/commerce-pos-ops.js +3 -2
  148. package/src/lib/model/commerce-pos-ops.js.map +1 -1
  149. package/src/lib/model/commerce-pos.d.ts +36 -3
  150. package/src/lib/model/commerce-pos.js +14 -6
  151. package/src/lib/model/commerce-pos.js.map +1 -1
  152. package/src/lib/model/commerce-receipt.js +3 -2
  153. package/src/lib/model/commerce-receipt.js.map +1 -1
  154. package/src/lib/model/commerce-reservations.d.ts +69 -4
  155. package/src/lib/model/commerce-reservations.js +57 -5
  156. package/src/lib/model/commerce-reservations.js.map +1 -1
  157. package/src/lib/model/commerce.d.ts +66 -0
  158. package/src/lib/model/commerce.js +15 -0
  159. package/src/lib/model/commerce.js.map +1 -1
  160. package/src/lib/model/order-list-fields.d.ts +11 -0
  161. package/src/lib/model/order-list-fields.js +17 -1
  162. package/src/lib/model/order-list-fields.js.map +1 -1
  163. package/src/lib/model/own-store-tax-summary.d.ts +152 -0
  164. package/src/lib/model/own-store-tax-summary.js +288 -0
  165. package/src/lib/model/own-store-tax-summary.js.map +1 -0
  166. package/src/lib/model/plugin-permissions.d.ts +67 -0
  167. package/src/lib/model/plugin-permissions.js +224 -7
  168. package/src/lib/model/plugin-permissions.js.map +1 -1
  169. package/src/lib/model/pos-cellular.d.ts +223 -0
  170. package/src/lib/model/pos-cellular.js +293 -0
  171. package/src/lib/model/pos-cellular.js.map +1 -0
  172. package/src/lib/model/pos-hardware-in-person.d.ts +98 -0
  173. package/src/lib/model/pos-hardware-in-person.js +224 -0
  174. package/src/lib/model/pos-hardware-in-person.js.map +1 -0
  175. package/src/lib/model/pos-hardware-tax-summary.d.ts +166 -0
  176. package/src/lib/model/pos-hardware-tax-summary.js +225 -0
  177. package/src/lib/model/pos-hardware-tax-summary.js.map +1 -0
  178. package/src/lib/model/pos-hardware-terms.d.ts +74 -0
  179. package/src/lib/model/pos-hardware-terms.js +115 -0
  180. package/src/lib/model/pos-hardware-terms.js.map +1 -0
  181. package/src/lib/model/pos-hardware.d.ts +349 -7
  182. package/src/lib/model/pos-hardware.js +291 -20
  183. package/src/lib/model/pos-hardware.js.map +1 -1
  184. package/src/lib/model/product-write.d.ts +10 -0
  185. package/src/lib/model/product-write.js +4 -2
  186. package/src/lib/model/product-write.js.map +1 -1
  187. package/src/lib/plugin.js +16 -0
  188. package/src/lib/plugin.js.map +1 -1
  189. package/src/lib/server/billing-webhook.js +25 -1
  190. package/src/lib/server/billing-webhook.js.map +1 -1
  191. package/src/lib/server/cancel-order.js +7 -5
  192. package/src/lib/server/cancel-order.js.map +1 -1
  193. package/src/lib/server/cart-checkout.js +20 -8
  194. package/src/lib/server/cart-checkout.js.map +1 -1
  195. package/src/lib/server/cart.js +29 -0
  196. package/src/lib/server/cart.js.map +1 -1
  197. package/src/lib/server/checkout.js +42 -13
  198. package/src/lib/server/checkout.js.map +1 -1
  199. package/src/lib/server/collection-membership.d.ts +4 -0
  200. package/src/lib/server/collection-membership.js +5 -10
  201. package/src/lib/server/collection-membership.js.map +1 -1
  202. package/src/lib/server/commerce-site-keys.d.ts +29 -0
  203. package/src/lib/server/commerce-site-keys.js +40 -0
  204. package/src/lib/server/commerce-site-keys.js.map +1 -0
  205. package/src/lib/server/draft-order.js +8 -5
  206. package/src/lib/server/draft-order.js.map +1 -1
  207. package/src/lib/server/fulfill-order.js +7 -5
  208. package/src/lib/server/fulfill-order.js.map +1 -1
  209. package/src/lib/server/gift-cards.js +8 -5
  210. package/src/lib/server/gift-cards.js.map +1 -1
  211. package/src/lib/server/local-fulfillment-status.js +9 -6
  212. package/src/lib/server/local-fulfillment-status.js.map +1 -1
  213. package/src/lib/server/member-post.js +6 -5
  214. package/src/lib/server/member-post.js.map +1 -1
  215. package/src/lib/server/membership-admin-password.d.ts +4 -2
  216. package/src/lib/server/membership-admin-password.js +10 -8
  217. package/src/lib/server/membership-admin-password.js.map +1 -1
  218. package/src/lib/server/membership-admin-remove.d.ts +7 -5
  219. package/src/lib/server/membership-admin-remove.js +9 -9
  220. package/src/lib/server/membership-admin-remove.js.map +1 -1
  221. package/src/lib/server/order-notifications.js +5 -2
  222. package/src/lib/server/order-notifications.js.map +1 -1
  223. package/src/lib/server/order-print.js +7 -5
  224. package/src/lib/server/order-print.js.map +1 -1
  225. package/src/lib/server/order-receipt-send.js +8 -5
  226. package/src/lib/server/order-receipt-send.js.map +1 -1
  227. package/src/lib/server/orders-shipping-prepare.js +9 -6
  228. package/src/lib/server/orders-shipping-prepare.js.map +1 -1
  229. package/src/lib/server/own-store-tax-return-source.d.ts +47 -0
  230. package/src/lib/server/own-store-tax-return-source.js +312 -0
  231. package/src/lib/server/own-store-tax-return-source.js.map +1 -0
  232. package/src/lib/server/payment-methods.js +13 -9
  233. package/src/lib/server/payment-methods.js.map +1 -1
  234. package/src/lib/server/pos-auth.d.ts +37 -6
  235. package/src/lib/server/pos-auth.js +40 -15
  236. package/src/lib/server/pos-auth.js.map +1 -1
  237. package/src/lib/server/pos-cellular-billing.d.ts +81 -0
  238. package/src/lib/server/pos-cellular-billing.js +711 -0
  239. package/src/lib/server/pos-cellular-billing.js.map +1 -0
  240. package/src/lib/server/pos-cellular-notify.d.ts +47 -0
  241. package/src/lib/server/pos-cellular-notify.js +150 -0
  242. package/src/lib/server/pos-cellular-notify.js.map +1 -0
  243. package/src/lib/server/pos-cellular.d.ts +88 -0
  244. package/src/lib/server/pos-cellular.js +339 -0
  245. package/src/lib/server/pos-cellular.js.map +1 -0
  246. package/src/lib/server/pos-check-in.d.ts +5 -1
  247. package/src/lib/server/pos-check-in.js +296 -28
  248. package/src/lib/server/pos-check-in.js.map +1 -1
  249. package/src/lib/server/pos-day-report.js +29 -3
  250. package/src/lib/server/pos-day-report.js.map +1 -1
  251. package/src/lib/server/pos-display.d.ts +16 -0
  252. package/src/lib/server/pos-display.js +129 -2
  253. package/src/lib/server/pos-display.js.map +1 -1
  254. package/src/lib/server/pos-hardware-admin.d.ts +10 -1
  255. package/src/lib/server/pos-hardware-admin.js +250 -84
  256. package/src/lib/server/pos-hardware-admin.js.map +1 -1
  257. package/src/lib/server/pos-hardware-attach.d.ts +105 -0
  258. package/src/lib/server/pos-hardware-attach.js +443 -0
  259. package/src/lib/server/pos-hardware-attach.js.map +1 -0
  260. package/src/lib/server/pos-hardware-buyer-lookup.d.ts +58 -0
  261. package/src/lib/server/pos-hardware-buyer-lookup.js +180 -0
  262. package/src/lib/server/pos-hardware-buyer-lookup.js.map +1 -0
  263. package/src/lib/server/pos-hardware-buyer-record.d.ts +29 -0
  264. package/src/lib/server/pos-hardware-buyer-record.js +86 -0
  265. package/src/lib/server/pos-hardware-buyer-record.js.map +1 -0
  266. package/src/lib/server/pos-hardware-cancel.d.ts +58 -0
  267. package/src/lib/server/pos-hardware-cancel.js +147 -0
  268. package/src/lib/server/pos-hardware-cancel.js.map +1 -0
  269. package/src/lib/server/pos-hardware-closure-notices.d.ts +27 -0
  270. package/src/lib/server/pos-hardware-closure-notices.js +85 -0
  271. package/src/lib/server/pos-hardware-closure-notices.js.map +1 -0
  272. package/src/lib/server/pos-hardware-closure.d.ts +60 -0
  273. package/src/lib/server/pos-hardware-closure.js +153 -0
  274. package/src/lib/server/pos-hardware-closure.js.map +1 -0
  275. package/src/lib/server/pos-hardware-in-person.d.ts +61 -0
  276. package/src/lib/server/pos-hardware-in-person.js +236 -0
  277. package/src/lib/server/pos-hardware-in-person.js.map +1 -0
  278. package/src/lib/server/pos-hardware-notify.d.ts +40 -2
  279. package/src/lib/server/pos-hardware-notify.js +195 -14
  280. package/src/lib/server/pos-hardware-notify.js.map +1 -1
  281. package/src/lib/server/pos-hardware-readers.d.ts +115 -0
  282. package/src/lib/server/pos-hardware-readers.js +430 -0
  283. package/src/lib/server/pos-hardware-readers.js.map +1 -0
  284. package/src/lib/server/pos-hardware-returns.d.ts +116 -0
  285. package/src/lib/server/pos-hardware-returns.js +502 -0
  286. package/src/lib/server/pos-hardware-returns.js.map +1 -0
  287. package/src/lib/server/pos-hardware-sale-fields.d.ts +28 -0
  288. package/src/lib/server/pos-hardware-sale-fields.js +44 -0
  289. package/src/lib/server/pos-hardware-sale-fields.js.map +1 -0
  290. package/src/lib/server/pos-hardware-sale.d.ts +54 -0
  291. package/src/lib/server/pos-hardware-sale.js +369 -0
  292. package/src/lib/server/pos-hardware-sale.js.map +1 -0
  293. package/src/lib/server/pos-hardware-tax-return-source.d.ts +99 -0
  294. package/src/lib/server/pos-hardware-tax-return-source.js +462 -0
  295. package/src/lib/server/pos-hardware-tax-return-source.js.map +1 -0
  296. package/src/lib/server/pos-hardware-terms.d.ts +64 -0
  297. package/src/lib/server/pos-hardware-terms.js +154 -0
  298. package/src/lib/server/pos-hardware-terms.js.map +1 -0
  299. package/src/lib/server/pos-hardware-user-eraser.d.ts +3 -0
  300. package/src/lib/server/pos-hardware-user-eraser.js +31 -7
  301. package/src/lib/server/pos-hardware-user-eraser.js.map +1 -1
  302. package/src/lib/server/pos-hardware-webhook.d.ts +5 -0
  303. package/src/lib/server/pos-hardware-webhook.js +51 -6
  304. package/src/lib/server/pos-hardware-webhook.js.map +1 -1
  305. package/src/lib/server/pos-hardware.d.ts +74 -1
  306. package/src/lib/server/pos-hardware.js +175 -10
  307. package/src/lib/server/pos-hardware.js.map +1 -1
  308. package/src/lib/server/pos-kiosk.d.ts +2 -0
  309. package/src/lib/server/pos-kiosk.js +17 -12
  310. package/src/lib/server/pos-kiosk.js.map +1 -1
  311. package/src/lib/server/pos-offline-card-order.d.ts +64 -0
  312. package/src/lib/server/pos-offline-card-order.js +102 -0
  313. package/src/lib/server/pos-offline-card-order.js.map +1 -0
  314. package/src/lib/server/pos-offline-card-reconcile.d.ts +67 -1
  315. package/src/lib/server/pos-offline-card-reconcile.js +215 -18
  316. package/src/lib/server/pos-offline-card-reconcile.js.map +1 -1
  317. package/src/lib/server/pos-offline-sync.d.ts +39 -0
  318. package/src/lib/server/pos-offline-sync.js +190 -55
  319. package/src/lib/server/pos-offline-sync.js.map +1 -1
  320. package/src/lib/server/pos-ops-gate.d.ts +15 -4
  321. package/src/lib/server/pos-ops-gate.js +42 -9
  322. package/src/lib/server/pos-ops-gate.js.map +1 -1
  323. package/src/lib/server/pos-ops-routes.js +24 -0
  324. package/src/lib/server/pos-ops-routes.js.map +1 -1
  325. package/src/lib/server/pos-order-refund-ids.d.ts +28 -0
  326. package/src/lib/server/pos-order-refund-ids.js +31 -0
  327. package/src/lib/server/pos-order-refund-ids.js.map +1 -0
  328. package/src/lib/server/pos-order.js +52 -49
  329. package/src/lib/server/pos-order.js.map +1 -1
  330. package/src/lib/server/pos-payment.js +1 -1
  331. package/src/lib/server/pos-payment.js.map +1 -1
  332. package/src/lib/server/pos-reader-splash-admin.js +30 -32
  333. package/src/lib/server/pos-reader-splash-admin.js.map +1 -1
  334. package/src/lib/server/pos-reader-splash-images-route.d.ts +17 -0
  335. package/src/lib/server/pos-reader-splash-images-route.js +113 -0
  336. package/src/lib/server/pos-reader-splash-images-route.js.map +1 -0
  337. package/src/lib/server/pos-reader-splash-images.d.ts +51 -0
  338. package/src/lib/server/pos-reader-splash-images.js +123 -0
  339. package/src/lib/server/pos-reader-splash-images.js.map +1 -0
  340. package/src/lib/server/pos-reader-splash.d.ts +68 -1
  341. package/src/lib/server/pos-reader-splash.js +182 -11
  342. package/src/lib/server/pos-reader-splash.js.map +1 -1
  343. package/src/lib/server/pos-readers.d.ts +29 -0
  344. package/src/lib/server/pos-readers.js +134 -35
  345. package/src/lib/server/pos-readers.js.map +1 -1
  346. package/src/lib/server/pos-return.d.ts +10 -0
  347. package/src/lib/server/pos-return.js +26 -1
  348. package/src/lib/server/pos-return.js.map +1 -1
  349. package/src/lib/server/pos-sale.js +6 -1
  350. package/src/lib/server/pos-sale.js.map +1 -1
  351. package/src/lib/server/pos-shift.js +11 -0
  352. package/src/lib/server/pos-shift.js.map +1 -1
  353. package/src/lib/server/pos-staff-pin.js +25 -20
  354. package/src/lib/server/pos-staff-pin.js.map +1 -1
  355. package/src/lib/server/pos-terminal.d.ts +14 -4
  356. package/src/lib/server/pos-terminal.js +34 -38
  357. package/src/lib/server/pos-terminal.js.map +1 -1
  358. package/src/lib/server/printers.d.ts +7 -3
  359. package/src/lib/server/printers.js +18 -12
  360. package/src/lib/server/printers.js.map +1 -1
  361. package/src/lib/server/product-drafts.d.ts +11 -1
  362. package/src/lib/server/product-drafts.js +12 -8
  363. package/src/lib/server/product-drafts.js.map +1 -1
  364. package/src/lib/server/product.d.ts +15 -1
  365. package/src/lib/server/product.js +16 -3
  366. package/src/lib/server/product.js.map +1 -1
  367. package/src/lib/server/products-write.d.ts +26 -2
  368. package/src/lib/server/products-write.js +19 -7
  369. package/src/lib/server/products-write.js.map +1 -1
  370. package/src/lib/server/refund.js +34 -11
  371. package/src/lib/server/refund.js.map +1 -1
  372. package/src/lib/server/reservation-availability-query.d.ts +8 -0
  373. package/src/lib/server/reservation-availability-query.js +11 -1
  374. package/src/lib/server/reservation-availability-query.js.map +1 -1
  375. package/src/lib/server/reservation-availability.d.ts +1 -1
  376. package/src/lib/server/reservation-availability.js +7 -2
  377. package/src/lib/server/reservation-availability.js.map +1 -1
  378. package/src/lib/server/reservation-guests.d.ts +32 -0
  379. package/src/lib/server/reservation-guests.js +285 -0
  380. package/src/lib/server/reservation-guests.js.map +1 -0
  381. package/src/lib/server/reservation-walk-in.d.ts +11 -1
  382. package/src/lib/server/reservation-walk-in.js +56 -12
  383. package/src/lib/server/reservation-walk-in.js.map +1 -1
  384. package/src/lib/server/reserve.js +18 -5
  385. package/src/lib/server/reserve.js.map +1 -1
  386. package/src/lib/server/returns.js +9 -6
  387. package/src/lib/server/returns.js.map +1 -1
  388. package/src/lib/server/reviews.d.ts +22 -2
  389. package/src/lib/server/reviews.js +88 -20
  390. package/src/lib/server/reviews.js.map +1 -1
  391. package/src/lib/server/shipping-connectors.js +10 -11
  392. package/src/lib/server/shipping-connectors.js.map +1 -1
  393. package/src/lib/server/site-page-resolver.js +20 -3
  394. package/src/lib/server/site-page-resolver.js.map +1 -1
  395. package/src/lib/server/store-day.d.ts +33 -0
  396. package/src/lib/server/store-day.js +46 -0
  397. package/src/lib/server/store-day.js.map +1 -0
  398. package/src/lib/server/store-setup-ai-writer.d.ts +2 -1
  399. package/src/lib/server/store-setup-ai-writer.js +5 -6
  400. package/src/lib/server/store-setup-ai-writer.js.map +1 -1
  401. package/src/lib/server/storefront-tax.d.ts +13 -0
  402. package/src/lib/server/storefront-tax.js +8 -1
  403. package/src/lib/server/storefront-tax.js.map +1 -1
  404. package/src/lib/server/tax-return-source.d.ts +32 -3
  405. package/src/lib/server/tax-return-source.js +99 -20
  406. package/src/lib/server/tax-return-source.js.map +1 -1
  407. package/src/lib/server.js +100 -2
  408. package/src/lib/server.js.map +1 -1
  409. package/src/lib/testing/fake-firestore.js +58 -16
  410. package/src/lib/testing/fake-firestore.js.map +1 -1
  411. package/src/lib/testing/pos-ops-memory-firestore.js +18 -4
  412. package/src/lib/testing/pos-ops-memory-firestore.js.map +1 -1
  413. package/src/lib/testing/site-register-permissions.d.ts +29 -0
  414. package/src/lib/testing/site-register-permissions.js +38 -0
  415. package/src/lib/testing/site-register-permissions.js.map +1 -0
  416. package/src/lib/transfer/tracking.server.js +8 -5
  417. package/src/lib/transfer/tracking.server.js.map +1 -1
  418. package/src/lib/utils/add-to-cart.d.ts +2 -0
  419. package/src/lib/utils/add-to-cart.js +6 -3
  420. package/src/lib/utils/add-to-cart.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../../libs/plugins/commerce/src/lib/components/console/pos-ops/pos-check-in-dialog.component.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n'use client'\n\nimport {\n Alert,\n Box,\n Button,\n Chip,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Divider,\n List,\n ListItem,\n ListItemButton,\n ListItemText,\n MenuItem,\n Stack,\n TextField,\n Typography,\n} from '@mui/material'\nimport { useUser } from '@aglyn/tenant-feature-instance'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport {\n alreadyCheckedInLabel,\n checkInItemLabel,\n checkInTimeLabel,\n CHECK_IN_WRISTBAND_COLORS,\n CHECK_IN_WRISTBAND_MAX,\n describeWristband,\n type CheckInCustomer,\n type CheckInRow,\n} from '../../../model/commerce-check-in'\nimport { POS_TOUCH_PX } from '../pos/pos-product-grid.component'\nimport { callPosOps, newPosAttemptKey } from './pos-ops-api'\nimport { PosCheckInZone } from './pos-check-in-zone.component'\n\n/** How long typing pauses before the register asks. */\nconst SEARCH_DEBOUNCE_MS = 250\n\n/** The customer to open on, as the register's customer panel names them. */\nexport interface PosCheckInTarget {\n customerKey?: string\n email?: string | null\n contactId?: string | null\n}\n\nexport interface PosCheckInDialogProps {\n open: boolean\n hostId: string\n /** The register the dialog was opened at, so a PIN's cashier is who checks people in. */\n registerId?: string\n cashierAssertion?: string\n /** Opens straight on one customer rather than on the search. */\n initialCustomer?: PosCheckInTarget | null\n onClose: () => void\n}\n\ntype Draft = { number: string; color: string }\n\n/**\n * Check-in at the window (AGL-4043): look the customer up by name, email,\n * phone or order number, see each person their passes, camping and stays\n * cover today, and check each in with an optional wristband number and\n * color. One already checked in says when and by whom, with an undo.\n */\nexport function PosCheckInDialog(props: PosCheckInDialogProps) {\n const { open, hostId, registerId, cashierAssertion, initialCustomer, onClose } = props\n const { data: user } = useUser()\n const [text, setText] = useState('')\n const [customers, setCustomers] = useState<CheckInCustomer[]>([])\n const [searched, setSearched] = useState(false)\n const [day, setDay] = useState<{ dayKey: string; timeZone: string } | null>(null)\n const [customer, setCustomer] = useState<CheckInCustomer | null>(null)\n const [rows, setRows] = useState<CheckInRow[]>([])\n const [drafts, setDrafts] = useState<Record<string, Draft>>({})\n const [busy, setBusy] = useState(false)\n const [error, setError] = useState('')\n const [notice, setNotice] = useState('')\n const latest = useRef(0)\n\n const reset = useCallback(() => {\n setText('')\n setCustomers([])\n setSearched(false)\n setCustomer(null)\n setRows([])\n setDrafts({})\n setError('')\n setNotice('')\n }, [])\n\n const openCustomer = useCallback(\n async (target: PosCheckInTarget) => {\n if (!user) return\n setBusy(true)\n setError('')\n setNotice('')\n const answer = await callPosOps<{\n dayKey?: string\n timeZone?: string\n customer?: CheckInCustomer | null\n checkIns?: CheckInRow[]\n }>(user, 'pos-check-in', { hostId, action: 'customer', ...target })\n setBusy(false)\n if (!answer.ok) return setError(answer.body.error ?? 'That customer could not be opened.')\n if (answer.body.dayKey) setDay({ dayKey: answer.body.dayKey, timeZone: answer.body.timeZone ?? 'UTC' })\n setCustomer(answer.body.customer ?? null)\n setRows(answer.body.checkIns ?? [])\n setDrafts({})\n if (!answer.body.checkIns?.length) setNotice('Nothing to check in today for this customer.')\n },\n [user, hostId],\n )\n\n useEffect(() => {\n if (!open) return reset()\n if (initialCustomer && (initialCustomer.customerKey || initialCustomer.email || initialCustomer.contactId)) {\n void openCustomer(initialCustomer)\n }\n // Opening is the trigger; a new target while open is not.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n useEffect(() => {\n const typed = text.trim()\n if (!open || typed.length < 2 || !user) {\n setCustomers([])\n setSearched(false)\n return\n }\n const ticket = ++latest.current\n const timer = window.setTimeout(() => {\n void callPosOps<{ dayKey?: string; timeZone?: string; customers?: CheckInCustomer[] }>(user, 'pos-check-in', {\n hostId,\n action: 'search',\n text: typed,\n }).then((answer) => {\n if (ticket !== latest.current) return\n if (!answer.ok) return setError(answer.body.error ?? 'The search did not run.')\n setError('')\n if (answer.body.dayKey) setDay({ dayKey: answer.body.dayKey, timeZone: answer.body.timeZone ?? 'UTC' })\n setCustomers(answer.body.customers ?? [])\n setSearched(true)\n })\n }, SEARCH_DEBOUNCE_MS)\n return () => window.clearTimeout(timer)\n }, [text, user, hostId, open])\n\n const merge = (changed: CheckInRow[]) => {\n const byId = new Map(changed.map((row) => [row.id, row]))\n setRows((current) => current.map((row) => byId.get(row.id) ?? row))\n }\n\n const checkIn = async (targets: CheckInRow[]) => {\n if (!targets.length) return\n setBusy(true)\n setError('')\n setNotice('')\n const answer = await callPosOps<{ checkedIn?: CheckInRow[]; alreadyCheckedIn?: CheckInRow[] }>(\n user,\n 'pos-check-in',\n {\n hostId,\n action: 'check_in',\n checkIns: targets.map((row) => {\n const draft = drafts[row.id]\n return {\n id: row.id,\n ...(draft && (draft.number.trim() || draft.color)\n ? { wristband: { number: draft.number.trim(), color: draft.color } }\n : {}),\n }\n }),\n ...(registerId ? { registerId } : {}),\n ...(cashierAssertion ? { cashierAssertion } : {}),\n },\n { idempotencyKey: newPosAttemptKey() },\n )\n setBusy(false)\n if (!answer.ok) return setError(answer.body.error ?? 'They could not be checked in.')\n merge([...(answer.body.checkedIn ?? []), ...(answer.body.alreadyCheckedIn ?? [])])\n const already = answer.body.alreadyCheckedIn ?? []\n if (already.length && day) setNotice(alreadyCheckedInLabel(already[0]!, day.timeZone))\n }\n\n const undo = async (row: CheckInRow) => {\n setBusy(true)\n setError('')\n setNotice('')\n const answer = await callPosOps<{ checkIn?: CheckInRow }>(user, 'pos-check-in', {\n hostId,\n action: 'undo',\n id: row.id,\n ...(registerId ? { registerId } : {}),\n ...(cashierAssertion ? { cashierAssertion } : {}),\n })\n setBusy(false)\n if (!answer.ok || !answer.body.checkIn) return setError(answer.body.error ?? 'The check-in could not be undone.')\n merge([answer.body.checkIn])\n }\n\n const setDraft = (id: string, patch: Partial<Draft>) =>\n setDrafts((current) => ({ ...current, [id]: { number: '', color: '', ...current[id], ...patch } }))\n\n const waiting = rows.filter((row) => row.status === 'expected')\n const dayKey = day?.dayKey ?? ''\n\n return (\n <Dialog open={open} onClose={onClose} maxWidth=\"sm\" fullWidth>\n <DialogTitle>{customer ? customer.name || customer.email || 'Customer' : 'Check in'}</DialogTitle>\n <DialogContent>\n <Stack spacing={2} sx={{ pt: 1 }}>\n {customer ? (\n <>\n <Stack direction=\"row\" spacing={1} useFlexGap sx={{ alignItems: 'center', flexWrap: 'wrap' }}>\n {customer.email ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {customer.email}\n </Typography>\n ) : null}\n <Chip\n size=\"small\"\n variant=\"outlined\"\n color={rows.length && !waiting.length ? 'success' : 'default'}\n label={`${rows.filter((row) => row.status === 'checked_in').length} of ${rows.length} checked in`}\n />\n {dayKey ? (\n <PosCheckInZone\n hostId={hostId}\n orgId={undefined}\n contactId={customer.contactId}\n email={customer.email ? customer.email.toLowerCase() : null}\n dayKey={dayKey}\n name={customer.name}\n unitsDue={rows.length}\n placement=\"check-in-customer\"\n />\n ) : null}\n </Stack>\n <List disablePadding>\n {rows.map((row, index) => (\n <Box key={row.id}>\n {index ? <Divider component=\"li\" /> : null}\n <ListItem disableGutters sx={{ display: 'block', py: 1.5 }}>\n <Stack spacing={1}>\n <ListItemText\n primary={checkInItemLabel(row)}\n secondary={\n row.status === 'checked_in' && day\n ? [\n `Checked in at ${checkInTimeLabel(row.checkedInAtMs, day.timeZone)}` +\n (row.checkedInByName ? ` by ${row.checkedInByName}` : ''),\n describeWristband(row.wristband),\n ]\n .filter(Boolean)\n .join(' · ')\n : row.orderLabel ?? (row.source === 'reservation' ? 'Stay' : '')\n }\n />\n {row.status === 'checked_in' ? (\n <Box>\n <Button size=\"small\" onClick={() => void undo(row)} disabled={busy}>\n {'Undo'}\n </Button>\n </Box>\n ) : (\n <Stack direction={{ xs: 'column', sm: 'row' }} spacing={1}>\n <TextField\n size=\"small\"\n label=\"Wristband number\"\n value={drafts[row.id]?.number ?? ''}\n onChange={(event) => setDraft(row.id, { number: event.target.value })}\n slotProps={{ htmlInput: { maxLength: CHECK_IN_WRISTBAND_MAX } }}\n sx={{ flex: 1 }}\n />\n <TextField\n select\n size=\"small\"\n label=\"Color\"\n value={drafts[row.id]?.color ?? ''}\n onChange={(event) => setDraft(row.id, { color: event.target.value })}\n sx={{ flex: 1 }}\n >\n <MenuItem value=\"\">{'None'}</MenuItem>\n {CHECK_IN_WRISTBAND_COLORS.map((color) => (\n <MenuItem key={color} value={color}>\n {color}\n </MenuItem>\n ))}\n </TextField>\n <Button\n variant=\"contained\"\n onClick={() => void checkIn([row])}\n disabled={busy}\n sx={{ minHeight: POS_TOUCH_PX }}\n >\n {'Check in'}\n </Button>\n </Stack>\n )}\n </Stack>\n </ListItem>\n </Box>\n ))}\n </List>\n </>\n ) : (\n <>\n <TextField\n autoFocus\n label=\"Find a customer\"\n placeholder=\"Name, email, phone or order number\"\n value={text}\n onChange={(event) => setText(event.target.value)}\n />\n {customers.length ? (\n <List dense disablePadding>\n {customers.map((one) => (\n <ListItem key={one.customerKey} disablePadding>\n <ListItemButton onClick={() => void openCustomer({ customerKey: one.customerKey })}>\n <ListItemText\n primary={one.name || one.email || 'Customer'}\n secondary={[\n `${one.unitsCheckedIn} of ${one.unitsDue} checked in`,\n one.items.join(', '),\n one.email,\n one.phone,\n ]\n .filter(Boolean)\n .join(' · ')}\n />\n </ListItemButton>\n {dayKey ? (\n <PosCheckInZone\n hostId={hostId}\n orgId={undefined}\n contactId={one.contactId}\n email={one.email ? one.email.toLowerCase() : null}\n dayKey={dayKey}\n name={one.name}\n unitsDue={one.unitsDue}\n placement=\"check-in-row\"\n />\n ) : null}\n </ListItem>\n ))}\n </List>\n ) : searched ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {'Nobody with that name, email, phone or order number has anything to check in today.'}\n </Typography>\n ) : (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {'Passes, camping and stays bought online or at the register show up here on the day they are for.'}\n </Typography>\n )}\n </>\n )}\n {notice ? <Alert severity=\"info\">{notice}</Alert> : null}\n {error ? <Alert severity=\"warning\">{error}</Alert> : null}\n </Stack>\n </DialogContent>\n <DialogActions>\n {customer ? (\n <Button\n onClick={() => {\n setCustomer(null)\n setRows([])\n setNotice('')\n }}\n >\n {'Back to search'}\n </Button>\n ) : null}\n <Box sx={{ flex: 1 }} />\n <Button onClick={onClose}>{'Done'}</Button>\n {customer && waiting.length > 1 ? (\n <Button variant=\"contained\" disabled={busy} onClick={() => void checkIn(waiting)}>\n {`Check in all ${waiting.length}`}\n </Button>\n ) : null}\n </DialogActions>\n </Dialog>\n )\n}\n\nPosCheckInDialog.displayName = 'PosCheckInDialog'\n\nexport default PosCheckInDialog\n"],"names":["Alert","Box","Button","Chip","Dialog","DialogActions","DialogContent","DialogTitle","Divider","List","ListItem","ListItemButton","ListItemText","MenuItem","Stack","TextField","Typography","useUser","useCallback","useEffect","useRef","useState","alreadyCheckedInLabel","checkInItemLabel","checkInTimeLabel","CHECK_IN_WRISTBAND_COLORS","CHECK_IN_WRISTBAND_MAX","describeWristband","POS_TOUCH_PX","callPosOps","newPosAttemptKey","PosCheckInZone","SEARCH_DEBOUNCE_MS","PosCheckInDialog","props","open","hostId","registerId","cashierAssertion","initialCustomer","onClose","data","user","text","setText","customers","setCustomers","searched","setSearched","day","setDay","customer","setCustomer","rows","setRows","drafts","setDrafts","busy","setBusy","error","setError","notice","setNotice","latest","reset","openCustomer","target","answer","action","ok","body","dayKey","timeZone","checkIns","length","customerKey","email","contactId","typed","trim","ticket","current","timer","window","setTimeout","then","clearTimeout","merge","changed","byId","Map","map","row","id","get","checkIn","targets","draft","number","color","wristband","idempotencyKey","checkedIn","alreadyCheckedIn","already","undo","setDraft","patch","waiting","filter","status","maxWidth","fullWidth","name","spacing","sx","pt","direction","useFlexGap","alignItems","flexWrap","variant","size","label","orgId","undefined","toLowerCase","unitsDue","placement","disablePadding","index","component","disableGutters","display","py","primary","secondary","checkedInAtMs","checkedInByName","Boolean","join","orderLabel","source","onClick","disabled","xs","sm","value","onChange","event","slotProps","htmlInput","maxLength","flex","select","minHeight","autoFocus","placeholder","dense","one","unitsCheckedIn","items","phone","severity","displayName"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../../../../libs/plugins/commerce/src/lib/components/console/pos-ops/pos-check-in-dialog.component.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n'use client'\n\nimport {\n Alert,\n Box,\n Button,\n Chip,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Divider,\n List,\n ListItem,\n ListItemButton,\n ListItemText,\n MenuItem,\n Stack,\n TextField,\n Typography,\n} from '@mui/material'\nimport { useUser } from '@aglyn/tenant-feature-instance'\nimport { lazy, Suspense, useCallback, useEffect, useRef, useState } from 'react'\nimport { zonedDayKey } from '@aglyn/shared-util-timestamp/zoned-time'\nimport {\n alreadyCheckedInLabel,\n checkInItemLabel,\n checkInRainCheckIsOpen,\n checkInTimeLabel,\n CHECK_IN_WRISTBAND_COLORS,\n CHECK_IN_WRISTBAND_MAX,\n describeWristband,\n rainCheckLabel,\n type CheckInCustomer,\n type CheckInRow,\n} from '../../../model/commerce-check-in'\nimport { POS_TOUCH_PX } from '../pos/pos-product-grid.component'\nimport { callPosOps, newPosAttemptKey } from './pos-ops-api'\nimport { PosCheckInZone } from './pos-check-in-zone.component'\nimport { PosRainCheckDialog } from './pos-rain-check-dialog.component'\n\n/** A stay's guest count (AGL-4043), loaded the first time it opens. */\nconst ReservationGuestsDialog = lazy(() => import('../reservation-guests-dialog.component'))\n\n/** How long typing pauses before the register asks. */\nconst SEARCH_DEBOUNCE_MS = 250\n\n/** The customer to open on, as the register's customer panel names them. */\nexport interface PosCheckInTarget {\n customerKey?: string\n email?: string | null\n contactId?: string | null\n}\n\nexport interface PosCheckInDialogProps {\n open: boolean\n hostId: string\n /** The register the dialog was opened at, so a PIN's cashier is who checks people in. */\n registerId?: string\n cashierAssertion?: string\n /** Opens straight on one customer rather than on the search. */\n initialCustomer?: PosCheckInTarget | null\n onClose: () => void\n}\n\ntype Draft = { number: string; color: string }\n\n/**\n * Check-in at the window (AGL-4043): look the customer up by name, email,\n * phone or order number, see each person their passes, camping and stays\n * cover today, and check each in with an optional wristband number and\n * color. One already checked in says when and by whom, with an undo.\n */\nexport function PosCheckInDialog(props: PosCheckInDialogProps) {\n const { open, hostId, registerId, cashierAssertion, initialCustomer, onClose } = props\n const { data: user } = useUser()\n const [text, setText] = useState('')\n const [customers, setCustomers] = useState<CheckInCustomer[]>([])\n const [searched, setSearched] = useState(false)\n const [day, setDay] = useState<{ dayKey: string; timeZone: string } | null>(null)\n const [customer, setCustomer] = useState<CheckInCustomer | null>(null)\n const [rows, setRows] = useState<CheckInRow[]>([])\n const [drafts, setDrafts] = useState<Record<string, Draft>>({})\n const [busy, setBusy] = useState(false)\n const [error, setError] = useState('')\n const [notice, setNotice] = useState('')\n /** The pass a rain check is being given on (AGL-4043). */\n const [rainCheckRow, setRainCheckRow] = useState<CheckInRow | null>(null)\n /** The stay whose guests are being changed (AGL-4043). */\n const [guestsFor, setGuestsFor] = useState<string | null>(null)\n const latest = useRef(0)\n\n const reset = useCallback(() => {\n setText('')\n setCustomers([])\n setSearched(false)\n setCustomer(null)\n setRows([])\n setDrafts({})\n setError('')\n setNotice('')\n }, [])\n\n const openCustomer = useCallback(\n async (target: PosCheckInTarget) => {\n if (!user) return\n setBusy(true)\n setError('')\n setNotice('')\n const answer = await callPosOps<{\n dayKey?: string\n timeZone?: string\n customer?: CheckInCustomer | null\n checkIns?: CheckInRow[]\n }>(user, 'pos-check-in', { hostId, action: 'customer', ...target })\n setBusy(false)\n if (!answer.ok) return setError(answer.body.error ?? 'That customer could not be opened.')\n if (answer.body.dayKey) setDay({ dayKey: answer.body.dayKey, timeZone: answer.body.timeZone ?? 'UTC' })\n setCustomer(answer.body.customer ?? null)\n setRows(answer.body.checkIns ?? [])\n setDrafts({})\n if (!answer.body.checkIns?.length) setNotice('Nothing to check in today for this customer.')\n },\n [user, hostId],\n )\n\n useEffect(() => {\n if (!open) return reset()\n if (initialCustomer && (initialCustomer.customerKey || initialCustomer.email || initialCustomer.contactId)) {\n void openCustomer(initialCustomer)\n }\n // Opening is the trigger; a new target while open is not.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n useEffect(() => {\n const typed = text.trim()\n if (!open || typed.length < 2 || !user) {\n setCustomers([])\n setSearched(false)\n return\n }\n const ticket = ++latest.current\n const timer = window.setTimeout(() => {\n void callPosOps<{ dayKey?: string; timeZone?: string; customers?: CheckInCustomer[] }>(user, 'pos-check-in', {\n hostId,\n action: 'search',\n text: typed,\n }).then((answer) => {\n if (ticket !== latest.current) return\n if (!answer.ok) return setError(answer.body.error ?? 'The search did not run.')\n setError('')\n if (answer.body.dayKey) setDay({ dayKey: answer.body.dayKey, timeZone: answer.body.timeZone ?? 'UTC' })\n setCustomers(answer.body.customers ?? [])\n setSearched(true)\n })\n }, SEARCH_DEBOUNCE_MS)\n return () => window.clearTimeout(timer)\n }, [text, user, hostId, open])\n\n const merge = (changed: CheckInRow[]) => {\n const byId = new Map(changed.map((row) => [row.id, row]))\n setRows((current) => current.map((row) => byId.get(row.id) ?? row))\n }\n\n const checkIn = async (targets: CheckInRow[]) => {\n if (!targets.length) return\n setBusy(true)\n setError('')\n setNotice('')\n const answer = await callPosOps<{ checkedIn?: CheckInRow[]; alreadyCheckedIn?: CheckInRow[] }>(\n user,\n 'pos-check-in',\n {\n hostId,\n action: 'check_in',\n checkIns: targets.map((row) => {\n const draft = drafts[row.id]\n return {\n id: row.id,\n ...(draft && (draft.number.trim() || draft.color)\n ? { wristband: { number: draft.number.trim(), color: draft.color } }\n : {}),\n }\n }),\n // The window's day: an open rain check checked in is used on it.\n ...(day?.dayKey ? { day: day.dayKey } : {}),\n ...(registerId ? { registerId } : {}),\n ...(cashierAssertion ? { cashierAssertion } : {}),\n },\n { idempotencyKey: newPosAttemptKey() },\n )\n setBusy(false)\n if (!answer.ok) return setError(answer.body.error ?? 'They could not be checked in.')\n merge([...(answer.body.checkedIn ?? []), ...(answer.body.alreadyCheckedIn ?? [])])\n const already = answer.body.alreadyCheckedIn ?? []\n if (already.length && day) setNotice(alreadyCheckedInLabel(already[0]!, day.timeZone))\n }\n\n const undo = async (row: CheckInRow) => {\n setBusy(true)\n setError('')\n setNotice('')\n const answer = await callPosOps<{ checkIn?: CheckInRow }>(user, 'pos-check-in', {\n hostId,\n action: 'undo',\n id: row.id,\n ...(registerId ? { registerId } : {}),\n ...(cashierAssertion ? { cashierAssertion } : {}),\n })\n setBusy(false)\n if (!answer.ok || !answer.body.checkIn) return setError(answer.body.error ?? 'The check-in could not be undone.')\n merge([answer.body.checkIn])\n }\n\n const undoRainCheck = async (row: CheckInRow) => {\n setBusy(true)\n setError('')\n setNotice('')\n const answer = await callPosOps<{ checkIn?: CheckInRow }>(user, 'pos-check-in', {\n hostId,\n action: 'undo_rain_check',\n id: row.id,\n ...(registerId ? { registerId } : {}),\n ...(cashierAssertion ? { cashierAssertion } : {}),\n })\n setBusy(false)\n if (!answer.ok || !answer.body.checkIn) return setError(answer.body.error ?? 'The rain check could not be undone.')\n merge([answer.body.checkIn])\n }\n\n const setDraft = (id: string, patch: Partial<Draft>) =>\n setDrafts((current) => ({ ...current, [id]: { number: '', color: '', ...current[id], ...patch } }))\n\n const dayKey = day?.dayKey ?? ''\n /** A pass a dated rain check moved off the window's day: not to check in today. */\n const movedAway = (row: CheckInRow) => row.status === 'expected' && row.rainCheck?.kind === 'date' && row.dayKey !== dayKey\n // \"Check in all\" leaves rain checks alone: an open one is used one at a time.\n const waiting = rows.filter((row) => row.status === 'expected' && !movedAway(row) && !checkInRainCheckIsOpen(row))\n const todayKey = day ? zonedDayKey(Date.now(), day.timeZone) : ''\n\n return (\n <Dialog open={open} onClose={onClose} maxWidth=\"sm\" fullWidth>\n <DialogTitle>{customer ? customer.name || customer.email || 'Customer' : 'Check in'}</DialogTitle>\n <DialogContent>\n <Stack spacing={2} sx={{ pt: 1 }}>\n {customer ? (\n <>\n <Stack direction=\"row\" spacing={1} useFlexGap sx={{ alignItems: 'center', flexWrap: 'wrap' }}>\n {customer.email ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {customer.email}\n </Typography>\n ) : null}\n <Chip\n size=\"small\"\n variant=\"outlined\"\n color={rows.length && !waiting.length ? 'success' : 'default'}\n label={`${rows.filter((row) => row.status === 'checked_in').length} of ${rows.length} checked in`}\n />\n {dayKey ? (\n <PosCheckInZone\n hostId={hostId}\n orgId={undefined}\n contactId={customer.contactId}\n email={customer.email ? customer.email.toLowerCase() : null}\n dayKey={dayKey}\n name={customer.name}\n unitsDue={rows.length}\n placement=\"check-in-customer\"\n />\n ) : null}\n </Stack>\n <List disablePadding>\n {rows.map((row, index) => (\n <Box key={row.id}>\n {index ? <Divider component=\"li\" /> : null}\n <ListItem disableGutters sx={{ display: 'block', py: 1.5 }}>\n <Stack spacing={1}>\n <ListItemText\n primary={checkInItemLabel(row)}\n secondary={[\n row.status === 'checked_in' && day\n ? [\n `Checked in at ${checkInTimeLabel(row.checkedInAtMs, day.timeZone)}` +\n (row.checkedInByName ? ` by ${row.checkedInByName}` : ''),\n describeWristband(row.wristband),\n ]\n .filter(Boolean)\n .join(' · ')\n : row.orderLabel ?? (row.source === 'reservation' ? 'Stay' : ''),\n rainCheckLabel(row),\n ]\n .filter(Boolean)\n .join(' · ')}\n />\n {row.status === 'checked_in' ? (\n <Box>\n <Button size=\"small\" onClick={() => void undo(row)} disabled={busy}>\n {'Undo'}\n </Button>\n {row.source === 'reservation' && row.reservationId ? (\n <Button size=\"small\" onClick={() => setGuestsFor(row.reservationId)} disabled={busy}>\n {'Guests'}\n </Button>\n ) : null}\n </Box>\n ) : movedAway(row) ? (\n <Box>\n <Button size=\"small\" onClick={() => void undoRainCheck(row)} disabled={busy}>\n {'Undo rain check'}\n </Button>\n </Box>\n ) : (\n <Stack direction={{ xs: 'column', sm: 'row' }} spacing={1}>\n <TextField\n size=\"small\"\n label=\"Wristband number\"\n value={drafts[row.id]?.number ?? ''}\n onChange={(event) => setDraft(row.id, { number: event.target.value })}\n slotProps={{ htmlInput: { maxLength: CHECK_IN_WRISTBAND_MAX } }}\n sx={{ flex: 1 }}\n />\n <TextField\n select\n size=\"small\"\n label=\"Color\"\n value={drafts[row.id]?.color ?? ''}\n onChange={(event) => setDraft(row.id, { color: event.target.value })}\n sx={{ flex: 1 }}\n >\n <MenuItem value=\"\">{'None'}</MenuItem>\n {CHECK_IN_WRISTBAND_COLORS.map((color) => (\n <MenuItem key={color} value={color}>\n {color}\n </MenuItem>\n ))}\n </TextField>\n <Button\n variant=\"contained\"\n onClick={() => void checkIn([row])}\n disabled={busy}\n sx={{ minHeight: POS_TOUCH_PX }}\n >\n {'Check in'}\n </Button>\n {row.source === 'reservation' && row.reservationId ? (\n <Button onClick={() => setGuestsFor(row.reservationId)} disabled={busy}>\n {'Guests'}\n </Button>\n ) : null}\n {row.source === 'order' ? (\n row.rainCheck ? (\n <Button onClick={() => void undoRainCheck(row)} disabled={busy}>\n {'Undo rain check'}\n </Button>\n ) : (\n <Button onClick={() => setRainCheckRow(row)} disabled={busy || !todayKey}>\n {'Rain check'}\n </Button>\n )\n ) : null}\n </Stack>\n )}\n </Stack>\n </ListItem>\n </Box>\n ))}\n </List>\n </>\n ) : (\n <>\n <TextField\n autoFocus\n label=\"Find a customer\"\n placeholder=\"Name, email, phone or order number\"\n value={text}\n onChange={(event) => setText(event.target.value)}\n />\n {customers.length ? (\n <List dense disablePadding>\n {customers.map((one) => (\n <ListItem key={one.customerKey} disablePadding>\n <ListItemButton onClick={() => void openCustomer({ customerKey: one.customerKey })}>\n <ListItemText\n primary={one.name || one.email || 'Customer'}\n secondary={[\n `${one.unitsCheckedIn} of ${one.unitsDue} checked in`,\n one.items.join(', '),\n one.email,\n one.phone,\n ]\n .filter(Boolean)\n .join(' · ')}\n />\n </ListItemButton>\n {dayKey ? (\n <PosCheckInZone\n hostId={hostId}\n orgId={undefined}\n contactId={one.contactId}\n email={one.email ? one.email.toLowerCase() : null}\n dayKey={dayKey}\n name={one.name}\n unitsDue={one.unitsDue}\n placement=\"check-in-row\"\n />\n ) : null}\n </ListItem>\n ))}\n </List>\n ) : searched ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {'Nobody with that name, email, phone or order number has anything to check in today.'}\n </Typography>\n ) : (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {'Passes, camping and stays bought online or at the register show up here on the day they are for.'}\n </Typography>\n )}\n </>\n )}\n {notice ? <Alert severity=\"info\">{notice}</Alert> : null}\n {error ? <Alert severity=\"warning\">{error}</Alert> : null}\n </Stack>\n <PosRainCheckDialog\n row={rainCheckRow}\n hostId={hostId}\n todayKey={todayKey}\n registerId={registerId}\n cashierAssertion={cashierAssertion}\n onClose={() => setRainCheckRow(null)}\n onDone={(changed) => {\n setRainCheckRow(null)\n merge([changed])\n }}\n />\n {guestsFor ? (\n <Suspense fallback={null}>\n <ReservationGuestsDialog\n reservationId={guestsFor}\n hostId={hostId}\n onClose={() => setGuestsFor(null)}\n onDone={() => {\n setGuestsFor(null)\n // The stay's check-ins may have changed: read the customer again.\n if (customer) void openCustomer({ customerKey: customer.customerKey })\n }}\n />\n </Suspense>\n ) : null}\n </DialogContent>\n <DialogActions>\n {customer ? (\n <Button\n onClick={() => {\n setCustomer(null)\n setRows([])\n setNotice('')\n }}\n >\n {'Back to search'}\n </Button>\n ) : null}\n <Box sx={{ flex: 1 }} />\n <Button onClick={onClose}>{'Done'}</Button>\n {customer && waiting.length > 1 ? (\n <Button variant=\"contained\" disabled={busy} onClick={() => void checkIn(waiting)}>\n {`Check in all ${waiting.length}`}\n </Button>\n ) : null}\n </DialogActions>\n </Dialog>\n )\n}\n\nPosCheckInDialog.displayName = 'PosCheckInDialog'\n\nexport default PosCheckInDialog\n"],"names":["Alert","Box","Button","Chip","Dialog","DialogActions","DialogContent","DialogTitle","Divider","List","ListItem","ListItemButton","ListItemText","MenuItem","Stack","TextField","Typography","useUser","lazy","Suspense","useCallback","useEffect","useRef","useState","zonedDayKey","alreadyCheckedInLabel","checkInItemLabel","checkInRainCheckIsOpen","checkInTimeLabel","CHECK_IN_WRISTBAND_COLORS","CHECK_IN_WRISTBAND_MAX","describeWristband","rainCheckLabel","POS_TOUCH_PX","callPosOps","newPosAttemptKey","PosCheckInZone","PosRainCheckDialog","ReservationGuestsDialog","SEARCH_DEBOUNCE_MS","PosCheckInDialog","props","open","hostId","registerId","cashierAssertion","initialCustomer","onClose","data","user","text","setText","customers","setCustomers","searched","setSearched","day","setDay","customer","setCustomer","rows","setRows","drafts","setDrafts","busy","setBusy","error","setError","notice","setNotice","rainCheckRow","setRainCheckRow","guestsFor","setGuestsFor","latest","reset","openCustomer","target","answer","action","ok","body","dayKey","timeZone","checkIns","length","customerKey","email","contactId","typed","trim","ticket","current","timer","window","setTimeout","then","clearTimeout","merge","changed","byId","Map","map","row","id","get","checkIn","targets","draft","number","color","wristband","idempotencyKey","checkedIn","alreadyCheckedIn","already","undo","undoRainCheck","setDraft","patch","movedAway","status","rainCheck","kind","waiting","filter","todayKey","Date","now","maxWidth","fullWidth","name","spacing","sx","pt","direction","useFlexGap","alignItems","flexWrap","variant","size","label","orgId","undefined","toLowerCase","unitsDue","placement","disablePadding","index","component","disableGutters","display","py","primary","secondary","checkedInAtMs","checkedInByName","Boolean","join","orderLabel","source","onClick","disabled","reservationId","xs","sm","value","onChange","event","slotProps","htmlInput","maxLength","flex","select","minHeight","autoFocus","placeholder","dense","one","unitsCheckedIn","items","phone","severity","onDone","fallback","displayName"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { type CheckInDayTotals, type CheckInRow } from '../../../model/commerce-check-in';
2
+ import type { StayCheckInMode } from '../../../model/commerce-reservations';
2
3
  export interface PosCheckInsCardProps {
3
4
  hostId: string;
4
5
  /** The viewer may work the register: what the route's gate asks. */
@@ -10,6 +11,8 @@ interface DayList {
10
11
  totals: CheckInDayTotals;
11
12
  checkIns: CheckInRow[];
12
13
  truncated?: boolean;
14
+ /** How the store checks stays in (AGL-4043). */
15
+ stayCheckIn?: StayCheckInMode;
13
16
  }
14
17
  /** The day's list as a printable 80 mm document, like the day totals. */
15
18
  export declare function posCheckInsDocument(list: DayList): string;
@@ -21,31 +21,50 @@ import { CardDisplay } from "@aglyn/shared-ui-jsx";
21
21
  import { ListTable } from "@aglyn/shared-ui-jsx/components/list-table.component";
22
22
  import { authorizedFetch } from "@aglyn/shared-util-http/authorized-token";
23
23
  import { useFirestore, useFirestoreCollection, useUser } from "@aglyn/tenant-feature-instance";
24
- import { Alert, Button, Chip, Stack, Typography } from "@mui/material";
24
+ import { Alert, Button, Chip, Stack, ToggleButton, ToggleButtonGroup, Typography } from "@mui/material";
25
25
  import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs";
26
26
  import { DatePicker } from "@mui/x-date-pickers/DatePicker";
27
27
  import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider";
28
28
  import { collection, documentId, limit, orderBy, query } from "firebase/firestore";
29
- import { useCallback, useEffect, useMemo, useState } from "react";
30
- import { checkInItemLabel, checkInTimeLabel, describeWristband, POS_CHECK_IN_ROUTE } from "../../../model/commerce-check-in.js";
29
+ import { lazy, Suspense, useCallback, useEffect, useMemo, useState } from "react";
30
+ import { zonedDayKey } from "@aglyn/shared-util-timestamp/zoned-time";
31
+ import { checkInItemLabel, checkInRainCheckIsOpen, checkInStatusLabel, checkInTimeLabel, describeWristband, POS_CHECK_IN_ROUTE, rainCheckLabel } from "../../../model/commerce-check-in.js";
32
+ import { callPosOps } from "./pos-ops-api.js";
33
+ import { PosRainCheckDialog } from "./pos-rain-check-dialog.component.js";
31
34
  import { escapeHtml } from "../../../utils/escape-html.js";
32
35
  import CommerceStatTile from "../commerce-stat-tile.component.js";
33
36
  import { EntitlementGatedCard } from "../entitlement-gate.component.js";
34
37
  import { POS_RECEIPT_STYLES } from "./pos-receipt.js";
35
38
  import { printPosDocument } from "./pos-shift-report.component.js";
39
+ /** A stay's guest count (AGL-4043), loaded the first time it opens. */ const ReservationGuestsDialog = /*#__PURE__*/ lazy(()=>import("../reservation-guests-dialog.component.js"));
36
40
  const HEADER = "Today's check-ins";
37
41
  const HELP = pluginDocsHelp('posOperations', {
38
42
  anchor: '#check-in-at-the-window'
39
43
  });
40
44
  const DAY_FORMAT = 'YYYY-MM-DD';
45
+ /** The quick control's choices, in the order the window reads them. */ const STAY_MODE_LABELS = [
46
+ {
47
+ mode: 'resource',
48
+ label: 'As each resource is set'
49
+ },
50
+ {
51
+ mode: 'stay',
52
+ label: 'One per stay'
53
+ },
54
+ {
55
+ mode: 'guest',
56
+ label: 'One per guest'
57
+ }
58
+ ];
41
59
  /** The day's list as a printable 80 mm document, like the day totals. */ export function posCheckInsDocument(list) {
42
60
  const rows = list.checkIns.map((row)=>`<div class="row"><span>${escapeHtml(`${row.customerName || row.customerEmail || 'Customer'} · ${checkInItemLabel(row)}`)}</span>` + `<span>${escapeHtml(row.status === 'checked_in' ? [
43
61
  checkInTimeLabel(row.checkedInAtMs, list.timeZone),
44
62
  describeWristband(row.wristband)
45
- ].filter(Boolean).join(' ') : '—')}</span></div>`).join('');
63
+ ].filter(Boolean).join(' ') : checkInRainCheckIsOpen(row) ? 'Rain check' : '—')}</span></div>`).join('');
46
64
  return '<!doctype html><html><head><meta charset="utf-8">' + `<title>CHECK-INS</title><style>${POS_RECEIPT_STYLES}</style></head><body>` + `<div class="receipt"><div class="center"><div class="title">CHECK-INS</div>` + `<div class="muted">${escapeHtml(list.dayKey)} · ${list.totals.checkedIn} of ${list.totals.expected} checked in</div></div>` + `<hr class="rule">${rows}</div></body></html>`;
47
65
  }
48
66
  function PosCheckInsBody(props) {
67
+ var _ref;
49
68
  const { hostId, canManagePos = false } = props;
50
69
  const { data: user } = useUser();
51
70
  const [day, setDay] = useState(null);
@@ -53,6 +72,9 @@ function PosCheckInsBody(props) {
53
72
  state: 'idle'
54
73
  });
55
74
  const [exporting, setExporting] = useState(false);
75
+ /** The pass a rain check is being given on (AGL-4043). */ const [rainCheckRow, setRainCheckRow] = useState(null);
76
+ const [actionError, setActionError] = useState('');
77
+ /** The stay whose guests are being changed (AGL-4043). */ const [guestsFor, setGuestsFor] = useState(null);
56
78
  const url = useCallback((format)=>{
57
79
  const params = new URLSearchParams({
58
80
  hostId
@@ -98,6 +120,43 @@ function PosCheckInsBody(props) {
98
120
  load
99
121
  ]);
100
122
  const list = answer.state === 'ready' ? answer.list : null;
123
+ const todayKey = list ? zonedDayKey(Date.now(), list.timeZone) : '';
124
+ const [savingStayMode, setSavingStayMode] = useState(false);
125
+ /** The store's quick control for stays: one check-in per stay or per guest (AGL-4043). */ const setStayMode = useCallback(async (mode)=>{
126
+ var _done_body_error;
127
+ setActionError('');
128
+ setSavingStayMode(true);
129
+ const done = await callPosOps(user, 'pos-check-in', _extends({
130
+ hostId,
131
+ action: 'stay_mode',
132
+ mode
133
+ }, (day == null ? void 0 : day.isValid()) ? {
134
+ day: day.format(DAY_FORMAT)
135
+ } : {}));
136
+ setSavingStayMode(false);
137
+ if (!done.ok) return setActionError((_done_body_error = done.body.error) != null ? _done_body_error : 'The setting could not be saved.');
138
+ await load();
139
+ }, [
140
+ user,
141
+ hostId,
142
+ day,
143
+ load
144
+ ]);
145
+ const undoRainCheck = useCallback(async (row)=>{
146
+ var _done_body_error;
147
+ setActionError('');
148
+ const done = await callPosOps(user, 'pos-check-in', {
149
+ hostId,
150
+ action: 'undo_rain_check',
151
+ id: row.id
152
+ });
153
+ if (!done.ok) return setActionError((_done_body_error = done.body.error) != null ? _done_body_error : 'The rain check could not be undone.');
154
+ await load();
155
+ }, [
156
+ user,
157
+ hostId,
158
+ load
159
+ ]);
101
160
  const columns = useMemo(()=>[
102
161
  {
103
162
  field: 'customerName',
@@ -126,16 +185,29 @@ function PosCheckInsBody(props) {
126
185
  field: 'status',
127
186
  headerName: 'Status',
128
187
  minWidth: 120,
188
+ valueGetter: (_value, row)=>checkInStatusLabel(row),
129
189
  renderCell: ({ row })=>row.status === 'checked_in' ? /*#__PURE__*/ _jsx(Chip, {
130
190
  size: "small",
131
191
  color: "success",
132
192
  label: "Checked in"
193
+ }) : checkInRainCheckIsOpen(row) ? /*#__PURE__*/ _jsx(Chip, {
194
+ size: "small",
195
+ color: "info",
196
+ variant: "outlined",
197
+ label: "Rain check"
133
198
  }) : /*#__PURE__*/ _jsx(Chip, {
134
199
  size: "small",
135
200
  variant: "outlined",
136
201
  label: "Expected"
137
202
  })
138
203
  },
204
+ {
205
+ field: 'rainCheck',
206
+ headerName: 'Rain check',
207
+ minWidth: 200,
208
+ flex: 1,
209
+ valueGetter: (_value, row)=>rainCheckLabel(row)
210
+ },
139
211
  {
140
212
  field: 'checkedInAtMs',
141
213
  headerName: 'Checked in at',
@@ -153,9 +225,40 @@ function PosCheckInsBody(props) {
153
225
  headerName: 'Wristband',
154
226
  minWidth: 120,
155
227
  valueGetter: (_value, row)=>describeWristband(row.wristband)
228
+ },
229
+ {
230
+ // What a pass waiting at the window can still have done to it: a
231
+ // rain check, or one taken back; and a stay's guest count (AGL-4043).
232
+ // Not a value, so nothing to sort.
233
+ field: 'rainCheckAction',
234
+ headerName: '',
235
+ minWidth: 150,
236
+ sortable: false,
237
+ filterable: false,
238
+ hideable: false,
239
+ disableColumnMenu: true,
240
+ renderCell: ({ row })=>row.source === 'reservation' && row.reservationId ? /*#__PURE__*/ _jsx(Button, {
241
+ size: "small",
242
+ disabled: !canManagePos,
243
+ onClick: ()=>setGuestsFor(row.reservationId),
244
+ children: 'Guests'
245
+ }) : row.source !== 'order' || row.status !== 'expected' ? null : row.rainCheck ? /*#__PURE__*/ _jsx(Button, {
246
+ size: "small",
247
+ disabled: !canManagePos,
248
+ onClick: ()=>void undoRainCheck(row),
249
+ children: 'Undo rain check'
250
+ }) : /*#__PURE__*/ _jsx(Button, {
251
+ size: "small",
252
+ disabled: !canManagePos || !todayKey,
253
+ onClick: ()=>setRainCheckRow(row),
254
+ children: 'Rain check'
255
+ })
156
256
  }
157
257
  ], [
158
- list
258
+ list,
259
+ canManagePos,
260
+ todayKey,
261
+ undoRainCheck
159
262
  ]);
160
263
  const rows = useMemo(()=>list ? list.checkIns.map((row)=>_extends({}, row, {
161
264
  $id: row.id
@@ -192,7 +295,7 @@ function PosCheckInsBody(props) {
192
295
  setExporting(false);
193
296
  }
194
297
  };
195
- return /*#__PURE__*/ _jsx(CardDisplay, {
298
+ return /*#__PURE__*/ _jsxs(CardDisplay, {
196
299
  header: HEADER,
197
300
  help: HELP,
198
301
  HeaderProps: {
@@ -223,99 +326,164 @@ function PosCheckInsBody(props) {
223
326
  },
224
327
  contentGutterX: true,
225
328
  contentGutterY: true,
226
- children: /*#__PURE__*/ _jsxs(Stack, {
227
- spacing: 2.5,
228
- children: [
229
- !canManagePos ? /*#__PURE__*/ _jsx(Alert, {
230
- severity: "info",
231
- children: 'Check-ins are for members who can use the register: a site admin or editor with the "Use the point of sale" permission.'
232
- }) : null,
233
- /*#__PURE__*/ _jsx(LocalizationProvider, {
234
- dateAdapter: AdapterDayjs,
235
- children: /*#__PURE__*/ _jsxs(Stack, {
236
- direction: {
237
- xs: 'column',
238
- sm: 'row'
239
- },
240
- spacing: 1.5,
241
- sx: {
242
- alignItems: {
243
- sm: 'center'
244
- }
245
- },
246
- children: [
247
- /*#__PURE__*/ _jsx(DatePicker, {
248
- label: "Day",
249
- value: day,
250
- onChange: setDay,
251
- disabled: !canManagePos,
252
- slotProps: {
253
- textField: {
254
- size: 'small'
255
- }
256
- }
257
- }),
258
- /*#__PURE__*/ _jsx(Button, {
259
- size: "small",
260
- disabled: !canManagePos || !day,
261
- onClick: ()=>setDay(null),
262
- children: 'Today'
263
- })
264
- ]
265
- })
266
- }),
267
- answer.state === 'loading' ? /*#__PURE__*/ _jsx(Typography, {
268
- variant: "body2",
269
- color: "text.secondary",
270
- children: 'Reading who is due…'
271
- }) : null,
272
- answer.state === 'error' ? /*#__PURE__*/ _jsx(Alert, {
273
- severity: "warning",
274
- children: answer.error
275
- }) : null,
276
- list ? /*#__PURE__*/ _jsxs(_Fragment, {
277
- children: [
278
- /*#__PURE__*/ _jsx(Typography, {
279
- variant: "body2",
280
- color: "text.secondary",
281
- children: `${list.dayKey} · ${list.timeZone} · passes and stays that need check-in`
282
- }),
283
- list.truncated ? /*#__PURE__*/ _jsx(Alert, {
284
- severity: "warning",
285
- children: 'This day has more check-ins than one list reads; some are missing here.'
286
- }) : null,
287
- /*#__PURE__*/ _jsxs(Stack, {
288
- direction: "row",
289
- spacing: 3,
329
+ children: [
330
+ /*#__PURE__*/ _jsxs(Stack, {
331
+ spacing: 2.5,
332
+ children: [
333
+ !canManagePos ? /*#__PURE__*/ _jsx(Alert, {
334
+ severity: "info",
335
+ children: 'Check-ins are for members who can use the register: a site admin or editor with the "Use the point of sale" permission.'
336
+ }) : null,
337
+ /*#__PURE__*/ _jsx(LocalizationProvider, {
338
+ dateAdapter: AdapterDayjs,
339
+ children: /*#__PURE__*/ _jsxs(Stack, {
340
+ direction: {
341
+ xs: 'column',
342
+ sm: 'row'
343
+ },
344
+ spacing: 1.5,
290
345
  sx: {
291
- flexWrap: 'wrap',
292
- rowGap: 1.5
346
+ alignItems: {
347
+ sm: 'center'
348
+ }
293
349
  },
294
350
  children: [
295
- /*#__PURE__*/ _jsx(CommerceStatTile, {
296
- label: "Expected",
297
- value: String(list.totals.expected)
298
- }),
299
- /*#__PURE__*/ _jsx(CommerceStatTile, {
300
- label: "Checked in",
301
- value: String(list.totals.checkedIn)
351
+ /*#__PURE__*/ _jsx(DatePicker, {
352
+ label: "Day",
353
+ value: day,
354
+ onChange: setDay,
355
+ disabled: !canManagePos,
356
+ slotProps: {
357
+ textField: {
358
+ size: 'small'
359
+ }
360
+ }
302
361
  }),
303
- /*#__PURE__*/ _jsx(CommerceStatTile, {
304
- label: "Still to come",
305
- value: String(list.totals.expected - list.totals.checkedIn)
362
+ /*#__PURE__*/ _jsx(Button, {
363
+ size: "small",
364
+ disabled: !canManagePos || !day,
365
+ onClick: ()=>setDay(null),
366
+ children: 'Today'
306
367
  })
307
368
  ]
308
- }),
309
- /*#__PURE__*/ _jsx(ListTable, {
310
- "aria-label": "Check-ins on this day",
311
- rows: rows,
312
- columns: columns,
313
- noRowsLabel: "Nobody is due to check in on this day"
314
369
  })
315
- ]
316
- }) : null
317
- ]
318
- })
370
+ }),
371
+ /*#__PURE__*/ _jsxs(Stack, {
372
+ spacing: 0.5,
373
+ children: [
374
+ /*#__PURE__*/ _jsx(Typography, {
375
+ variant: "subtitle2",
376
+ component: "h3",
377
+ id: "stay-check-in-label",
378
+ children: 'Stays at check-in'
379
+ }),
380
+ /*#__PURE__*/ _jsx(ToggleButtonGroup, {
381
+ exclusive: true,
382
+ size: "small",
383
+ "aria-labelledby": "stay-check-in-label",
384
+ value: (_ref = list == null ? void 0 : list.stayCheckIn) != null ? _ref : 'resource',
385
+ onChange: (_event, mode)=>{
386
+ if (mode && mode !== (list == null ? void 0 : list.stayCheckIn)) void setStayMode(mode);
387
+ },
388
+ disabled: !canManagePos || !list || savingStayMode,
389
+ sx: {
390
+ flexWrap: 'wrap'
391
+ },
392
+ children: STAY_MODE_LABELS.map((choice)=>/*#__PURE__*/ _jsx(ToggleButton, {
393
+ value: choice.mode,
394
+ children: choice.label
395
+ }, choice.mode))
396
+ }),
397
+ /*#__PURE__*/ _jsx(Typography, {
398
+ variant: "caption",
399
+ color: "text.secondary",
400
+ children: 'One per guest gives each guest of a stay their own check-in and wristband, by the stay’s guest count.'
401
+ })
402
+ ]
403
+ }),
404
+ answer.state === 'loading' ? /*#__PURE__*/ _jsx(Typography, {
405
+ variant: "body2",
406
+ color: "text.secondary",
407
+ children: 'Reading who is due…'
408
+ }) : null,
409
+ answer.state === 'error' ? /*#__PURE__*/ _jsx(Alert, {
410
+ severity: "warning",
411
+ children: answer.error
412
+ }) : null,
413
+ list ? /*#__PURE__*/ _jsxs(_Fragment, {
414
+ children: [
415
+ /*#__PURE__*/ _jsx(Typography, {
416
+ variant: "body2",
417
+ color: "text.secondary",
418
+ children: `${list.dayKey} · ${list.timeZone} · passes and stays that need check-in`
419
+ }),
420
+ list.truncated ? /*#__PURE__*/ _jsx(Alert, {
421
+ severity: "warning",
422
+ children: 'This day has more check-ins than one list reads; some are missing here.'
423
+ }) : null,
424
+ /*#__PURE__*/ _jsxs(Stack, {
425
+ direction: "row",
426
+ spacing: 3,
427
+ sx: {
428
+ flexWrap: 'wrap',
429
+ rowGap: 1.5
430
+ },
431
+ children: [
432
+ /*#__PURE__*/ _jsx(CommerceStatTile, {
433
+ label: "Expected",
434
+ value: String(list.totals.expected)
435
+ }),
436
+ /*#__PURE__*/ _jsx(CommerceStatTile, {
437
+ label: "Checked in",
438
+ value: String(list.totals.checkedIn)
439
+ }),
440
+ /*#__PURE__*/ _jsx(CommerceStatTile, {
441
+ label: "Still to come",
442
+ value: String(list.totals.expected - list.totals.checkedIn)
443
+ }),
444
+ list.totals.rainChecks ? /*#__PURE__*/ _jsx(CommerceStatTile, {
445
+ label: "Rain checks",
446
+ value: String(list.totals.rainChecks)
447
+ }) : null
448
+ ]
449
+ }),
450
+ actionError ? /*#__PURE__*/ _jsx(Alert, {
451
+ severity: "warning",
452
+ children: actionError
453
+ }) : null,
454
+ /*#__PURE__*/ _jsx(ListTable, {
455
+ "aria-label": "Check-ins on this day",
456
+ rows: rows,
457
+ columns: columns,
458
+ noRowsLabel: "Nobody is due to check in on this day"
459
+ })
460
+ ]
461
+ }) : null
462
+ ]
463
+ }),
464
+ /*#__PURE__*/ _jsx(PosRainCheckDialog, {
465
+ row: rainCheckRow,
466
+ hostId: hostId,
467
+ todayKey: todayKey,
468
+ onClose: ()=>setRainCheckRow(null),
469
+ onDone: ()=>{
470
+ setRainCheckRow(null);
471
+ void load();
472
+ }
473
+ }),
474
+ guestsFor ? /*#__PURE__*/ _jsx(Suspense, {
475
+ fallback: null,
476
+ children: /*#__PURE__*/ _jsx(ReservationGuestsDialog, {
477
+ reservationId: guestsFor,
478
+ hostId: hostId,
479
+ onClose: ()=>setGuestsFor(null),
480
+ onDone: ()=>{
481
+ setGuestsFor(null);
482
+ void load();
483
+ }
484
+ })
485
+ }) : null
486
+ ]
319
487
  });
320
488
  }
321
489
  /**