@voyant-travel/operations-react 0.10.0 → 0.12.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.
@@ -14,6 +14,9 @@ export interface AvailabilityColumnsMessages {
14
14
  openLabel: string;
15
15
  editLabel: string;
16
16
  productLabel: string;
17
+ optionLabel: string;
18
+ optionMissingLabel: string;
19
+ optionMissingTooltip: string;
17
20
  productLevelLabel: string;
18
21
  reasonLabel: string;
19
22
  recurrenceLabel: string;
@@ -36,7 +39,17 @@ export interface AvailabilityColumnsMessages {
36
39
  export declare function getSlotStatusLabel(status: AvailabilitySlotRow["status"], messages: AvailabilityColumnsMessages): string;
37
40
  export declare const availabilityRuleColumns: (products: ProductOption[], onView: (ruleId: string) => void, messages: AvailabilityColumnsMessages) => ColumnDef<AvailabilityRuleRow>[];
38
41
  export declare const availabilityStartTimeColumns: (products: ProductOption[], onView: (startTimeId: string) => void, messages: AvailabilityColumnsMessages) => ColumnDef<AvailabilityStartTimeRow>[];
39
- export declare const availabilitySlotColumns: (products: ProductOption[], onView: (slotId: string) => void, messages: AvailabilityColumnsMessages, onEdit?: (slot: AvailabilitySlotRow) => void) => ColumnDef<AvailabilitySlotRow>[];
42
+ /**
43
+ * Lookup data for the option column. `optionNameById` resolves a slot's
44
+ * `optionId` to a readable name; `productsWithOptions` is the set of product ids
45
+ * that have at least one active option, used to warn only when a missing option
46
+ * actually makes the departure unpriceable (#2062).
47
+ */
48
+ export interface SlotOptionInfo {
49
+ optionNameById: Map<string, string>;
50
+ productsWithOptions: Set<string>;
51
+ }
52
+ export declare const availabilitySlotColumns: (products: ProductOption[], onView: (slotId: string) => void, messages: AvailabilityColumnsMessages, onEdit?: (slot: AvailabilitySlotRow) => void, optionInfo?: SlotOptionInfo) => ColumnDef<AvailabilitySlotRow>[];
40
53
  export declare const availabilityCloseoutColumns: (products: ProductOption[], messages: AvailabilityColumnsMessages) => ColumnDef<AvailabilityCloseoutRow>[];
41
54
  export declare const availabilityPickupPointColumns: (products: ProductOption[], messages: AvailabilityColumnsMessages) => ColumnDef<AvailabilityPickupPointRow>[];
42
55
  //# sourceMappingURL=availability-columns.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"availability-columns.d.ts","sourceRoot":"","sources":["../../../src/availability/components/availability-columns.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAMtD,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,aAAa,EAKnB,MAAM,aAAa,CAAA;AAGpB,MAAM,WAAW,2BAA2B;IAC1C,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,iBAAiB,EAAE,MAAM,CAAA;IACzB,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,MAAM,CAAA;IACvB,iBAAiB,EAAE,MAAM,CAAA;IACzB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,EACrC,QAAQ,EAAE,2BAA2B,UAYtC;AAwCD,eAAO,MAAM,uBAAuB,GAClC,UAAU,aAAa,EAAE,EACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,EAChC,UAAU,2BAA2B,KACpC,SAAS,CAAC,mBAAmB,CAAC,EA2ChC,CAAA;AAED,eAAO,MAAM,4BAA4B,GACvC,UAAU,aAAa,EAAE,EACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,EACrC,UAAU,2BAA2B,KACpC,SAAS,CAAC,wBAAwB,CAAC,EAyCrC,CAAA;AAED,eAAO,MAAM,uBAAuB,GAClC,UAAU,aAAa,EAAE,EACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,EAChC,UAAU,2BAA2B,EACrC,SAAS,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,KAC3C,SAAS,CAAC,mBAAmB,CAAC,EA2DhC,CAAA;AAED,eAAO,MAAM,2BAA2B,GACtC,UAAU,aAAa,EAAE,EACzB,UAAU,2BAA2B,KACpC,SAAS,CAAC,uBAAuB,CAAC,EAoBpC,CAAA;AAED,eAAO,MAAM,8BAA8B,GACzC,UAAU,aAAa,EAAE,EACzB,UAAU,2BAA2B,KACpC,SAAS,CAAC,0BAA0B,CAAC,EA0BvC,CAAA"}
1
+ {"version":3,"file":"availability-columns.d.ts","sourceRoot":"","sources":["../../../src/availability/components/availability-columns.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAOtD,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,aAAa,EAKnB,MAAM,aAAa,CAAA;AAGpB,MAAM,WAAW,2BAA2B;IAC1C,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,oBAAoB,EAAE,MAAM,CAAA;IAC5B,iBAAiB,EAAE,MAAM,CAAA;IACzB,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,MAAM,CAAA;IACvB,iBAAiB,EAAE,MAAM,CAAA;IACzB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,EACrC,QAAQ,EAAE,2BAA2B,UAYtC;AAwCD,eAAO,MAAM,uBAAuB,GAClC,UAAU,aAAa,EAAE,EACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,EAChC,UAAU,2BAA2B,KACpC,SAAS,CAAC,mBAAmB,CAAC,EA2ChC,CAAA;AAED,eAAO,MAAM,4BAA4B,GACvC,UAAU,aAAa,EAAE,EACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,EACrC,UAAU,2BAA2B,KACpC,SAAS,CAAC,wBAAwB,CAAC,EAyCrC,CAAA;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CACjC;AAED,eAAO,MAAM,uBAAuB,GAClC,UAAU,aAAa,EAAE,EACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,EAChC,UAAU,2BAA2B,EACrC,SAAS,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,EAC5C,aAAa,cAAc,KAC1B,SAAS,CAAC,mBAAmB,CAAC,EAwFhC,CAAA;AAED,eAAO,MAAM,2BAA2B,GACtC,UAAU,aAAa,EAAE,EACzB,UAAU,2BAA2B,KACpC,SAAS,CAAC,uBAAuB,CAAC,EAoBpC,CAAA;AAED,eAAO,MAAM,8BAA8B,GACzC,UAAU,aAAa,EAAE,EACzB,UAAU,2BAA2B,KACpC,SAAS,CAAC,0BAA0B,CAAC,EA0BvC,CAAA"}
@@ -2,8 +2,9 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { Badge, Button } from "@voyant-travel/ui/components";
4
4
  import { DataTableColumnHeader } from "@voyant-travel/ui/components/data-table-column-header";
5
+ import { Tooltip, TooltipContent, TooltipTrigger } from "@voyant-travel/ui/components/tooltip";
5
6
  import { cn } from "@voyant-travel/ui/lib/utils";
6
- import { ExternalLink, Pencil } from "lucide-react";
7
+ import { AlertTriangle, ExternalLink, Pencil } from "lucide-react";
7
8
  import { useAvailabilityUiMessagesOrDefault } from "../i18n/index.js";
8
9
  import { productNameById, slotLocalEnd, slotLocalStart, slotStatusTone, } from "../index.js";
9
10
  import { slotStatusToneClass } from "./slot-status-tone.js";
@@ -99,12 +100,28 @@ export const availabilityStartTimeColumns = (products, onView, messages) => [
99
100
  cell: ({ row }) => (_jsx(ViewButton, { label: messages.openLabel, onClick: () => onView(row.original.id) })),
100
101
  },
101
102
  ];
102
- export const availabilitySlotColumns = (products, onView, messages, onEdit) => [
103
+ export const availabilitySlotColumns = (products, onView, messages, onEdit, optionInfo) => [
103
104
  {
104
105
  accessorKey: "productId",
105
106
  header: ({ column }) => _jsx(DataTableColumnHeader, { column: column, title: messages.productLabel }),
106
107
  cell: ({ row }) => productNameById(products, row.original.productId, row.original.productName),
107
108
  },
109
+ {
110
+ id: "option",
111
+ header: () => messages.optionLabel,
112
+ cell: ({ row }) => {
113
+ const { optionId, productId } = row.original;
114
+ if (optionId) {
115
+ return optionInfo?.optionNameById.get(optionId) ?? messages.details.noValue;
116
+ }
117
+ // No option set: only flag it when the product actually has options, so a
118
+ // legitimately option-less product isn't warned.
119
+ if (optionInfo?.productsWithOptions.has(productId)) {
120
+ return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { className: "cursor-help", children: _jsxs(Badge, { variant: "outline", className: "gap-1 border-amber-500/40 text-amber-600 dark:text-amber-400", children: [_jsx(AlertTriangle, { className: "h-3 w-3" }), messages.optionMissingLabel] }) }), _jsx(TooltipContent, { children: messages.optionMissingTooltip })] }));
121
+ }
122
+ return messages.details.noValue;
123
+ },
124
+ },
108
125
  {
109
126
  accessorKey: "startsAt",
110
127
  header: ({ column }) => (_jsx(DataTableColumnHeader, { column: column, title: messages.startsAtLabel })),
@@ -45,10 +45,16 @@ interface SlotDialogMessages {
45
45
  validationDateRequired: string;
46
46
  validationStartsAtRequired: string;
47
47
  validationTimezoneRequired: string;
48
+ validationOptionRequired: string;
49
+ validationOptionsUnavailable: string;
48
50
  editTitle: string;
49
51
  newTitle: string;
50
52
  productLabel: string;
51
53
  selectProductPlaceholder: string;
54
+ optionLabel: string;
55
+ selectOptionPlaceholder: string;
56
+ noOption: string;
57
+ defaultOptionSuffix: string;
52
58
  ruleLabel: string;
53
59
  optionalRulePlaceholder: string;
54
60
  noRule: string;
@@ -154,6 +160,7 @@ export type AvailabilityStartTimeSubmitPayload = {
154
160
  };
155
161
  export type AvailabilitySlotSubmitPayload = {
156
162
  productId: string;
163
+ optionId: string | null;
157
164
  availabilityRuleId: string | null;
158
165
  startTimeId: string | null;
159
166
  dateLocal: string;
@@ -201,12 +208,13 @@ export declare function SwitchField({ title, description, checked, onCheckedChan
201
208
  checked: boolean;
202
209
  onCheckedChange: (checked: boolean) => void;
203
210
  }): import("react/jsx-runtime").JSX.Element;
204
- export declare function DialogActions({ cancel, save, create, isEditing, isSubmitting, onCancel, }: {
211
+ export declare function DialogActions({ cancel, save, create, isEditing, isSubmitting, disabled, onCancel, }: {
205
212
  cancel: string;
206
213
  save: string;
207
214
  create: string;
208
215
  isEditing: boolean;
209
216
  isSubmitting: boolean;
217
+ disabled?: boolean;
210
218
  onCancel: () => void;
211
219
  }): import("react/jsx-runtime").JSX.Element;
212
220
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/availability/components/availability-dialogs/shared.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/availability/components/availability-dialogs/shared.tsx"],"names":[],"mappings":"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"}
@@ -11,6 +11,6 @@ export function ProductSelect({ label, placeholder, products, value, onValueChan
11
11
  export function SwitchField({ title, description, checked, onCheckedChange, }) {
12
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
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] })] }));
14
+ export function DialogActions({ cancel, save, create, isEditing, isSubmitting, disabled, onCancel, }) {
15
+ return (_jsxs(DialogFooter, { children: [_jsx(Button, { type: "button", variant: "ghost", onClick: onCancel, children: cancel }), _jsxs(Button, { type: "submit", disabled: isSubmitting || disabled, children: [isSubmitting && _jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }), isEditing ? save : create] })] }));
16
16
  }
