@voyant-travel/bookings-react 0.119.3
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/LICENSE +201 -0
- package/README.md +87 -0
- package/dist/admin/booking-contract-dialog.d.ts +22 -0
- package/dist/admin/booking-contract-dialog.d.ts.map +1 -0
- package/dist/admin/booking-contract-dialog.js +161 -0
- package/dist/admin/booking-detail-host.d.ts +103 -0
- package/dist/admin/booking-detail-host.d.ts.map +1 -0
- package/dist/admin/booking-detail-host.js +127 -0
- package/dist/admin/booking-detail-skeleton.d.ts +7 -0
- package/dist/admin/booking-detail-skeleton.d.ts.map +1 -0
- package/dist/admin/booking-detail-skeleton.js +24 -0
- package/dist/admin/booking-documents-table.d.ts +13 -0
- package/dist/admin/booking-documents-table.d.ts.map +1 -0
- package/dist/admin/booking-documents-table.js +259 -0
- package/dist/admin/booking-invoice-sheet.d.ts +18 -0
- package/dist/admin/booking-invoice-sheet.d.ts.map +1 -0
- package/dist/admin/booking-invoice-sheet.js +101 -0
- package/dist/admin/booking-journey-host.d.ts +24 -0
- package/dist/admin/booking-journey-host.d.ts.map +1 -0
- package/dist/admin/booking-journey-host.js +278 -0
- package/dist/admin/bookings-host.d.ts +26 -0
- package/dist/admin/bookings-host.d.ts.map +1 -0
- package/dist/admin/bookings-host.js +18 -0
- package/dist/admin/bookings-list-skeleton.d.ts +10 -0
- package/dist/admin/bookings-list-skeleton.d.ts.map +1 -0
- package/dist/admin/bookings-list-skeleton.js +25 -0
- package/dist/admin/index.d.ts +273 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +331 -0
- package/dist/admin/journey-billing-duplicate-warning.d.ts +3 -0
- package/dist/admin/journey-billing-duplicate-warning.d.ts.map +1 -0
- package/dist/admin/journey-billing-duplicate-warning.js +26 -0
- package/dist/admin/journey-departure-picker.d.ts +7 -0
- package/dist/admin/journey-departure-picker.d.ts.map +1 -0
- package/dist/admin/journey-departure-picker.js +100 -0
- package/dist/admin/journey-units-picker.d.ts +11 -0
- package/dist/admin/journey-units-picker.d.ts.map +1 -0
- package/dist/admin/journey-units-picker.js +60 -0
- package/dist/admin/journey-voucher-picker.d.ts +3 -0
- package/dist/admin/journey-voucher-picker.d.ts.map +1 -0
- package/dist/admin/journey-voucher-picker.js +71 -0
- package/dist/admin/pages/booking-compose-page.d.ts +9 -0
- package/dist/admin/pages/booking-compose-page.d.ts.map +1 -0
- package/dist/admin/pages/booking-compose-page.js +17 -0
- package/dist/admin/pages/booking-detail-page.d.ts +11 -0
- package/dist/admin/pages/booking-detail-page.d.ts.map +1 -0
- package/dist/admin/pages/booking-detail-page.js +14 -0
- package/dist/admin/pages/booking-journey-page.d.ts +12 -0
- package/dist/admin/pages/booking-journey-page.d.ts.map +1 -0
- package/dist/admin/pages/booking-journey-page.js +26 -0
- package/dist/admin/pages/booking-new-page.d.ts +15 -0
- package/dist/admin/pages/booking-new-page.d.ts.map +1 -0
- package/dist/admin/pages/booking-new-page.js +50 -0
- package/dist/admin/pages/bookings-index-page.d.ts +20 -0
- package/dist/admin/pages/bookings-index-page.d.ts.map +1 -0
- package/dist/admin/pages/bookings-index-page.js +18 -0
- package/dist/admin/person-bookings-widget.d.ts +13 -0
- package/dist/admin/person-bookings-widget.d.ts.map +1 -0
- package/dist/admin/person-bookings-widget.js +48 -0
- package/dist/admin/slots.d.ts +31 -0
- package/dist/admin/slots.d.ts.map +1 -0
- package/dist/admin/slots.js +30 -0
- package/dist/admin/use-booking-action-ledger-events.d.ts +15 -0
- package/dist/admin/use-booking-action-ledger-events.d.ts.map +1 -0
- package/dist/admin/use-booking-action-ledger-events.js +66 -0
- package/dist/client.d.ts +14 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +59 -0
- package/dist/components/booking-activity-timeline.d.ts +32 -0
- package/dist/components/booking-activity-timeline.d.ts.map +1 -0
- package/dist/components/booking-activity-timeline.js +147 -0
- package/dist/components/booking-billing-dialog.d.ts +16 -0
- package/dist/components/booking-billing-dialog.d.ts.map +1 -0
- package/dist/components/booking-billing-dialog.js +315 -0
- package/dist/components/booking-cancellation-dialog.d.ts +18 -0
- package/dist/components/booking-cancellation-dialog.d.ts.map +1 -0
- package/dist/components/booking-cancellation-dialog.js +79 -0
- package/dist/components/booking-combobox.d.ts +13 -0
- package/dist/components/booking-combobox.d.ts.map +1 -0
- package/dist/components/booking-combobox.js +44 -0
- package/dist/components/booking-create-form-utils.d.ts +56 -0
- package/dist/components/booking-create-form-utils.d.ts.map +1 -0
- package/dist/components/booking-create-form-utils.js +216 -0
- package/dist/components/booking-create-page.d.ts +14 -0
- package/dist/components/booking-create-page.d.ts.map +1 -0
- package/dist/components/booking-create-page.js +11 -0
- package/dist/components/booking-create-preview-card.d.ts +26 -0
- package/dist/components/booking-create-preview-card.d.ts.map +1 -0
- package/dist/components/booking-create-preview-card.js +107 -0
- package/dist/components/booking-create-product-extras-picker.d.ts +18 -0
- package/dist/components/booking-create-product-extras-picker.d.ts.map +1 -0
- package/dist/components/booking-create-product-extras-picker.js +82 -0
- package/dist/components/booking-create-sheet.d.ts +34 -0
- package/dist/components/booking-create-sheet.d.ts.map +1 -0
- package/dist/components/booking-create-sheet.js +811 -0
- package/dist/components/booking-create-utils.d.ts +66 -0
- package/dist/components/booking-create-utils.d.ts.map +1 -0
- package/dist/components/booking-create-utils.js +185 -0
- package/dist/components/booking-detail-page.d.ts +126 -0
- package/dist/components/booking-detail-page.d.ts.map +1 -0
- package/dist/components/booking-detail-page.js +264 -0
- package/dist/components/booking-dialog.d.ts +28 -0
- package/dist/components/booking-dialog.d.ts.map +1 -0
- package/dist/components/booking-dialog.js +130 -0
- package/dist/components/booking-document-dialog.d.ts +8 -0
- package/dist/components/booking-document-dialog.d.ts.map +1 -0
- package/dist/components/booking-document-dialog.js +83 -0
- package/dist/components/booking-document-list.d.ts +5 -0
- package/dist/components/booking-document-list.d.ts.map +1 -0
- package/dist/components/booking-document-list.js +43 -0
- package/dist/components/booking-group-link-dialog.d.ts +10 -0
- package/dist/components/booking-group-link-dialog.d.ts.map +1 -0
- package/dist/components/booking-group-link-dialog.js +79 -0
- package/dist/components/booking-group-section.d.ts +27 -0
- package/dist/components/booking-group-section.d.ts.map +1 -0
- package/dist/components/booking-group-section.js +51 -0
- package/dist/components/booking-guarantee-dialog.d.ts +10 -0
- package/dist/components/booking-guarantee-dialog.d.ts.map +1 -0
- package/dist/components/booking-guarantee-dialog.js +123 -0
- package/dist/components/booking-guarantee-list.d.ts +5 -0
- package/dist/components/booking-guarantee-list.d.ts.map +1 -0
- package/dist/components/booking-guarantee-list.js +86 -0
- package/dist/components/booking-item-dialog.d.ts +10 -0
- package/dist/components/booking-item-dialog.d.ts.map +1 -0
- package/dist/components/booking-item-dialog.js +155 -0
- package/dist/components/booking-item-list.d.ts +12 -0
- package/dist/components/booking-item-list.d.ts.map +1 -0
- package/dist/components/booking-item-list.js +191 -0
- package/dist/components/booking-item-travelers.d.ts +6 -0
- package/dist/components/booking-item-travelers.d.ts.map +1 -0
- package/dist/components/booking-item-travelers.js +57 -0
- package/dist/components/booking-list-filters.d.ts +43 -0
- package/dist/components/booking-list-filters.d.ts.map +1 -0
- package/dist/components/booking-list-filters.js +192 -0
- package/dist/components/booking-list.d.ts +50 -0
- package/dist/components/booking-list.d.ts.map +1 -0
- package/dist/components/booking-list.js +352 -0
- package/dist/components/booking-note-dialog.d.ts +16 -0
- package/dist/components/booking-note-dialog.d.ts.map +1 -0
- package/dist/components/booking-note-dialog.js +41 -0
- package/dist/components/booking-notes.d.ts +5 -0
- package/dist/components/booking-notes.d.ts.map +1 -0
- package/dist/components/booking-notes.js +45 -0
- package/dist/components/booking-payment-reconciliation-banner.d.ts +5 -0
- package/dist/components/booking-payment-reconciliation-banner.d.ts.map +1 -0
- package/dist/components/booking-payment-reconciliation-banner.js +91 -0
- package/dist/components/booking-payment-schedule-dialog.d.ts +10 -0
- package/dist/components/booking-payment-schedule-dialog.d.ts.map +1 -0
- package/dist/components/booking-payment-schedule-dialog.js +117 -0
- package/dist/components/booking-payment-schedule-list.d.ts +10 -0
- package/dist/components/booking-payment-schedule-list.d.ts.map +1 -0
- package/dist/components/booking-payment-schedule-list.js +217 -0
- package/dist/components/booking-payments-summary.d.ts +83 -0
- package/dist/components/booking-payments-summary.d.ts.map +1 -0
- package/dist/components/booking-payments-summary.js +176 -0
- package/dist/components/booking-quick-view-sheet.d.ts +14 -0
- package/dist/components/booking-quick-view-sheet.d.ts.map +1 -0
- package/dist/components/booking-quick-view-sheet.js +283 -0
- package/dist/components/bookings-page.d.ts +19 -0
- package/dist/components/bookings-page.d.ts.map +1 -0
- package/dist/components/bookings-page.js +9 -0
- package/dist/components/file-dropzone.d.ts +25 -0
- package/dist/components/file-dropzone.d.ts.map +1 -0
- package/dist/components/file-dropzone.js +102 -0
- package/dist/components/icon-action-button.d.ts +18 -0
- package/dist/components/icon-action-button.d.ts.map +1 -0
- package/dist/components/icon-action-button.js +13 -0
- package/dist/components/option-units-stepper-section.d.ts +111 -0
- package/dist/components/option-units-stepper-section.d.ts.map +1 -0
- package/dist/components/option-units-stepper-section.js +276 -0
- package/dist/components/payment-schedule-section.d.ts +91 -0
- package/dist/components/payment-schedule-section.d.ts.map +1 -0
- package/dist/components/payment-schedule-section.js +206 -0
- package/dist/components/person-picker-section.d.ts +71 -0
- package/dist/components/person-picker-section.d.ts.map +1 -0
- package/dist/components/person-picker-section.js +160 -0
- package/dist/components/price-breakdown-section.d.ts +83 -0
- package/dist/components/price-breakdown-section.d.ts.map +1 -0
- package/dist/components/price-breakdown-section.js +278 -0
- package/dist/components/product-picker-section.d.ts +29 -0
- package/dist/components/product-picker-section.d.ts.map +1 -0
- package/dist/components/product-picker-section.js +74 -0
- package/dist/components/shared-room-section.d.ts +40 -0
- package/dist/components/shared-room-section.d.ts.map +1 -0
- package/dist/components/shared-room-section.js +99 -0
- package/dist/components/status-badge.d.ts +24 -0
- package/dist/components/status-badge.d.ts.map +1 -0
- package/dist/components/status-badge.js +65 -0
- package/dist/components/status-change-dialog.d.ts +10 -0
- package/dist/components/status-change-dialog.d.ts.map +1 -0
- package/dist/components/status-change-dialog.js +57 -0
- package/dist/components/supplier-status-dialog.d.ts +10 -0
- package/dist/components/supplier-status-dialog.d.ts.map +1 -0
- package/dist/components/supplier-status-dialog.js +98 -0
- package/dist/components/supplier-status-list.d.ts +5 -0
- package/dist/components/supplier-status-list.d.ts.map +1 -0
- package/dist/components/supplier-status-list.js +115 -0
- package/dist/components/traveler-category-buttons.d.ts +26 -0
- package/dist/components/traveler-category-buttons.d.ts.map +1 -0
- package/dist/components/traveler-category-buttons.js +35 -0
- package/dist/components/traveler-dialog.d.ts +10 -0
- package/dist/components/traveler-dialog.d.ts.map +1 -0
- package/dist/components/traveler-dialog.js +256 -0
- package/dist/components/traveler-list.d.ts +6 -0
- package/dist/components/traveler-list.d.ts.map +1 -0
- package/dist/components/traveler-list.js +295 -0
- package/dist/components/travelers-section-controls.d.ts +52 -0
- package/dist/components/travelers-section-controls.d.ts.map +1 -0
- package/dist/components/travelers-section-controls.js +206 -0
- package/dist/components/travelers-section.d.ts +159 -0
- package/dist/components/travelers-section.d.ts.map +1 -0
- package/dist/components/travelers-section.js +355 -0
- package/dist/components/voucher-picker-section.d.ts +50 -0
- package/dist/components/voucher-picker-section.d.ts.map +1 -0
- package/dist/components/voucher-picker-section.js +79 -0
- package/dist/extras/client.d.ts +14 -0
- package/dist/extras/client.d.ts.map +1 -0
- package/dist/extras/client.js +58 -0
- package/dist/extras/components/extra-catalog-card.d.ts +13 -0
- package/dist/extras/components/extra-catalog-card.d.ts.map +1 -0
- package/dist/extras/components/extra-catalog-card.js +52 -0
- package/dist/extras/components/product-combobox.d.ts +9 -0
- package/dist/extras/components/product-combobox.d.ts.map +1 -0
- package/dist/extras/components/product-combobox.js +46 -0
- package/dist/extras/components/slot-extras-manifest-panel.d.ts +6 -0
- package/dist/extras/components/slot-extras-manifest-panel.d.ts.map +1 -0
- package/dist/extras/components/slot-extras-manifest-panel.js +108 -0
- package/dist/extras/hooks/index.d.ts +5 -0
- package/dist/extras/hooks/index.d.ts.map +1 -0
- package/dist/extras/hooks/index.js +4 -0
- package/dist/extras/hooks/use-product-extra.d.ts +24 -0
- package/dist/extras/hooks/use-product-extra.d.ts.map +1 -0
- package/dist/extras/hooks/use-product-extra.js +12 -0
- package/dist/extras/hooks/use-product-extras.d.ts +30 -0
- package/dist/extras/hooks/use-product-extras.d.ts.map +1 -0
- package/dist/extras/hooks/use-product-extras.js +12 -0
- package/dist/extras/hooks/use-slot-extra-manifest-mutation.d.ts +48 -0
- package/dist/extras/hooks/use-slot-extra-manifest-mutation.d.ts.map +1 -0
- package/dist/extras/hooks/use-slot-extra-manifest-mutation.js +26 -0
- package/dist/extras/hooks/use-slot-extra-manifest.d.ts +68 -0
- package/dist/extras/hooks/use-slot-extra-manifest.d.ts.map +1 -0
- package/dist/extras/hooks/use-slot-extra-manifest.js +11 -0
- package/dist/extras/i18n/en.d.ts +52 -0
- package/dist/extras/i18n/en.d.ts.map +1 -0
- package/dist/extras/i18n/en.js +51 -0
- package/dist/extras/i18n/index.d.ts +5 -0
- package/dist/extras/i18n/index.d.ts.map +1 -0
- package/dist/extras/i18n/index.js +3 -0
- package/dist/extras/i18n/messages.d.ts +37 -0
- package/dist/extras/i18n/messages.d.ts.map +1 -0
- package/dist/extras/i18n/messages.js +1 -0
- package/dist/extras/i18n/provider.d.ts +126 -0
- package/dist/extras/i18n/provider.d.ts.map +1 -0
- package/dist/extras/i18n/provider.js +44 -0
- package/dist/extras/i18n/ro.d.ts +52 -0
- package/dist/extras/i18n/ro.d.ts.map +1 -0
- package/dist/extras/i18n/ro.js +51 -0
- package/dist/extras/index.d.ts +7 -0
- package/dist/extras/index.d.ts.map +1 -0
- package/dist/extras/index.js +6 -0
- package/dist/extras/provider.d.ts +2 -0
- package/dist/extras/provider.d.ts.map +1 -0
- package/dist/extras/provider.js +1 -0
- package/dist/extras/query-keys.d.ts +16 -0
- package/dist/extras/query-keys.d.ts.map +1 -0
- package/dist/extras/query-keys.js +8 -0
- package/dist/extras/query-options.d.ts +455 -0
- package/dist/extras/query-options.d.ts.map +1 -0
- package/dist/extras/query-options.js +44 -0
- package/dist/extras/schemas.d.ts +416 -0
- package/dist/extras/schemas.d.ts.map +1 -0
- package/dist/extras/schemas.js +89 -0
- package/dist/extras/ui.d.ts +4 -0
- package/dist/extras/ui.d.ts.map +1 -0
- package/dist/extras/ui.js +3 -0
- package/dist/extras.d.ts +10 -0
- package/dist/extras.d.ts.map +1 -0
- package/dist/extras.js +9 -0
- package/dist/hooks/index.d.ts +36 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +35 -0
- package/dist/hooks/use-booking-action-ledger.d.ts +63 -0
- package/dist/hooks/use-booking-action-ledger.d.ts.map +1 -0
- package/dist/hooks/use-booking-action-ledger.js +34 -0
- package/dist/hooks/use-booking-activity.d.ts +17 -0
- package/dist/hooks/use-booking-activity.d.ts.map +1 -0
- package/dist/hooks/use-booking-activity.js +12 -0
- package/dist/hooks/use-booking-cancel-mutation.d.ts +69 -0
- package/dist/hooks/use-booking-cancel-mutation.d.ts.map +1 -0
- package/dist/hooks/use-booking-cancel-mutation.js +24 -0
- package/dist/hooks/use-booking-contract-generation.d.ts +31 -0
- package/dist/hooks/use-booking-contract-generation.d.ts.map +1 -0
- package/dist/hooks/use-booking-contract-generation.js +36 -0
- package/dist/hooks/use-booking-convert-mutation.d.ts +81 -0
- package/dist/hooks/use-booking-convert-mutation.d.ts.map +1 -0
- package/dist/hooks/use-booking-convert-mutation.js +24 -0
- package/dist/hooks/use-booking-create-mutation.d.ts +337 -0
- package/dist/hooks/use-booking-create-mutation.d.ts.map +1 -0
- package/dist/hooks/use-booking-create-mutation.js +43 -0
- package/dist/hooks/use-booking-documents.d.ts +41 -0
- package/dist/hooks/use-booking-documents.d.ts.map +1 -0
- package/dist/hooks/use-booking-documents.js +46 -0
- package/dist/hooks/use-booking-dual-create-mutation.d.ts +338 -0
- package/dist/hooks/use-booking-dual-create-mutation.d.ts.map +1 -0
- package/dist/hooks/use-booking-dual-create-mutation.js +45 -0
- package/dist/hooks/use-booking-group-for-booking.d.ts +24 -0
- package/dist/hooks/use-booking-group-for-booking.d.ts.map +1 -0
- package/dist/hooks/use-booking-group-for-booking.js +12 -0
- package/dist/hooks/use-booking-group-member-mutation.d.ts +27 -0
- package/dist/hooks/use-booking-group-member-mutation.d.ts.map +1 -0
- package/dist/hooks/use-booking-group-member-mutation.js +38 -0
- package/dist/hooks/use-booking-group-mutation.d.ts +40 -0
- package/dist/hooks/use-booking-group-mutation.d.ts.map +1 -0
- package/dist/hooks/use-booking-group-mutation.js +32 -0
- package/dist/hooks/use-booking-group.d.ts +85 -0
- package/dist/hooks/use-booking-group.d.ts.map +1 -0
- package/dist/hooks/use-booking-group.js +12 -0
- package/dist/hooks/use-booking-groups.d.ts +21 -0
- package/dist/hooks/use-booking-groups.d.ts.map +1 -0
- package/dist/hooks/use-booking-groups.js +12 -0
- package/dist/hooks/use-booking-item-mutation.d.ts +101 -0
- package/dist/hooks/use-booking-item-mutation.d.ts.map +1 -0
- package/dist/hooks/use-booking-item-mutation.js +42 -0
- package/dist/hooks/use-booking-item-travelers.d.ts +32 -0
- package/dist/hooks/use-booking-item-travelers.d.ts.map +1 -0
- package/dist/hooks/use-booking-item-travelers.js +48 -0
- package/dist/hooks/use-booking-items.d.ts +36 -0
- package/dist/hooks/use-booking-items.d.ts.map +1 -0
- package/dist/hooks/use-booking-items.js +12 -0
- package/dist/hooks/use-booking-mutation.d.ts +158 -0
- package/dist/hooks/use-booking-mutation.d.ts.map +1 -0
- package/dist/hooks/use-booking-mutation.js +39 -0
- package/dist/hooks/use-booking-note-mutation.d.ts +39 -0
- package/dist/hooks/use-booking-note-mutation.d.ts.map +1 -0
- package/dist/hooks/use-booking-note-mutation.js +44 -0
- package/dist/hooks/use-booking-notes.d.ts +15 -0
- package/dist/hooks/use-booking-notes.d.ts.map +1 -0
- package/dist/hooks/use-booking-notes.js +12 -0
- package/dist/hooks/use-booking-primary-product.d.ts +28 -0
- package/dist/hooks/use-booking-primary-product.d.ts.map +1 -0
- package/dist/hooks/use-booking-primary-product.js +20 -0
- package/dist/hooks/use-booking-status-mutation.d.ts +156 -0
- package/dist/hooks/use-booking-status-mutation.d.ts.map +1 -0
- package/dist/hooks/use-booking-status-mutation.js +54 -0
- package/dist/hooks/use-booking-tax-preview.d.ts +29 -0
- package/dist/hooks/use-booking-tax-preview.d.ts.map +1 -0
- package/dist/hooks/use-booking-tax-preview.js +21 -0
- package/dist/hooks/use-booking.d.ts +67 -0
- package/dist/hooks/use-booking.d.ts.map +1 -0
- package/dist/hooks/use-booking.js +12 -0
- package/dist/hooks/use-bookings.d.ts +71 -0
- package/dist/hooks/use-bookings.d.ts.map +1 -0
- package/dist/hooks/use-bookings.js +12 -0
- package/dist/hooks/use-pricing-preview.d.ts +61 -0
- package/dist/hooks/use-pricing-preview.d.ts.map +1 -0
- package/dist/hooks/use-pricing-preview.js +18 -0
- package/dist/hooks/use-public-booking-session-flow-mutation.d.ts +148 -0
- package/dist/hooks/use-public-booking-session-flow-mutation.d.ts.map +1 -0
- package/dist/hooks/use-public-booking-session-flow-mutation.js +35 -0
- package/dist/hooks/use-public-booking-session-state.d.ts +16 -0
- package/dist/hooks/use-public-booking-session-state.d.ts.map +1 -0
- package/dist/hooks/use-public-booking-session-state.js +12 -0
- package/dist/hooks/use-public-booking-session.d.ts +101 -0
- package/dist/hooks/use-public-booking-session.d.ts.map +1 -0
- package/dist/hooks/use-public-booking-session.js +12 -0
- package/dist/hooks/use-reveal-traveler.d.ts +54 -0
- package/dist/hooks/use-reveal-traveler.d.ts.map +1 -0
- package/dist/hooks/use-reveal-traveler.js +18 -0
- package/dist/hooks/use-sharing-groups.d.ts +41 -0
- package/dist/hooks/use-sharing-groups.d.ts.map +1 -0
- package/dist/hooks/use-sharing-groups.js +20 -0
- package/dist/hooks/use-supplier-status-mutation.d.ts +46 -0
- package/dist/hooks/use-supplier-status-mutation.d.ts.map +1 -0
- package/dist/hooks/use-supplier-status-mutation.js +39 -0
- package/dist/hooks/use-supplier-statuses.d.ts +20 -0
- package/dist/hooks/use-supplier-statuses.d.ts.map +1 -0
- package/dist/hooks/use-supplier-statuses.js +12 -0
- package/dist/hooks/use-traveler-mutation.d.ts +55 -0
- package/dist/hooks/use-traveler-mutation.d.ts.map +1 -0
- package/dist/hooks/use-traveler-mutation.js +42 -0
- package/dist/hooks/use-traveler-with-travel-details-mutation.d.ts +120 -0
- package/dist/hooks/use-traveler-with-travel-details-mutation.d.ts.map +1 -0
- package/dist/hooks/use-traveler-with-travel-details-mutation.js +43 -0
- package/dist/hooks/use-travelers.d.ts +23 -0
- package/dist/hooks/use-travelers.d.ts.map +1 -0
- package/dist/hooks/use-travelers.js +12 -0
- package/dist/i18n/en-base.d.ts +295 -0
- package/dist/i18n/en-base.d.ts.map +1 -0
- package/dist/i18n/en-base.js +294 -0
- package/dist/i18n/en-create-list.d.ts +327 -0
- package/dist/i18n/en-create-list.d.ts.map +1 -0
- package/dist/i18n/en-create-list.js +326 -0
- package/dist/i18n/en-journey.d.ts +229 -0
- package/dist/i18n/en-journey.d.ts.map +1 -0
- package/dist/i18n/en-journey.js +228 -0
- package/dist/i18n/en-operations.d.ts +382 -0
- package/dist/i18n/en-operations.d.ts.map +1 -0
- package/dist/i18n/en-operations.js +381 -0
- package/dist/i18n/en-sections.d.ts +360 -0
- package/dist/i18n/en-sections.d.ts.map +1 -0
- package/dist/i18n/en-sections.js +359 -0
- package/dist/i18n/en.d.ts +1581 -0
- package/dist/i18n/en.d.ts.map +1 -0
- package/dist/i18n/en.js +12 -0
- package/dist/i18n/index.d.ts +5 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +3 -0
- package/dist/i18n/messages-base.d.ts +251 -0
- package/dist/i18n/messages-base.d.ts.map +1 -0
- package/dist/i18n/messages-base.js +1 -0
- package/dist/i18n/messages-create-list.d.ts +310 -0
- package/dist/i18n/messages-create-list.d.ts.map +1 -0
- package/dist/i18n/messages-create-list.js +1 -0
- package/dist/i18n/messages-journey.d.ts +198 -0
- package/dist/i18n/messages-journey.d.ts.map +1 -0
- package/dist/i18n/messages-journey.js +1 -0
- package/dist/i18n/messages-operations.d.ts +362 -0
- package/dist/i18n/messages-operations.d.ts.map +1 -0
- package/dist/i18n/messages-operations.js +1 -0
- package/dist/i18n/messages-sections.d.ts +312 -0
- package/dist/i18n/messages-sections.d.ts.map +1 -0
- package/dist/i18n/messages-sections.js +1 -0
- package/dist/i18n/messages.d.ts +7 -0
- package/dist/i18n/messages.d.ts.map +1 -0
- package/dist/i18n/messages.js +1 -0
- package/dist/i18n/provider.d.ts +3185 -0
- package/dist/i18n/provider.d.ts.map +1 -0
- package/dist/i18n/provider.js +45 -0
- package/dist/i18n/ro-base.d.ts +295 -0
- package/dist/i18n/ro-base.d.ts.map +1 -0
- package/dist/i18n/ro-base.js +294 -0
- package/dist/i18n/ro-create-list.d.ts +327 -0
- package/dist/i18n/ro-create-list.d.ts.map +1 -0
- package/dist/i18n/ro-create-list.js +326 -0
- package/dist/i18n/ro-journey.d.ts +229 -0
- package/dist/i18n/ro-journey.d.ts.map +1 -0
- package/dist/i18n/ro-journey.js +228 -0
- package/dist/i18n/ro-operations.d.ts +382 -0
- package/dist/i18n/ro-operations.d.ts.map +1 -0
- package/dist/i18n/ro-operations.js +381 -0
- package/dist/i18n/ro-sections.d.ts +360 -0
- package/dist/i18n/ro-sections.d.ts.map +1 -0
- package/dist/i18n/ro-sections.js +359 -0
- package/dist/i18n/ro.d.ts +1581 -0
- package/dist/i18n/ro.d.ts.map +1 -0
- package/dist/i18n/ro.js +12 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/journey/components/booking-journey-rules.d.ts +48 -0
- package/dist/journey/components/booking-journey-rules.d.ts.map +1 -0
- package/dist/journey/components/booking-journey-rules.js +235 -0
- package/dist/journey/components/booking-journey.d.ts +3 -0
- package/dist/journey/components/booking-journey.d.ts.map +1 -0
- package/dist/journey/components/booking-journey.js +368 -0
- package/dist/journey/components/configure-step-skeleton.d.ts +8 -0
- package/dist/journey/components/configure-step-skeleton.d.ts.map +1 -0
- package/dist/journey/components/configure-step-skeleton.js +11 -0
- package/dist/journey/components/contract-preview-dialog.d.ts +47 -0
- package/dist/journey/components/contract-preview-dialog.d.ts.map +1 -0
- package/dist/journey/components/contract-preview-dialog.js +124 -0
- package/dist/journey/components/journey-steps/accommodation-step.d.ts +3 -0
- package/dist/journey/components/journey-steps/accommodation-step.d.ts.map +1 -0
- package/dist/journey/components/journey-steps/accommodation-step.js +71 -0
- package/dist/journey/components/journey-steps/addons-step.d.ts +3 -0
- package/dist/journey/components/journey-steps/addons-step.d.ts.map +1 -0
- package/dist/journey/components/journey-steps/addons-step.js +40 -0
- package/dist/journey/components/journey-steps/billing-step.d.ts +8 -0
- package/dist/journey/components/journey-steps/billing-step.d.ts.map +1 -0
- package/dist/journey/components/journey-steps/billing-step.js +78 -0
- package/dist/journey/components/journey-steps/configure-steps.d.ts +28 -0
- package/dist/journey/components/journey-steps/configure-steps.d.ts.map +1 -0
- package/dist/journey/components/journey-steps/configure-steps.js +232 -0
- package/dist/journey/components/journey-steps/documents-step.d.ts +11 -0
- package/dist/journey/components/journey-steps/documents-step.d.ts.map +1 -0
- package/dist/journey/components/journey-steps/documents-step.js +36 -0
- package/dist/journey/components/journey-steps/payment-step.d.ts +29 -0
- package/dist/journey/components/journey-steps/payment-step.d.ts.map +1 -0
- package/dist/journey/components/journey-steps/payment-step.js +225 -0
- package/dist/journey/components/journey-steps/review-step.d.ts +27 -0
- package/dist/journey/components/journey-steps/review-step.d.ts.map +1 -0
- package/dist/journey/components/journey-steps/review-step.js +18 -0
- package/dist/journey/components/journey-steps/shared.d.ts +75 -0
- package/dist/journey/components/journey-steps/shared.d.ts.map +1 -0
- package/dist/journey/components/journey-steps/shared.js +108 -0
- package/dist/journey/components/journey-steps/travelers-step.d.ts +7 -0
- package/dist/journey/components/journey-steps/travelers-step.d.ts.map +1 -0
- package/dist/journey/components/journey-steps/travelers-step.js +201 -0
- package/dist/journey/components/journey-steps.d.ts +21 -0
- package/dist/journey/components/journey-steps.d.ts.map +1 -0
- package/dist/journey/components/journey-steps.js +20 -0
- package/dist/journey/components/side-panel.d.ts +17 -0
- package/dist/journey/components/side-panel.d.ts.map +1 -0
- package/dist/journey/components/side-panel.js +245 -0
- package/dist/journey/components/stacked-journey.d.ts +30 -0
- package/dist/journey/components/stacked-journey.d.ts.map +1 -0
- package/dist/journey/components/stacked-journey.js +50 -0
- package/dist/journey/components/step-header.d.ts +7 -0
- package/dist/journey/components/step-header.d.ts.map +1 -0
- package/dist/journey/components/step-header.js +12 -0
- package/dist/journey/index.d.ts +18 -0
- package/dist/journey/index.d.ts.map +1 -0
- package/dist/journey/index.js +17 -0
- package/dist/journey/lib/draft-state.d.ts +35 -0
- package/dist/journey/lib/draft-state.d.ts.map +1 -0
- package/dist/journey/lib/draft-state.js +57 -0
- package/dist/journey/lib/pax-band-dependencies.d.ts +27 -0
- package/dist/journey/lib/pax-band-dependencies.d.ts.map +1 -0
- package/dist/journey/lib/pax-band-dependencies.js +50 -0
- package/dist/journey/lib/payment-schedule.d.ts +19 -0
- package/dist/journey/lib/payment-schedule.d.ts.map +1 -0
- package/dist/journey/lib/payment-schedule.js +90 -0
- package/dist/journey/types.d.ts +403 -0
- package/dist/journey/types.d.ts.map +1 -0
- package/dist/journey/types.js +19 -0
- package/dist/provider.d.ts +2 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +1 -0
- package/dist/query-keys.d.ts +74 -0
- package/dist/query-keys.d.ts.map +1 -0
- package/dist/query-keys.js +26 -0
- package/dist/query-options.d.ts +2534 -0
- package/dist/query-options.d.ts.map +1 -0
- package/dist/query-options.js +233 -0
- package/dist/requirements/client.d.ts +14 -0
- package/dist/requirements/client.d.ts.map +1 -0
- package/dist/requirements/client.js +59 -0
- package/dist/requirements/components/booking-requirements-contact-tab.d.ts +8 -0
- package/dist/requirements/components/booking-requirements-contact-tab.d.ts.map +1 -0
- package/dist/requirements/components/booking-requirements-contact-tab.js +8 -0
- package/dist/requirements/components/booking-requirements-questions-tab.d.ts +14 -0
- package/dist/requirements/components/booking-requirements-questions-tab.d.ts.map +1 -0
- package/dist/requirements/components/booking-requirements-questions-tab.js +17 -0
- package/dist/requirements/constants.d.ts +114 -0
- package/dist/requirements/constants.d.ts.map +1 -0
- package/dist/requirements/constants.js +45 -0
- package/dist/requirements/hooks/index.d.ts +6 -0
- package/dist/requirements/hooks/index.d.ts.map +1 -0
- package/dist/requirements/hooks/index.js +6 -0
- package/dist/requirements/hooks/use-booking-questions.d.ts +24 -0
- package/dist/requirements/hooks/use-booking-questions.d.ts.map +1 -0
- package/dist/requirements/hooks/use-booking-questions.js +9 -0
- package/dist/requirements/hooks/use-contact-requirements.d.ts +22 -0
- package/dist/requirements/hooks/use-contact-requirements.d.ts.map +1 -0
- package/dist/requirements/hooks/use-contact-requirements.js +9 -0
- package/dist/requirements/hooks/use-products.d.ts +16 -0
- package/dist/requirements/hooks/use-products.d.ts.map +1 -0
- package/dist/requirements/hooks/use-products.js +9 -0
- package/dist/requirements/hooks/use-question-options.d.ts +19 -0
- package/dist/requirements/hooks/use-question-options.d.ts.map +1 -0
- package/dist/requirements/hooks/use-question-options.js +9 -0
- package/dist/requirements/hooks/use-transport-requirements.d.ts +30 -0
- package/dist/requirements/hooks/use-transport-requirements.d.ts.map +1 -0
- package/dist/requirements/hooks/use-transport-requirements.js +9 -0
- package/dist/requirements/i18n/en.d.ts +94 -0
- package/dist/requirements/i18n/en.d.ts.map +1 -0
- package/dist/requirements/i18n/en.js +93 -0
- package/dist/requirements/i18n/index.d.ts +5 -0
- package/dist/requirements/i18n/index.d.ts.map +1 -0
- package/dist/requirements/i18n/index.js +3 -0
- package/dist/requirements/i18n/messages.d.ts +59 -0
- package/dist/requirements/i18n/messages.d.ts.map +1 -0
- package/dist/requirements/i18n/messages.js +1 -0
- package/dist/requirements/i18n/provider.d.ts +210 -0
- package/dist/requirements/i18n/provider.d.ts.map +1 -0
- package/dist/requirements/i18n/provider.js +44 -0
- package/dist/requirements/i18n/ro.d.ts +94 -0
- package/dist/requirements/i18n/ro.d.ts.map +1 -0
- package/dist/requirements/i18n/ro.js +93 -0
- package/dist/requirements/index.d.ts +9 -0
- package/dist/requirements/index.d.ts.map +1 -0
- package/dist/requirements/index.js +8 -0
- package/dist/requirements/provider.d.ts +2 -0
- package/dist/requirements/provider.d.ts.map +1 -0
- package/dist/requirements/provider.js +1 -0
- package/dist/requirements/query-keys.d.ts +33 -0
- package/dist/requirements/query-keys.d.ts.map +1 -0
- package/dist/requirements/query-keys.js +13 -0
- package/dist/requirements/query-options.d.ts +371 -0
- package/dist/requirements/query-options.d.ts.map +1 -0
- package/dist/requirements/query-options.js +80 -0
- package/dist/requirements/schemas.d.ts +320 -0
- package/dist/requirements/schemas.d.ts.map +1 -0
- package/dist/requirements/schemas.js +121 -0
- package/dist/requirements/ui.d.ts +4 -0
- package/dist/requirements/ui.d.ts.map +1 -0
- package/dist/requirements/ui.js +3 -0
- package/dist/requirements/utils.d.ts +2 -0
- package/dist/requirements/utils.d.ts.map +1 -0
- package/dist/requirements/utils.js +4 -0
- package/dist/schemas.d.ts +2070 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +507 -0
- package/dist/status-presentation.d.ts +34 -0
- package/dist/status-presentation.d.ts.map +1 -0
- package/dist/status-presentation.js +38 -0
- package/dist/ui.d.ts +43 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +42 -0
- package/package.json +256 -0
- package/src/requirements/styles.css +1 -0
- package/src/styles.css +13 -0
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { usePeople, usePerson, } from "@voyant-travel/relationships-react";
|
|
4
|
+
import { PersonForm } from "@voyant-travel/relationships-react/ui";
|
|
5
|
+
import { Button, Label, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Sheet, SheetBody, SheetContent, SheetHeader, SheetTitle, } from "@voyant-travel/ui/components";
|
|
6
|
+
import { Combobox, ComboboxCollection, ComboboxContent, ComboboxEmpty, ComboboxInput, ComboboxItem, ComboboxList, } from "@voyant-travel/ui/components/combobox";
|
|
7
|
+
import { Pencil, UserPlus } from "lucide-react";
|
|
8
|
+
import * as React from "react";
|
|
9
|
+
import { useBookingsUiMessagesOrDefault } from "../i18n/provider.js";
|
|
10
|
+
import { getDynamicTravelerCategoryButtonState, getSelectableTravelerCategoryUnits, getStaticTravelerCategoryButtonState, shouldUseStaticTravelerCategoryFallback, } from "./traveler-category-buttons.js";
|
|
11
|
+
import { deriveTravelerRoleFromDob } from "./travelers-section.js";
|
|
12
|
+
function createClientTravelerKey() {
|
|
13
|
+
const random = typeof globalThis.crypto?.randomUUID === "function"
|
|
14
|
+
? globalThis.crypto.randomUUID().replace(/-/g, "")
|
|
15
|
+
: `${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`;
|
|
16
|
+
return `trav:${random}`;
|
|
17
|
+
}
|
|
18
|
+
export function TravelerPersonPicker({ personId, labels, pinnedPeople = [], onSelect, onClear, }) {
|
|
19
|
+
const [search, setSearch] = React.useState("");
|
|
20
|
+
const [inputValue, setInputValue] = React.useState("");
|
|
21
|
+
// One Sheet serves both flows: create when there's no selected person,
|
|
22
|
+
// edit when the operator clicks the Edit button on a selected one.
|
|
23
|
+
const [sheetMode, setSheetMode] = React.useState("create");
|
|
24
|
+
const [sheetOpen, setSheetOpen] = React.useState(false);
|
|
25
|
+
const peopleQuery = usePeople({ search: search || undefined, limit: 20 });
|
|
26
|
+
const selectedPersonQuery = usePerson(personId ?? undefined, { enabled: Boolean(personId) });
|
|
27
|
+
const people = React.useMemo(() => {
|
|
28
|
+
const map = new Map();
|
|
29
|
+
for (const person of peopleQuery.data?.data ?? [])
|
|
30
|
+
map.set(person.id, person);
|
|
31
|
+
for (const person of pinnedPeople)
|
|
32
|
+
map.set(person.id, person);
|
|
33
|
+
if (selectedPersonQuery.data)
|
|
34
|
+
map.set(selectedPersonQuery.data.id, selectedPersonQuery.data);
|
|
35
|
+
return Array.from(map.values());
|
|
36
|
+
}, [peopleQuery.data?.data, pinnedPeople, selectedPersonQuery.data]);
|
|
37
|
+
const peopleMap = React.useMemo(() => new Map(people.map((person) => [person.id, person])), [people]);
|
|
38
|
+
const selectedLabel = personId ? formatPerson(peopleMap.get(personId)) : "";
|
|
39
|
+
React.useEffect(() => {
|
|
40
|
+
if (selectedLabel)
|
|
41
|
+
setInputValue(selectedLabel);
|
|
42
|
+
}, [selectedLabel]);
|
|
43
|
+
return (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx(Label, { className: "text-xs", children: labels.person }), _jsxs("div", { className: "flex items-center gap-1", children: [personId ? (_jsxs(Button, { type: "button", variant: "ghost", size: "sm", className: "h-7", disabled: !selectedPersonQuery.data, onClick: () => {
|
|
44
|
+
setSheetMode("edit");
|
|
45
|
+
setSheetOpen(true);
|
|
46
|
+
}, children: [_jsx(Pencil, { className: "mr-1 h-3.5 w-3.5" }), labels.editPerson] })) : null, _jsxs(Button, { type: "button", variant: "ghost", size: "sm", className: "h-7", onClick: () => {
|
|
47
|
+
setSheetMode("create");
|
|
48
|
+
setSheetOpen(true);
|
|
49
|
+
}, children: [_jsx(UserPlus, { className: "mr-1 h-3.5 w-3.5" }), labels.createNewPerson] })] })] }), _jsxs(Combobox, { items: people.map((person) => person.id), value: personId, inputValue: inputValue, autoHighlight: true,
|
|
50
|
+
// `itemToStringLabel` drives BOTH the filter pass and the
|
|
51
|
+
// input display. Without it, base-ui falls back to the raw
|
|
52
|
+
// value (a `pers_…` typeid), so typing "eliza" matches
|
|
53
|
+
// nothing and the trigger shows the id instead of the name.
|
|
54
|
+
itemToStringLabel: (id) => formatPerson(peopleMap.get(id)) || id, itemToStringValue: (id) => id, onInputValueChange: (next) => {
|
|
55
|
+
setInputValue(next);
|
|
56
|
+
setSearch(next);
|
|
57
|
+
if (!next)
|
|
58
|
+
onClear();
|
|
59
|
+
}, onValueChange: (next) => {
|
|
60
|
+
const nextPerson = peopleMap.get(next ?? "");
|
|
61
|
+
if (nextPerson)
|
|
62
|
+
onSelect(nextPerson);
|
|
63
|
+
setInputValue(nextPerson ? formatPerson(nextPerson) : "");
|
|
64
|
+
}, children: [_jsx(ComboboxInput, { placeholder: labels.personSearchPlaceholder, showClear: !!personId }), _jsxs(ComboboxContent, { children: [_jsx(ComboboxEmpty, { children: labels.personEmpty }), _jsx(ComboboxList, { children: _jsx(ComboboxCollection, { children: (id) => {
|
|
65
|
+
const person = peopleMap.get(id);
|
|
66
|
+
if (!person)
|
|
67
|
+
return null;
|
|
68
|
+
return (_jsx(ComboboxItem, { value: person.id, children: _jsxs("div", { className: "flex min-w-0 flex-col", children: [_jsx("span", { className: "truncate font-medium", children: formatPersonName(person) }), person.email ? (_jsx("span", { className: "truncate text-xs text-muted-foreground", children: person.email })) : null] }) }, person.id));
|
|
69
|
+
} }) })] })] }), _jsx(Sheet, { open: sheetOpen, onOpenChange: setSheetOpen, children: _jsxs(SheetContent, { side: "right", size: "lg", children: [_jsx(SheetHeader, { children: _jsx(SheetTitle, { children: sheetMode === "edit" ? labels.editPersonSheetTitle : labels.createPersonSheetTitle }) }), _jsx(SheetBody, { children: _jsx(PersonForm, { mode: sheetMode === "edit" && selectedPersonQuery.data
|
|
70
|
+
? { kind: "edit", person: selectedPersonQuery.data }
|
|
71
|
+
: { kind: "create" }, onCancel: () => setSheetOpen(false), onSuccess: (saved) => {
|
|
72
|
+
onSelect(saved);
|
|
73
|
+
setInputValue(formatPerson(saved));
|
|
74
|
+
setSheetOpen(false);
|
|
75
|
+
} }) })] }) })] }));
|
|
76
|
+
}
|
|
77
|
+
export function createTravelerFromPerson(person, role) {
|
|
78
|
+
// DOB drives age-banded pricing — hydrate from the person record so
|
|
79
|
+
// the operator doesn't have to re-enter it on every booking. The
|
|
80
|
+
// caller's `role` still wins (e.g. "lead" on the first traveler) so
|
|
81
|
+
// the booking-lead flag isn't clobbered by the age-derived category.
|
|
82
|
+
const dateOfBirth = person.dateOfBirth ?? null;
|
|
83
|
+
const effectiveRole = role === "lead" ? "lead" : deriveTravelerRoleFromDob(dateOfBirth);
|
|
84
|
+
return {
|
|
85
|
+
clientTravelerKey: createClientTravelerKey(),
|
|
86
|
+
personId: person.id,
|
|
87
|
+
firstName: person.firstName,
|
|
88
|
+
lastName: person.lastName,
|
|
89
|
+
email: person.email ?? "",
|
|
90
|
+
phone: person.phone ?? "",
|
|
91
|
+
preferredLanguage: person.preferredLanguage ?? "",
|
|
92
|
+
role: effectiveRole,
|
|
93
|
+
dateOfBirth,
|
|
94
|
+
pricingUnitId: null,
|
|
95
|
+
pricingCategoryId: null,
|
|
96
|
+
inventoryUnitId: null,
|
|
97
|
+
pricingUnitSource: "auto",
|
|
98
|
+
inventoryUnitSource: "auto",
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
function formatPersonName(person) {
|
|
102
|
+
if (!person)
|
|
103
|
+
return "";
|
|
104
|
+
return [person.firstName, person.lastName].filter(Boolean).join(" ").trim();
|
|
105
|
+
}
|
|
106
|
+
function formatPerson(person) {
|
|
107
|
+
if (!person)
|
|
108
|
+
return "";
|
|
109
|
+
const name = formatPersonName(person);
|
|
110
|
+
return person.email ? `${name} · ${person.email}` : name;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Dynamic category-button group. Reads the product's actual
|
|
114
|
+
* person-typed option_units (Adult/Child/Senior, Adult/Child/Infant,
|
|
115
|
+
* Adult/Senior, etc) from `roomGroups` and renders one button per
|
|
116
|
+
* unit in the traveler's currently-assigned option.
|
|
117
|
+
*
|
|
118
|
+
* Falls back to the old static Adult/Child/Infant buttons when the
|
|
119
|
+
* parent hasn't wired `roomGroups` (during the brief window before a
|
|
120
|
+
* product is selected, or in legacy callers that don't pass the prop).
|
|
121
|
+
*/
|
|
122
|
+
export function TravelerCategoryButtons({ traveler, roomGroups, fallbackLabels, onPickUnit, }) {
|
|
123
|
+
const group = React.useMemo(() => {
|
|
124
|
+
if (!roomGroups)
|
|
125
|
+
return undefined;
|
|
126
|
+
const assignedUnitId = traveler.inventoryUnitId ?? traveler.pricingUnitId;
|
|
127
|
+
if (!assignedUnitId)
|
|
128
|
+
return undefined;
|
|
129
|
+
return roomGroups.find((g) => g.primaryUnitId === assignedUnitId || g.units.some((u) => u.unitId === assignedUnitId));
|
|
130
|
+
}, [roomGroups, traveler.inventoryUnitId, traveler.pricingUnitId]);
|
|
131
|
+
// Surface only person-typed units (Adult, Child, Senior, Infant,
|
|
132
|
+
// …). Vehicles / rooms / services aren't categories the operator
|
|
133
|
+
// toggles on a per-traveler basis.
|
|
134
|
+
const categoryUnits = React.useMemo(() => {
|
|
135
|
+
if (!group)
|
|
136
|
+
return [];
|
|
137
|
+
return getSelectableTravelerCategoryUnits(group.units);
|
|
138
|
+
}, [group]);
|
|
139
|
+
if (group && categoryUnits.length === 1) {
|
|
140
|
+
// Single person-typed unit — no category choice to make.
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
if (shouldUseStaticTravelerCategoryFallback(Boolean(group), categoryUnits.length)) {
|
|
144
|
+
// Fallback to traveler roles before a product/option is selected
|
|
145
|
+
// or when the selected option is room-only. Room inventory remains
|
|
146
|
+
// a separate dropdown; these buttons only set the traveler's role.
|
|
147
|
+
return (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx(Label, { className: "text-xs", children: fallbackLabels.category }), _jsx("div", { className: "grid grid-cols-3 gap-1", children: [
|
|
148
|
+
["adult", fallbackLabels.adult],
|
|
149
|
+
["child", fallbackLabels.child],
|
|
150
|
+
["infant", fallbackLabels.infant],
|
|
151
|
+
].map(([category, label]) => {
|
|
152
|
+
const { active, nextRole, shouldUpdate } = getStaticTravelerCategoryButtonState(traveler, category);
|
|
153
|
+
return (_jsx(Button, { type: "button", size: "sm", variant: active ? "default" : "outline", className: "h-7 text-xs", onClick: () => {
|
|
154
|
+
// Static fallback: operator chose a role, not a
|
|
155
|
+
// concrete unit. Pass `source: "auto"` so the
|
|
156
|
+
// resolver re-derives the unit instead of freezing
|
|
157
|
+
// a stale auto-assignment as manual.
|
|
158
|
+
if (shouldUpdate)
|
|
159
|
+
onPickUnit(traveler.pricingUnitId, nextRole, "auto");
|
|
160
|
+
}, children: label }, category));
|
|
161
|
+
}) })] }));
|
|
162
|
+
}
|
|
163
|
+
return (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx(Label, { className: "text-xs", children: fallbackLabels.category }), _jsx("div", { className: "grid gap-1", style: { gridTemplateColumns: `repeat(${categoryUnits.length}, minmax(0, 1fr))` }, children: categoryUnits.map((unit) => {
|
|
164
|
+
const { active, nextRole, shouldUpdate } = getDynamicTravelerCategoryButtonState(traveler, unit);
|
|
165
|
+
return (_jsx(Button, { type: "button", size: "sm", variant: active ? "default" : "outline", className: "h-7 text-xs", onClick: () => {
|
|
166
|
+
// Dynamic button: real unit pick, freeze as manual.
|
|
167
|
+
if (shouldUpdate)
|
|
168
|
+
onPickUnit(unit.unitId, nextRole, "manual");
|
|
169
|
+
}, title: unit.minAge != null || unit.maxAge != null
|
|
170
|
+
? `${unit.minAge ?? "0"}–${unit.maxAge ?? "∞"}`
|
|
171
|
+
: undefined, children: unit.unitName }, unit.unitId));
|
|
172
|
+
}) })] }));
|
|
173
|
+
}
|
|
174
|
+
export function TravelerPricingCategorySelect({ traveler, categories, label, onPickCategory, }) {
|
|
175
|
+
const selectableCategories = React.useMemo(() => {
|
|
176
|
+
if (!traveler.inventoryUnitId)
|
|
177
|
+
return categories;
|
|
178
|
+
const filtered = categories.filter((category) => category.unitIds.includes(traveler.inventoryUnitId ?? ""));
|
|
179
|
+
return filtered.length > 0 ? filtered : categories;
|
|
180
|
+
}, [categories, traveler.inventoryUnitId]);
|
|
181
|
+
const selectedCategory = selectableCategories.find((category) => category.categoryId === traveler.pricingCategoryId) ??
|
|
182
|
+
selectableCategories[0] ??
|
|
183
|
+
null;
|
|
184
|
+
const selectItems = React.useMemo(() => selectableCategories.map((category) => ({
|
|
185
|
+
label: category.name,
|
|
186
|
+
value: category.categoryId,
|
|
187
|
+
})), [selectableCategories]);
|
|
188
|
+
if (!selectedCategory)
|
|
189
|
+
return null;
|
|
190
|
+
return (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx(Label, { className: "text-xs", children: label }), _jsxs(Select, { items: selectItems, value: selectedCategory.categoryId, onValueChange: (value) => {
|
|
191
|
+
const category = selectableCategories.find((candidate) => candidate.categoryId === value);
|
|
192
|
+
if (category)
|
|
193
|
+
onPickCategory(category);
|
|
194
|
+
}, children: [_jsx(SelectTrigger, { className: "w-full", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: selectableCategories.map((category) => (_jsx(SelectItem, { value: category.categoryId, children: category.name }, category.categoryId))) })] })] }));
|
|
195
|
+
}
|
|
196
|
+
export function RelatedPersonChip({ personId, kind, addLabel, onAdd, }) {
|
|
197
|
+
const messages = useBookingsUiMessagesOrDefault();
|
|
198
|
+
const kindLabels = messages.travelersSection.relationshipKindLabels;
|
|
199
|
+
const query = usePerson(personId);
|
|
200
|
+
const person = query.data;
|
|
201
|
+
if (!person)
|
|
202
|
+
return null;
|
|
203
|
+
const name = formatPersonName(person) || personId;
|
|
204
|
+
const kindLabel = kindLabels[kind] ?? kind;
|
|
205
|
+
return (_jsxs(Button, { type: "button", size: "sm", variant: "outline", className: "h-7 gap-1.5", onClick: () => onAdd(person), "aria-label": addLabel, children: [_jsx(UserPlus, { className: "h-3.5 w-3.5" }), _jsx("span", { className: "text-xs", children: name }), _jsx("span", { className: "rounded-sm bg-muted px-1.5 py-0.5 text-[10px] text-muted-foreground", children: kindLabel })] }));
|
|
206
|
+
}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
export type TravelerRole = "lead" | "adult" | "child" | "infant";
|
|
2
|
+
export type TravelerUnitAssignmentSource = "auto" | "manual" | "none";
|
|
3
|
+
export interface TravelerEntry {
|
|
4
|
+
/** Stable client-side identity used by item/extra travelerKeys links. */
|
|
5
|
+
clientTravelerKey?: string;
|
|
6
|
+
personId: string | null;
|
|
7
|
+
firstName: string;
|
|
8
|
+
lastName: string;
|
|
9
|
+
email: string;
|
|
10
|
+
/** Snapshotted from the linked person at pick time. Optional. */
|
|
11
|
+
phone: string;
|
|
12
|
+
/** Snapshotted from the linked person at pick time. Optional. */
|
|
13
|
+
preferredLanguage: string;
|
|
14
|
+
role: TravelerRole;
|
|
15
|
+
/** ISO `YYYY-MM-DD` date of birth. Drives age-derived unit assignment. */
|
|
16
|
+
dateOfBirth: string | null;
|
|
17
|
+
/** option_unit_id of the person pricing tier this traveler is billed as. */
|
|
18
|
+
pricingUnitId: string | null;
|
|
19
|
+
/** pricing_category_id selected from the product's traveler price matrix, when applicable. */
|
|
20
|
+
pricingCategoryId: string | null;
|
|
21
|
+
/** option_unit_id of the room/vehicle this traveler occupies, when applicable. */
|
|
22
|
+
inventoryUnitId: string | null;
|
|
23
|
+
/** Operator intent for `pricingUnitId`; defaults to `auto` when omitted. */
|
|
24
|
+
pricingUnitSource?: TravelerUnitAssignmentSource;
|
|
25
|
+
/** Operator intent for `inventoryUnitId`; defaults to `auto` when omitted. */
|
|
26
|
+
inventoryUnitSource?: TravelerUnitAssignmentSource;
|
|
27
|
+
}
|
|
28
|
+
export interface TravelerListValue {
|
|
29
|
+
travelers: TravelerEntry[];
|
|
30
|
+
}
|
|
31
|
+
export declare const emptyTravelerListValue: TravelerListValue;
|
|
32
|
+
/** Factory for a blank row — `role` defaults to `adult` unless the list is empty. */
|
|
33
|
+
export declare function createBlankTraveler(role?: TravelerRole): TravelerEntry;
|
|
34
|
+
export { computeAgeYears } from "@voyant-travel/bookings/pricing-assignment";
|
|
35
|
+
/**
|
|
36
|
+
* Derive the age-banded traveler role from DOB. Falls back to `adult`
|
|
37
|
+
* when DOB is missing so partial entries still typecheck downstream.
|
|
38
|
+
*
|
|
39
|
+
* Thresholds:
|
|
40
|
+
* - infant: < 2
|
|
41
|
+
* - child: 2 – 17
|
|
42
|
+
* - adult: 18+
|
|
43
|
+
*/
|
|
44
|
+
export declare function deriveTravelerRoleFromDob(dob: string | null): TravelerRole;
|
|
45
|
+
export declare function categoryMatchesDob(category: TravelerPricingCategoryOption, dob: string | null): boolean;
|
|
46
|
+
export declare function matchPricingCategoryForTraveler(categories: ReadonlyArray<TravelerPricingCategoryOption> | undefined, dob: string | null, role: TravelerRole | null, inventoryUnitId: string | null): string | null;
|
|
47
|
+
export interface RoomUnitOption {
|
|
48
|
+
unitId: string;
|
|
49
|
+
unitName: string;
|
|
50
|
+
/**
|
|
51
|
+
* How many more travelers can be assigned to this unit. Decremented by
|
|
52
|
+
* the parent based on the stepper's quantity × occupancy capacity minus
|
|
53
|
+
* travelers already assigned to that unit.
|
|
54
|
+
*/
|
|
55
|
+
remainingCapacity: number;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Per-option breakdown of the actual age-banded units the product
|
|
59
|
+
* configures. Lets the row render dynamic category buttons (e.g.
|
|
60
|
+
* Adult/Child/Senior for one product, Adult/Child/Infant for another)
|
|
61
|
+
* rather than a hardcoded set.
|
|
62
|
+
*/
|
|
63
|
+
export interface RoomGroupUnit {
|
|
64
|
+
unitId: string;
|
|
65
|
+
/** Short label — typically the unit's own name (Adult, Child, Senior). */
|
|
66
|
+
unitName: string;
|
|
67
|
+
/** Stable code (ADULT, CHILD, SENIOR, INFANT, …) when configured. */
|
|
68
|
+
unitCode: string | null;
|
|
69
|
+
minAge: number | null;
|
|
70
|
+
maxAge: number | null;
|
|
71
|
+
unitType: "person" | "group" | "room" | "vehicle" | "service" | "other" | null;
|
|
72
|
+
}
|
|
73
|
+
export interface RoomGroup {
|
|
74
|
+
/** option_id this group of units belongs to. */
|
|
75
|
+
optionId: string;
|
|
76
|
+
/** Display name for the option (e.g. "Standard double"). */
|
|
77
|
+
optionName: string;
|
|
78
|
+
/** Default unit when the option is first picked (typically the ADULT-coded row). */
|
|
79
|
+
primaryUnitId: string;
|
|
80
|
+
units: RoomGroupUnit[];
|
|
81
|
+
}
|
|
82
|
+
export interface TravelerPricingCategoryOption {
|
|
83
|
+
categoryId: string;
|
|
84
|
+
name: string;
|
|
85
|
+
code: string | null;
|
|
86
|
+
categoryType: string;
|
|
87
|
+
minAge: number | null;
|
|
88
|
+
maxAge: number | null;
|
|
89
|
+
unitIds: string[];
|
|
90
|
+
}
|
|
91
|
+
export interface TravelersSectionProps {
|
|
92
|
+
value: TravelerListValue;
|
|
93
|
+
onChange: (value: TravelerListValue) => void;
|
|
94
|
+
/**
|
|
95
|
+
* Rooms the operator has selected (from OptionUnitsStepperSection + occupancy).
|
|
96
|
+
* When provided, each traveler gets a room-assignment dropdown.
|
|
97
|
+
*/
|
|
98
|
+
roomUnits?: RoomUnitOption[];
|
|
99
|
+
/**
|
|
100
|
+
* Per-option breakdown of all units the product configures. Drives
|
|
101
|
+
* dynamic category buttons (Adult/Child/Senior or whatever the
|
|
102
|
+
* product configures) and DOB-aware unit pre-selection on attach.
|
|
103
|
+
* Required for category buttons to render.
|
|
104
|
+
*/
|
|
105
|
+
roomGroups?: RoomGroup[];
|
|
106
|
+
/**
|
|
107
|
+
* Product pricing categories surfaced by the room x traveler price matrix.
|
|
108
|
+
* Room-only accommodation products use these as the traveler category select.
|
|
109
|
+
*/
|
|
110
|
+
pricingCategories?: TravelerPricingCategoryOption[];
|
|
111
|
+
billingPersonId?: string | null;
|
|
112
|
+
labels?: {
|
|
113
|
+
heading?: string;
|
|
114
|
+
addTraveler?: string;
|
|
115
|
+
firstName?: string;
|
|
116
|
+
lastName?: string;
|
|
117
|
+
email?: string;
|
|
118
|
+
role?: string;
|
|
119
|
+
category?: string;
|
|
120
|
+
dateOfBirth?: string;
|
|
121
|
+
roleLead?: string;
|
|
122
|
+
roleAdult?: string;
|
|
123
|
+
roleChild?: string;
|
|
124
|
+
roleInfant?: string;
|
|
125
|
+
room?: string;
|
|
126
|
+
noRoom?: string;
|
|
127
|
+
remove?: string;
|
|
128
|
+
empty?: string;
|
|
129
|
+
person?: string;
|
|
130
|
+
personSearchPlaceholder?: string;
|
|
131
|
+
personEmpty?: string;
|
|
132
|
+
createNewPerson?: string;
|
|
133
|
+
createPersonSheetTitle?: string;
|
|
134
|
+
editPerson?: string;
|
|
135
|
+
editPersonSheetTitle?: string;
|
|
136
|
+
addBillingPerson?: string;
|
|
137
|
+
relatedPeopleHeading?: string;
|
|
138
|
+
addRelatedPerson?: string;
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Traveler list for booking-create flows. Each row can point at an existing
|
|
143
|
+
* CRM person, create a new CRM person, or carry manual name/email details,
|
|
144
|
+
* plus role and optional room assignment.
|
|
145
|
+
*
|
|
146
|
+
* ### Parent contract
|
|
147
|
+
*
|
|
148
|
+
* At submit time, the parent:
|
|
149
|
+
* 1. Inserts a `booking_travelers` row per traveler with `participantType`
|
|
150
|
+
* derived from the role (`lead` / `adult` → traveler; `child` / `infant`
|
|
151
|
+
* → traveler with travelerCategory set).
|
|
152
|
+
* 2. Carries `personId` through when the traveler is tied to CRM, including
|
|
153
|
+
* when the payer is also traveling.
|
|
154
|
+
* 3. Exactly one row should have `role: "lead"` — enforced at submit, not
|
|
155
|
+
* here. The UI lets the operator pick whichever layout they want, then
|
|
156
|
+
* the submit handler errors if the invariant isn't met.
|
|
157
|
+
*/
|
|
158
|
+
export declare function TravelersSection({ value, onChange, roomUnits, roomGroups, pricingCategories, billingPersonId, labels, }: TravelersSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
159
|
+
//# sourceMappingURL=travelers-section.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"travelers-section.d.ts","sourceRoot":"","sources":["../../src/components/travelers-section.tsx"],"names":[],"mappings":"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"}
|