@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,60 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Dialog, DialogBody, DialogContent, DialogHeader, DialogTitle, Label, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Textarea, } from "@voyant-travel/ui/components";
|
|
4
|
+
import { DatePicker } from "@voyant-travel/ui/components/date-picker";
|
|
5
|
+
import { useEffect } from "react";
|
|
6
|
+
import { useForm } from "react-hook-form";
|
|
7
|
+
import { z } from "zod/v4";
|
|
8
|
+
import { zodResolver } from "../../form-resolver.js";
|
|
9
|
+
import { NONE_VALUE, nullableString, slotLocalStart } from "../../index.js";
|
|
10
|
+
import { DialogActions, formatSlotLocalDateTime, ProductSelect, } from "./shared.js";
|
|
11
|
+
function getCloseoutFormSchema(messages) {
|
|
12
|
+
return z.object({
|
|
13
|
+
productId: z.string().min(1, messages.dialogs.closeout.validationProductRequired),
|
|
14
|
+
slotId: z.string().optional(),
|
|
15
|
+
dateLocal: z.string().min(1, messages.dialogs.closeout.validationDateRequired),
|
|
16
|
+
reason: z.string().optional(),
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
export function AvailabilityCloseoutDialog(props) {
|
|
20
|
+
const closeoutMessages = props.messages.dialogs.closeout;
|
|
21
|
+
const closeoutFormSchema = getCloseoutFormSchema(props.messages);
|
|
22
|
+
const form = useForm({
|
|
23
|
+
resolver: zodResolver(closeoutFormSchema),
|
|
24
|
+
defaultValues: {
|
|
25
|
+
productId: "",
|
|
26
|
+
slotId: NONE_VALUE,
|
|
27
|
+
dateLocal: "",
|
|
28
|
+
reason: "",
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (props.open && props.closeout) {
|
|
33
|
+
form.reset({
|
|
34
|
+
productId: props.closeout.productId,
|
|
35
|
+
slotId: props.closeout.slotId ?? NONE_VALUE,
|
|
36
|
+
dateLocal: props.closeout.dateLocal,
|
|
37
|
+
reason: props.closeout.reason ?? "",
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
else if (props.open) {
|
|
41
|
+
form.reset();
|
|
42
|
+
}
|
|
43
|
+
}, [form, props.closeout, props.open]);
|
|
44
|
+
const selectedProductId = form.watch("productId");
|
|
45
|
+
const filteredSlots = props.slots.filter((slot) => slot.productId === selectedProductId);
|
|
46
|
+
const isEditing = Boolean(props.closeout);
|
|
47
|
+
const onSubmit = async (values) => {
|
|
48
|
+
await props.onSubmit({
|
|
49
|
+
productId: values.productId,
|
|
50
|
+
slotId: values.slotId === NONE_VALUE ? null : (values.slotId ?? null),
|
|
51
|
+
dateLocal: values.dateLocal,
|
|
52
|
+
reason: nullableString(values.reason),
|
|
53
|
+
}, { isEditing, id: props.closeout?.id });
|
|
54
|
+
props.onSuccess();
|
|
55
|
+
};
|
|
56
|
+
return (_jsx(Dialog, { open: props.open, onOpenChange: props.onOpenChange, children: _jsxs(DialogContent, { children: [_jsx(DialogHeader, { children: _jsx(DialogTitle, { children: isEditing ? closeoutMessages.editTitle : closeoutMessages.newTitle }) }), _jsxs("form", { onSubmit: form.handleSubmit(onSubmit), children: [_jsxs(DialogBody, { className: "grid gap-4", children: [_jsx(ProductSelect, { label: closeoutMessages.productLabel, placeholder: closeoutMessages.selectProductPlaceholder, products: props.products, value: form.watch("productId"), onValueChange: (value) => form.setValue("productId", value ?? "") }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: closeoutMessages.slotLabel }), _jsxs(Select, { value: form.watch("slotId") ?? NONE_VALUE, onValueChange: (value) => form.setValue("slotId", value ?? NONE_VALUE), children: [_jsx(SelectTrigger, { className: "w-full", children: _jsx(SelectValue, { placeholder: closeoutMessages.optionalSlotPlaceholder }) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: NONE_VALUE, children: closeoutMessages.productLevelOption }), filteredSlots.map((slot) => (_jsx(SelectItem, { value: slot.id, children: formatSlotLocalDateTime(slotLocalStart(slot)) }, slot.id)))] })] })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: closeoutMessages.dateLabel }), _jsx(DatePicker, { value: form.watch("dateLocal") || null, onChange: (nextValue) => form.setValue("dateLocal", nextValue ?? "", {
|
|
57
|
+
shouldDirty: true,
|
|
58
|
+
shouldValidate: true,
|
|
59
|
+
}), placeholder: closeoutMessages.datePlaceholder, className: "w-full" })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: closeoutMessages.reasonLabel }), _jsx(Textarea, { ...form.register("reason"), placeholder: closeoutMessages.reasonPlaceholder })] })] }), _jsx(DialogActions, { cancel: closeoutMessages.cancel, save: closeoutMessages.save, create: closeoutMessages.create, isEditing: isEditing, isSubmitting: form.formState.isSubmitting, onCancel: () => props.onOpenChange(false) })] })] }) }));
|
|
60
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { AvailabilityPickupPointRow, ProductOption } from "../../index.js";
|
|
2
|
+
import { type AvailabilityDialogMessages, type AvailabilityPickupPointSubmitPayload, type SubmitContext } from "./shared.js";
|
|
3
|
+
export declare function AvailabilityPickupPointDialog(props: {
|
|
4
|
+
messages: AvailabilityDialogMessages;
|
|
5
|
+
open: boolean;
|
|
6
|
+
onOpenChange: (open: boolean) => void;
|
|
7
|
+
pickupPoint?: AvailabilityPickupPointRow;
|
|
8
|
+
products: ProductOption[];
|
|
9
|
+
onSubmit: (payload: AvailabilityPickupPointSubmitPayload, context: SubmitContext) => Promise<void>;
|
|
10
|
+
onSuccess: () => void;
|
|
11
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
//# sourceMappingURL=pickup-point-dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pickup-point-dialog.d.ts","sourceRoot":"","sources":["../../../../src/availability/components/availability-dialogs/pickup-point-dialog.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,0BAA0B,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE/E,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,oCAAoC,EAGzC,KAAK,aAAa,EAEnB,MAAM,aAAa,CAAA;AAgBpB,wBAAgB,6BAA6B,CAAC,KAAK,EAAE;IACnD,QAAQ,EAAE,0BAA0B,CAAA;IACpC,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,WAAW,CAAC,EAAE,0BAA0B,CAAA;IACxC,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,QAAQ,EAAE,CAAC,OAAO,EAAE,oCAAoC,EAAE,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAClG,SAAS,EAAE,MAAM,IAAI,CAAA;CACtB,2CAkGA"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Dialog, DialogBody, DialogContent, DialogHeader, DialogTitle, Input, Label, Textarea, } from "@voyant-travel/ui/components";
|
|
4
|
+
import { useEffect } from "react";
|
|
5
|
+
import { useForm } from "react-hook-form";
|
|
6
|
+
import { z } from "zod/v4";
|
|
7
|
+
import { zodResolver } from "../../form-resolver.js";
|
|
8
|
+
import { nullableString } from "../../index.js";
|
|
9
|
+
import { DialogActions, ProductSelect, SwitchField, } from "./shared.js";
|
|
10
|
+
function getPickupPointFormSchema(messages) {
|
|
11
|
+
return z.object({
|
|
12
|
+
productId: z.string().min(1, messages.dialogs.pickupPoint.validationProductRequired),
|
|
13
|
+
name: z.string().min(1, messages.dialogs.pickupPoint.validationNameRequired),
|
|
14
|
+
description: z.string().optional(),
|
|
15
|
+
locationText: z.string().optional(),
|
|
16
|
+
active: z.boolean(),
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
export function AvailabilityPickupPointDialog(props) {
|
|
20
|
+
const pickupPointMessages = props.messages.dialogs.pickupPoint;
|
|
21
|
+
const pickupPointFormSchema = getPickupPointFormSchema(props.messages);
|
|
22
|
+
const form = useForm({
|
|
23
|
+
resolver: zodResolver(pickupPointFormSchema),
|
|
24
|
+
defaultValues: {
|
|
25
|
+
productId: "",
|
|
26
|
+
name: "",
|
|
27
|
+
description: "",
|
|
28
|
+
locationText: "",
|
|
29
|
+
active: true,
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
if (props.open && props.pickupPoint) {
|
|
34
|
+
form.reset({
|
|
35
|
+
productId: props.pickupPoint.productId,
|
|
36
|
+
name: props.pickupPoint.name,
|
|
37
|
+
description: props.pickupPoint.description ?? "",
|
|
38
|
+
locationText: props.pickupPoint.locationText ?? "",
|
|
39
|
+
active: props.pickupPoint.active,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
else if (props.open) {
|
|
43
|
+
form.reset();
|
|
44
|
+
}
|
|
45
|
+
}, [form, props.open, props.pickupPoint]);
|
|
46
|
+
const isEditing = Boolean(props.pickupPoint);
|
|
47
|
+
const onSubmit = async (values) => {
|
|
48
|
+
await props.onSubmit({
|
|
49
|
+
productId: values.productId,
|
|
50
|
+
name: values.name,
|
|
51
|
+
description: nullableString(values.description),
|
|
52
|
+
locationText: nullableString(values.locationText),
|
|
53
|
+
active: values.active,
|
|
54
|
+
}, { isEditing, id: props.pickupPoint?.id });
|
|
55
|
+
props.onSuccess();
|
|
56
|
+
};
|
|
57
|
+
return (_jsx(Dialog, { open: props.open, onOpenChange: props.onOpenChange, children: _jsxs(DialogContent, { children: [_jsx(DialogHeader, { children: _jsx(DialogTitle, { children: isEditing ? pickupPointMessages.editTitle : pickupPointMessages.newTitle }) }), _jsxs("form", { onSubmit: form.handleSubmit(onSubmit), children: [_jsxs(DialogBody, { className: "grid gap-4", children: [_jsx(ProductSelect, { label: pickupPointMessages.productLabel, placeholder: pickupPointMessages.selectProductPlaceholder, products: props.products, value: form.watch("productId"), onValueChange: (value) => form.setValue("productId", value ?? "") }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: pickupPointMessages.nameLabel }), _jsx(Input, { ...form.register("name"), placeholder: pickupPointMessages.namePlaceholder })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: pickupPointMessages.locationTextLabel }), _jsx(Input, { ...form.register("locationText"), placeholder: pickupPointMessages.locationTextPlaceholder })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: pickupPointMessages.descriptionLabel }), _jsx(Textarea, { ...form.register("description"), placeholder: pickupPointMessages.descriptionPlaceholder })] }), _jsx(SwitchField, { title: pickupPointMessages.activeTitle, description: pickupPointMessages.activeDescription, checked: form.watch("active"), onCheckedChange: (checked) => form.setValue("active", checked) })] }), _jsx(DialogActions, { cancel: pickupPointMessages.cancel, save: pickupPointMessages.save, create: pickupPointMessages.create, isEditing: isEditing, isSubmitting: form.formState.isSubmitting, onCancel: () => props.onOpenChange(false) })] })] }) }));
|
|
58
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { AvailabilityRuleRow, ProductOption } from "../../index.js";
|
|
2
|
+
import { type AvailabilityDialogMessages, type AvailabilityRuleSubmitPayload, type SubmitContext } from "./shared.js";
|
|
3
|
+
export declare function AvailabilityRuleDialog(props: {
|
|
4
|
+
messages: AvailabilityDialogMessages;
|
|
5
|
+
open: boolean;
|
|
6
|
+
onOpenChange: (open: boolean) => void;
|
|
7
|
+
rule?: AvailabilityRuleRow;
|
|
8
|
+
products: ProductOption[];
|
|
9
|
+
onSubmit: (payload: AvailabilityRuleSubmitPayload, context: SubmitContext) => Promise<void>;
|
|
10
|
+
onSuccess: () => void;
|
|
11
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
//# sourceMappingURL=rule-dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-dialog.d.ts","sourceRoot":"","sources":["../../../../src/availability/components/availability-dialogs/rule-dialog.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAExE,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,6BAA6B,EAGlC,KAAK,aAAa,EAEnB,MAAM,aAAa,CAAA;AAoBpB,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,QAAQ,EAAE,0BAA0B,CAAA;IACpC,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,IAAI,CAAC,EAAE,mBAAmB,CAAA;IAC1B,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,QAAQ,EAAE,CAAC,OAAO,EAAE,6BAA6B,EAAE,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3F,SAAS,EAAE,MAAM,IAAI,CAAA;CACtB,2CAyIA"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Dialog, DialogBody, DialogContent, DialogHeader, DialogTitle, Input, Label, Textarea, } from "@voyant-travel/ui/components";
|
|
4
|
+
import { useEffect } from "react";
|
|
5
|
+
import { useForm } from "react-hook-form";
|
|
6
|
+
import { z } from "zod/v4";
|
|
7
|
+
import { zodResolver } from "../../form-resolver.js";
|
|
8
|
+
import { useAvailabilityUiMessagesOrDefault } from "../../i18n/index.js";
|
|
9
|
+
import { nullableNumber } from "../../index.js";
|
|
10
|
+
import { DialogActions, ProductSelect, SwitchField, } from "./shared.js";
|
|
11
|
+
function getRuleFormSchema(messages) {
|
|
12
|
+
return z.object({
|
|
13
|
+
productId: z.string().min(1, messages.dialogs.rule.validationProductRequired),
|
|
14
|
+
timezone: z.string().min(1, messages.dialogs.rule.validationTimezoneRequired),
|
|
15
|
+
recurrenceRule: z.string().min(1, messages.dialogs.rule.validationRecurrenceRequired),
|
|
16
|
+
maxCapacity: z.coerce.number().int().min(0),
|
|
17
|
+
maxPickupCapacity: z.string().optional(),
|
|
18
|
+
minTotalPax: z.string().optional(),
|
|
19
|
+
cutoffMinutes: z.string().optional(),
|
|
20
|
+
earlyBookingLimitMinutes: z.string().optional(),
|
|
21
|
+
active: z.boolean(),
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
export function AvailabilityRuleDialog(props) {
|
|
25
|
+
useAvailabilityUiMessagesOrDefault();
|
|
26
|
+
const ruleMessages = props.messages.dialogs.rule;
|
|
27
|
+
const ruleFormSchema = getRuleFormSchema(props.messages);
|
|
28
|
+
const form = useForm({
|
|
29
|
+
resolver: zodResolver(ruleFormSchema),
|
|
30
|
+
defaultValues: {
|
|
31
|
+
productId: "",
|
|
32
|
+
timezone: "Europe/Bucharest", // i18n-literal-ok IANA timezone default
|
|
33
|
+
recurrenceRule: "FREQ=DAILY;INTERVAL=1", // i18n-literal-ok RRULE default
|
|
34
|
+
maxCapacity: 0,
|
|
35
|
+
maxPickupCapacity: "",
|
|
36
|
+
minTotalPax: "",
|
|
37
|
+
cutoffMinutes: "",
|
|
38
|
+
earlyBookingLimitMinutes: "",
|
|
39
|
+
active: true,
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
if (props.open && props.rule) {
|
|
44
|
+
form.reset({
|
|
45
|
+
productId: props.rule.productId,
|
|
46
|
+
timezone: props.rule.timezone,
|
|
47
|
+
recurrenceRule: props.rule.recurrenceRule,
|
|
48
|
+
maxCapacity: props.rule.maxCapacity,
|
|
49
|
+
maxPickupCapacity: props.rule.maxPickupCapacity?.toString() ?? "",
|
|
50
|
+
minTotalPax: "",
|
|
51
|
+
cutoffMinutes: props.rule.cutoffMinutes?.toString() ?? "",
|
|
52
|
+
earlyBookingLimitMinutes: "",
|
|
53
|
+
active: props.rule.active,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
else if (props.open) {
|
|
57
|
+
form.reset();
|
|
58
|
+
}
|
|
59
|
+
}, [form, props.open, props.rule]);
|
|
60
|
+
const isEditing = Boolean(props.rule);
|
|
61
|
+
const onSubmit = async (values) => {
|
|
62
|
+
await props.onSubmit({
|
|
63
|
+
productId: values.productId,
|
|
64
|
+
timezone: values.timezone,
|
|
65
|
+
recurrenceRule: values.recurrenceRule,
|
|
66
|
+
maxCapacity: values.maxCapacity,
|
|
67
|
+
maxPickupCapacity: nullableNumber(values.maxPickupCapacity),
|
|
68
|
+
minTotalPax: nullableNumber(values.minTotalPax),
|
|
69
|
+
cutoffMinutes: nullableNumber(values.cutoffMinutes),
|
|
70
|
+
earlyBookingLimitMinutes: nullableNumber(values.earlyBookingLimitMinutes),
|
|
71
|
+
active: values.active,
|
|
72
|
+
}, { isEditing, id: props.rule?.id });
|
|
73
|
+
props.onSuccess();
|
|
74
|
+
};
|
|
75
|
+
return (_jsx(Dialog, { open: props.open, onOpenChange: props.onOpenChange, children: _jsxs(DialogContent, { size: "lg", children: [_jsx(DialogHeader, { children: _jsx(DialogTitle, { children: isEditing ? ruleMessages.editTitle : ruleMessages.newTitle }) }), _jsxs("form", { onSubmit: form.handleSubmit(onSubmit), children: [_jsxs(DialogBody, { className: "grid gap-4", children: [_jsx(ProductSelect, { label: ruleMessages.productLabel, placeholder: ruleMessages.selectProductPlaceholder, products: props.products, value: form.watch("productId"), onValueChange: (value) => form.setValue("productId", value ?? "") }), form.formState.errors.productId ? (_jsx("p", { className: "text-xs text-destructive", children: form.formState.errors.productId.message })) : null, _jsxs("div", { className: "grid grid-cols-2 gap-4", children: [_jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: ruleMessages.timezoneLabel }), _jsx(Input, { ...form.register("timezone"), placeholder: ruleMessages.timezonePlaceholder })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: ruleMessages.maxCapacityLabel }), _jsx(Input, { ...form.register("maxCapacity"), type: "number", min: 0 })] })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: ruleMessages.recurrenceRuleLabel }), _jsx(Textarea, { ...form.register("recurrenceRule"), placeholder: ruleMessages.recurrenceRulePlaceholder, className: "font-mono text-xs" })] }), _jsxs("div", { className: "grid grid-cols-2 gap-4", children: [_jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: ruleMessages.maxPickupCapacityLabel }), _jsx(Input, { ...form.register("maxPickupCapacity"), type: "number", min: 0 })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: ruleMessages.minimumTotalPaxLabel }), _jsx(Input, { ...form.register("minTotalPax"), type: "number", min: 0 })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: ruleMessages.cutoffMinutesLabel }), _jsx(Input, { ...form.register("cutoffMinutes"), type: "number", min: 0 })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: ruleMessages.earlyBookingLimitMinutesLabel }), _jsx(Input, { ...form.register("earlyBookingLimitMinutes"), type: "number", min: 0 })] })] }), _jsx(SwitchField, { title: ruleMessages.activeTitle, description: ruleMessages.activeDescription, checked: form.watch("active"), onCheckedChange: (checked) => form.setValue("active", checked) })] }), _jsx(DialogActions, { cancel: ruleMessages.cancel, save: ruleMessages.save, create: ruleMessages.create, isEditing: isEditing, isSubmitting: form.formState.isSubmitting, onCancel: () => props.onOpenChange(false) })] })] }) }));
|
|
76
|
+
}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import type { AvailabilitySlotRow, ProductOption } from "../../index.js";
|
|
2
|
+
interface RuleDialogMessages {
|
|
3
|
+
validationProductRequired: string;
|
|
4
|
+
validationTimezoneRequired: string;
|
|
5
|
+
validationRecurrenceRequired: string;
|
|
6
|
+
editTitle: string;
|
|
7
|
+
newTitle: string;
|
|
8
|
+
productLabel: string;
|
|
9
|
+
selectProductPlaceholder: string;
|
|
10
|
+
timezoneLabel: string;
|
|
11
|
+
timezonePlaceholder: string;
|
|
12
|
+
maxCapacityLabel: string;
|
|
13
|
+
recurrenceRuleLabel: string;
|
|
14
|
+
recurrenceRulePlaceholder: string;
|
|
15
|
+
maxPickupCapacityLabel: string;
|
|
16
|
+
minimumTotalPaxLabel: string;
|
|
17
|
+
cutoffMinutesLabel: string;
|
|
18
|
+
earlyBookingLimitMinutesLabel: string;
|
|
19
|
+
activeTitle: string;
|
|
20
|
+
activeDescription: string;
|
|
21
|
+
cancel: string;
|
|
22
|
+
save: string;
|
|
23
|
+
create: string;
|
|
24
|
+
}
|
|
25
|
+
interface StartTimeDialogMessages {
|
|
26
|
+
validationProductRequired: string;
|
|
27
|
+
validationStartTimeRequired: string;
|
|
28
|
+
editTitle: string;
|
|
29
|
+
newTitle: string;
|
|
30
|
+
productLabel: string;
|
|
31
|
+
selectProductPlaceholder: string;
|
|
32
|
+
labelLabel: string;
|
|
33
|
+
labelPlaceholder: string;
|
|
34
|
+
startTimeLabel: string;
|
|
35
|
+
durationMinutesLabel: string;
|
|
36
|
+
sortOrderLabel: string;
|
|
37
|
+
activeTitle: string;
|
|
38
|
+
activeDescription: string;
|
|
39
|
+
cancel: string;
|
|
40
|
+
save: string;
|
|
41
|
+
create: string;
|
|
42
|
+
}
|
|
43
|
+
interface SlotDialogMessages {
|
|
44
|
+
validationProductRequired: string;
|
|
45
|
+
validationDateRequired: string;
|
|
46
|
+
validationStartsAtRequired: string;
|
|
47
|
+
validationTimezoneRequired: string;
|
|
48
|
+
editTitle: string;
|
|
49
|
+
newTitle: string;
|
|
50
|
+
productLabel: string;
|
|
51
|
+
selectProductPlaceholder: string;
|
|
52
|
+
ruleLabel: string;
|
|
53
|
+
optionalRulePlaceholder: string;
|
|
54
|
+
noRule: string;
|
|
55
|
+
startTimeLabel: string;
|
|
56
|
+
optionalStartTimePlaceholder: string;
|
|
57
|
+
noStartTime: string;
|
|
58
|
+
dateLabel: string;
|
|
59
|
+
timezoneLabel: string;
|
|
60
|
+
timezonePlaceholder: string;
|
|
61
|
+
startsAtLabel: string;
|
|
62
|
+
endsAtLabel: string;
|
|
63
|
+
statusLabel: string;
|
|
64
|
+
unlimitedLabel: string;
|
|
65
|
+
yes: string;
|
|
66
|
+
no: string;
|
|
67
|
+
initialPaxLabel: string;
|
|
68
|
+
remainingPaxLabel: string;
|
|
69
|
+
remainingResourcesLabel: string;
|
|
70
|
+
initialPickupsLabel: string;
|
|
71
|
+
remainingPickupsLabel: string;
|
|
72
|
+
pastCutoffTitle: string;
|
|
73
|
+
pastCutoffDescription: string;
|
|
74
|
+
tooEarlyTitle: string;
|
|
75
|
+
tooEarlyDescription: string;
|
|
76
|
+
notesLabel: string;
|
|
77
|
+
notesPlaceholder: string;
|
|
78
|
+
cancel: string;
|
|
79
|
+
save: string;
|
|
80
|
+
create: string;
|
|
81
|
+
}
|
|
82
|
+
interface CloseoutDialogMessages {
|
|
83
|
+
validationProductRequired: string;
|
|
84
|
+
validationDateRequired: string;
|
|
85
|
+
editTitle: string;
|
|
86
|
+
newTitle: string;
|
|
87
|
+
productLabel: string;
|
|
88
|
+
selectProductPlaceholder: string;
|
|
89
|
+
slotLabel: string;
|
|
90
|
+
optionalSlotPlaceholder: string;
|
|
91
|
+
productLevelOption: string;
|
|
92
|
+
dateLabel: string;
|
|
93
|
+
datePlaceholder: string;
|
|
94
|
+
reasonLabel: string;
|
|
95
|
+
reasonPlaceholder: string;
|
|
96
|
+
cancel: string;
|
|
97
|
+
save: string;
|
|
98
|
+
create: string;
|
|
99
|
+
}
|
|
100
|
+
interface PickupPointDialogMessages {
|
|
101
|
+
validationProductRequired: string;
|
|
102
|
+
validationNameRequired: string;
|
|
103
|
+
editTitle: string;
|
|
104
|
+
newTitle: string;
|
|
105
|
+
productLabel: string;
|
|
106
|
+
selectProductPlaceholder: string;
|
|
107
|
+
nameLabel: string;
|
|
108
|
+
namePlaceholder: string;
|
|
109
|
+
locationTextLabel: string;
|
|
110
|
+
locationTextPlaceholder: string;
|
|
111
|
+
descriptionLabel: string;
|
|
112
|
+
descriptionPlaceholder: string;
|
|
113
|
+
activeTitle: string;
|
|
114
|
+
activeDescription: string;
|
|
115
|
+
cancel: string;
|
|
116
|
+
save: string;
|
|
117
|
+
create: string;
|
|
118
|
+
}
|
|
119
|
+
export interface AvailabilityDialogMessages {
|
|
120
|
+
dialogs: {
|
|
121
|
+
rule: RuleDialogMessages;
|
|
122
|
+
startTime: StartTimeDialogMessages;
|
|
123
|
+
slot: SlotDialogMessages;
|
|
124
|
+
closeout: CloseoutDialogMessages;
|
|
125
|
+
pickupPoint: PickupPointDialogMessages;
|
|
126
|
+
};
|
|
127
|
+
statusOpen: string;
|
|
128
|
+
statusClosed: string;
|
|
129
|
+
statusSoldOut: string;
|
|
130
|
+
statusCancelled: string;
|
|
131
|
+
}
|
|
132
|
+
export type SubmitContext = {
|
|
133
|
+
isEditing: boolean;
|
|
134
|
+
id?: string;
|
|
135
|
+
};
|
|
136
|
+
export type AvailabilityRuleSubmitPayload = {
|
|
137
|
+
productId: string;
|
|
138
|
+
timezone: string;
|
|
139
|
+
recurrenceRule: string;
|
|
140
|
+
maxCapacity: number;
|
|
141
|
+
maxPickupCapacity: number | null;
|
|
142
|
+
minTotalPax: number | null;
|
|
143
|
+
cutoffMinutes: number | null;
|
|
144
|
+
earlyBookingLimitMinutes: number | null;
|
|
145
|
+
active: boolean;
|
|
146
|
+
};
|
|
147
|
+
export type AvailabilityStartTimeSubmitPayload = {
|
|
148
|
+
productId: string;
|
|
149
|
+
label: string | null;
|
|
150
|
+
startTimeLocal: string;
|
|
151
|
+
durationMinutes: number | null;
|
|
152
|
+
sortOrder: number;
|
|
153
|
+
active: boolean;
|
|
154
|
+
};
|
|
155
|
+
export type AvailabilitySlotSubmitPayload = {
|
|
156
|
+
productId: string;
|
|
157
|
+
availabilityRuleId: string | null;
|
|
158
|
+
startTimeId: string | null;
|
|
159
|
+
dateLocal: string;
|
|
160
|
+
startsAt: string;
|
|
161
|
+
endsAt: string | null;
|
|
162
|
+
timezone: string;
|
|
163
|
+
status: AvailabilitySlotRow["status"];
|
|
164
|
+
unlimited: boolean;
|
|
165
|
+
initialPax: number | null;
|
|
166
|
+
remainingPax: number | null;
|
|
167
|
+
initialPickups: number | null;
|
|
168
|
+
remainingPickups: number | null;
|
|
169
|
+
remainingResources: number | null;
|
|
170
|
+
pastCutoff: boolean;
|
|
171
|
+
tooEarly: boolean;
|
|
172
|
+
notes: string | null;
|
|
173
|
+
};
|
|
174
|
+
export type AvailabilityCloseoutSubmitPayload = {
|
|
175
|
+
productId: string;
|
|
176
|
+
slotId: string | null;
|
|
177
|
+
dateLocal: string;
|
|
178
|
+
reason: string | null;
|
|
179
|
+
};
|
|
180
|
+
export type AvailabilityPickupPointSubmitPayload = {
|
|
181
|
+
productId: string;
|
|
182
|
+
name: string;
|
|
183
|
+
description: string | null;
|
|
184
|
+
locationText: string | null;
|
|
185
|
+
active: boolean;
|
|
186
|
+
};
|
|
187
|
+
export declare function formatSlotLocalDateTime(value: {
|
|
188
|
+
date: string;
|
|
189
|
+
time: string;
|
|
190
|
+
}): string;
|
|
191
|
+
export declare function ProductSelect({ label, placeholder, products, value, onValueChange, }: {
|
|
192
|
+
label: string;
|
|
193
|
+
placeholder: string;
|
|
194
|
+
products: ProductOption[];
|
|
195
|
+
value: string;
|
|
196
|
+
onValueChange: (value: string | null) => void;
|
|
197
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
198
|
+
export declare function SwitchField({ title, description, checked, onCheckedChange, }: {
|
|
199
|
+
title: string;
|
|
200
|
+
description: string;
|
|
201
|
+
checked: boolean;
|
|
202
|
+
onCheckedChange: (checked: boolean) => void;
|
|
203
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
204
|
+
export declare function DialogActions({ cancel, save, create, isEditing, isSubmitting, onCancel, }: {
|
|
205
|
+
cancel: string;
|
|
206
|
+
save: string;
|
|
207
|
+
create: string;
|
|
208
|
+
isEditing: boolean;
|
|
209
|
+
isSubmitting: boolean;
|
|
210
|
+
onCancel: () => void;
|
|
211
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
212
|
+
export {};
|
|
213
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/availability/components/availability-dialogs/shared.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Button, DialogFooter, Label, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Switch, } from "@voyant-travel/ui/components";
|
|
4
|
+
import { Loader2 } from "lucide-react";
|
|
5
|
+
export function formatSlotLocalDateTime(value) {
|
|
6
|
+
return `${value.date} ${value.time}`;
|
|
7
|
+
}
|
|
8
|
+
export function ProductSelect({ label, placeholder, products, value, onValueChange, }) {
|
|
9
|
+
return (_jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: label }), _jsxs(Select, { items: products.map((product) => ({ label: product.name, value: product.id })), value: value, onValueChange: onValueChange, children: [_jsx(SelectTrigger, { className: "w-full", children: _jsx(SelectValue, { placeholder: placeholder }) }), _jsx(SelectContent, { children: products.map((product) => (_jsx(SelectItem, { value: product.id, children: product.name }, product.id))) })] })] }));
|
|
10
|
+
}
|
|
11
|
+
export function SwitchField({ title, description, checked, onCheckedChange, }) {
|
|
12
|
+
return (_jsxs("div", { className: "flex items-center justify-between rounded-md border px-3 py-2", children: [_jsxs("div", { children: [_jsx("p", { className: "text-sm font-medium", children: title }), _jsx("p", { className: "text-xs text-muted-foreground", children: description })] }), _jsx(Switch, { checked: checked, onCheckedChange: onCheckedChange })] }));
|
|
13
|
+
}
|
|
14
|
+
export function DialogActions({ cancel, save, create, isEditing, isSubmitting, onCancel, }) {
|
|
15
|
+
return (_jsxs(DialogFooter, { children: [_jsx(Button, { type: "button", variant: "ghost", onClick: onCancel, children: cancel }), _jsxs(Button, { type: "submit", disabled: isSubmitting, children: [isSubmitting && _jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }), isEditing ? save : create] })] }));
|
|
16
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AvailabilityRuleRow, AvailabilitySlotRow, AvailabilityStartTimeRow, ProductOption } from "../../index.js";
|
|
2
|
+
import { type AvailabilityDialogMessages, type AvailabilitySlotSubmitPayload, type SubmitContext } from "./shared.js";
|
|
3
|
+
export declare function AvailabilitySlotDialog(props: {
|
|
4
|
+
messages: AvailabilityDialogMessages;
|
|
5
|
+
open: boolean;
|
|
6
|
+
onOpenChange: (open: boolean) => void;
|
|
7
|
+
slot?: AvailabilitySlotRow;
|
|
8
|
+
products: ProductOption[];
|
|
9
|
+
rules: AvailabilityRuleRow[];
|
|
10
|
+
startTimes: AvailabilityStartTimeRow[];
|
|
11
|
+
onSubmit: (payload: AvailabilitySlotSubmitPayload, context: SubmitContext) => Promise<void>;
|
|
12
|
+
onSuccess: () => void;
|
|
13
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=slot-dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slot-dialog.d.ts","sourceRoot":"","sources":["../../../../src/availability/components/availability-dialogs/slot-dialog.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,aAAa,EACd,MAAM,gBAAgB,CAAA;AAUvB,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,6BAA6B,EAGlC,KAAK,aAAa,EAEnB,MAAM,aAAa,CAAA;AAyCpB,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,QAAQ,EAAE,0BAA0B,CAAA;IACpC,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,IAAI,CAAC,EAAE,mBAAmB,CAAA;IAC1B,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,KAAK,EAAE,mBAAmB,EAAE,CAAA;IAC5B,UAAU,EAAE,wBAAwB,EAAE,CAAA;IACtC,QAAQ,EAAE,CAAC,OAAO,EAAE,6BAA6B,EAAE,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3F,SAAS,EAAE,MAAM,IAAI,CAAA;CACtB,2CA0SA"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Dialog, DialogBody, DialogContent, DialogHeader, DialogTitle, Input, Label, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Textarea, } from "@voyant-travel/ui/components";
|
|
4
|
+
import { DatePicker } from "@voyant-travel/ui/components/date-picker";
|
|
5
|
+
import { DateTimePicker } from "@voyant-travel/ui/components/date-time-picker";
|
|
6
|
+
import { useEffect } from "react";
|
|
7
|
+
import { useForm } from "react-hook-form";
|
|
8
|
+
import { z } from "zod/v4";
|
|
9
|
+
import { zodResolver } from "../../form-resolver.js";
|
|
10
|
+
import { booleanOptions, instantToSlotLocal, localToInstant, NONE_VALUE, nullableNumber, nullableString, slotStatusOptions, } from "../../index.js";
|
|
11
|
+
import { DialogActions, ProductSelect, SwitchField, } from "./shared.js";
|
|
12
|
+
function getSlotFormSchema(messages) {
|
|
13
|
+
return z.object({
|
|
14
|
+
productId: z.string().min(1, messages.dialogs.slot.validationProductRequired),
|
|
15
|
+
availabilityRuleId: z.string().optional(),
|
|
16
|
+
startTimeId: z.string().optional(),
|
|
17
|
+
dateLocal: z.string().min(1, messages.dialogs.slot.validationDateRequired),
|
|
18
|
+
startsAt: z.string().min(1, messages.dialogs.slot.validationStartsAtRequired),
|
|
19
|
+
endsAt: z.string().optional(),
|
|
20
|
+
timezone: z.string().min(1, messages.dialogs.slot.validationTimezoneRequired),
|
|
21
|
+
status: z.enum(["open", "closed", "sold_out", "cancelled"]),
|
|
22
|
+
unlimited: z.boolean(),
|
|
23
|
+
initialPax: z.string().optional(),
|
|
24
|
+
remainingPax: z.string().optional(),
|
|
25
|
+
initialPickups: z.string().optional(),
|
|
26
|
+
remainingPickups: z.string().optional(),
|
|
27
|
+
remainingResources: z.string().optional(),
|
|
28
|
+
pastCutoff: z.boolean(),
|
|
29
|
+
tooEarly: z.boolean(),
|
|
30
|
+
notes: z.string().optional(),
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
function toLocalDateTimeInput(instant, timezone) {
|
|
34
|
+
const local = instantToSlotLocal(instant, timezone);
|
|
35
|
+
return `${local.date}T${local.time}`;
|
|
36
|
+
}
|
|
37
|
+
function localDateTimeInputToInstant(value, timezone) {
|
|
38
|
+
const [date, time] = value.split("T");
|
|
39
|
+
if (!date || !time) {
|
|
40
|
+
throw new RangeError("Local date-time input must use YYYY-MM-DDTHH:mm");
|
|
41
|
+
}
|
|
42
|
+
return localToInstant({ date, time, timezone });
|
|
43
|
+
}
|
|
44
|
+
export function AvailabilitySlotDialog(props) {
|
|
45
|
+
const slotMessages = props.messages.dialogs.slot;
|
|
46
|
+
const slotFormSchema = getSlotFormSchema(props.messages);
|
|
47
|
+
const form = useForm({
|
|
48
|
+
resolver: zodResolver(slotFormSchema),
|
|
49
|
+
defaultValues: {
|
|
50
|
+
productId: "",
|
|
51
|
+
availabilityRuleId: NONE_VALUE,
|
|
52
|
+
startTimeId: NONE_VALUE,
|
|
53
|
+
dateLocal: "",
|
|
54
|
+
startsAt: "",
|
|
55
|
+
endsAt: "",
|
|
56
|
+
timezone: "Europe/Bucharest", // i18n-literal-ok IANA timezone default
|
|
57
|
+
status: "open",
|
|
58
|
+
unlimited: false,
|
|
59
|
+
initialPax: "",
|
|
60
|
+
remainingPax: "",
|
|
61
|
+
initialPickups: "",
|
|
62
|
+
remainingPickups: "",
|
|
63
|
+
remainingResources: "",
|
|
64
|
+
pastCutoff: false,
|
|
65
|
+
tooEarly: false,
|
|
66
|
+
notes: "",
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
useEffect(() => {
|
|
70
|
+
if (props.open && props.slot) {
|
|
71
|
+
form.reset({
|
|
72
|
+
productId: props.slot.productId,
|
|
73
|
+
availabilityRuleId: props.slot.availabilityRuleId ?? NONE_VALUE,
|
|
74
|
+
startTimeId: props.slot.startTimeId ?? NONE_VALUE,
|
|
75
|
+
dateLocal: props.slot.dateLocal,
|
|
76
|
+
startsAt: toLocalDateTimeInput(props.slot.startsAt, props.slot.timezone),
|
|
77
|
+
endsAt: props.slot.endsAt
|
|
78
|
+
? toLocalDateTimeInput(props.slot.endsAt, props.slot.timezone)
|
|
79
|
+
: "",
|
|
80
|
+
timezone: props.slot.timezone,
|
|
81
|
+
status: props.slot.status,
|
|
82
|
+
unlimited: props.slot.unlimited,
|
|
83
|
+
initialPax: props.slot.initialPax?.toString() ?? "",
|
|
84
|
+
remainingPax: props.slot.remainingPax?.toString() ?? "",
|
|
85
|
+
initialPickups: "",
|
|
86
|
+
remainingPickups: "",
|
|
87
|
+
remainingResources: "",
|
|
88
|
+
pastCutoff: false,
|
|
89
|
+
tooEarly: false,
|
|
90
|
+
notes: props.slot.notes ?? "",
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
else if (props.open) {
|
|
94
|
+
form.reset();
|
|
95
|
+
}
|
|
96
|
+
}, [form, props.open, props.slot]);
|
|
97
|
+
const selectedProductId = form.watch("productId");
|
|
98
|
+
const filteredRules = props.rules.filter((rule) => rule.productId === selectedProductId);
|
|
99
|
+
const filteredStartTimes = props.startTimes.filter((startTime) => startTime.productId === selectedProductId);
|
|
100
|
+
const isEditing = Boolean(props.slot);
|
|
101
|
+
const onSubmit = async (values) => {
|
|
102
|
+
await props.onSubmit({
|
|
103
|
+
productId: values.productId,
|
|
104
|
+
availabilityRuleId: values.availabilityRuleId === NONE_VALUE ? null : (values.availabilityRuleId ?? null),
|
|
105
|
+
startTimeId: values.startTimeId === NONE_VALUE ? null : (values.startTimeId ?? null),
|
|
106
|
+
dateLocal: values.dateLocal,
|
|
107
|
+
startsAt: localDateTimeInputToInstant(values.startsAt, values.timezone),
|
|
108
|
+
endsAt: values.endsAt ? localDateTimeInputToInstant(values.endsAt, values.timezone) : null,
|
|
109
|
+
timezone: values.timezone,
|
|
110
|
+
status: values.status,
|
|
111
|
+
unlimited: values.unlimited,
|
|
112
|
+
initialPax: nullableNumber(values.initialPax),
|
|
113
|
+
remainingPax: nullableNumber(values.remainingPax),
|
|
114
|
+
initialPickups: nullableNumber(values.initialPickups),
|
|
115
|
+
remainingPickups: nullableNumber(values.remainingPickups),
|
|
116
|
+
remainingResources: nullableNumber(values.remainingResources),
|
|
117
|
+
pastCutoff: values.pastCutoff,
|
|
118
|
+
tooEarly: values.tooEarly,
|
|
119
|
+
notes: nullableString(values.notes),
|
|
120
|
+
}, { isEditing, id: props.slot?.id });
|
|
121
|
+
props.onSuccess();
|
|
122
|
+
};
|
|
123
|
+
return (_jsx(Dialog, { open: props.open, onOpenChange: props.onOpenChange, children: _jsxs(DialogContent, { size: "lg", children: [_jsx(DialogHeader, { children: _jsx(DialogTitle, { children: isEditing ? slotMessages.editTitle : slotMessages.newTitle }) }), _jsxs("form", { onSubmit: form.handleSubmit(onSubmit), children: [_jsxs(DialogBody, { className: "grid gap-4", children: [_jsx(ProductSelect, { label: slotMessages.productLabel, placeholder: slotMessages.selectProductPlaceholder, products: props.products, value: form.watch("productId"), onValueChange: (value) => form.setValue("productId", value ?? "") }), _jsxs("div", { className: "grid grid-cols-2 gap-4", children: [_jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: slotMessages.ruleLabel }), _jsxs(Select, { value: form.watch("availabilityRuleId") ?? NONE_VALUE, onValueChange: (value) => form.setValue("availabilityRuleId", value ?? NONE_VALUE), children: [_jsx(SelectTrigger, { className: "w-full", children: _jsx(SelectValue, { placeholder: slotMessages.optionalRulePlaceholder }) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: NONE_VALUE, children: slotMessages.noRule }), filteredRules.map((rule) => (_jsxs(SelectItem, { value: rule.id, children: [rule.timezone, " \u00B7 ", rule.recurrenceRule] }, rule.id)))] })] })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: slotMessages.startTimeLabel }), _jsxs(Select, { value: form.watch("startTimeId") ?? NONE_VALUE, onValueChange: (value) => form.setValue("startTimeId", value ?? NONE_VALUE), children: [_jsx(SelectTrigger, { className: "w-full", children: _jsx(SelectValue, { placeholder: slotMessages.optionalStartTimePlaceholder }) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: NONE_VALUE, children: slotMessages.noStartTime }), filteredStartTimes.map((startTime) => (_jsx(SelectItem, { value: startTime.id, children: startTime.label ?? startTime.startTimeLocal }, startTime.id)))] })] })] })] }), _jsxs("div", { className: "grid grid-cols-2 gap-4", children: [_jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: slotMessages.dateLabel }), _jsx(DatePicker, { value: form.watch("dateLocal") || null, onChange: (nextValue) => form.setValue("dateLocal", nextValue ?? "", {
|
|
124
|
+
shouldDirty: true,
|
|
125
|
+
shouldValidate: true,
|
|
126
|
+
}) })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: slotMessages.timezoneLabel }), _jsx(Input, { ...form.register("timezone"), placeholder: slotMessages.timezonePlaceholder })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: slotMessages.startsAtLabel }), _jsx(DateTimePicker, { value: form.watch("startsAt") || null, onChange: (nextValue) => form.setValue("startsAt", nextValue ?? "", {
|
|
127
|
+
shouldDirty: true,
|
|
128
|
+
shouldValidate: true,
|
|
129
|
+
}) })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: slotMessages.endsAtLabel }), _jsx(DateTimePicker, { value: form.watch("endsAt") || null, onChange: (nextValue) => form.setValue("endsAt", nextValue ?? "", {
|
|
130
|
+
shouldDirty: true,
|
|
131
|
+
shouldValidate: true,
|
|
132
|
+
}) })] })] }), _jsxs("div", { className: "grid grid-cols-2 gap-4", children: [_jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: slotMessages.statusLabel }), _jsxs(Select, { items: slotStatusOptions, value: form.watch("status"), onValueChange: (value) => form.setValue("status", value), children: [_jsx(SelectTrigger, { className: "w-full", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: slotStatusOptions.map((option) => (_jsx(SelectItem, { value: option.value, children: {
|
|
133
|
+
open: props.messages.statusOpen,
|
|
134
|
+
closed: props.messages.statusClosed,
|
|
135
|
+
sold_out: props.messages.statusSoldOut,
|
|
136
|
+
cancelled: props.messages.statusCancelled,
|
|
137
|
+
}[option.value] }, option.value))) })] })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: slotMessages.unlimitedLabel }), _jsxs(Select, { items: booleanOptions, value: String(form.watch("unlimited")), onValueChange: (value) => form.setValue("unlimited", value === "true"), children: [_jsx(SelectTrigger, { className: "w-full", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: booleanOptions.map((option) => (_jsx(SelectItem, { value: option.value, children: option.value === "true" ? slotMessages.yes : slotMessages.no }, option.value))) })] })] })] }), _jsxs("div", { className: "grid grid-cols-3 gap-4", children: [_jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: slotMessages.initialPaxLabel }), _jsx(Input, { ...form.register("initialPax"), type: "number", min: 0 })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: slotMessages.remainingPaxLabel }), _jsx(Input, { ...form.register("remainingPax"), type: "number", min: 0 })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: slotMessages.remainingResourcesLabel }), _jsx(Input, { ...form.register("remainingResources"), type: "number", min: 0 })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: slotMessages.initialPickupsLabel }), _jsx(Input, { ...form.register("initialPickups"), type: "number", min: 0 })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: slotMessages.remainingPickupsLabel }), _jsx(Input, { ...form.register("remainingPickups"), type: "number", min: 0 })] })] }), _jsxs("div", { className: "grid grid-cols-2 gap-4", children: [_jsx(SwitchField, { title: slotMessages.pastCutoffTitle, description: slotMessages.pastCutoffDescription, checked: form.watch("pastCutoff"), onCheckedChange: (checked) => form.setValue("pastCutoff", checked) }), _jsx(SwitchField, { title: slotMessages.tooEarlyTitle, description: slotMessages.tooEarlyDescription, checked: form.watch("tooEarly"), onCheckedChange: (checked) => form.setValue("tooEarly", checked) })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: slotMessages.notesLabel }), _jsx(Textarea, { ...form.register("notes"), placeholder: slotMessages.notesPlaceholder })] })] }), _jsx(DialogActions, { cancel: slotMessages.cancel, save: slotMessages.save, create: slotMessages.create, isEditing: isEditing, isSubmitting: form.formState.isSubmitting, onCancel: () => props.onOpenChange(false) })] })] }) }));
|
|
138
|
+
}
|