@@ -1 +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"}
1
+ {"version":3,"file":"slot-dialog.d.ts","sourceRoot":"","sources":["../../../../src/availability/components/availability-dialogs/slot-dialog.tsx"],"names":[],"mappings":"AAwBA,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;AA0CpB,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,2CAwXA"}
@@ -1,9 +1,10 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useProductOptions } from "@voyant-travel/inventory-react";
3
4
  import { Dialog, DialogBody, DialogContent, DialogHeader, DialogTitle, Input, Label, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Textarea, } from "@voyant-travel/ui/components";
4
5
  import { DatePicker } from "@voyant-travel/ui/components/date-picker";
5
6
  import { DateTimePicker } from "@voyant-travel/ui/components/date-time-picker";
6
- import { useEffect } from "react";
7
+ import { useEffect, useMemo } from "react";
7
8
  import { useForm } from "react-hook-form";
8
9
  import { z } from "zod/v4";
9
10
  import { zodResolver } from "../../form-resolver.js";
@@ -12,6 +13,7 @@ import { DialogActions, ProductSelect, SwitchField, } from "./shared.js";
12
13
  function getSlotFormSchema(messages) {
13
14
  return z.object({
14
15
  productId: z.string().min(1, messages.dialogs.slot.validationProductRequired),
16
+ optionId: z.string().optional(),
15
17
  availabilityRuleId: z.string().optional(),
16
18
  startTimeId: z.string().optional(),
17
19
  dateLocal: z.string().min(1, messages.dialogs.slot.validationDateRequired),
@@ -48,6 +50,7 @@ export function AvailabilitySlotDialog(props) {
48
50
  resolver: zodResolver(slotFormSchema),
49
51
  defaultValues: {
50
52
  productId: "",
53
+ optionId: NONE_VALUE,
51
54
  availabilityRuleId: NONE_VALUE,
52
55
  startTimeId: NONE_VALUE,
53
56
  dateLocal: "",
@@ -70,6 +73,7 @@ export function AvailabilitySlotDialog(props) {
70
73
  if (props.open && props.slot) {
71
74
  form.reset({
72
75
  productId: props.slot.productId,
76
+ optionId: props.slot.optionId ?? NONE_VALUE,
73
77
  availabilityRuleId: props.slot.availabilityRuleId ?? NONE_VALUE,
74
78
  startTimeId: props.slot.startTimeId ?? NONE_VALUE,
75
79
  dateLocal: props.slot.dateLocal,
@@ -98,9 +102,49 @@ export function AvailabilitySlotDialog(props) {
98
102
  const filteredRules = props.rules.filter((rule) => rule.productId === selectedProductId);
99
103
  const filteredStartTimes = props.startTimes.filter((startTime) => startTime.productId === selectedProductId);
100
104
  const isEditing = Boolean(props.slot);
105
+ // A departure's price is derived from its option's rate plans, so the slot
106
+ // needs to point at one of the product's options. Load the selected product's
107
+ // active options so the operator can pick (and repair) the linkage (#2059).
108
+ const optionsQuery = useProductOptions({
109
+ productId: selectedProductId || undefined,
110
+ status: "active",
111
+ limit: 100,
112
+ enabled: Boolean(selectedProductId),
113
+ });
114
+ const productOptions = useMemo(() => {
115
+ const rows = optionsQuery.data?.data ?? [];
116
+ return [...rows].sort((a, b) => a.sortOrder - b.sortOrder || a.name.localeCompare(b.name));
117
+ }, [optionsQuery.data]);
118
+ const productHasOptions = productOptions.length > 0;
119
+ // Options are only *known* once the query for the selected product succeeds.
120
+ // Until then `productOptions` is empty for an unrelated reason (loading/error),
121
+ // so we must not treat the product as option-less.
122
+ const optionsResolved = !selectedProductId || optionsQuery.isSuccess;
101
123
  const onSubmit = async (values) => {
124
+ const resolvedOptionId = values.optionId === NONE_VALUE ? null : (values.optionId ?? null);
125
+ // Guard against an unpriceable slot. When no explicit option is chosen we
126
+ // must be sure the product genuinely has none — block while the options
127
+ // query is still loading/errored so the race can't slip a null option past
128
+ // the required-option check (#2059).
129
+ if (!resolvedOptionId) {
130
+ if (!optionsResolved) {
131
+ form.setError("optionId", {
132
+ type: "manual",
133
+ message: slotMessages.validationOptionsUnavailable,
134
+ });
135
+ return;
136
+ }
137
+ if (productHasOptions) {
138
+ form.setError("optionId", {
139
+ type: "manual",
140
+ message: slotMessages.validationOptionRequired,
141
+ });
142
+ return;
143
+ }
144
+ }
102
145
  await props.onSubmit({
103
146
  productId: values.productId,
147
+ optionId: resolvedOptionId,
104
148
  availabilityRuleId: values.availabilityRuleId === NONE_VALUE ? null : (values.availabilityRuleId ?? null),
105
149
  startTimeId: values.startTimeId === NONE_VALUE ? null : (values.startTimeId ?? null),
106
150
  dateLocal: values.dateLocal,
@@ -120,7 +164,17 @@ export function AvailabilitySlotDialog(props) {
120
164
  }, { isEditing, id: props.slot?.id });
121
165
  props.onSuccess();
122
166
  };
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 ?? "", {
167
+ 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) => {
168
+ form.setValue("productId", value ?? "");
169
+ // The previously selected option belongs to the old product.
170
+ form.setValue("optionId", NONE_VALUE);
171
+ form.clearErrors("optionId");
172
+ } }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { children: slotMessages.optionLabel }), _jsxs(Select, { value: form.watch("optionId") ?? NONE_VALUE, onValueChange: (value) => {
173
+ form.setValue("optionId", value ?? NONE_VALUE);
174
+ form.clearErrors("optionId");
175
+ }, children: [_jsx(SelectTrigger, { className: "w-full", disabled: !selectedProductId, children: _jsx(SelectValue, { placeholder: slotMessages.selectOptionPlaceholder }) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: NONE_VALUE, children: slotMessages.noOption }), productOptions.map((option) => (_jsx(SelectItem, { value: option.id, children: option.isDefault
176
+ ? `${option.name} (${slotMessages.defaultOptionSuffix})`
177
+ : option.name }, option.id)))] })] }), form.formState.errors.optionId ? (_jsx("p", { className: "text-destructive text-sm", children: form.formState.errors.optionId.message })) : null] }), _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
178
  shouldDirty: true,
125
179
  shouldValidate: true,
126
180
  }) })] }), _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 ?? "", {
@@ -134,5 +188,5 @@ export function AvailabilitySlotDialog(props) {
134
188
  closed: props.messages.statusClosed,
135
189
  sold_out: props.messages.statusSoldOut,
136
190
  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) })] })] }) }));
