@voyant-travel/operations-react 0.0.0
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 +11 -0
- package/dist/admin.d.ts +59 -0
- package/dist/admin.d.ts.map +1 -0
- package/dist/admin.js +165 -0
- package/dist/availability/admin/availability-index-host.d.ts +12 -0
- package/dist/availability/admin/availability-index-host.d.ts.map +1 -0
- package/dist/availability/admin/availability-index-host.js +125 -0
- package/dist/availability/admin/availability-page-data.d.ts +9 -0
- package/dist/availability/admin/availability-page-data.d.ts.map +1 -0
- package/dist/availability/admin/availability-page-data.js +25 -0
- package/dist/availability/admin/index.d.ts +70 -0
- package/dist/availability/admin/index.d.ts.map +1 -0
- package/dist/availability/admin/index.js +140 -0
- package/dist/availability/admin/option-resource-template-seat-map.d.ts +10 -0
- package/dist/availability/admin/option-resource-template-seat-map.d.ts.map +1 -0
- package/dist/availability/admin/option-resource-template-seat-map.js +36 -0
- package/dist/availability/admin/option-resource-templates-panel.d.ts +22 -0
- package/dist/availability/admin/option-resource-templates-panel.d.ts.map +1 -0
- package/dist/availability/admin/option-resource-templates-panel.js +221 -0
- package/dist/availability/admin/pages/availability-rule-detail-page.d.ts +9 -0
- package/dist/availability/admin/pages/availability-rule-detail-page.d.ts.map +1 -0
- package/dist/availability/admin/pages/availability-rule-detail-page.js +11 -0
- package/dist/availability/admin/pages/availability-slot-detail-page.d.ts +9 -0
- package/dist/availability/admin/pages/availability-slot-detail-page.d.ts.map +1 -0
- package/dist/availability/admin/pages/availability-slot-detail-page.js +11 -0
- package/dist/availability/admin/pages/availability-start-time-detail-page.d.ts +9 -0
- package/dist/availability/admin/pages/availability-start-time-detail-page.d.ts.map +1 -0
- package/dist/availability/admin/pages/availability-start-time-detail-page.js +11 -0
- package/dist/availability/admin/rule-detail-host.d.ts +14 -0
- package/dist/availability/admin/rule-detail-host.d.ts.map +1 -0
- package/dist/availability/admin/rule-detail-host.js +27 -0
- package/dist/availability/admin/slot-detail-host.d.ts +29 -0
- package/dist/availability/admin/slot-detail-host.d.ts.map +1 -0
- package/dist/availability/admin/slot-detail-host.js +110 -0
- package/dist/availability/admin/start-time-detail-host.d.ts +15 -0
- package/dist/availability/admin/start-time-detail-host.d.ts.map +1 -0
- package/dist/availability/admin/start-time-detail-host.js +37 -0
- package/dist/availability/allocation/components/seat-map-builder.d.ts +25 -0
- package/dist/availability/allocation/components/seat-map-builder.d.ts.map +1 -0
- package/dist/availability/allocation/components/seat-map-builder.js +133 -0
- package/dist/availability/allocation/components/slot-allocation-add-resource-dialog.d.ts +29 -0
- package/dist/availability/allocation/components/slot-allocation-add-resource-dialog.d.ts.map +1 -0
- package/dist/availability/allocation/components/slot-allocation-add-resource-dialog.js +19 -0
- package/dist/availability/allocation/components/slot-allocation-model.d.ts +111 -0
- package/dist/availability/allocation/components/slot-allocation-model.d.ts.map +1 -0
- package/dist/availability/allocation/components/slot-allocation-model.js +237 -0
- package/dist/availability/allocation/components/slot-allocation-page-panels.d.ts +17 -0
- package/dist/availability/allocation/components/slot-allocation-page-panels.d.ts.map +1 -0
- package/dist/availability/allocation/components/slot-allocation-page-panels.js +27 -0
- package/dist/availability/allocation/components/slot-allocation-page.d.ts +51 -0
- package/dist/availability/allocation/components/slot-allocation-page.d.ts.map +1 -0
- package/dist/availability/allocation/components/slot-allocation-page.js +217 -0
- package/dist/availability/allocation/components/slot-allocation-resource-view-rows.d.ts +28 -0
- package/dist/availability/allocation/components/slot-allocation-resource-view-rows.d.ts.map +1 -0
- package/dist/availability/allocation/components/slot-allocation-resource-view-rows.js +90 -0
- package/dist/availability/allocation/components/slot-allocation-resource-view.d.ts +34 -0
- package/dist/availability/allocation/components/slot-allocation-resource-view.d.ts.map +1 -0
- package/dist/availability/allocation/components/slot-allocation-resource-view.js +35 -0
- package/dist/availability/allocation/components/slot-allocation-seat-view.d.ts +17 -0
- package/dist/availability/allocation/components/slot-allocation-seat-view.d.ts.map +1 -0
- package/dist/availability/allocation/components/slot-allocation-seat-view.js +97 -0
- package/dist/availability/allocation/components/slot-allocation-shared.d.ts +54 -0
- package/dist/availability/allocation/components/slot-allocation-shared.d.ts.map +1 -0
- package/dist/availability/allocation/components/slot-allocation-shared.js +106 -0
- package/dist/availability/allocation/i18n/index.d.ts +2 -0
- package/dist/availability/allocation/i18n/index.d.ts.map +1 -0
- package/dist/availability/allocation/i18n/index.js +1 -0
- package/dist/availability/allocation/i18n/provider.d.ts +692 -0
- package/dist/availability/allocation/i18n/provider.d.ts.map +1 -0
- package/dist/availability/allocation/i18n/provider.js +320 -0
- package/dist/availability/allocation/index.d.ts +4 -0
- package/dist/availability/allocation/index.d.ts.map +1 -0
- package/dist/availability/allocation/index.js +3 -0
- package/dist/availability/client.d.ts +14 -0
- package/dist/availability/client.d.ts.map +1 -0
- package/dist/availability/client.js +59 -0
- package/dist/availability/components/availability-columns.d.ts +42 -0
- package/dist/availability/components/availability-columns.d.ts.map +1 -0
- package/dist/availability/components/availability-columns.js +182 -0
- package/dist/availability/components/availability-dialogs/closeout-dialog.d.ts +13 -0
- package/dist/availability/components/availability-dialogs/closeout-dialog.d.ts.map +1 -0
- package/dist/availability/components/availability-dialogs/closeout-dialog.js +60 -0
- package/dist/availability/components/availability-dialogs/pickup-point-dialog.d.ts +12 -0
- package/dist/availability/components/availability-dialogs/pickup-point-dialog.d.ts.map +1 -0
- package/dist/availability/components/availability-dialogs/pickup-point-dialog.js +58 -0
- package/dist/availability/components/availability-dialogs/rule-dialog.d.ts +12 -0
- package/dist/availability/components/availability-dialogs/rule-dialog.d.ts.map +1 -0
- package/dist/availability/components/availability-dialogs/rule-dialog.js +76 -0
- package/dist/availability/components/availability-dialogs/shared.d.ts +213 -0
- package/dist/availability/components/availability-dialogs/shared.d.ts.map +1 -0
- package/dist/availability/components/availability-dialogs/shared.js +16 -0
- package/dist/availability/components/availability-dialogs/slot-dialog.d.ts +14 -0
- package/dist/availability/components/availability-dialogs/slot-dialog.d.ts.map +1 -0
- package/dist/availability/components/availability-dialogs/slot-dialog.js +138 -0
- package/dist/availability/components/availability-dialogs/start-time-dialog.d.ts +12 -0
- package/dist/availability/components/availability-dialogs/start-time-dialog.d.ts.map +1 -0
- package/dist/availability/components/availability-dialogs/start-time-dialog.js +62 -0
- package/dist/availability/components/availability-dialogs.d.ts +7 -0
- package/dist/availability/components/availability-dialogs.d.ts.map +1 -0
- package/dist/availability/components/availability-dialogs.js +6 -0
- package/dist/availability/components/availability-overview.d.ts +54 -0
- package/dist/availability/components/availability-overview.d.ts.map +1 -0
- package/dist/availability/components/availability-overview.js +50 -0
- package/dist/availability/components/availability-page.d.ts +32 -0
- package/dist/availability/components/availability-page.d.ts.map +1 -0
- package/dist/availability/components/availability-page.js +128 -0
- package/dist/availability/components/availability-rule-detail-page.d.ts +251 -0
- package/dist/availability/components/availability-rule-detail-page.d.ts.map +1 -0
- package/dist/availability/components/availability-rule-detail-page.js +74 -0
- package/dist/availability/components/availability-section-header.d.ts +8 -0
- package/dist/availability/components/availability-section-header.d.ts.map +1 -0
- package/dist/availability/components/availability-section-header.js +7 -0
- package/dist/availability/components/availability-skeletons.d.ts +6 -0
- package/dist/availability/components/availability-skeletons.d.ts.map +1 -0
- package/dist/availability/components/availability-skeletons.js +34 -0
- package/dist/availability/components/availability-slot-detail-activity.d.ts +30 -0
- package/dist/availability/components/availability-slot-detail-activity.d.ts.map +1 -0
- package/dist/availability/components/availability-slot-detail-activity.js +82 -0
- package/dist/availability/components/availability-slot-detail-financials.d.ts +27 -0
- package/dist/availability/components/availability-slot-detail-financials.d.ts.map +1 -0
- package/dist/availability/components/availability-slot-detail-financials.js +92 -0
- package/dist/availability/components/availability-slot-detail-meta.d.ts +38 -0
- package/dist/availability/components/availability-slot-detail-meta.d.ts.map +1 -0
- package/dist/availability/components/availability-slot-detail-meta.js +68 -0
- package/dist/availability/components/availability-slot-detail-page.d.ts +963 -0
- package/dist/availability/components/availability-slot-detail-page.d.ts.map +1 -0
- package/dist/availability/components/availability-slot-detail-page.js +159 -0
- package/dist/availability/components/availability-start-time-detail-page.d.ts +246 -0
- package/dist/availability/components/availability-start-time-detail-page.d.ts.map +1 -0
- package/dist/availability/components/availability-start-time-detail-page.js +83 -0
- package/dist/availability/components/availability-tabs/other-tabs.d.ts +58 -0
- package/dist/availability/components/availability-tabs/other-tabs.d.ts.map +1 -0
- package/dist/availability/components/availability-tabs/other-tabs.js +127 -0
- package/dist/availability/components/availability-tabs/shared.d.ts +80 -0
- package/dist/availability/components/availability-tabs/shared.d.ts.map +1 -0
- package/dist/availability/components/availability-tabs/shared.js +6 -0
- package/dist/availability/components/availability-tabs/slots-tab.d.ts +23 -0
- package/dist/availability/components/availability-tabs/slots-tab.d.ts.map +1 -0
- package/dist/availability/components/availability-tabs/slots-tab.js +69 -0
- package/dist/availability/components/availability-tabs.d.ts +4 -0
- package/dist/availability/components/availability-tabs.d.ts.map +1 -0
- package/dist/availability/components/availability-tabs.js +3 -0
- package/dist/availability/components/slot-status-tone.d.ts +15 -0
- package/dist/availability/components/slot-status-tone.d.ts.map +1 -0
- package/dist/availability/components/slot-status-tone.js +18 -0
- package/dist/availability/constants.d.ts +26 -0
- package/dist/availability/constants.d.ts.map +1 -0
- package/dist/availability/constants.js +23 -0
- package/dist/availability/form-resolver.d.ts +4 -0
- package/dist/availability/form-resolver.d.ts.map +1 -0
- package/dist/availability/form-resolver.js +40 -0
- package/dist/availability/hooks/index.d.ts +25 -0
- package/dist/availability/hooks/index.d.ts.map +1 -0
- package/dist/availability/hooks/index.js +15 -0
- package/dist/availability/hooks/use-availability-batch-mutations.d.ts +193 -0
- package/dist/availability/hooks/use-availability-batch-mutations.d.ts.map +1 -0
- package/dist/availability/hooks/use-availability-batch-mutations.js +53 -0
- package/dist/availability/hooks/use-availability-closeout-mutation.d.ts +34 -0
- package/dist/availability/hooks/use-availability-closeout-mutation.d.ts.map +1 -0
- package/dist/availability/hooks/use-availability-closeout-mutation.js +38 -0
- package/dist/availability/hooks/use-availability-overview.d.ts +46 -0
- package/dist/availability/hooks/use-availability-overview.d.ts.map +1 -0
- package/dist/availability/hooks/use-availability-overview.js +9 -0
- package/dist/availability/hooks/use-availability-pickup-point-mutation.d.ts +35 -0
- package/dist/availability/hooks/use-availability-pickup-point-mutation.d.ts.map +1 -0
- package/dist/availability/hooks/use-availability-pickup-point-mutation.js +38 -0
- package/dist/availability/hooks/use-availability-rule-mutation.d.ts +52 -0
- package/dist/availability/hooks/use-availability-rule-mutation.d.ts.map +1 -0
- package/dist/availability/hooks/use-availability-rule-mutation.js +41 -0
- package/dist/availability/hooks/use-availability-slot-mutation.d.ts +77 -0
- package/dist/availability/hooks/use-availability-slot-mutation.d.ts.map +1 -0
- package/dist/availability/hooks/use-availability-slot-mutation.js +41 -0
- package/dist/availability/hooks/use-availability-start-time-mutation.d.ts +43 -0
- package/dist/availability/hooks/use-availability-start-time-mutation.d.ts.map +1 -0
- package/dist/availability/hooks/use-availability-start-time-mutation.js +41 -0
- package/dist/availability/hooks/use-closeouts.d.ts +19 -0
- package/dist/availability/hooks/use-closeouts.d.ts.map +1 -0
- package/dist/availability/hooks/use-closeouts.js +9 -0
- package/dist/availability/hooks/use-pickup-points.d.ts +19 -0
- package/dist/availability/hooks/use-pickup-points.d.ts.map +1 -0
- package/dist/availability/hooks/use-pickup-points.js +9 -0
- package/dist/availability/hooks/use-products.d.ts +20 -0
- package/dist/availability/hooks/use-products.d.ts.map +1 -0
- package/dist/availability/hooks/use-products.js +9 -0
- package/dist/availability/hooks/use-rules.d.ts +25 -0
- package/dist/availability/hooks/use-rules.d.ts.map +1 -0
- package/dist/availability/hooks/use-rules.js +9 -0
- package/dist/availability/hooks/use-slot-allocation.d.ts +306 -0
- package/dist/availability/hooks/use-slot-allocation.d.ts.map +1 -0
- package/dist/availability/hooks/use-slot-allocation.js +211 -0
- package/dist/availability/hooks/use-slot-unit-availability.d.ts +25 -0
- package/dist/availability/hooks/use-slot-unit-availability.d.ts.map +1 -0
- package/dist/availability/hooks/use-slot-unit-availability.js +21 -0
- package/dist/availability/hooks/use-slots.d.ts +32 -0
- package/dist/availability/hooks/use-slots.d.ts.map +1 -0
- package/dist/availability/hooks/use-slots.js +9 -0
- package/dist/availability/hooks/use-start-times.d.ts +22 -0
- package/dist/availability/hooks/use-start-times.d.ts.map +1 -0
- package/dist/availability/hooks/use-start-times.js +9 -0
- package/dist/availability/i18n/index.d.ts +2 -0
- package/dist/availability/i18n/index.d.ts.map +1 -0
- package/dist/availability/i18n/index.js +1 -0
- package/dist/availability/i18n/provider.d.ts +2003 -0
- package/dist/availability/i18n/provider.d.ts.map +1 -0
- package/dist/availability/i18n/provider.js +102 -0
- package/dist/availability/index.d.ts +10 -0
- package/dist/availability/index.d.ts.map +1 -0
- package/dist/availability/index.js +9 -0
- package/dist/availability/provider.d.ts +2 -0
- package/dist/availability/provider.d.ts.map +1 -0
- package/dist/availability/provider.js +1 -0
- package/dist/availability/query-keys.d.ts +69 -0
- package/dist/availability/query-keys.d.ts.map +1 -0
- package/dist/availability/query-keys.js +29 -0
- package/dist/availability/query-options.d.ts +1549 -0
- package/dist/availability/query-options.d.ts.map +1 -0
- package/dist/availability/query-options.js +258 -0
- package/dist/availability/schemas.d.ts +974 -0
- package/dist/availability/schemas.d.ts.map +1 -0
- package/dist/availability/schemas.js +329 -0
- package/dist/availability/ui.d.ts +14 -0
- package/dist/availability/ui.d.ts.map +1 -0
- package/dist/availability/ui.js +13 -0
- package/dist/availability/utils.d.ts +10 -0
- package/dist/availability/utils.d.ts.map +1 -0
- package/dist/availability/utils.js +32 -0
- package/dist/ground/client.d.ts +14 -0
- package/dist/ground/client.d.ts.map +1 -0
- package/dist/ground/client.js +58 -0
- package/dist/ground/hooks/index.d.ts +7 -0
- package/dist/ground/hooks/index.d.ts.map +1 -0
- package/dist/ground/hooks/index.js +6 -0
- package/dist/ground/hooks/use-ground-driver-mutation.d.ts +48 -0
- package/dist/ground/hooks/use-ground-driver-mutation.d.ts.map +1 -0
- package/dist/ground/hooks/use-ground-driver-mutation.js +40 -0
- package/dist/ground/hooks/use-ground-drivers.d.ts +23 -0
- package/dist/ground/hooks/use-ground-drivers.d.ts.map +1 -0
- package/dist/ground/hooks/use-ground-drivers.js +12 -0
- package/dist/ground/hooks/use-ground-operator-mutation.d.ts +42 -0
- package/dist/ground/hooks/use-ground-operator-mutation.d.ts.map +1 -0
- package/dist/ground/hooks/use-ground-operator-mutation.js +40 -0
- package/dist/ground/hooks/use-ground-operators.d.ts +21 -0
- package/dist/ground/hooks/use-ground-operators.d.ts.map +1 -0
- package/dist/ground/hooks/use-ground-operators.js +12 -0
- package/dist/ground/hooks/use-ground-vehicle-mutation.d.ts +60 -0
- package/dist/ground/hooks/use-ground-vehicle-mutation.d.ts.map +1 -0
- package/dist/ground/hooks/use-ground-vehicle-mutation.js +40 -0
- package/dist/ground/hooks/use-ground-vehicles.d.ts +27 -0
- package/dist/ground/hooks/use-ground-vehicles.d.ts.map +1 -0
- package/dist/ground/hooks/use-ground-vehicles.js +12 -0
- package/dist/ground/index.d.ts +7 -0
- package/dist/ground/index.d.ts.map +1 -0
- package/dist/ground/index.js +6 -0
- package/dist/ground/provider.d.ts +2 -0
- package/dist/ground/provider.d.ts.map +1 -0
- package/dist/ground/provider.js +1 -0
- package/dist/ground/query-keys.d.ts +35 -0
- package/dist/ground/query-keys.d.ts.map +1 -0
- package/dist/ground/query-keys.js +12 -0
- package/dist/ground/query-options.d.ts +417 -0
- package/dist/ground/query-options.d.ts.map +1 -0
- package/dist/ground/query-options.js +63 -0
- package/dist/ground/schemas.d.ts +212 -0
- package/dist/ground/schemas.d.ts.map +1 -0
- package/dist/ground/schemas.js +45 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/places/client.d.ts +14 -0
- package/dist/places/client.d.ts.map +1 -0
- package/dist/places/client.js +58 -0
- package/dist/places/components/facility-badge.d.ts +13 -0
- package/dist/places/components/facility-badge.d.ts.map +1 -0
- package/dist/places/components/facility-badge.js +22 -0
- package/dist/places/components/facility-combobox.d.ts +16 -0
- package/dist/places/components/facility-combobox.d.ts.map +1 -0
- package/dist/places/components/facility-combobox.js +61 -0
- package/dist/places/components/place-badge.d.ts +2 -0
- package/dist/places/components/place-badge.d.ts.map +1 -0
- package/dist/places/components/place-badge.js +1 -0
- package/dist/places/components/place-combobox.d.ts +2 -0
- package/dist/places/components/place-combobox.d.ts.map +1 -0
- package/dist/places/components/place-combobox.js +1 -0
- package/dist/places/hooks/index.d.ts +23 -0
- package/dist/places/hooks/index.d.ts.map +1 -0
- package/dist/places/hooks/index.js +22 -0
- package/dist/places/hooks/use-facilities.d.ts +31 -0
- package/dist/places/hooks/use-facilities.d.ts.map +1 -0
- package/dist/places/hooks/use-facilities.js +12 -0
- package/dist/places/hooks/use-facility-feature-mutation.d.ts +37 -0
- package/dist/places/hooks/use-facility-feature-mutation.d.ts.map +1 -0
- package/dist/places/hooks/use-facility-feature-mutation.js +38 -0
- package/dist/places/hooks/use-facility-features.d.ts +21 -0
- package/dist/places/hooks/use-facility-features.d.ts.map +1 -0
- package/dist/places/hooks/use-facility-features.js +12 -0
- package/dist/places/hooks/use-facility-mutation.d.ts +74 -0
- package/dist/places/hooks/use-facility-mutation.d.ts.map +1 -0
- package/dist/places/hooks/use-facility-mutation.js +45 -0
- package/dist/places/hooks/use-facility-operation-schedule-mutation.d.ts +37 -0
- package/dist/places/hooks/use-facility-operation-schedule-mutation.d.ts.map +1 -0
- package/dist/places/hooks/use-facility-operation-schedule-mutation.js +44 -0
- package/dist/places/hooks/use-facility-operation-schedules.d.ts +21 -0
- package/dist/places/hooks/use-facility-operation-schedules.d.ts.map +1 -0
- package/dist/places/hooks/use-facility-operation-schedules.js +12 -0
- package/dist/places/hooks/use-facility.d.ts +25 -0
- package/dist/places/hooks/use-facility.d.ts.map +1 -0
- package/dist/places/hooks/use-facility.js +12 -0
- package/dist/places/hooks/use-properties.d.ts +23 -0
- package/dist/places/hooks/use-properties.d.ts.map +1 -0
- package/dist/places/hooks/use-properties.js +12 -0
- package/dist/places/hooks/use-property-group-member-mutation.d.ts +41 -0
- package/dist/places/hooks/use-property-group-member-mutation.d.ts.map +1 -0
- package/dist/places/hooks/use-property-group-member-mutation.js +38 -0
- package/dist/places/hooks/use-property-group-members.d.ts +20 -0
- package/dist/places/hooks/use-property-group-members.d.ts.map +1 -0
- package/dist/places/hooks/use-property-group-members.js +12 -0
- package/dist/places/hooks/use-property-group-mutation.d.ts +50 -0
- package/dist/places/hooks/use-property-group-mutation.d.ts.map +1 -0
- package/dist/places/hooks/use-property-group-mutation.js +39 -0
- package/dist/places/hooks/use-property-group.d.ts +17 -0
- package/dist/places/hooks/use-property-group.d.ts.map +1 -0
- package/dist/places/hooks/use-property-group.js +12 -0
- package/dist/places/hooks/use-property-groups.d.ts +23 -0
- package/dist/places/hooks/use-property-groups.d.ts.map +1 -0
- package/dist/places/hooks/use-property-groups.js +12 -0
- package/dist/places/hooks/use-property-mutation.d.ts +50 -0
- package/dist/places/hooks/use-property-mutation.d.ts.map +1 -0
- package/dist/places/hooks/use-property-mutation.js +40 -0
- package/dist/places/hooks/use-property.d.ts +17 -0
- package/dist/places/hooks/use-property.d.ts.map +1 -0
- package/dist/places/hooks/use-property.js +12 -0
- package/dist/places/i18n/en.d.ts +14 -0
- package/dist/places/i18n/en.d.ts.map +1 -0
- package/dist/places/i18n/en.js +13 -0
- package/dist/places/i18n/index.d.ts +5 -0
- package/dist/places/i18n/index.d.ts.map +1 -0
- package/dist/places/i18n/index.js +3 -0
- package/dist/places/i18n/messages.d.ts +15 -0
- package/dist/places/i18n/messages.d.ts.map +1 -0
- package/dist/places/i18n/messages.js +1 -0
- package/dist/places/i18n/provider.d.ts +50 -0
- package/dist/places/i18n/provider.d.ts.map +1 -0
- package/dist/places/i18n/provider.js +44 -0
- package/dist/places/i18n/ro.d.ts +14 -0
- package/dist/places/i18n/ro.d.ts.map +1 -0
- package/dist/places/i18n/ro.js +13 -0
- package/dist/places/index.d.ts +7 -0
- package/dist/places/index.d.ts.map +1 -0
- package/dist/places/index.js +6 -0
- package/dist/places/provider.d.ts +2 -0
- package/dist/places/provider.d.ts.map +1 -0
- package/dist/places/provider.js +1 -0
- package/dist/places/query-keys.d.ts +92 -0
- package/dist/places/query-keys.d.ts.map +1 -0
- package/dist/places/query-keys.js +22 -0
- package/dist/places/query-options.d.ts +814 -0
- package/dist/places/query-options.d.ts.map +1 -0
- package/dist/places/query-options.js +132 -0
- package/dist/places/schemas.d.ts +464 -0
- package/dist/places/schemas.d.ts.map +1 -0
- package/dist/places/schemas.js +84 -0
- package/dist/places/ui.d.ts +4 -0
- package/dist/places/ui.d.ts.map +1 -0
- package/dist/places/ui.js +3 -0
- package/dist/resources/admin/detail-hosts.d.ts +30 -0
- package/dist/resources/admin/detail-hosts.d.ts.map +1 -0
- package/dist/resources/admin/detail-hosts.js +50 -0
- package/dist/resources/admin/index.d.ts +89 -0
- package/dist/resources/admin/index.d.ts.map +1 -0
- package/dist/resources/admin/index.js +148 -0
- package/dist/resources/admin/pages/resource-allocation-detail-page.d.ts +9 -0
- package/dist/resources/admin/pages/resource-allocation-detail-page.d.ts.map +1 -0
- package/dist/resources/admin/pages/resource-allocation-detail-page.js +11 -0
- package/dist/resources/admin/pages/resource-assignment-detail-page.d.ts +9 -0
- package/dist/resources/admin/pages/resource-assignment-detail-page.d.ts.map +1 -0
- package/dist/resources/admin/pages/resource-assignment-detail-page.js +11 -0
- package/dist/resources/admin/pages/resource-detail-page.d.ts +9 -0
- package/dist/resources/admin/pages/resource-detail-page.d.ts.map +1 -0
- package/dist/resources/admin/pages/resource-detail-page.js +11 -0
- package/dist/resources/admin/pages/resource-pool-detail-page.d.ts +9 -0
- package/dist/resources/admin/pages/resource-pool-detail-page.d.ts.map +1 -0
- package/dist/resources/admin/pages/resource-pool-detail-page.js +11 -0
- package/dist/resources/admin/resources-admin-api.d.ts +22 -0
- package/dist/resources/admin/resources-admin-api.d.ts.map +1 -0
- package/dist/resources/admin/resources-admin-api.js +28 -0
- package/dist/resources/admin/resources-dialog-allocation.d.ts +12 -0
- package/dist/resources/admin/resources-dialog-allocation.d.ts.map +1 -0
- package/dist/resources/admin/resources-dialog-allocation.js +77 -0
- package/dist/resources/admin/resources-dialogs-core.d.ts +16 -0
- package/dist/resources/admin/resources-dialogs-core.d.ts.map +1 -0
- package/dist/resources/admin/resources-dialogs-core.js +133 -0
- package/dist/resources/admin/resources-dialogs-ops.d.ts +19 -0
- package/dist/resources/admin/resources-dialogs-ops.d.ts.map +1 -0
- package/dist/resources/admin/resources-dialogs-ops.js +137 -0
- package/dist/resources/admin/resources-dialogs.d.ts +28 -0
- package/dist/resources/admin/resources-dialogs.d.ts.map +1 -0
- package/dist/resources/admin/resources-dialogs.js +23 -0
- package/dist/resources/admin/resources-host.d.ts +11 -0
- package/dist/resources/admin/resources-host.d.ts.map +1 -0
- package/dist/resources/admin/resources-host.js +159 -0
- package/dist/resources/admin/resources-page-data.d.ts +61 -0
- package/dist/resources/admin/resources-page-data.d.ts.map +1 -0
- package/dist/resources/admin/resources-page-data.js +39 -0
- package/dist/resources/admin/resources-page-skeleton.d.ts +5 -0
- package/dist/resources/admin/resources-page-skeleton.d.ts.map +1 -0
- package/dist/resources/admin/resources-page-skeleton.js +22 -0
- package/dist/resources/client.d.ts +14 -0
- package/dist/resources/client.d.ts.map +1 -0
- package/dist/resources/client.js +59 -0
- package/dist/resources/components/resource-allocation-detail-page.d.ts +16 -0
- package/dist/resources/components/resource-allocation-detail-page.d.ts.map +1 -0
- package/dist/resources/components/resource-allocation-detail-page.js +48 -0
- package/dist/resources/components/resource-assignment-detail-page.d.ts +16 -0
- package/dist/resources/components/resource-assignment-detail-page.d.ts.map +1 -0
- package/dist/resources/components/resource-assignment-detail-page.js +50 -0
- package/dist/resources/components/resource-detail-data.d.ts +34 -0
- package/dist/resources/components/resource-detail-data.d.ts.map +1 -0
- package/dist/resources/components/resource-detail-data.js +90 -0
- package/dist/resources/components/resource-detail-page.d.ts +24 -0
- package/dist/resources/components/resource-detail-page.d.ts.map +1 -0
- package/dist/resources/components/resource-detail-page.js +80 -0
- package/dist/resources/components/resource-detail-shared.d.ts +37 -0
- package/dist/resources/components/resource-detail-shared.d.ts.map +1 -0
- package/dist/resources/components/resource-detail-shared.js +51 -0
- package/dist/resources/components/resource-detail-skeletons.d.ts +14 -0
- package/dist/resources/components/resource-detail-skeletons.d.ts.map +1 -0
- package/dist/resources/components/resource-detail-skeletons.js +24 -0
- package/dist/resources/components/resource-pool-detail-page.d.ts +22 -0
- package/dist/resources/components/resource-pool-detail-page.d.ts.map +1 -0
- package/dist/resources/components/resource-pool-detail-page.js +68 -0
- package/dist/resources/components/resources-overview.d.ts +28 -0
- package/dist/resources/components/resources-overview.d.ts.map +1 -0
- package/dist/resources/components/resources-overview.js +32 -0
- package/dist/resources/components/resources-page-filters.d.ts +22 -0
- package/dist/resources/components/resources-page-filters.d.ts.map +1 -0
- package/dist/resources/components/resources-page-filters.js +40 -0
- package/dist/resources/components/resources-page.d.ts +77 -0
- package/dist/resources/components/resources-page.d.ts.map +1 -0
- package/dist/resources/components/resources-page.js +140 -0
- package/dist/resources/components/resources-section-header.d.ts +7 -0
- package/dist/resources/components/resources-section-header.d.ts.map +1 -0
- package/dist/resources/components/resources-section-header.js +6 -0
- package/dist/resources/components/resources-tabs-primary.d.ts +58 -0
- package/dist/resources/components/resources-tabs-primary.d.ts.map +1 -0
- package/dist/resources/components/resources-tabs-primary.js +201 -0
- package/dist/resources/components/resources-tabs-secondary.d.ts +46 -0
- package/dist/resources/components/resources-tabs-secondary.d.ts.map +1 -0
- package/dist/resources/components/resources-tabs-secondary.js +143 -0
- package/dist/resources/constants.d.ts +44 -0
- package/dist/resources/constants.d.ts.map +1 -0
- package/dist/resources/constants.js +20 -0
- package/dist/resources/hooks/index.d.ts +31 -0
- package/dist/resources/hooks/index.d.ts.map +1 -0
- package/dist/resources/hooks/index.js +15 -0
- package/dist/resources/hooks/use-allocation.d.ts +16 -0
- package/dist/resources/hooks/use-allocation.d.ts.map +1 -0
- package/dist/resources/hooks/use-allocation.js +12 -0
- package/dist/resources/hooks/use-allocations.d.ts +20 -0
- package/dist/resources/hooks/use-allocations.d.ts.map +1 -0
- package/dist/resources/hooks/use-allocations.js +12 -0
- package/dist/resources/hooks/use-assignment.d.ts +17 -0
- package/dist/resources/hooks/use-assignment.d.ts.map +1 -0
- package/dist/resources/hooks/use-assignment.js +12 -0
- package/dist/resources/hooks/use-assignments.d.ts +21 -0
- package/dist/resources/hooks/use-assignments.d.ts.map +1 -0
- package/dist/resources/hooks/use-assignments.js +12 -0
- package/dist/resources/hooks/use-bookings.d.ts +14 -0
- package/dist/resources/hooks/use-bookings.d.ts.map +1 -0
- package/dist/resources/hooks/use-bookings.js +12 -0
- package/dist/resources/hooks/use-closeouts.d.ts +19 -0
- package/dist/resources/hooks/use-closeouts.d.ts.map +1 -0
- package/dist/resources/hooks/use-closeouts.js +12 -0
- package/dist/resources/hooks/use-pool.d.ts +15 -0
- package/dist/resources/hooks/use-pool.d.ts.map +1 -0
- package/dist/resources/hooks/use-pool.js +12 -0
- package/dist/resources/hooks/use-pools.d.ts +19 -0
- package/dist/resources/hooks/use-pools.d.ts.map +1 -0
- package/dist/resources/hooks/use-pools.js +12 -0
- package/dist/resources/hooks/use-products.d.ts +14 -0
- package/dist/resources/hooks/use-products.d.ts.map +1 -0
- package/dist/resources/hooks/use-products.js +12 -0
- package/dist/resources/hooks/use-resource.d.ts +16 -0
- package/dist/resources/hooks/use-resource.d.ts.map +1 -0
- package/dist/resources/hooks/use-resource.js +12 -0
- package/dist/resources/hooks/use-resources.d.ts +20 -0
- package/dist/resources/hooks/use-resources.d.ts.map +1 -0
- package/dist/resources/hooks/use-resources.js +12 -0
- package/dist/resources/hooks/use-rules.d.ts +15 -0
- package/dist/resources/hooks/use-rules.d.ts.map +1 -0
- package/dist/resources/hooks/use-rules.js +12 -0
- package/dist/resources/hooks/use-slots.d.ts +16 -0
- package/dist/resources/hooks/use-slots.d.ts.map +1 -0
- package/dist/resources/hooks/use-slots.js +12 -0
- package/dist/resources/hooks/use-start-times.d.ts +16 -0
- package/dist/resources/hooks/use-start-times.d.ts.map +1 -0
- package/dist/resources/hooks/use-start-times.js +12 -0
- package/dist/resources/hooks/use-suppliers.d.ts +14 -0
- package/dist/resources/hooks/use-suppliers.d.ts.map +1 -0
- package/dist/resources/hooks/use-suppliers.js +12 -0
- package/dist/resources/i18n/en.d.ts +3 -0
- package/dist/resources/i18n/en.d.ts.map +1 -0
- package/dist/resources/i18n/en.js +363 -0
- package/dist/resources/i18n/index.d.ts +5 -0
- package/dist/resources/i18n/index.d.ts.map +1 -0
- package/dist/resources/i18n/index.js +3 -0
- package/dist/resources/i18n/messages.d.ts +298 -0
- package/dist/resources/i18n/messages.d.ts.map +1 -0
- package/dist/resources/i18n/messages.js +1 -0
- package/dist/resources/i18n/provider.d.ts +26 -0
- package/dist/resources/i18n/provider.d.ts.map +1 -0
- package/dist/resources/i18n/provider.js +44 -0
- package/dist/resources/i18n/ro.d.ts +3 -0
- package/dist/resources/i18n/ro.d.ts.map +1 -0
- package/dist/resources/i18n/ro.js +363 -0
- package/dist/resources/i18n/utils.d.ts +18 -0
- package/dist/resources/i18n/utils.d.ts.map +1 -0
- package/dist/resources/i18n/utils.js +30 -0
- package/dist/resources/index.d.ts +9 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +8 -0
- package/dist/resources/provider.d.ts +2 -0
- package/dist/resources/provider.d.ts.map +1 -0
- package/dist/resources/provider.js +1 -0
- package/dist/resources/query-keys.d.ts +73 -0
- package/dist/resources/query-keys.d.ts.map +1 -0
- package/dist/resources/query-keys.js +29 -0
- package/dist/resources/query-options.d.ts +801 -0
- package/dist/resources/query-options.d.ts.map +1 -0
- package/dist/resources/query-options.js +237 -0
- package/dist/resources/schemas.d.ts +452 -0
- package/dist/resources/schemas.d.ts.map +1 -0
- package/dist/resources/schemas.js +126 -0
- package/dist/resources/ui.d.ts +13 -0
- package/dist/resources/ui.d.ts.map +1 -0
- package/dist/resources/ui.js +12 -0
- package/dist/resources/utils.d.ts +14 -0
- package/dist/resources/utils.d.ts.map +1 -0
- package/dist/resources/utils.js +33 -0
- package/package.json +325 -0
- package/src/availability/styles.css +12 -0
- package/src/places/styles.css +11 -0
- package/src/resources/styles.css +11 -0
- package/src/styles.css +3 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useQuery } from "@tanstack/react-query";
|
|
4
|
+
import { useAdminBreadcrumbs, useAdminHref, useAdminNavigate, useOperatorAdminMessages, } from "@voyant-travel/admin";
|
|
5
|
+
import { AvailabilityRuleDetailPage, getAvailabilityRuleDetailQueryOptions, } from "../components/availability-rule-detail-page.js";
|
|
6
|
+
import { useVoyantAvailabilityContext } from "../index.js";
|
|
7
|
+
/**
|
|
8
|
+
* Packaged admin host for the availability rule detail page (packaged-admin
|
|
9
|
+
* RFC Phase 3). Data wiring runs through the shared availability provider
|
|
10
|
+
* context; breadcrumbs through the admin chrome; cross-route links through
|
|
11
|
+
* the semantic destinations `availabilitySlot.list`, `availabilitySlot.detail`
|
|
12
|
+
* and `product.detail` (RFC §4.7). The SSR prefetch loader stays in the host
|
|
13
|
+
* route file with the app's cookie-forwarding fetcher.
|
|
14
|
+
*/
|
|
15
|
+
export function AvailabilityRuleDetailHost({ ruleId }) {
|
|
16
|
+
const messages = useOperatorAdminMessages();
|
|
17
|
+
const resolveHref = useAdminHref();
|
|
18
|
+
const navigateTo = useAdminNavigate();
|
|
19
|
+
const client = useVoyantAvailabilityContext();
|
|
20
|
+
const ruleQuery = useQuery(getAvailabilityRuleDetailQueryOptions(client, ruleId));
|
|
21
|
+
const rule = ruleQuery.data?.data;
|
|
22
|
+
useAdminBreadcrumbs([
|
|
23
|
+
{ label: messages.availability.title, href: resolveHref("availabilitySlot.list", {}) },
|
|
24
|
+
...(rule ? [{ label: rule.productName ?? `Rule ${rule.id.slice(-6)}` }] : []),
|
|
25
|
+
]);
|
|
26
|
+
return (_jsx(AvailabilityRuleDetailPage, { id: ruleId, onBack: () => navigateTo("availabilitySlot.list", {}), onDeleted: () => navigateTo("availabilitySlot.list", {}), onOpenProduct: (productId) => navigateTo("product.detail", { productId }), onOpenSlot: (slotId) => navigateTo("availabilitySlot.detail", { slotId }) }));
|
|
27
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface AvailabilitySlotDetailHostProps {
|
|
2
|
+
/** The availability slot id (route param, bound by the host route file). */
|
|
3
|
+
slotId: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Packaged admin host for the availability slot detail page (packaged-admin
|
|
7
|
+
* RFC Phase 3). Owns everything package-clean:
|
|
8
|
+
*
|
|
9
|
+
* - Data wiring through the shared availability provider context
|
|
10
|
+
* (`useVoyantAvailabilityContext`) — the workspace shell mounts
|
|
11
|
+
* `VoyantAvailabilityProvider`, so no per-route provider or app env
|
|
12
|
+
* helper is needed.
|
|
13
|
+
* - Admin chrome breadcrumbs (`useAdminBreadcrumbs`).
|
|
14
|
+
* - Cross-route links resolve through semantic destinations (RFC §4.7):
|
|
15
|
+
* `availabilitySlot.list`, `availabilityStartTime.detail`,
|
|
16
|
+
* `booking.detail`, `product.detail` — no host route tree import.
|
|
17
|
+
* - The cross-domain composition the operator route previously assembled:
|
|
18
|
+
* the Allocation tab (`@voyant-travel/operations-react/availability/allocation`), the Extras manifest tab
|
|
19
|
+
* (`@voyant-travel/bookings-react/extras`), the booking create/quick-view sheets
|
|
20
|
+
* (`@voyant-travel/bookings-react/ui`, lazy) and the product quick-view sheet
|
|
21
|
+
* (`@voyant-travel/inventory-react/ui`).
|
|
22
|
+
* - The slot edit dialog, submitting through the package mutation
|
|
23
|
+
* (`useAvailabilitySlotMutation`) instead of an app RPC client.
|
|
24
|
+
*
|
|
25
|
+
* The SSR prefetch loader stays in the host route file (it runs outside the
|
|
26
|
+
* React tree with the app's cookie-forwarding fetcher).
|
|
27
|
+
*/
|
|
28
|
+
export declare function AvailabilitySlotDetailHost({ slotId }: AvailabilitySlotDetailHostProps): import("react/jsx-runtime").JSX.Element;
|
|
29
|
+
//# sourceMappingURL=slot-detail-host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slot-detail-host.d.ts","sourceRoot":"","sources":["../../../src/availability/admin/slot-detail-host.tsx"],"names":[],"mappings":"AA4CA,MAAM,WAAW,+BAA+B;IAC9C,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,0BAA0B,CAAC,EAAE,MAAM,EAAE,EAAE,+BAA+B,2CAqIrF"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useQuery } from "@tanstack/react-query";
|
|
4
|
+
import { useAdminBreadcrumbs, useAdminHref, useAdminNavigate, useOperatorAdminMessages, } from "@voyant-travel/admin";
|
|
5
|
+
import { SlotExtrasManifestPanel, useExtrasUiMessagesOrDefault, } from "@voyant-travel/bookings-react/extras";
|
|
6
|
+
import { ProductQuickViewSheet } from "@voyant-travel/inventory-react/ui";
|
|
7
|
+
import { lazy, Suspense, useState } from "react";
|
|
8
|
+
import { SlotAllocationPage } from "../allocation/index.js";
|
|
9
|
+
import { AvailabilitySlotDialog } from "../components/availability-dialogs.js";
|
|
10
|
+
import { AvailabilitySlotDetailPage, getAvailabilitySlotDetailQueryOptions, getAvailabilitySlotProductQueryOptions, } from "../components/availability-slot-detail-page.js";
|
|
11
|
+
import { useAvailabilitySlotMutation, useRules, useStartTimes, useVoyantAvailabilityContext, } from "../index.js";
|
|
12
|
+
// Lazy: the booking sheets pull the bookings-ui bundle; only operators who
|
|
13
|
+
// actually create/preview a booking from a slot pay for it.
|
|
14
|
+
const BookingCreateSheet = lazy(() => import("@voyant-travel/bookings-react/components/booking-create-sheet").then((module) => ({
|
|
15
|
+
default: module.BookingCreateSheet,
|
|
16
|
+
})));
|
|
17
|
+
const BookingQuickViewSheet = lazy(() => import("@voyant-travel/bookings-react/components/booking-quick-view-sheet").then((module) => ({
|
|
18
|
+
default: module.BookingQuickViewSheet,
|
|
19
|
+
})));
|
|
20
|
+
/**
|
|
21
|
+
* Packaged admin host for the availability slot detail page (packaged-admin
|
|
22
|
+
* RFC Phase 3). Owns everything package-clean:
|
|
23
|
+
*
|
|
24
|
+
* - Data wiring through the shared availability provider context
|
|
25
|
+
* (`useVoyantAvailabilityContext`) — the workspace shell mounts
|
|
26
|
+
* `VoyantAvailabilityProvider`, so no per-route provider or app env
|
|
27
|
+
* helper is needed.
|
|
28
|
+
* - Admin chrome breadcrumbs (`useAdminBreadcrumbs`).
|
|
29
|
+
* - Cross-route links resolve through semantic destinations (RFC §4.7):
|
|
30
|
+
* `availabilitySlot.list`, `availabilityStartTime.detail`,
|
|
31
|
+
* `booking.detail`, `product.detail` — no host route tree import.
|
|
32
|
+
* - The cross-domain composition the operator route previously assembled:
|
|
33
|
+
* the Allocation tab (`@voyant-travel/operations-react/availability/allocation`), the Extras manifest tab
|
|
34
|
+
* (`@voyant-travel/bookings-react/extras`), the booking create/quick-view sheets
|
|
35
|
+
* (`@voyant-travel/bookings-react/ui`, lazy) and the product quick-view sheet
|
|
36
|
+
* (`@voyant-travel/inventory-react/ui`).
|
|
37
|
+
* - The slot edit dialog, submitting through the package mutation
|
|
38
|
+
* (`useAvailabilitySlotMutation`) instead of an app RPC client.
|
|
39
|
+
*
|
|
40
|
+
* The SSR prefetch loader stays in the host route file (it runs outside the
|
|
41
|
+
* React tree with the app's cookie-forwarding fetcher).
|
|
42
|
+
*/
|
|
43
|
+
export function AvailabilitySlotDetailHost({ slotId }) {
|
|
44
|
+
const messages = useOperatorAdminMessages();
|
|
45
|
+
const extrasMessages = useExtrasUiMessagesOrDefault();
|
|
46
|
+
const resolveHref = useAdminHref();
|
|
47
|
+
const navigateTo = useAdminNavigate();
|
|
48
|
+
const client = useVoyantAvailabilityContext();
|
|
49
|
+
const slotMutation = useAvailabilitySlotMutation();
|
|
50
|
+
const slotQuery = useQuery(getAvailabilitySlotDetailQueryOptions(client, slotId));
|
|
51
|
+
const slot = slotQuery.data?.data;
|
|
52
|
+
const productQuery = useQuery({
|
|
53
|
+
...getAvailabilitySlotProductQueryOptions(client, slot?.productId ?? null),
|
|
54
|
+
enabled: Boolean(slot?.productId),
|
|
55
|
+
});
|
|
56
|
+
const productName = productQuery.data?.data?.name ?? null;
|
|
57
|
+
const [bookingPreviewId, setBookingPreviewId] = useState(null);
|
|
58
|
+
const [productPreviewId, setProductPreviewId] = useState(null);
|
|
59
|
+
const [bookingCreateDefaults, setBookingCreateDefaults] = useState(null);
|
|
60
|
+
const [editDialogOpen, setEditDialogOpen] = useState(false);
|
|
61
|
+
// Lazy-load rules + start times only when the edit dialog opens —
|
|
62
|
+
// the slot detail view itself doesn't need them. Scope to the slot's
|
|
63
|
+
// product so the dialog only suggests recurring rules / start times
|
|
64
|
+
// that already belong to this product.
|
|
65
|
+
const rulesQuery = useRules({ productId: slot?.productId, enabled: editDialogOpen });
|
|
66
|
+
const startTimesQuery = useStartTimes({
|
|
67
|
+
productId: slot?.productId,
|
|
68
|
+
enabled: editDialogOpen,
|
|
69
|
+
});
|
|
70
|
+
useAdminBreadcrumbs([
|
|
71
|
+
{ label: messages.availability.title, href: resolveHref("availabilitySlot.list", {}) },
|
|
72
|
+
...(slot
|
|
73
|
+
? [
|
|
74
|
+
{
|
|
75
|
+
label: productName ? `${productName} · ${slot.dateLocal}` : `Slot · ${slot.dateLocal}`,
|
|
76
|
+
},
|
|
77
|
+
]
|
|
78
|
+
: []),
|
|
79
|
+
]);
|
|
80
|
+
return (_jsxs(_Fragment, { children: [_jsx(AvailabilitySlotDetailPage, { id: slotId, onBack: () => navigateTo("availabilitySlot.list", {}), onDeleted: () => navigateTo("availabilitySlot.list", {}), onOpenProduct: (productId) => setProductPreviewId(productId), onOpenStartTime: (startTimeId) => navigateTo("availabilityStartTime.detail", { startTimeId }), onCreateBooking: (input) => setBookingCreateDefaults(input), onEdit: () => setEditDialogOpen(true), renderAllocation: ({ slotId: allocationSlotId }) => (_jsx(SlotAllocationPage, { slotId: allocationSlotId, embed: true, onBookingOpen: (bookingId) => setBookingPreviewId(bookingId) })), renderExtras: ({ slotId: extrasSlotId }) => (_jsx(SlotExtrasManifestPanel, { slotId: extrasSlotId })), extrasTabLabel: extrasMessages.slotManifest.title }), _jsx(Suspense, { fallback: null, children: _jsx(BookingCreateSheet, { open: Boolean(bookingCreateDefaults), onOpenChange: (open) => {
|
|
81
|
+
if (!open)
|
|
82
|
+
setBookingCreateDefaults(null);
|
|
83
|
+
}, defaultProductId: bookingCreateDefaults?.productId, defaultSlotId: bookingCreateDefaults?.slotId, onCreated: (booking) => setBookingPreviewId(booking.id) }) }), _jsx(Suspense, { fallback: null, children: _jsx(BookingQuickViewSheet, { bookingId: bookingPreviewId, open: bookingPreviewId !== null, onOpenChange: (open) => {
|
|
84
|
+
if (!open)
|
|
85
|
+
setBookingPreviewId(null);
|
|
86
|
+
}, onViewFull: (booking) => {
|
|
87
|
+
setBookingPreviewId(null);
|
|
88
|
+
navigateTo("booking.detail", { bookingId: booking.id });
|
|
89
|
+
} }) }), _jsx(ProductQuickViewSheet, { productId: productPreviewId, open: productPreviewId !== null, onOpenChange: (open) => {
|
|
90
|
+
if (!open)
|
|
91
|
+
setProductPreviewId(null);
|
|
92
|
+
}, onViewFull: (product) => {
|
|
93
|
+
setProductPreviewId(null);
|
|
94
|
+
navigateTo("product.detail", { productId: product.id });
|
|
95
|
+
} }), slot && productQuery.data?.data ? (_jsx(AvailabilitySlotDialog, { messages: messages.availability, open: editDialogOpen, onOpenChange: setEditDialogOpen, slot: slot, products: [productQuery.data.data], rules: rulesQuery.data?.data ?? [], startTimes: startTimesQuery.data?.data ?? [], onSubmit: async (payload, context) => {
|
|
96
|
+
if (context.isEditing) {
|
|
97
|
+
if (!context.id)
|
|
98
|
+
throw new Error("Slot edit requires an id.");
|
|
99
|
+
await slotMutation.update.mutateAsync({
|
|
100
|
+
id: context.id,
|
|
101
|
+
input: payload,
|
|
102
|
+
});
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
await slotMutation.create.mutateAsync(payload);
|
|
106
|
+
}, onSuccess: () => {
|
|
107
|
+
setEditDialogOpen(false);
|
|
108
|
+
void slotQuery.refetch();
|
|
109
|
+
} })) : null] }));
|
|
110
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface AvailabilityStartTimeDetailHostProps {
|
|
2
|
+
/** The availability start time id (route param, bound by the host route file). */
|
|
3
|
+
startTimeId: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Packaged admin host for the availability start time detail page
|
|
7
|
+
* (packaged-admin RFC Phase 3). Data wiring runs through the shared
|
|
8
|
+
* availability provider context; breadcrumbs through the admin chrome;
|
|
9
|
+
* cross-route links through the semantic destinations
|
|
10
|
+
* `availabilitySlot.list`, `availabilitySlot.detail` and `product.detail`
|
|
11
|
+
* (RFC §4.7). The SSR prefetch loader stays in the host route file with the
|
|
12
|
+
* app's cookie-forwarding fetcher.
|
|
13
|
+
*/
|
|
14
|
+
export declare function AvailabilityStartTimeDetailHost({ startTimeId, }: AvailabilityStartTimeDetailHostProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
//# sourceMappingURL=start-time-detail-host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start-time-detail-host.d.ts","sourceRoot":"","sources":["../../../src/availability/admin/start-time-detail-host.tsx"],"names":[],"mappings":"AAeA,MAAM,WAAW,oCAAoC;IACnD,kFAAkF;IAClF,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAAC,EAC9C,WAAW,GACZ,EAAE,oCAAoC,2CAgCtC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useQuery } from "@tanstack/react-query";
|
|
4
|
+
import { useAdminBreadcrumbs, useAdminHref, useAdminNavigate, useOperatorAdminMessages, } from "@voyant-travel/admin";
|
|
5
|
+
import { AvailabilityStartTimeDetailPage, getAvailabilityStartTimeDetailQueryOptions, } from "../components/availability-start-time-detail-page.js";
|
|
6
|
+
import { useVoyantAvailabilityContext } from "../index.js";
|
|
7
|
+
/**
|
|
8
|
+
* Packaged admin host for the availability start time detail page
|
|
9
|
+
* (packaged-admin RFC Phase 3). Data wiring runs through the shared
|
|
10
|
+
* availability provider context; breadcrumbs through the admin chrome;
|
|
11
|
+
* cross-route links through the semantic destinations
|
|
12
|
+
* `availabilitySlot.list`, `availabilitySlot.detail` and `product.detail`
|
|
13
|
+
* (RFC §4.7). The SSR prefetch loader stays in the host route file with the
|
|
14
|
+
* app's cookie-forwarding fetcher.
|
|
15
|
+
*/
|
|
16
|
+
export function AvailabilityStartTimeDetailHost({ startTimeId, }) {
|
|
17
|
+
const messages = useOperatorAdminMessages();
|
|
18
|
+
const resolveHref = useAdminHref();
|
|
19
|
+
const navigateTo = useAdminNavigate();
|
|
20
|
+
const client = useVoyantAvailabilityContext();
|
|
21
|
+
const startTimeQuery = useQuery(getAvailabilityStartTimeDetailQueryOptions(client, startTimeId));
|
|
22
|
+
const startTime = startTimeQuery.data?.data;
|
|
23
|
+
const startTimeFallback = messages.availability.details.startTime.fallbackTitle;
|
|
24
|
+
useAdminBreadcrumbs([
|
|
25
|
+
{ label: messages.availability.title, href: resolveHref("availabilitySlot.list", {}) },
|
|
26
|
+
...(startTime
|
|
27
|
+
? [
|
|
28
|
+
{
|
|
29
|
+
label: startTime.label
|
|
30
|
+
? `${startTime.productName ?? startTimeFallback} · ${startTime.label}`
|
|
31
|
+
: (startTime.productName ?? `${startTimeFallback} ${startTime.startTimeLocal}`),
|
|
32
|
+
},
|
|
33
|
+
]
|
|
34
|
+
: []),
|
|
35
|
+
]);
|
|
36
|
+
return (_jsx(AvailabilityStartTimeDetailPage, { id: startTimeId, onBack: () => navigateTo("availabilitySlot.list", {}), onDeleted: () => navigateTo("availabilitySlot.list", {}), onOpenProduct: (productId) => navigateTo("product.detail", { productId }), onOpenSlot: (slotId) => navigateTo("availabilitySlot.detail", { slotId }) }));
|
|
37
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { SeatLayoutSpec } from "@voyant-travel/operations-react/availability";
|
|
2
|
+
/**
|
|
3
|
+
* Visual editor for a vehicle seat map. Renders a 2D grid the operator can
|
|
4
|
+
* click to cycle each cell through `seat → aisle → door → void`. Used inside
|
|
5
|
+
* the resource-template dialog; the resulting `SeatLayoutSpec` is stored on
|
|
6
|
+
* the template's `flags.layoutSpec` and consumed by the backend materializer.
|
|
7
|
+
*
|
|
8
|
+
* Designed to be controlled — `value` and `onChange` own the spec. Passing
|
|
9
|
+
* `null` clears the spec; the consumer can offer a preset chooser elsewhere
|
|
10
|
+
* if it wants to reset to a starter.
|
|
11
|
+
*/
|
|
12
|
+
export interface SeatMapBuilderProps {
|
|
13
|
+
value: SeatLayoutSpec | null;
|
|
14
|
+
onChange(spec: SeatLayoutSpec | null): void;
|
|
15
|
+
/** Hard cap on row count. Defaults to 20, well under the schema's 40. */
|
|
16
|
+
maxRows?: number;
|
|
17
|
+
/** Hard cap on cells per row. Defaults to 12, well under the schema's 20. */
|
|
18
|
+
maxColumns?: number;
|
|
19
|
+
}
|
|
20
|
+
export declare const SEAT_MAP_PRESETS: ReadonlyArray<{
|
|
21
|
+
id: "standardCoach" | "miniCoach" | "largeBus" | "doubleDecker" | "withMidDoor";
|
|
22
|
+
spec: SeatLayoutSpec;
|
|
23
|
+
}>;
|
|
24
|
+
export declare function SeatMapBuilder({ value, onChange, maxRows, maxColumns, }: SeatMapBuilderProps): import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
//# sourceMappingURL=seat-map-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seat-map-builder.d.ts","sourceRoot":"","sources":["../../../../src/availability/allocation/components/seat-map-builder.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAkB,cAAc,EAAE,MAAM,8CAA8C,CAAA;AAOlG;;;;;;;;;GASG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAA;IAC5B,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI,CAAA;IAC3C,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAUD,eAAO,MAAM,gBAAgB,EAAE,aAAa,CAAC;IAC3C,EAAE,EAAE,eAAe,GAAG,WAAW,GAAG,UAAU,GAAG,cAAc,GAAG,aAAa,CAAA;IAC/E,IAAI,EAAE,cAAc,CAAA;CACrB,CASA,CAAA;AAED,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,OAAY,EACZ,UAAe,GAChB,EAAE,mBAAmB,2CAkLrB"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { formatMessage } from "@voyant-travel/i18n";
|
|
4
|
+
import { Badge, Button, cn } from "@voyant-travel/ui/components";
|
|
5
|
+
import { DoorOpen, Minus, Plus, RotateCcw, Square, X } from "lucide-react";
|
|
6
|
+
import { useMemo } from "react";
|
|
7
|
+
import { useAllocationUiMessagesOrDefault } from "../i18n/index.js";
|
|
8
|
+
const DEFAULT_COLUMNS = 5;
|
|
9
|
+
const NEXT_KIND = {
|
|
10
|
+
seat: "aisle",
|
|
11
|
+
aisle: "door",
|
|
12
|
+
door: "void",
|
|
13
|
+
void: "seat",
|
|
14
|
+
};
|
|
15
|
+
export const SEAT_MAP_PRESETS = [
|
|
16
|
+
{ id: "standardCoach", spec: makeUniformSpec(["seat", "seat", "aisle", "seat", "seat"], 11) },
|
|
17
|
+
{ id: "miniCoach", spec: makeUniformSpec(["seat", "seat", "aisle", "seat"], 7) },
|
|
18
|
+
{ id: "largeBus", spec: makeUniformSpec(["seat", "seat", "seat", "aisle", "seat", "seat"], 11) },
|
|
19
|
+
{
|
|
20
|
+
id: "doubleDecker",
|
|
21
|
+
spec: makeUniformSpec(["seat", "seat", "aisle", "seat", "aisle", "seat", "seat"], 11),
|
|
22
|
+
},
|
|
23
|
+
{ id: "withMidDoor", spec: withMidDoor(["seat", "seat", "aisle", "seat", "seat"], 11, 7) },
|
|
24
|
+
];
|
|
25
|
+
export function SeatMapBuilder({ value, onChange, maxRows = 20, maxColumns = 12, }) {
|
|
26
|
+
const messages = useAllocationUiMessagesOrDefault();
|
|
27
|
+
const t = messages.seatMapBuilder;
|
|
28
|
+
const spec = value;
|
|
29
|
+
const columns = spec?.rows[0]?.cells.length ?? DEFAULT_COLUMNS;
|
|
30
|
+
const seatCount = useMemo(() => countSeats(spec), [spec]);
|
|
31
|
+
function emitOrClear(next) {
|
|
32
|
+
onChange(next.rows.length === 0 ? null : next);
|
|
33
|
+
}
|
|
34
|
+
function cycleCell(rowIndex, cellIndex) {
|
|
35
|
+
if (!spec)
|
|
36
|
+
return;
|
|
37
|
+
const nextRows = spec.rows.map((row, rIdx) => {
|
|
38
|
+
if (rIdx !== rowIndex)
|
|
39
|
+
return row;
|
|
40
|
+
return {
|
|
41
|
+
cells: row.cells.map((cell, cIdx) => (cIdx === cellIndex ? NEXT_KIND[cell] : cell)),
|
|
42
|
+
};
|
|
43
|
+
});
|
|
44
|
+
emitOrClear({ rows: nextRows });
|
|
45
|
+
}
|
|
46
|
+
function addRow() {
|
|
47
|
+
if (spec && spec.rows.length >= maxRows)
|
|
48
|
+
return;
|
|
49
|
+
const baseCells = spec?.rows[spec.rows.length - 1]?.cells.map(() => "seat") ??
|
|
50
|
+
new Array(DEFAULT_COLUMNS).fill("seat");
|
|
51
|
+
emitOrClear({ rows: [...(spec?.rows ?? []), { cells: baseCells }] });
|
|
52
|
+
}
|
|
53
|
+
function removeRow() {
|
|
54
|
+
if (!spec || spec.rows.length <= 1) {
|
|
55
|
+
onChange(null);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
emitOrClear({ rows: spec.rows.slice(0, -1) });
|
|
59
|
+
}
|
|
60
|
+
function addColumn() {
|
|
61
|
+
if (!spec || columns >= maxColumns)
|
|
62
|
+
return;
|
|
63
|
+
emitOrClear({
|
|
64
|
+
rows: spec.rows.map((row) => ({ cells: [...row.cells, "seat"] })),
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
function removeColumn() {
|
|
68
|
+
if (!spec || columns <= 1)
|
|
69
|
+
return;
|
|
70
|
+
emitOrClear({
|
|
71
|
+
rows: spec.rows.map((row) => ({ cells: row.cells.slice(0, -1) })),
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
function applyPreset(preset) {
|
|
75
|
+
onChange(preset);
|
|
76
|
+
}
|
|
77
|
+
if (!spec) {
|
|
78
|
+
return (_jsxs("div", { className: "flex flex-col gap-3", children: [_jsxs("div", { children: [_jsx("p", { className: "font-medium text-sm", children: t.presetHeading }), _jsx("p", { className: "text-muted-foreground text-xs", children: t.presetHint })] }), _jsx("div", { className: "flex flex-wrap gap-2", children: SEAT_MAP_PRESETS.map((preset) => (_jsx(Button, { type: "button", variant: "outline", size: "sm", onClick: () => applyPreset(preset.spec), children: t.presets[preset.id] }, preset.id))) })] }));
|
|
79
|
+
}
|
|
80
|
+
return (_jsxs("div", { className: "flex flex-col gap-4", children: [_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2", children: [_jsxs("div", { children: [_jsx("p", { className: "font-medium text-sm", children: t.heading }), _jsx("p", { className: "text-muted-foreground text-xs", children: t.description })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Badge, { variant: "outline", children: formatMessage(t.capacityChip, { count: seatCount }) }), _jsxs(Button, { type: "button", variant: "ghost", size: "sm", onClick: () => onChange(null), children: [_jsx(RotateCcw, { className: "mr-1 size-3.5", "aria-hidden": "true" }), t.resetSpec] })] })] }), _jsx(CellKindLegend, { messages: t }), _jsx("div", { className: "flex flex-col items-start gap-1.5 overflow-x-auto rounded-md border bg-muted/10 p-3", children: spec.rows.map((row, rowIndex) => (_jsxs("div", { className: "flex items-center gap-1", children: [_jsx("span", { className: "w-6 shrink-0 text-right text-[10px] text-muted-foreground tabular-nums", children: rowIndex + 1 }), row.cells.map((cell, cellIndex) => (_jsx("button", { type: "button", "aria-label": formatMessage(t.columnAria, {
|
|
81
|
+
row: rowIndex + 1,
|
|
82
|
+
column: cellIndex + 1,
|
|
83
|
+
}), title: t.cellKinds[cell], onClick: () => cycleCell(rowIndex, cellIndex), className: cn("flex size-9 items-center justify-center rounded border text-[11px] font-medium transition-colors", cellStyles(cell)), children: _jsx(CellGlyph, { cell: cell, short: t.cellKindShort[cell] }) }, `cell-${rowIndex}-${cellIndex}`)))] }, `row-${rowIndex}`))) }), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsxs(Button, { type: "button", variant: "outline", size: "sm", onClick: addRow, disabled: spec.rows.length >= maxRows, children: [_jsx(Plus, { className: "mr-1 size-3.5", "aria-hidden": "true" }), t.addRow] }), _jsxs(Button, { type: "button", variant: "outline", size: "sm", onClick: removeRow, children: [_jsx(Minus, { className: "mr-1 size-3.5", "aria-hidden": "true" }), t.removeRow] }), _jsx("span", { className: "text-muted-foreground text-xs", children: formatMessage(t.seatCountSummary, { count: seatCount }) }), _jsxs("div", { className: "ml-auto flex items-center gap-1", children: [_jsx(Button, { type: "button", variant: "ghost", size: "sm", onClick: removeColumn, disabled: columns <= 1, children: _jsx(Minus, { className: "size-3.5", "aria-hidden": "true" }) }), _jsx("span", { className: "text-muted-foreground text-[10px] uppercase tracking-wider", children: columns }), _jsx(Button, { type: "button", variant: "ghost", size: "sm", onClick: addColumn, disabled: columns >= maxColumns, children: _jsx(Plus, { className: "size-3.5", "aria-hidden": "true" }) })] })] }), _jsx("p", { className: "text-muted-foreground text-xs", children: t.voidDoorReminder })] }));
|
|
84
|
+
}
|
|
85
|
+
function CellKindLegend({ messages, }) {
|
|
86
|
+
const kinds = ["seat", "aisle", "door", "void"];
|
|
87
|
+
return (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("p", { className: "font-medium text-xs", children: messages.cellKindHeading }), _jsx("div", { className: "flex flex-wrap items-center gap-2 text-xs", children: kinds.map((kind) => (_jsxs("span", { className: "inline-flex items-center gap-1", children: [_jsx("span", { className: cn("inline-flex size-5 items-center justify-center rounded border text-[10px]", cellStyles(kind)), "aria-hidden": "true", children: _jsx(CellGlyph, { cell: kind, short: messages.cellKindShort[kind] }) }), messages.cellKinds[kind]] }, kind))) }), _jsx("p", { className: "text-muted-foreground text-[11px]", children: messages.cellKindHint })] }));
|
|
88
|
+
}
|
|
89
|
+
function CellGlyph({ cell, short }) {
|
|
90
|
+
if (cell === "door")
|
|
91
|
+
return _jsx(DoorOpen, { className: "size-3.5", "aria-hidden": "true" });
|
|
92
|
+
if (cell === "void")
|
|
93
|
+
return _jsx(X, { className: "size-3 opacity-40", "aria-hidden": "true" });
|
|
94
|
+
if (cell === "aisle")
|
|
95
|
+
return _jsx(Square, { className: "size-2.5 opacity-30", "aria-hidden": "true" });
|
|
96
|
+
return _jsx("span", { children: short });
|
|
97
|
+
}
|
|
98
|
+
function cellStyles(cell) {
|
|
99
|
+
switch (cell) {
|
|
100
|
+
case "seat":
|
|
101
|
+
return "border-primary/40 bg-primary/10 text-primary hover:bg-primary/20";
|
|
102
|
+
case "aisle":
|
|
103
|
+
return "border-dashed border-muted-foreground/30 bg-transparent text-muted-foreground hover:bg-muted/30";
|
|
104
|
+
case "door":
|
|
105
|
+
return "border-amber-500/50 bg-amber-500/15 text-amber-700 hover:bg-amber-500/25 dark:text-amber-300";
|
|
106
|
+
case "void":
|
|
107
|
+
return "border-muted-foreground/20 bg-muted/20 text-muted-foreground/40 hover:bg-muted/40";
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
function countSeats(spec) {
|
|
111
|
+
if (!spec)
|
|
112
|
+
return 0;
|
|
113
|
+
let count = 0;
|
|
114
|
+
for (const row of spec.rows) {
|
|
115
|
+
for (const cell of row.cells) {
|
|
116
|
+
if (cell === "seat")
|
|
117
|
+
count += 1;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return count;
|
|
121
|
+
}
|
|
122
|
+
function makeUniformSpec(template, rowCount) {
|
|
123
|
+
return { rows: Array.from({ length: rowCount }, () => ({ cells: [...template] })) };
|
|
124
|
+
}
|
|
125
|
+
function withMidDoor(rowTemplate, rowCount, doorRowIndex) {
|
|
126
|
+
const rows = makeUniformSpec(rowTemplate, rowCount).rows;
|
|
127
|
+
const safeIndex = Math.min(Math.max(0, doorRowIndex - 1), rows.length - 1);
|
|
128
|
+
const target = rows[safeIndex];
|
|
129
|
+
if (target) {
|
|
130
|
+
rows[safeIndex] = { cells: target.cells.map(() => "door") };
|
|
131
|
+
}
|
|
132
|
+
return { rows };
|
|
133
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { FormEvent } from "react";
|
|
2
|
+
import type { useAllocationUiMessagesOrDefault } from "../i18n/index.js";
|
|
3
|
+
import { type ResourceCapacitySummary } from "./slot-allocation-model.js";
|
|
4
|
+
type ResourceTemplateOption = {
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
templates: ReadonlyArray<{
|
|
8
|
+
kind: string;
|
|
9
|
+
capacity: number;
|
|
10
|
+
}>;
|
|
11
|
+
};
|
|
12
|
+
export declare function AddResourceDialog({ open, onOpenChange, onSubmit, activeKind, resourceLabel, onResourceLabelChange, resourceCapacity, onResourceCapacityChange, resourceOptionId, onResourceOptionIdChange, resourceOptions, projectedSummary, createPending, messages, }: {
|
|
13
|
+
open: boolean;
|
|
14
|
+
onOpenChange: (open: boolean) => void;
|
|
15
|
+
onSubmit: (event: FormEvent<HTMLFormElement>) => void;
|
|
16
|
+
activeKind: string;
|
|
17
|
+
resourceLabel: string;
|
|
18
|
+
onResourceLabelChange: (value: string) => void;
|
|
19
|
+
resourceCapacity: number;
|
|
20
|
+
onResourceCapacityChange: (value: number) => void;
|
|
21
|
+
resourceOptionId: string | null;
|
|
22
|
+
onResourceOptionIdChange: (value: string | null) => void;
|
|
23
|
+
resourceOptions: ReadonlyArray<ResourceTemplateOption>;
|
|
24
|
+
projectedSummary: ResourceCapacitySummary | null;
|
|
25
|
+
createPending: boolean;
|
|
26
|
+
messages: ReturnType<typeof useAllocationUiMessagesOrDefault>;
|
|
27
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=slot-allocation-add-resource-dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slot-allocation-add-resource-dialog.d.ts","sourceRoot":"","sources":["../../../../src/availability/allocation/components/slot-allocation-add-resource-dialog.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,kBAAkB,CAAA;AACxE,OAAO,EAAa,KAAK,uBAAuB,EAAa,MAAM,4BAA4B,CAAA;AAE/F,KAAK,sBAAsB,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC7D,CAAA;AAED,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,aAAa,EACb,qBAAqB,EACrB,gBAAgB,EAChB,wBAAwB,EACxB,gBAAgB,EAChB,wBAAwB,EACxB,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,eAAe,CAAC,KAAK,IAAI,CAAA;IACrD,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,qBAAqB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9C,gBAAgB,EAAE,MAAM,CAAA;IACxB,wBAAwB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjD,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,wBAAwB,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IACxD,eAAe,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAA;IACtD,gBAAgB,EAAE,uBAAuB,GAAG,IAAI,CAAA;IAChD,aAAa,EAAE,OAAO,CAAA;IACtB,QAAQ,EAAE,UAAU,CAAC,OAAO,gCAAgC,CAAC,CAAA;CAC9D,2CA2FA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Button, Dialog, DialogBody, DialogContent, DialogFooter, DialogHeader, DialogTitle, Input, Label, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@voyant-travel/ui/components";
|
|
4
|
+
import { AlertTriangle } from "lucide-react";
|
|
5
|
+
import { kindLabel, ROOM_KIND } from "./slot-allocation-model.js";
|
|
6
|
+
export function AddResourceDialog({ open, onOpenChange, onSubmit, activeKind, resourceLabel, onResourceLabelChange, resourceCapacity, onResourceCapacityChange, resourceOptionId, onResourceOptionIdChange, resourceOptions, projectedSummary, createPending, messages, }) {
|
|
7
|
+
return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsxs(DialogContent, { children: [_jsx(DialogHeader, { children: _jsx(DialogTitle, { children: messages.addResource }) }), _jsxs("form", { onSubmit: onSubmit, children: [_jsxs(DialogBody, { className: "grid gap-4", children: [resourceOptions.length > 0 ? (_jsxs("div", { className: "grid gap-1.5", children: [_jsx(Label, { htmlFor: "allocation-resource-option", children: messages.resourceOption }), _jsxs(Select, { value: resourceOptionId ?? "__none__", onValueChange: (value) => {
|
|
8
|
+
const next = value === "__none__" ? null : value;
|
|
9
|
+
onResourceOptionIdChange(next);
|
|
10
|
+
if (next) {
|
|
11
|
+
const option = resourceOptions.find((entry) => entry.id === next);
|
|
12
|
+
const template = option?.templates.find((entry) => entry.kind === activeKind);
|
|
13
|
+
if (template?.capacity)
|
|
14
|
+
onResourceCapacityChange(template.capacity);
|
|
15
|
+
}
|
|
16
|
+
}, children: [_jsx(SelectTrigger, { id: "allocation-resource-option", className: "w-full", children: _jsx(SelectValue, { placeholder: messages.resourceOptionPlaceholder, children: (value) => value === "__none__"
|
|
17
|
+
? messages.resourceOptionNone
|
|
18
|
+
: (resourceOptions.find((option) => option.id === value)?.name ?? value) }) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "__none__", children: messages.resourceOptionNone }), resourceOptions.map((option) => (_jsx(SelectItem, { value: option.id, children: option.name }, option.id)))] })] })] })) : null, _jsxs("div", { className: "grid gap-1.5", children: [_jsx(Label, { htmlFor: "allocation-resource-label", children: messages.resourceLabel }), _jsx(Input, { id: "allocation-resource-label", value: resourceLabel, onChange: (event) => onResourceLabelChange(event.target.value), placeholder: activeKind === ROOM_KIND ? "102" : kindLabel(activeKind, messages), autoFocus: true })] }), _jsxs("div", { className: "grid gap-1.5", children: [_jsx(Label, { htmlFor: "allocation-resource-capacity", children: messages.resourceCapacity }), _jsx(Input, { id: "allocation-resource-capacity", type: "number", min: 1, value: resourceCapacity, onChange: (event) => onResourceCapacityChange(Number(event.target.value) || 1) })] }), projectedSummary?.status === "over" && projectedSummary.delta != null ? (_jsxs("div", { className: "flex items-start gap-2 rounded-md border border-amber-300/60 bg-amber-50 px-3 py-2 text-sm text-amber-900 dark:border-amber-500/40 dark:bg-amber-500/10 dark:text-amber-200", role: "status", children: [_jsx(AlertTriangle, { className: "mt-0.5 size-4 shrink-0", "aria-hidden": "true" }), _jsxs("span", { children: [messages.overCapacityWarning, " ", projectedSummary.resourceCapacity, "/", projectedSummary.slotPax ?? "—", " (", messages.resourceCapacityOver, ":", " ", projectedSummary.delta, ")"] })] })) : null] }), _jsxs(DialogFooter, { children: [_jsx(Button, { type: "button", variant: "ghost", onClick: () => onOpenChange(false), children: messages.cancel }), _jsx(Button, { type: "submit", disabled: createPending, children: messages.createResource })] })] })] }) }));
|
|
19
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { type AllocationManifestTraveler, type AllocationResource, type SeatLayoutSpec } from "@voyant-travel/operations-react/availability";
|
|
2
|
+
import type { AllocationUiMessages } from "../i18n/index.js";
|
|
3
|
+
export declare const ROOM_KIND = "room";
|
|
4
|
+
export declare const VEHICLE_KIND = "vehicle";
|
|
5
|
+
export declare const VEHICLE_SEAT_KIND = "vehicle_seat";
|
|
6
|
+
export declare const PARENT_ONLY_KINDS: Set<string>;
|
|
7
|
+
export type AllocationOccupants = {
|
|
8
|
+
byResource: Map<string, AllocationManifestTraveler[]>;
|
|
9
|
+
byTravelerId: Map<string, AllocationManifestTraveler>;
|
|
10
|
+
unallocated: AllocationManifestTraveler[];
|
|
11
|
+
};
|
|
12
|
+
export declare function deriveAllocationKinds({ resources, templateOptions, }: {
|
|
13
|
+
resources: ReadonlyArray<Pick<AllocationResource, "kind">>;
|
|
14
|
+
templateOptions: ReadonlyArray<{
|
|
15
|
+
templates: ReadonlyArray<{
|
|
16
|
+
kind: string | null | undefined;
|
|
17
|
+
}>;
|
|
18
|
+
}>;
|
|
19
|
+
}): string[];
|
|
20
|
+
export type ValidationIssue = {
|
|
21
|
+
id: string;
|
|
22
|
+
label: string;
|
|
23
|
+
};
|
|
24
|
+
export declare function collectOccupants(travelers: AllocationManifestTraveler[], resources: AllocationResource[], kind: string): AllocationOccupants;
|
|
25
|
+
export declare function buildValidationIssues({ travelers, resources, occupants, kind, messages, }: {
|
|
26
|
+
travelers: AllocationManifestTraveler[];
|
|
27
|
+
resources: AllocationResource[];
|
|
28
|
+
occupants: AllocationOccupants;
|
|
29
|
+
kind: string;
|
|
30
|
+
messages: AllocationUiMessages;
|
|
31
|
+
}): ValidationIssue[];
|
|
32
|
+
export declare function splitSharingGroups(travelers: AllocationManifestTraveler[], kind: string): string[];
|
|
33
|
+
export interface VehicleSeatGroup {
|
|
34
|
+
id: string;
|
|
35
|
+
label: string;
|
|
36
|
+
sortOrder: number;
|
|
37
|
+
seats: AllocationResource[];
|
|
38
|
+
/**
|
|
39
|
+
* Parsed 2D layout for this vehicle when the operator drew a custom map
|
|
40
|
+
* via `<SeatMapBuilder />`. Renderers honor this to draw aisles, doors,
|
|
41
|
+
* and voids; absent means fall back to the row-grouped layout.
|
|
42
|
+
*/
|
|
43
|
+
layoutSpec: SeatLayoutSpec | null;
|
|
44
|
+
}
|
|
45
|
+
export declare function groupSeatsByVehicle(seats: AllocationResource[], vehicles: AllocationResource[], messages: AllocationUiMessages): VehicleSeatGroup[];
|
|
46
|
+
export declare function seatRows(seats: AllocationResource[]): {
|
|
47
|
+
rowKey: string;
|
|
48
|
+
seats: {
|
|
49
|
+
id: string;
|
|
50
|
+
slotId: string;
|
|
51
|
+
kind: string;
|
|
52
|
+
refType: string | null;
|
|
53
|
+
refId: string | null;
|
|
54
|
+
label: string | null;
|
|
55
|
+
capacity: number;
|
|
56
|
+
flags: Record<string, unknown>;
|
|
57
|
+
parentId: string | null;
|
|
58
|
+
sortOrder: number;
|
|
59
|
+
createdAt: string | Date;
|
|
60
|
+
updatedAt: string | Date;
|
|
61
|
+
}[];
|
|
62
|
+
}[];
|
|
63
|
+
export declare function seatName(seat: AllocationResource, messages: AllocationUiMessages): string;
|
|
64
|
+
export declare function parentKindFor(kind: string): "" | "vehicle";
|
|
65
|
+
export declare function defaultCapacityFor(kind: string): 2 | 1;
|
|
66
|
+
export declare function kindLabel(kind: string, messages: AllocationUiMessages): string;
|
|
67
|
+
/**
|
|
68
|
+
* Group resources for display by a "sub-type" — `refId` when present,
|
|
69
|
+
* otherwise the leading alphabetic token of `label` ("DBL" from
|
|
70
|
+
* "DBL 1"), otherwise a single "other" bucket. Lets the operator scan
|
|
71
|
+
* all DBLs together instead of an alphabetic interleave of mixed
|
|
72
|
+
* sub-types. Each group also exposes the count and the total person-
|
|
73
|
+
* capacity so the header summary stays consistent with the grid.
|
|
74
|
+
*/
|
|
75
|
+
export interface ResourceSubTypeGroup {
|
|
76
|
+
key: string;
|
|
77
|
+
/**
|
|
78
|
+
* Human-readable group label derived from the resource's refId or
|
|
79
|
+
* label prefix. `null` for the catch-all bucket (unlabeled, refId-
|
|
80
|
+
* less resources) — consumers should fall back to a localized
|
|
81
|
+
* "Other" string.
|
|
82
|
+
*/
|
|
83
|
+
label: string | null;
|
|
84
|
+
resources: AllocationResource[];
|
|
85
|
+
count: number;
|
|
86
|
+
capacity: number;
|
|
87
|
+
}
|
|
88
|
+
export declare function groupResourcesBySubType(resources: AllocationResource[]): ResourceSubTypeGroup[];
|
|
89
|
+
export interface ResourceCapacitySummary {
|
|
90
|
+
resourceCount: number;
|
|
91
|
+
resourceCapacity: number;
|
|
92
|
+
slotPax: number | null;
|
|
93
|
+
slotRemainingPax: number | null;
|
|
94
|
+
delta: number | null;
|
|
95
|
+
status: "fits" | "exact" | "over" | "unbounded";
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Roll up slot pax vs. resource person-capacity into a single summary
|
|
99
|
+
* the header can render as a coloured pill. `slotPax` is the slot's
|
|
100
|
+
* `initialPax` when finite; if the slot is `unlimited` or has no
|
|
101
|
+
* initial pax we treat it as unbounded and the operator only sees the
|
|
102
|
+
* total resource capacity without a delta.
|
|
103
|
+
*/
|
|
104
|
+
export declare function summarizeResourceCapacity(input: {
|
|
105
|
+
resources: AllocationResource[];
|
|
106
|
+
slotInitialPax: number | null | undefined;
|
|
107
|
+
slotRemainingPax: number | null | undefined;
|
|
108
|
+
unlimited: boolean;
|
|
109
|
+
}): ResourceCapacitySummary;
|
|
110
|
+
export declare function flagString(value: unknown): string | null;
|
|
111
|
+
//# sourceMappingURL=slot-allocation-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slot-allocation-model.d.ts","sourceRoot":"","sources":["../../../../src/availability/allocation/components/slot-allocation-model.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,kBAAkB,EACvB,KAAK,cAAc,EAEpB,MAAM,8CAA8C,CAAA;AAErD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAE5D,eAAO,MAAM,SAAS,SAAS,CAAA;AAC/B,eAAO,MAAM,YAAY,YAAY,CAAA;AACrC,eAAO,MAAM,iBAAiB,iBAAiB,CAAA;AAC/C,eAAO,MAAM,iBAAiB,aAA0B,CAAA;AAExD,MAAM,MAAM,mBAAmB,GAAG;IAChC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,0BAA0B,EAAE,CAAC,CAAA;IACrD,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAA;IACrD,WAAW,EAAE,0BAA0B,EAAE,CAAA;CAC1C,CAAA;AAED,wBAAgB,qBAAqB,CAAC,EACpC,SAAS,EACT,eAAe,GAChB,EAAE;IACD,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAA;IAC1D,eAAe,EAAE,aAAa,CAAC;QAC7B,SAAS,EAAE,aAAa,CAAC;YAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;SAAE,CAAC,CAAA;KAC9D,CAAC,CAAA;CACH,YAaA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,0BAA0B,EAAE,EACvC,SAAS,EAAE,kBAAkB,EAAE,EAC/B,IAAI,EAAE,MAAM,GACX,mBAAmB,CAmBrB;AAED,wBAAgB,qBAAqB,CAAC,EACpC,SAAS,EACT,SAAS,EACT,SAAS,EACT,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,SAAS,EAAE,0BAA0B,EAAE,CAAA;IACvC,SAAS,EAAE,kBAAkB,EAAE,CAAA;IAC/B,SAAS,EAAE,mBAAmB,CAAA;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,oBAAoB,CAAA;CAC/B,qBA4BA;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,0BAA0B,EAAE,EAAE,IAAI,EAAE,MAAM,YAevF;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,kBAAkB,EAAE,CAAA;IAC3B;;;;OAIG;IACH,UAAU,EAAE,cAAc,GAAG,IAAI,CAAA;CAClC;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,kBAAkB,EAAE,EAC3B,QAAQ,EAAE,kBAAkB,EAAE,EAC9B,QAAQ,EAAE,oBAAoB,GAC7B,gBAAgB,EAAE,CA4BpB;AASD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,kBAAkB,EAAE;;;;;;;;;;;;;;;;IAenD;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,oBAAoB,UAKhF;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,kBAEzC;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,SAE9C;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,UAMrE;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAA;IACX;;;;;OAKG;IACH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,SAAS,EAAE,kBAAkB,EAAE,CAAA;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,kBAAkB,EAAE,GAAG,oBAAoB,EAAE,CAoB/F;AAYD,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,MAAM,CAAA;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,WAAW,CAAA;CAChD;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,SAAS,EAAE,kBAAkB,EAAE,CAAA;IAC/B,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IACzC,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IAC3C,SAAS,EAAE,OAAO,CAAA;CACnB,GAAG,uBAAuB,CAsB1B;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,iBAExC"}
|