@aglyn/plugins-commerce 1.0.0-beta.284 → 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.
- package/README.md +1 -1
- package/package.json +13 -13
- package/src/lib/components/cart.js +25 -12
- package/src/lib/components/cart.js.map +1 -1
- package/src/lib/components/commerce-console-page.js +70 -13
- package/src/lib/components/commerce-console-page.js.map +1 -1
- package/src/lib/components/console/order-detail-dialog.component.js +2 -1
- package/src/lib/components/console/order-detail-dialog.component.js.map +1 -1
- package/src/lib/components/console/payment-methods-card.component.js +1 -1
- package/src/lib/components/console/payment-methods-card.component.js.map +1 -1
- package/src/lib/components/console/pos/pos-cart-panel.component.d.ts +5 -0
- package/src/lib/components/console/pos/pos-cart-panel.component.js +18 -12
- package/src/lib/components/console/pos/pos-cart-panel.component.js.map +1 -1
- package/src/lib/components/console/pos/pos-hardware-api.d.ts +76 -5
- package/src/lib/components/console/pos/pos-hardware-api.js +53 -11
- package/src/lib/components/console/pos/pos-hardware-api.js.map +1 -1
- package/src/lib/components/console/pos/pos-hardware-buyer.component.d.ts +18 -0
- package/src/lib/components/console/pos/pos-hardware-buyer.component.js +629 -0
- package/src/lib/components/console/pos/pos-hardware-buyer.component.js.map +1 -0
- package/src/lib/components/console/pos/pos-hardware-sale-api.d.ts +162 -0
- package/src/lib/components/console/pos/pos-hardware-sale-api.js +122 -0
- package/src/lib/components/console/pos/pos-hardware-sale-api.js.map +1 -0
- package/src/lib/components/console/pos/pos-hardware-sale-terms.component.d.ts +39 -0
- package/src/lib/components/console/pos/pos-hardware-sale-terms.component.js +251 -0
- package/src/lib/components/console/pos/pos-hardware-sale-terms.component.js.map +1 -0
- package/src/lib/components/console/pos/use-pos-display.js +50 -0
- package/src/lib/components/console/pos/use-pos-display.js.map +1 -1
- package/src/lib/components/console/pos-cellular-control.component.d.ts +41 -0
- package/src/lib/components/console/pos-cellular-control.component.js +211 -0
- package/src/lib/components/console/pos-cellular-control.component.js.map +1 -0
- package/src/lib/components/console/pos-devices-card.component.d.ts +9 -1
- package/src/lib/components/console/pos-devices-card.component.js +47 -15
- package/src/lib/components/console/pos-devices-card.component.js.map +1 -1
- package/src/lib/components/console/pos-display/pos-display-api.d.ts +6 -0
- package/src/lib/components/console/pos-display/pos-display-api.js +8 -1
- package/src/lib/components/console/pos-display/pos-display-api.js.map +1 -1
- package/src/lib/components/console/pos-display-page.component.d.ts +13 -0
- package/src/lib/components/console/pos-display-page.component.js +44 -2
- package/src/lib/components/console/pos-display-page.component.js.map +1 -1
- package/src/lib/components/console/pos-hardware-card.component.d.ts +12 -4
- package/src/lib/components/console/pos-hardware-card.component.js +157 -36
- package/src/lib/components/console/pos-hardware-card.component.js.map +1 -1
- package/src/lib/components/console/pos-hardware-orders-staff-page.component.js +360 -80
- package/src/lib/components/console/pos-hardware-orders-staff-page.component.js.map +1 -1
- package/src/lib/components/console/pos-hardware-terms-page.component.d.ts +34 -0
- package/src/lib/components/console/pos-hardware-terms-page.component.js +257 -0
- package/src/lib/components/console/pos-hardware-terms-page.component.js.map +1 -0
- package/src/lib/components/console/pos-hardware-terms-sign-page.component.d.ts +27 -0
- package/src/lib/components/console/pos-hardware-terms-sign-page.component.js +104 -0
- package/src/lib/components/console/pos-hardware-terms-sign-page.component.js.map +1 -0
- package/src/lib/components/console/pos-hardware-waiting-card.component.d.ts +24 -0
- package/src/lib/components/console/pos-hardware-waiting-card.component.js +205 -0
- package/src/lib/components/console/pos-hardware-waiting-card.component.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-check-in-dialog.component.js +297 -201
- package/src/lib/components/console/pos-ops/pos-check-in-dialog.component.js.map +1 -1
- package/src/lib/components/console/pos-ops/pos-check-ins-card.component.d.ts +3 -0
- package/src/lib/components/console/pos-ops/pos-check-ins-card.component.js +260 -92
- package/src/lib/components/console/pos-ops/pos-check-ins-card.component.js.map +1 -1
- package/src/lib/components/console/pos-ops/pos-operations-bar.component.d.ts +9 -0
- package/src/lib/components/console/pos-ops/pos-operations-bar.component.js +15 -6
- package/src/lib/components/console/pos-ops/pos-operations-bar.component.js.map +1 -1
- package/src/lib/components/console/pos-ops/pos-rain-check-dialog.component.d.ts +25 -0
- package/src/lib/components/console/pos-ops/pos-rain-check-dialog.component.js +136 -0
- package/src/lib/components/console/pos-ops/pos-rain-check-dialog.component.js.map +1 -0
- package/src/lib/components/console/pos-ops/pos-shift-panel.component.d.ts +6 -0
- package/src/lib/components/console/pos-ops/pos-shift-panel.component.js +48 -31
- package/src/lib/components/console/pos-ops/pos-shift-panel.component.js.map +1 -1
- package/src/lib/components/console/pos-page.component.d.ts +1 -1
- package/src/lib/components/console/pos-page.component.js +63 -12
- package/src/lib/components/console/pos-page.component.js.map +1 -1
- package/src/lib/components/console/pos-reader-splash-setting.component.js +1 -1
- package/src/lib/components/console/pos-reader-splash-setting.component.js.map +1 -1
- package/src/lib/components/console/product-check-in-fields.component.d.ts +4 -2
- package/src/lib/components/console/product-check-in-fields.component.js +60 -14
- package/src/lib/components/console/product-check-in-fields.component.js.map +1 -1
- package/src/lib/components/console/product-editor-dialog.component.js +44 -1
- package/src/lib/components/console/product-editor-dialog.component.js.map +1 -1
- package/src/lib/components/console/product-hardware-sku-field.component.d.ts +19 -0
- package/src/lib/components/console/product-hardware-sku-field.component.js +92 -0
- package/src/lib/components/console/product-hardware-sku-field.component.js.map +1 -0
- package/src/lib/components/console/product-kiosk-offer-field.component.d.ts +22 -0
- package/src/lib/components/console/product-kiosk-offer-field.component.js +94 -0
- package/src/lib/components/console/product-kiosk-offer-field.component.js.map +1 -0
- package/src/lib/components/console/product-register-fields.component.d.ts +4 -0
- package/src/lib/components/console/product-register-fields.component.js +31 -2
- package/src/lib/components/console/product-register-fields.component.js.map +1 -1
- package/src/lib/components/console/products-hub-card.component.js +11 -2
- package/src/lib/components/console/products-hub-card.component.js.map +1 -1
- package/src/lib/components/console/register-hardware-card.component.d.ts +11 -0
- package/src/lib/components/console/register-hardware-card.component.js +56 -27
- package/src/lib/components/console/register-hardware-card.component.js.map +1 -1
- package/src/lib/components/console/reservation-guests-dialog.component.d.ts +28 -0
- package/src/lib/components/console/reservation-guests-dialog.component.js +189 -0
- package/src/lib/components/console/reservation-guests-dialog.component.js.map +1 -0
- package/src/lib/components/console/reservations-card.component.d.ts +9 -0
- package/src/lib/components/console/reservations-card.component.js +158 -23
- package/src/lib/components/console/reservations-card.component.js.map +1 -1
- package/src/lib/components/console/shippingeasy-card.component.js +1 -1
- package/src/lib/components/console/shippingeasy-card.component.js.map +1 -1
- package/src/lib/components/console/shipstation-card.component.d.ts +1 -1
- package/src/lib/components/console/shipstation-card.component.js +3 -3
- package/src/lib/components/console/shipstation-card.component.js.map +1 -1
- package/src/lib/components/product-detail.d.ts +4 -0
- package/src/lib/components/product-detail.js +40 -5
- package/src/lib/components/product-detail.js.map +1 -1
- package/src/lib/components/product-reviews.js +28 -11
- package/src/lib/components/product-reviews.js.map +1 -1
- package/src/lib/components/reservation-widget.js +28 -5
- package/src/lib/components/reservation-widget.js.map +1 -1
- package/src/lib/components/use-day-picker.d.ts +25 -0
- package/src/lib/components/use-day-picker.js +57 -0
- package/src/lib/components/use-day-picker.js.map +1 -0
- package/src/lib/constants/operator-alerts.d.ts +55 -0
- package/src/lib/constants/operator-alerts.js +156 -1
- package/src/lib/constants/operator-alerts.js.map +1 -1
- package/src/lib/declarations.console-server.js +54 -1
- package/src/lib/declarations.console-server.js.map +1 -1
- package/src/lib/declarations.d.ts +4 -2
- package/src/lib/declarations.js +11 -4
- package/src/lib/declarations.js.map +1 -1
- package/src/lib/declarations.server.js +9 -0
- package/src/lib/declarations.server.js.map +1 -1
- package/src/lib/model/commerce-cart.d.ts +9 -1
- package/src/lib/model/commerce-cart.js +4 -3
- package/src/lib/model/commerce-cart.js.map +1 -1
- package/src/lib/model/commerce-check-in-product.d.ts +26 -0
- package/src/lib/model/commerce-check-in-product.js +64 -2
- package/src/lib/model/commerce-check-in-product.js.map +1 -1
- package/src/lib/model/commerce-check-in-record.d.ts +127 -0
- package/src/lib/model/commerce-check-in-record.js +36 -0
- package/src/lib/model/commerce-check-in-record.js.map +1 -0
- package/src/lib/model/commerce-check-in.d.ts +91 -87
- package/src/lib/model/commerce-check-in.js +186 -62
- package/src/lib/model/commerce-check-in.js.map +1 -1
- package/src/lib/model/commerce-kiosk-offer.d.ts +31 -0
- package/src/lib/model/commerce-kiosk-offer.js +35 -0
- package/src/lib/model/commerce-kiosk-offer.js.map +1 -0
- package/src/lib/model/commerce-orders.d.ts +76 -0
- package/src/lib/model/commerce-orders.js +6 -0
- package/src/lib/model/commerce-orders.js.map +1 -1
- package/src/lib/model/commerce-pos-day-report.d.ts +54 -1
- package/src/lib/model/commerce-pos-day-report.js +39 -2
- package/src/lib/model/commerce-pos-day-report.js.map +1 -1
- package/src/lib/model/commerce-pos-offline.d.ts +1 -1
- package/src/lib/model/commerce-pos-offline.js +6 -1
- package/src/lib/model/commerce-pos-offline.js.map +1 -1
- package/src/lib/model/commerce-pos-ops.js +3 -2
- package/src/lib/model/commerce-pos-ops.js.map +1 -1
- package/src/lib/model/commerce-pos.d.ts +36 -3
- package/src/lib/model/commerce-pos.js +14 -6
- package/src/lib/model/commerce-pos.js.map +1 -1
- package/src/lib/model/commerce-receipt.js +3 -2
- package/src/lib/model/commerce-receipt.js.map +1 -1
- package/src/lib/model/commerce-reservations.d.ts +69 -4
- package/src/lib/model/commerce-reservations.js +57 -5
- package/src/lib/model/commerce-reservations.js.map +1 -1
- package/src/lib/model/commerce.d.ts +66 -0
- package/src/lib/model/commerce.js +15 -0
- package/src/lib/model/commerce.js.map +1 -1
- package/src/lib/model/order-list-fields.d.ts +11 -0
- package/src/lib/model/order-list-fields.js +17 -1
- package/src/lib/model/order-list-fields.js.map +1 -1
- package/src/lib/model/own-store-tax-summary.d.ts +152 -0
- package/src/lib/model/own-store-tax-summary.js +288 -0
- package/src/lib/model/own-store-tax-summary.js.map +1 -0
- package/src/lib/model/plugin-permissions.d.ts +67 -0
- package/src/lib/model/plugin-permissions.js +224 -7
- package/src/lib/model/plugin-permissions.js.map +1 -1
- package/src/lib/model/pos-cellular.d.ts +223 -0
- package/src/lib/model/pos-cellular.js +293 -0
- package/src/lib/model/pos-cellular.js.map +1 -0
- package/src/lib/model/pos-hardware-in-person.d.ts +98 -0
- package/src/lib/model/pos-hardware-in-person.js +224 -0
- package/src/lib/model/pos-hardware-in-person.js.map +1 -0
- package/src/lib/model/pos-hardware-tax-summary.d.ts +166 -0
- package/src/lib/model/pos-hardware-tax-summary.js +225 -0
- package/src/lib/model/pos-hardware-tax-summary.js.map +1 -0
- package/src/lib/model/pos-hardware-terms.d.ts +74 -0
- package/src/lib/model/pos-hardware-terms.js +115 -0
- package/src/lib/model/pos-hardware-terms.js.map +1 -0
- package/src/lib/model/pos-hardware.d.ts +349 -7
- package/src/lib/model/pos-hardware.js +291 -20
- package/src/lib/model/pos-hardware.js.map +1 -1
- package/src/lib/model/product-write.d.ts +10 -0
- package/src/lib/model/product-write.js +4 -2
- package/src/lib/model/product-write.js.map +1 -1
- package/src/lib/plugin.js +16 -0
- package/src/lib/plugin.js.map +1 -1
- package/src/lib/server/billing-webhook.js +25 -1
- package/src/lib/server/billing-webhook.js.map +1 -1
- package/src/lib/server/cancel-order.js +7 -5
- package/src/lib/server/cancel-order.js.map +1 -1
- package/src/lib/server/cart-checkout.js +20 -8
- package/src/lib/server/cart-checkout.js.map +1 -1
- package/src/lib/server/cart.js +29 -0
- package/src/lib/server/cart.js.map +1 -1
- package/src/lib/server/checkout.js +42 -13
- package/src/lib/server/checkout.js.map +1 -1
- package/src/lib/server/collection-membership.d.ts +4 -0
- package/src/lib/server/collection-membership.js +5 -10
- package/src/lib/server/collection-membership.js.map +1 -1
- package/src/lib/server/commerce-site-keys.d.ts +29 -0
- package/src/lib/server/commerce-site-keys.js +40 -0
- package/src/lib/server/commerce-site-keys.js.map +1 -0
- package/src/lib/server/draft-order.js +8 -5
- package/src/lib/server/draft-order.js.map +1 -1
- package/src/lib/server/fulfill-order.js +7 -5
- package/src/lib/server/fulfill-order.js.map +1 -1
- package/src/lib/server/gift-cards.js +8 -5
- package/src/lib/server/gift-cards.js.map +1 -1
- package/src/lib/server/local-fulfillment-status.js +9 -6
- package/src/lib/server/local-fulfillment-status.js.map +1 -1
- package/src/lib/server/member-post.js +6 -5
- package/src/lib/server/member-post.js.map +1 -1
- package/src/lib/server/membership-admin-password.d.ts +4 -2
- package/src/lib/server/membership-admin-password.js +10 -8
- package/src/lib/server/membership-admin-password.js.map +1 -1
- package/src/lib/server/membership-admin-remove.d.ts +7 -5
- package/src/lib/server/membership-admin-remove.js +9 -9
- package/src/lib/server/membership-admin-remove.js.map +1 -1
- package/src/lib/server/order-notifications.js +5 -2
- package/src/lib/server/order-notifications.js.map +1 -1
- package/src/lib/server/order-print.js +7 -5
- package/src/lib/server/order-print.js.map +1 -1
- package/src/lib/server/order-receipt-send.js +8 -5
- package/src/lib/server/order-receipt-send.js.map +1 -1
- package/src/lib/server/orders-shipping-prepare.js +9 -6
- package/src/lib/server/orders-shipping-prepare.js.map +1 -1
- package/src/lib/server/own-store-tax-return-source.d.ts +47 -0
- package/src/lib/server/own-store-tax-return-source.js +312 -0
- package/src/lib/server/own-store-tax-return-source.js.map +1 -0
- package/src/lib/server/payment-methods.js +13 -9
- package/src/lib/server/payment-methods.js.map +1 -1
- package/src/lib/server/pos-auth.d.ts +37 -6
- package/src/lib/server/pos-auth.js +40 -15
- package/src/lib/server/pos-auth.js.map +1 -1
- package/src/lib/server/pos-cellular-billing.d.ts +81 -0
- package/src/lib/server/pos-cellular-billing.js +711 -0
- package/src/lib/server/pos-cellular-billing.js.map +1 -0
- package/src/lib/server/pos-cellular-notify.d.ts +47 -0
- package/src/lib/server/pos-cellular-notify.js +150 -0
- package/src/lib/server/pos-cellular-notify.js.map +1 -0
- package/src/lib/server/pos-cellular.d.ts +88 -0
- package/src/lib/server/pos-cellular.js +339 -0
- package/src/lib/server/pos-cellular.js.map +1 -0
- package/src/lib/server/pos-check-in.d.ts +5 -1
- package/src/lib/server/pos-check-in.js +296 -28
- package/src/lib/server/pos-check-in.js.map +1 -1
- package/src/lib/server/pos-day-report.js +29 -3
- package/src/lib/server/pos-day-report.js.map +1 -1
- package/src/lib/server/pos-display.d.ts +16 -0
- package/src/lib/server/pos-display.js +129 -2
- package/src/lib/server/pos-display.js.map +1 -1
- package/src/lib/server/pos-hardware-admin.d.ts +10 -1
- package/src/lib/server/pos-hardware-admin.js +250 -84
- package/src/lib/server/pos-hardware-admin.js.map +1 -1
- package/src/lib/server/pos-hardware-attach.d.ts +105 -0
- package/src/lib/server/pos-hardware-attach.js +443 -0
- package/src/lib/server/pos-hardware-attach.js.map +1 -0
- package/src/lib/server/pos-hardware-buyer-lookup.d.ts +58 -0
- package/src/lib/server/pos-hardware-buyer-lookup.js +180 -0
- package/src/lib/server/pos-hardware-buyer-lookup.js.map +1 -0
- package/src/lib/server/pos-hardware-buyer-record.d.ts +29 -0
- package/src/lib/server/pos-hardware-buyer-record.js +86 -0
- package/src/lib/server/pos-hardware-buyer-record.js.map +1 -0
- package/src/lib/server/pos-hardware-cancel.d.ts +58 -0
- package/src/lib/server/pos-hardware-cancel.js +147 -0
- package/src/lib/server/pos-hardware-cancel.js.map +1 -0
- package/src/lib/server/pos-hardware-closure-notices.d.ts +27 -0
- package/src/lib/server/pos-hardware-closure-notices.js +85 -0
- package/src/lib/server/pos-hardware-closure-notices.js.map +1 -0
- package/src/lib/server/pos-hardware-closure.d.ts +60 -0
- package/src/lib/server/pos-hardware-closure.js +153 -0
- package/src/lib/server/pos-hardware-closure.js.map +1 -0
- package/src/lib/server/pos-hardware-in-person.d.ts +61 -0
- package/src/lib/server/pos-hardware-in-person.js +236 -0
- package/src/lib/server/pos-hardware-in-person.js.map +1 -0
- package/src/lib/server/pos-hardware-notify.d.ts +40 -2
- package/src/lib/server/pos-hardware-notify.js +195 -14
- package/src/lib/server/pos-hardware-notify.js.map +1 -1
- package/src/lib/server/pos-hardware-readers.d.ts +115 -0
- package/src/lib/server/pos-hardware-readers.js +430 -0
- package/src/lib/server/pos-hardware-readers.js.map +1 -0
- package/src/lib/server/pos-hardware-returns.d.ts +116 -0
- package/src/lib/server/pos-hardware-returns.js +502 -0
- package/src/lib/server/pos-hardware-returns.js.map +1 -0
- package/src/lib/server/pos-hardware-sale-fields.d.ts +28 -0
- package/src/lib/server/pos-hardware-sale-fields.js +44 -0
- package/src/lib/server/pos-hardware-sale-fields.js.map +1 -0
- package/src/lib/server/pos-hardware-sale.d.ts +54 -0
- package/src/lib/server/pos-hardware-sale.js +369 -0
- package/src/lib/server/pos-hardware-sale.js.map +1 -0
- package/src/lib/server/pos-hardware-tax-return-source.d.ts +99 -0
- package/src/lib/server/pos-hardware-tax-return-source.js +462 -0
- package/src/lib/server/pos-hardware-tax-return-source.js.map +1 -0
- package/src/lib/server/pos-hardware-terms.d.ts +64 -0
- package/src/lib/server/pos-hardware-terms.js +154 -0
- package/src/lib/server/pos-hardware-terms.js.map +1 -0
- package/src/lib/server/pos-hardware-user-eraser.d.ts +3 -0
- package/src/lib/server/pos-hardware-user-eraser.js +31 -7
- package/src/lib/server/pos-hardware-user-eraser.js.map +1 -1
- package/src/lib/server/pos-hardware-webhook.d.ts +5 -0
- package/src/lib/server/pos-hardware-webhook.js +51 -6
- package/src/lib/server/pos-hardware-webhook.js.map +1 -1
- package/src/lib/server/pos-hardware.d.ts +74 -1
- package/src/lib/server/pos-hardware.js +175 -10
- package/src/lib/server/pos-hardware.js.map +1 -1
- package/src/lib/server/pos-kiosk.d.ts +2 -0
- package/src/lib/server/pos-kiosk.js +17 -12
- package/src/lib/server/pos-kiosk.js.map +1 -1
- package/src/lib/server/pos-offline-card-order.d.ts +64 -0
- package/src/lib/server/pos-offline-card-order.js +102 -0
- package/src/lib/server/pos-offline-card-order.js.map +1 -0
- package/src/lib/server/pos-offline-card-reconcile.d.ts +67 -1
- package/src/lib/server/pos-offline-card-reconcile.js +215 -18
- package/src/lib/server/pos-offline-card-reconcile.js.map +1 -1
- package/src/lib/server/pos-offline-sync.d.ts +39 -0
- package/src/lib/server/pos-offline-sync.js +190 -55
- package/src/lib/server/pos-offline-sync.js.map +1 -1
- package/src/lib/server/pos-ops-gate.d.ts +15 -4
- package/src/lib/server/pos-ops-gate.js +42 -9
- package/src/lib/server/pos-ops-gate.js.map +1 -1
- package/src/lib/server/pos-ops-routes.js +24 -0
- package/src/lib/server/pos-ops-routes.js.map +1 -1
- package/src/lib/server/pos-order-refund-ids.d.ts +28 -0
- package/src/lib/server/pos-order-refund-ids.js +31 -0
- package/src/lib/server/pos-order-refund-ids.js.map +1 -0
- package/src/lib/server/pos-order.js +52 -49
- package/src/lib/server/pos-order.js.map +1 -1
- package/src/lib/server/pos-payment.js +1 -1
- package/src/lib/server/pos-payment.js.map +1 -1
- package/src/lib/server/pos-reader-splash-admin.js +30 -32
- package/src/lib/server/pos-reader-splash-admin.js.map +1 -1
- package/src/lib/server/pos-reader-splash-images-route.d.ts +17 -0
- package/src/lib/server/pos-reader-splash-images-route.js +113 -0
- package/src/lib/server/pos-reader-splash-images-route.js.map +1 -0
- package/src/lib/server/pos-reader-splash-images.d.ts +51 -0
- package/src/lib/server/pos-reader-splash-images.js +123 -0
- package/src/lib/server/pos-reader-splash-images.js.map +1 -0
- package/src/lib/server/pos-reader-splash.d.ts +68 -1
- package/src/lib/server/pos-reader-splash.js +182 -11
- package/src/lib/server/pos-reader-splash.js.map +1 -1
- package/src/lib/server/pos-readers.d.ts +29 -0
- package/src/lib/server/pos-readers.js +134 -35
- package/src/lib/server/pos-readers.js.map +1 -1
- package/src/lib/server/pos-return.d.ts +10 -0
- package/src/lib/server/pos-return.js +26 -1
- package/src/lib/server/pos-return.js.map +1 -1
- package/src/lib/server/pos-sale.js +6 -1
- package/src/lib/server/pos-sale.js.map +1 -1
- package/src/lib/server/pos-shift.js +11 -0
- package/src/lib/server/pos-shift.js.map +1 -1
- package/src/lib/server/pos-staff-pin.js +25 -20
- package/src/lib/server/pos-staff-pin.js.map +1 -1
- package/src/lib/server/pos-terminal.d.ts +14 -4
- package/src/lib/server/pos-terminal.js +34 -38
- package/src/lib/server/pos-terminal.js.map +1 -1
- package/src/lib/server/printers.d.ts +7 -3
- package/src/lib/server/printers.js +18 -12
- package/src/lib/server/printers.js.map +1 -1
- package/src/lib/server/product-drafts.d.ts +11 -1
- package/src/lib/server/product-drafts.js +12 -8
- package/src/lib/server/product-drafts.js.map +1 -1
- package/src/lib/server/product.d.ts +15 -1
- package/src/lib/server/product.js +16 -3
- package/src/lib/server/product.js.map +1 -1
- package/src/lib/server/products-write.d.ts +26 -2
- package/src/lib/server/products-write.js +19 -7
- package/src/lib/server/products-write.js.map +1 -1
- package/src/lib/server/refund.js +34 -11
- package/src/lib/server/refund.js.map +1 -1
- package/src/lib/server/reservation-availability-query.d.ts +8 -0
- package/src/lib/server/reservation-availability-query.js +11 -1
- package/src/lib/server/reservation-availability-query.js.map +1 -1
- package/src/lib/server/reservation-availability.d.ts +1 -1
- package/src/lib/server/reservation-availability.js +7 -2
- package/src/lib/server/reservation-availability.js.map +1 -1
- package/src/lib/server/reservation-guests.d.ts +32 -0
- package/src/lib/server/reservation-guests.js +285 -0
- package/src/lib/server/reservation-guests.js.map +1 -0
- package/src/lib/server/reservation-walk-in.d.ts +11 -1
- package/src/lib/server/reservation-walk-in.js +56 -12
- package/src/lib/server/reservation-walk-in.js.map +1 -1
- package/src/lib/server/reserve.js +18 -5
- package/src/lib/server/reserve.js.map +1 -1
- package/src/lib/server/returns.js +9 -6
- package/src/lib/server/returns.js.map +1 -1
- package/src/lib/server/reviews.d.ts +22 -2
- package/src/lib/server/reviews.js +88 -20
- package/src/lib/server/reviews.js.map +1 -1
- package/src/lib/server/shipping-connectors.js +10 -11
- package/src/lib/server/shipping-connectors.js.map +1 -1
- package/src/lib/server/site-page-resolver.js +20 -3
- package/src/lib/server/site-page-resolver.js.map +1 -1
- package/src/lib/server/store-day.d.ts +33 -0
- package/src/lib/server/store-day.js +46 -0
- package/src/lib/server/store-day.js.map +1 -0
- package/src/lib/server/store-setup-ai-writer.d.ts +2 -1
- package/src/lib/server/store-setup-ai-writer.js +5 -6
- package/src/lib/server/store-setup-ai-writer.js.map +1 -1
- package/src/lib/server/storefront-tax.d.ts +13 -0
- package/src/lib/server/storefront-tax.js +8 -1
- package/src/lib/server/storefront-tax.js.map +1 -1
- package/src/lib/server/tax-return-source.d.ts +32 -3
- package/src/lib/server/tax-return-source.js +99 -20
- package/src/lib/server/tax-return-source.js.map +1 -1
- package/src/lib/server.js +100 -2
- package/src/lib/server.js.map +1 -1
- package/src/lib/testing/fake-firestore.js +58 -16
- package/src/lib/testing/fake-firestore.js.map +1 -1
- package/src/lib/testing/pos-ops-memory-firestore.js +18 -4
- package/src/lib/testing/pos-ops-memory-firestore.js.map +1 -1
- package/src/lib/testing/site-register-permissions.d.ts +29 -0
- package/src/lib/testing/site-register-permissions.js +38 -0
- package/src/lib/testing/site-register-permissions.js.map +1 -0
- package/src/lib/transfer/tracking.server.js +8 -5
- package/src/lib/transfer/tracking.server.js.map +1 -1
- package/src/lib/utils/add-to-cart.d.ts +2 -0
- package/src/lib/utils/add-to-cart.js +6 -3
- 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 {
|
|
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__*/
|
|
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:
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
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
|
-
|
|
292
|
-
|
|
346
|
+
alignItems: {
|
|
347
|
+
sm: 'center'
|
|
348
|
+
}
|
|
293
349
|
},
|
|
294
350
|
children: [
|
|
295
|
-
/*#__PURE__*/ _jsx(
|
|
296
|
-
label: "
|
|
297
|
-
value:
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
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(
|
|
304
|
-
|
|
305
|
-
|
|
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
|
-
|
|
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
|
/**
|