191
+ }[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, disabled: Boolean(selectedProductId) && optionsQuery.isLoading, onCancel: () => props.onOpenChange(false) })] })] }) }));
138
192
  }
@@ -1,5 +1,5 @@
1
1
  import type { OnChangeFn, RowSelectionState } from "@tanstack/react-table";
2
- import type { ReactNode } from "react";
2
+ import { type ReactNode } from "react";
3
3
  import type { AvailabilitySlotRow, ProductOption } from "../../index.js";
4
4
  import { type AvailabilityBulkDeleteFn, type AvailabilityBulkUpdateFn, type AvailabilityTabMessages } from "./shared.js";
5
5
  export declare function AvailabilitySlotsTab(props: {
@@ -1 +1 @@
1
- {"version":3,"file":"slots-tab.d.ts","sourceRoot":"","sources":["../../../../src/availability/components/availability-tabs/slots-tab.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAW1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAIxE,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAE7B,MAAM,aAAa,CAAA;AAEpB,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,QAAQ,EAAE,uBAAuB,CAAA;IACjC,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,aAAa,EAAE,mBAAmB,EAAE,CAAA;IACpC,aAAa,EAAE,iBAAiB,CAAA;IAChC,gBAAgB,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAA;IAC/C,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,gBAAgB,EAAE,wBAAwB,CAAA;IAC1C,gBAAgB,EAAE,wBAAwB,CAAA;IAC1C,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACrC,MAAM,EAAE,CAAC,GAAG,EAAE,mBAAmB,KAAK,IAAI,CAAA;IAC1C,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,2CAyJA"}
1
+ {"version":3,"file":"slots-tab.d.ts","sourceRoot":"","sources":["../../../../src/availability/components/availability-tabs/slots-tab.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAe1E,OAAO,EAAE,KAAK,SAAS,EAAW,MAAM,OAAO,CAAA;AAE/C,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAIxE,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAE7B,MAAM,aAAa,CAAA;AAEpB,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,QAAQ,EAAE,uBAAuB,CAAA;IACjC,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,aAAa,EAAE,mBAAmB,EAAE,CAAA;IACpC,aAAa,EAAE,iBAAiB,CAAA;IAChC,gBAAgB,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAA;IAC/C,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,gBAAgB,EAAE,wBAAwB,CAAA;IAC1C,gBAAgB,EAAE,wBAAwB,CAAA;IAC1C,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACrC,MAAM,EAAE,CAAC,GAAG,EAAE,mBAAmB,KAAK,IAAI,CAAA;IAC1C,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,2CA0LA"}
@@ -1,9 +1,12 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useQueries } from "@tanstack/react-query";
4
+ import { getProductOptionsQueryOptions, useVoyantProductsContext, } from "@voyant-travel/inventory-react";
3
5
  import { ConfirmActionButton, SelectionActionBar } from "@voyant-travel/ui/components";
4
6
  import { DataTable } from "@voyant-travel/ui/components/data-table";
5
7
  import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@voyant-travel/ui/components/select";
6
8
  import { TabsContent } from "@voyant-travel/ui/components/tabs";
9
+ import { useMemo } from "react";
7
10
  import { useAvailabilityUiMessagesOrDefault } from "../../i18n/index.js";
8
11
  import { formatLocalizedSelectionLabel } from "../../utils.js";
9
12
  import { availabilitySlotColumns } from "../availability-columns.js";
@@ -11,9 +14,34 @@ import { AvailabilitySectionHeader } from "../availability-section-header.js";
11
14
  import { formatTemplate, } from "./shared.js";
12
15
  export function AvailabilitySlotsTab(props) {
13
16
  useAvailabilityUiMessagesOrDefault();
17
+ // Resolve each slot's option name, and learn which products have options at
18
+ // all, so the option column can flag a missing option only when it actually
19
+ // makes the departure unpriceable (#2062). Scope the lookup to the products
20
+ // actually visible in the (paginated) table — one capped query per product —
21
+ // rather than an unbounded global read (the options API caps `limit` at 100).
22
+ const productsContext = useVoyantProductsContext();
23
+ const visibleProductIds = useMemo(() => [...new Set(props.filteredSlots.map((slot) => slot.productId))], [props.filteredSlots]);
24
+ const optionQueries = useQueries({
25
+ queries: visibleProductIds.map((productId) => getProductOptionsQueryOptions(productsContext, {
26
+ productId,
27
+ status: "active",
28
+ limit: 100,
29
+ })),
30
+ });
31
+ const optionInfo = useMemo(() => {
32
+ const optionNameById = new Map();
33
+ const productsWithOptions = new Set();
34
+ for (const query of optionQueries) {
35
+ for (const option of query.data?.data ?? []) {
36
+ optionNameById.set(option.id, option.name);
37
+ productsWithOptions.add(option.productId);
38
+ }
39
+ }
40
+ return { optionNameById, productsWithOptions };
41
+ }, [optionQueries]);
14
42
  const selection = (count) => formatLocalizedSelectionLabel(count, props.messages.nouns.slotSingular, props.messages.nouns.slotPlural);
15
43
  const asPanel = props.asPanel ?? true;
16
- const body = (_jsxs(_Fragment, { children: [!props.hideHeader && (_jsx(AvailabilitySectionHeader, { title: props.messages.tabs.slots.title, description: props.messages.tabs.slots.description, actionLabel: props.messages.tabs.slots.actionLabel, onAction: props.onCreate })), props.toolbar, _jsx(DataTable, { columns: availabilitySlotColumns(props.products, props.onOpenRoute, props.messages, props.onEdit), data: props.filteredSlots, emptyMessage: props.messages.tabs.slots.emptyMessage, enableRowSelection: true, getRowId: (row) => row.id, rowSelection: props.slotSelection, onRowSelectionChange: props.setSlotSelection, renderSelectionActions: ({ selectedRows, clearSelection }) => (_jsxs(SelectionActionBar, { selectedCount: selectedRows.length, onClear: clearSelection, children: [props.bulkStatusSelect ? (_jsxs(Select, { value: "", onValueChange: (value) => {
44
+ const body = (_jsxs(_Fragment, { children: [!props.hideHeader && (_jsx(AvailabilitySectionHeader, { title: props.messages.tabs.slots.title, description: props.messages.tabs.slots.description, actionLabel: props.messages.tabs.slots.actionLabel, onAction: props.onCreate })), props.toolbar, _jsx(DataTable, { columns: availabilitySlotColumns(props.products, props.onOpenRoute, props.messages, props.onEdit, optionInfo), data: props.filteredSlots, emptyMessage: props.messages.tabs.slots.emptyMessage, enableRowSelection: true, getRowId: (row) => row.id, rowSelection: props.slotSelection, onRowSelectionChange: props.setSlotSelection, renderSelectionActions: ({ selectedRows, clearSelection }) => (_jsxs(SelectionActionBar, { selectedCount: selectedRows.length, onClear: clearSelection, children: [props.bulkStatusSelect ? (_jsxs(Select, { value: "", onValueChange: (value) => {
17
45
  if (!value)
18
46
  return;
19
47
  const verb = value === "open"
@@ -221,10 +221,16 @@ export declare const availabilityUiEn: {
221
221
  validationDateRequired: string;
222
222
  validationStartsAtRequired: string;
223
223
  validationTimezoneRequired: string;
224
+ validationOptionRequired: string;
225
+ validationOptionsUnavailable: string;
224
226
  editTitle: string;
225
227
  newTitle: string;
226
228
  productLabel: string;
227
229
  selectProductPlaceholder: string;
230
+ optionLabel: string;
231
+ selectOptionPlaceholder: string;
232
+ noOption: string;
233
+ defaultOptionSuffix: string;
228
234
  ruleLabel: string;
229
235
  optionalRulePlaceholder: string;
230
236
  noRule: string;
@@ -360,6 +366,9 @@ export declare const availabilityUiEn: {
360
366
  statusSoldOut: string;
361
367
  statusCancelled: string;
362
368
  productLabel: string;
369
+ optionLabel: string;
370
+ optionMissingLabel: string;
371
+ optionMissingTooltip: string;
363
372
  timezoneLabel: string;
364
373
  recurrenceLabel: string;
365
374
  maxPaxLabel: string;
@@ -709,10 +718,16 @@ export declare const availabilityUiRo: {
709
718
  validationDateRequired: string;
710
719
  validationStartsAtRequired: string;
711
720
  validationTimezoneRequired: string;
721
+ validationOptionRequired: string;
722
+ validationOptionsUnavailable: string;
712
723
  editTitle: string;
713
724
  newTitle: string;
714
725
  productLabel: string;
715
726
  selectProductPlaceholder: string;
727
+ optionLabel: string;
728
+ selectOptionPlaceholder: string;
729
+ noOption: string;
730
+ defaultOptionSuffix: string;
716
731
  ruleLabel: string;
717
732
  optionalRulePlaceholder: string;
718
733
  noRule: string;
@@ -848,6 +863,9 @@ export declare const availabilityUiRo: {
848
863
  statusSoldOut: string;
849
864
  statusCancelled: string;
850
865
  productLabel: string;
866
+ optionLabel: string;
867
+ optionMissingLabel: string;
868
+ optionMissingTooltip: string;
851
869
  timezoneLabel: string;
852
870
  recurrenceLabel: string;
853
871
  maxPaxLabel: string;
@@ -1198,10 +1216,16 @@ export declare const availabilityUiMessageDefinitions: {
1198
1216
  validationDateRequired: string;
1199
1217
  validationStartsAtRequired: string;
1200
1218
  validationTimezoneRequired: string;
1219
+ validationOptionRequired: string;
1220
+ validationOptionsUnavailable: string;
1201
1221
  editTitle: string;
1202
1222
  newTitle: string;
1203
1223
  productLabel: string;
1204
1224
  selectProductPlaceholder: string;
1225
+ optionLabel: string;
1226
+ selectOptionPlaceholder: string;
1227
+ noOption: string;
1228
+ defaultOptionSuffix: string;
1205
1229
  ruleLabel: string;
1206
1230
  optionalRulePlaceholder: string;
1207
1231
  noRule: string;
@@ -1337,6 +1361,9 @@ export declare const availabilityUiMessageDefinitions: {
1337
1361
  statusSoldOut: string;
1338
1362
  statusCancelled: string;
1339
1363
  productLabel: string;
1364
+ optionLabel: string;
1365
+ optionMissingLabel: string;
1366
+ optionMissingTooltip: string;
1340
1367
  timezoneLabel: string;
1341
1368
  recurrenceLabel: string;
1342
1369
  maxPaxLabel: string;
@@ -1686,10 +1713,16 @@ export declare const availabilityUiMessageDefinitions: {
1686
1713
  validationDateRequired: string;
1687
1714
  validationStartsAtRequired: string;
1688
1715
  validationTimezoneRequired: string;
1716
+ validationOptionRequired: string;
1717
+ validationOptionsUnavailable: string;
1689
1718
  editTitle: string;
1690
1719
  newTitle: string;
1691
1720
  productLabel: string;
1692
1721
  selectProductPlaceholder: string;
1722
+ optionLabel: string;
1723
+ selectOptionPlaceholder: string;
1724
+ noOption: string;
1725
+ defaultOptionSuffix: string;
1693
1726
  ruleLabel: string;
1694
1727
  optionalRulePlaceholder: string;
1695
1728
  noRule: string;
@@ -1825,6 +1858,9 @@ export declare const availabilityUiMessageDefinitions: {
1825
1858
  statusSoldOut: string;
1826
1859
  statusCancelled: string;
1827
1860
  productLabel: string;
1861
+ optionLabel: string;
1862
+ optionMissingLabel: string;
1863
+ optionMissingTooltip: string;
1828
1864
  timezoneLabel: string;
1829
1865
  recurrenceLabel: string;
1830
1866
  maxPaxLabel: string;
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/availability/i18n/provider.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,yBAAyB,EAIzB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EAEtB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,KAAK,wBAAwB,GAAG,CAAC,OAAO,yBAAyB,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,CAAA;AAErF,MAAM,MAAM,sBAAsB,GAAG,wBAAwB,GAAG;IAC9D,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAA;QACf,UAAU,EAAE,MAAM,CAAA;QAClB,WAAW,EAAE,MAAM,CAAA;QACnB,OAAO,EAAE;YACP,WAAW,EAAE,MAAM,CAAA;YACnB,UAAU,EAAE,MAAM,CAAA;YAClB,cAAc,EAAE,MAAM,CAAA;YACtB,OAAO,EAAE,MAAM,CAAA;YACf,WAAW,EAAE,MAAM,CAAA;YACnB,SAAS,EAAE,MAAM,CAAA;YACjB,MAAM,EAAE,MAAM,CAAA;YACd,QAAQ,EAAE,MAAM,CAAA;YAChB,KAAK,EAAE,MAAM,CAAA;YACb,kBAAkB,EAAE,MAAM,CAAA;SAC3B,CAAA;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,MAAM,CAAA;YACZ,OAAO,EAAE,MAAM,CAAA;YACf,MAAM,EAAE,MAAM,CAAA;YACd,SAAS,EAAE,MAAM,CAAA;YACjB,QAAQ,EAAE,MAAM,CAAA;SACjB,CAAA;KACF,CAAA;CACF,CAAA;AAwDD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGK,CAAA;AAElC,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGK,CAAA;AAIlC,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGe,CAAA;AAE5D,MAAM,MAAM,8BAA8B,GAAG,sBAAsB,CAAC,sBAAsB,CAAC,CAAA;AAU3F,wBAAgB,6BAA6B,CAAC,EAC5C,MAAM,EACN,SAAS,GACV,EAAE;IACD,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IACjC,SAAS,CAAC,EAAE,8BAA8B,GAAG,IAAI,CAAA;CAClD,0BAOA;AAED,wBAAgB,qBAAqB,CAAC,EACpC,MAAM,EACN,SAAS,GACV,EAAE;IACD,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IAClC,SAAS,CAAC,EAAE,8BAA8B,GAAG,IAAI,CAAA;CAClD,GAAG,gBAAgB,CAAC,sBAAsB,CAAC,CAU3C;AAED,wBAAgB,8BAA8B,CAAC,EAC7C,QAAQ,EACR,MAAM,EACN,SAAS,GACV,EAAE;IACD,QAAQ,EAAE,SAAS,CAAA;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IACjC,SAAS,CAAC,EAAE,8BAA8B,GAAG,IAAI,CAAA;CAClD,2CAWA;AAED,eAAO,MAAM,qBAAqB,gDAAgC,CAAA;AAClE,eAAO,MAAM,yBAAyB,8BAAoC,CAAA;AAE1E,wBAAgB,8BAA8B,6CAE7C;AAED,wBAAgB,kCAAkC,2BAEjD"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/availability/i18n/provider.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,yBAAyB,EAIzB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EAEtB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,KAAK,wBAAwB,GAAG,CAAC,OAAO,yBAAyB,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,CAAA;AAErF,MAAM,MAAM,sBAAsB,GAAG,wBAAwB,GAAG;IAC9D,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAA;QACf,UAAU,EAAE,MAAM,CAAA;QAClB,WAAW,EAAE,MAAM,CAAA;QACnB,OAAO,EAAE;YACP,WAAW,EAAE,MAAM,CAAA;YACnB,UAAU,EAAE,MAAM,CAAA;YAClB,cAAc,EAAE,MAAM,CAAA;YACtB,OAAO,EAAE,MAAM,CAAA;YACf,WAAW,EAAE,MAAM,CAAA;YACnB,SAAS,EAAE,MAAM,CAAA;YACjB,MAAM,EAAE,MAAM,CAAA;YACd,QAAQ,EAAE,MAAM,CAAA;YAChB,KAAK,EAAE,MAAM,CAAA;YACb,kBAAkB,EAAE,MAAM,CAAA;SAC3B,CAAA;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,MAAM,CAAA;YACZ,OAAO,EAAE,MAAM,CAAA;YACf,MAAM,EAAE,MAAM,CAAA;YACd,SAAS,EAAE,MAAM,CAAA;YACjB,QAAQ,EAAE,MAAM,CAAA;SACjB,CAAA;KACF,CAAA;CACF,CAAA;AAwDD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGK,CAAA;AAElC,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGK,CAAA;AAIlC,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGe,CAAA;AAE5D,MAAM,MAAM,8BAA8B,GAAG,sBAAsB,CAAC,sBAAsB,CAAC,CAAA;AAU3F,wBAAgB,6BAA6B,CAAC,EAC5C,MAAM,EACN,SAAS,GACV,EAAE;IACD,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IACjC,SAAS,CAAC,EAAE,8BAA8B,GAAG,IAAI,CAAA;CAClD,0BAOA;AAED,wBAAgB,qBAAqB,CAAC,EACpC,MAAM,EACN,SAAS,GACV,EAAE;IACD,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IAClC,SAAS,CAAC,EAAE,8BAA8B,GAAG,IAAI,CAAA;CAClD,GAAG,gBAAgB,CAAC,sBAAsB,CAAC,CAU3C;AAED,wBAAgB,8BAA8B,CAAC,EAC7C,QAAQ,EACR,MAAM,EACN,SAAS,GACV,EAAE;IACD,QAAQ,EAAE,SAAS,CAAA;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IACjC,SAAS,CAAC,EAAE,8BAA8B,GAAG,IAAI,CAAA;CAClD,2CAWA;AAED,eAAO,MAAM,qBAAqB,gDAAgC,CAAA;AAClE,eAAO,MAAM,yBAAyB,8BAAoC,CAAA;AAE1E,wBAAgB,8BAA8B,6CAE7C;AAED,wBAAgB,kCAAkC,2BAEjD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voyant-travel/operations-react",
3
- "version": "0.10.0",
3
+ "version": "0.12.0",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -248,9 +248,9 @@
248
248
  "sonner": "^2.0.7",
249
249
  "zod": "^4.0.0",
250
250
  "@voyant-travel/admin": "^0.114.0",
251
- "@voyant-travel/bookings-react": "^0.129.0",
252
- "@voyant-travel/operations": "^0.2.2",
253
- "@voyant-travel/inventory-react": "^0.11.0",
251
+ "@voyant-travel/bookings-react": "^0.131.0",
252
+ "@voyant-travel/operations": "^0.2.4",
253
+ "@voyant-travel/inventory-react": "^0.13.0",
254
254
  "@voyant-travel/ui": "^0.108.0"
255
255
  },
256
256
  "peerDependenciesMeta": {
@@ -280,7 +280,7 @@
280
280
  }
281
281
  },
282
282
  "dependencies": {
283
- "@voyant-travel/i18n": "^0.107.1",
283
+ "@voyant-travel/i18n": "^0.107.3",
284
284
  "@voyant-travel/react": "^0.104.1"
285
285
  },
286
286
  "devDependencies": {
@@ -297,10 +297,10 @@
297
297
  "vitest": "^4.1.2",
298
298
  "zod": "^4.3.6",
299
299
  "@voyant-travel/admin": "^0.114.0",
300
- "@voyant-travel/bookings-react": "^0.129.0",
301
- "@voyant-travel/i18n": "^0.107.1",
302
- "@voyant-travel/operations": "^0.2.2",
303
- "@voyant-travel/inventory-react": "^0.11.0",
300
+ "@voyant-travel/bookings-react": "^0.131.0",
301
+ "@voyant-travel/i18n": "^0.107.3",
302
+ "@voyant-travel/operations": "^0.2.4",
303
+ "@voyant-travel/inventory-react": "^0.13.0",
304
304
  "@voyant-travel/react": "^0.104.1",
305
305
  "@voyant-travel/ui": "^0.108.0",
306
306
  "@voyant-travel/voyant-typescript-config": "^0.1.0"