@loczer/storefront-sdk 0.154.0 → 0.155.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.
@@ -4,7 +4,7 @@ type BookingPeriodSelectorProps = BookingPeriodControllerOptions & {
4
4
  };
5
5
  export declare const BookingPeriodSelector: ({ className, ...options }: BookingPeriodSelectorProps) => import("react/jsx-runtime").JSX.Element;
6
6
  export { BookingPeriodProvider, useBookingPeriod } from './BookingPeriodContext';
7
- export type { BookingPeriodControllerOptions, BookingPeriodControllerValue, BookingPeriodLabels } from './useBookingPeriodController';
7
+ export type { BookingPeriodChangeMeta, BookingPeriodControllerOptions, BookingPeriodControllerValue, BookingPeriodLabels, BookingPeriodSelectionFlow, BookingPeriodTimeSlotsFetcher, BookingPeriodTranslator, } from './useBookingPeriodController';
8
8
  export { BookingStartDateField } from './components/BookingStartDateField';
9
9
  export { BookingStartTimeField } from './components/BookingStartTimeField';
10
10
  export { BookingEndDateField } from './components/BookingEndDateField';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/BookingPeriodSelector/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,8BAA8B,EAAE,MAAM,8BAA8B,CAAA;AAOlF,KAAK,0BAA0B,GAAG,8BAA8B,GAAG;IACjE,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,2BAA2B,0BAA0B,4CAa1F,CAAA;AAED,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAChF,YAAY,EAAE,8BAA8B,EAAE,4BAA4B,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AACrI,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAA;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAA;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/BookingPeriodSelector/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,8BAA8B,EAAE,MAAM,8BAA8B,CAAA;AAOlF,KAAK,0BAA0B,GAAG,8BAA8B,GAAG;IACjE,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,2BAA2B,0BAA0B,4CAa1F,CAAA;AAED,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAChF,YAAY,EACV,uBAAuB,EACvB,8BAA8B,EAC9B,4BAA4B,EAC5B,mBAAmB,EACnB,0BAA0B,EAC1B,6BAA6B,EAC7B,uBAAuB,GACxB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAA;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAA;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA"}
@@ -1,7 +1,12 @@
1
1
  import { Locale } from 'date-fns';
2
2
  import { HourPickerOption } from '@rpcbase/ui';
3
3
  import { BookingPeriodConfig } from '../../lib/booking-period';
4
- import { TimeSlot } from '../../lib/booking-period-time-slots';
4
+ import { JourneyType, TimeSlot } from '../../lib/booking-period-time-slots';
5
+ export type BookingPeriodChangeMeta = {
6
+ source: "user" | "auto";
7
+ };
8
+ export type BookingPeriodTranslator = (key: string, options?: Record<string, unknown>) => string;
9
+ export type BookingPeriodTimeSlotsFetcher = (date: string, journey: JourneyType) => Promise<TimeSlot[] | null>;
5
10
  export type BookingPeriodLabels = {
6
11
  startDate: string;
7
12
  pickStartDate: string;
@@ -17,15 +22,17 @@ export type BookingPeriodLabels = {
17
22
  count: number;
18
23
  }) => string;
19
24
  };
25
+ export type BookingPeriodSelectionFlow = "chained-times" | "dates-first";
20
26
  export interface BookingPeriodControllerOptions {
21
27
  startDate?: Date;
22
28
  onStartDateChange: (date?: Date) => void;
23
29
  startTime?: string;
24
- onStartTimeChange: (time: string) => void;
30
+ onStartTimeChange: (time: string, meta?: BookingPeriodChangeMeta) => void;
25
31
  endDate?: Date;
26
32
  onEndDateChange: (date?: Date) => void;
27
33
  endTime?: string;
28
- onEndTimeChange: (time: string) => void;
34
+ onEndTimeChange: (time: string, meta?: BookingPeriodChangeMeta) => void;
35
+ onEndDateCommit?: (date?: Date, endTime?: string) => void;
29
36
  onEndTimeCommit?: () => void;
30
37
  errors?: {
31
38
  startDate?: string;
@@ -33,10 +40,15 @@ export interface BookingPeriodControllerOptions {
33
40
  endDate?: string;
34
41
  endTime?: string;
35
42
  };
36
- labels: BookingPeriodLabels;
43
+ labels?: BookingPeriodLabels;
44
+ t?: BookingPeriodTranslator;
45
+ language?: string;
37
46
  labelClassName?: string;
38
47
  inputClassName?: string;
48
+ buttonClassName?: string;
39
49
  bookingPeriodConfig?: BookingPeriodConfig;
50
+ fetchTimeSlots?: BookingPeriodTimeSlotsFetcher;
51
+ selectionFlow?: BookingPeriodSelectionFlow;
40
52
  currencyCode?: string;
41
53
  disableAutomaticTimeCorrection?: boolean;
42
54
  openDatePickerOnFocus?: boolean;
@@ -52,13 +64,17 @@ export interface BookingPeriodControllerValue {
52
64
  endTime?: string;
53
65
  errors: NonNullable<BookingPeriodControllerOptions["errors"]>;
54
66
  labels: BookingPeriodLabels;
67
+ t: BookingPeriodTranslator;
68
+ language: string;
55
69
  labelClassName?: string;
56
70
  inputClassName?: string;
71
+ buttonClassName?: string;
57
72
  currencyCode: string;
58
73
  localeCode: string;
59
74
  slotIntervalMinutes: number;
60
75
  dateLocale: Locale;
61
76
  numberOfMonths: number;
77
+ isMobile: boolean;
62
78
  isHydrated: boolean;
63
79
  openDatePickerOnFocus: boolean;
64
80
  isStartDatePopoverOpen: boolean;
@@ -76,6 +92,7 @@ export interface BookingPeriodControllerValue {
76
92
  availableEndTimeSlots: TimeSlot[];
77
93
  isStartToday: boolean;
78
94
  isEndToday: boolean;
95
+ minSelectableDate: Date;
79
96
  earliestMinutesForToday: number | null;
80
97
  startMinutesValue: number | null;
81
98
  isSameDaySelection: boolean;
@@ -86,10 +103,14 @@ export interface BookingPeriodControllerValue {
86
103
  updateStartTime: (value: string) => void;
87
104
  selectStartDate: (date: Date | undefined, options?: {
88
105
  openTimePicker?: boolean;
106
+ openEndDatePicker?: boolean;
107
+ close?: boolean;
89
108
  }) => void;
90
109
  selectStartTime: (value: string) => void;
91
110
  selectEndDate: (date: Date | undefined, options?: {
92
111
  openTimePicker?: boolean;
112
+ close?: boolean;
113
+ commit?: boolean;
93
114
  }) => void;
94
115
  /**
95
116
  * Immediate committed update.
@@ -1 +1 @@
1
- {"version":3,"file":"useBookingPeriodController.d.ts","sourceRoot":"","sources":["../../../src/components/BookingPeriodSelector/useBookingPeriodController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useBookingPeriodController.d.ts","sourceRoot":"","sources":["../../../src/components/BookingPeriodSelector/useBookingPeriodController.ts"],"names":[],"mappings":"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"}
@@ -1,237 +1,389 @@
1
- import { useMemo as l, useState as O, useRef as q, useCallback as d, useEffect as P } from "react";
2
- import { differenceInCalendarDays as _ } from "date-fns";
3
- import { fr as ke, de as Fe, es as xe, it as He, enUS as Re } from "date-fns/locale";
4
- import { useMediaQuery as Ue } from "@rpcbase/client";
5
- import { parseTimeToMinutes as M, dateToBusinessDateString as Ae } from "../../lib/booking-period.js";
6
- import { getBookingPeriodTimeSlotsSync as Le } from "../../lib/booking-period-time-slots.js";
7
- const We = ({
8
- locale: u,
9
- localeCode: n
1
+ import { useMemo as d, useState as y, useRef as N, useCallback as h, useEffect as F } from "react";
2
+ import { differenceInCalendarDays as Te } from "date-fns";
3
+ import { fr as tt, de as nt, es as rt, it, enUS as st } from "date-fns/locale";
4
+ import { useMediaQuery as at } from "@rpcbase/client";
5
+ import { createBookingPeriodConstants as ot, parseTimeToMinutes as x, dateToBusinessDateString as lt, instantToBusinessDateTimeParts as ut, businessDateStringToDate as ct, getWeekdayFromDateString as ft, minutesToTimeString as dt } from "../../lib/booking-period.js";
6
+ import { getBookingPeriodTimeSlotsSync as mt } from "../../lib/booking-period-time-slots.js";
7
+ const St = (T) => T, Tt = {
8
+ startDate: "Start date",
9
+ pickStartDate: "Pick a date",
10
+ startTime: "Start time",
11
+ endDate: "End date",
12
+ pickEndDate: "Pick a date",
13
+ endTime: "End time"
14
+ }, Dt = ({
15
+ locale: T,
16
+ localeCode: r
10
17
  }) => {
11
- if (u)
12
- return u;
13
- const s = n?.toLowerCase() ?? "";
14
- return s.startsWith("fr") ? ke : s.startsWith("de") ? Fe : s.startsWith("es") ? xe : s.startsWith("it") ? He : Re;
15
- }, qe = (u) => {
16
- if (!u?.length)
18
+ if (T)
19
+ return T;
20
+ const i = r?.toLowerCase() ?? "";
21
+ return i.startsWith("fr") ? tt : i.startsWith("de") ? nt : i.startsWith("es") ? rt : i.startsWith("it") ? it : st;
22
+ }, pt = (T) => {
23
+ if (!T?.length)
17
24
  return null;
18
- const n = u.map((t) => M(t.value)).filter((t) => typeof t == "number").sort((t, C) => t - C);
19
- if (n.length < 2)
25
+ const r = T.map((n) => x(n.value)).filter((n) => typeof n == "number").sort((n, K) => n - K);
26
+ if (r.length < 2)
20
27
  return null;
21
- const s = n[1] - n[0];
22
- return !Number.isFinite(s) || s <= 0 ? null : s;
23
- }, Ne = (u) => {
24
- if (typeof u != "string")
28
+ const i = r[1] - r[0];
29
+ return !Number.isFinite(i) || i <= 0 ? null : i;
30
+ }, vt = (T) => {
31
+ if (typeof T != "string")
25
32
  return null;
26
- const n = u.match(/(\d{1,2}:\d{2})\s*-\s*(\d{1,2}:\d{2})/);
27
- return n ? M(n[2]) : null;
28
- }, ae = (u, n) => u.map((s) => {
29
- const t = M(s.value);
30
- if (t == null)
33
+ const r = T.match(/(\d{1,2}:\d{2})\s*-\s*(\d{1,2}:\d{2})/);
34
+ return r ? x(r[2]) : null;
35
+ }, we = (T, r) => T.map((i) => {
36
+ const n = x(i.value);
37
+ if (n == null)
31
38
  return null;
32
- const C = Ne(s.label) ?? t + n, o = typeof s.label == "string" ? s.label : s.value;
39
+ const K = vt(i.label) ?? n + r, m = typeof i.label == "string" ? i.label : i.value;
33
40
  return {
34
- value: s.value,
35
- label: o,
36
- startMinutes: t,
37
- endMinutes: C,
41
+ value: i.value,
42
+ label: m,
43
+ startMinutes: n,
44
+ endMinutes: K,
38
45
  isExtra: !1,
39
- isDisabled: !!s.disabled
46
+ isDisabled: !!i.disabled
40
47
  };
41
- }).filter((s) => !!s), Je = (u) => {
48
+ }).filter((i) => !!i), Ot = (T) => {
42
49
  const {
43
- startDate: n,
44
- onStartDateChange: s,
45
- startTime: t,
46
- onStartTimeChange: C,
47
- endDate: o,
48
- onEndDateChange: F,
49
- endTime: f,
50
- onEndTimeChange: c,
51
- onEndTimeCommit: x,
52
- errors: le = {},
53
- labels: ue,
54
- labelClassName: oe,
55
- inputClassName: fe,
56
- bookingPeriodConfig: a,
57
- currencyCode: ce = "EUR",
58
- disableAutomaticTimeCorrection: w = !1,
59
- openDatePickerOnFocus: de = !0,
60
- startTimeOptions: y = [],
61
- endTimeOptions: ee,
62
- locale: te,
63
- localeCode: N
64
- } = u, me = Ue("(max-width: 767px)"), Se = l(() => We({ locale: te, localeCode: N }), [te, N]), De = N ?? "en-US", b = l(() => a?.timing.slotIntervalMinutes ? a.timing.slotIntervalMinutes : qe(y) ?? 30, [a?.timing.slotIntervalMinutes, y]), [z, H] = O(!1), [$, Q] = O(!1), [V, R] = O(!1), [Z, j] = O(!1), [pe, G] = O(void 0), [ve, Te] = O(!1), [ne, Me] = O(!1), I = q(null), J = q(0), K = q(0), X = q(0), be = d(() => {
65
- G(void 0);
66
- }, []), U = l(() => !n || !o ? !1 : _(o, n) === 0, [n, o]), ge = l(() => M(t), [t]), D = l(
67
- () => !!n && _(n, /* @__PURE__ */ new Date()) === 0,
68
- [n]
69
- ), B = l(
70
- () => !!o && _(o, /* @__PURE__ */ new Date()) === 0,
71
- [o]
72
- ), re = l(() => {
73
- if (!D && !B) return null;
74
- const e = /* @__PURE__ */ new Date(), i = a?.timing.minBufferMinutes ?? 10;
75
- return e.setMinutes(e.getMinutes() + i), `${String(e.getHours()).padStart(2, "0")}:${String(e.getMinutes()).padStart(2, "0")}`;
76
- }, [a?.timing.minBufferMinutes, B, D]), p = l(() => M(re), [re]), Y = l(() => D ? p : null, [p, D]), se = l(() => {
77
- if (!a)
50
+ startDate: r,
51
+ onStartDateChange: i,
52
+ startTime: n,
53
+ onStartTimeChange: K,
54
+ endDate: m,
55
+ onEndDateChange: _,
56
+ endTime: o,
57
+ onEndTimeChange: De,
58
+ onEndDateCommit: Q,
59
+ onEndTimeCommit: V,
60
+ errors: Pe = {},
61
+ labels: Fe,
62
+ t: ke = St,
63
+ language: pe,
64
+ labelClassName: Ae,
65
+ inputClassName: Be,
66
+ buttonClassName: Ie,
67
+ bookingPeriodConfig: D,
68
+ fetchTimeSlots: s,
69
+ selectionFlow: C = "chained-times",
70
+ currencyCode: Le = "EUR",
71
+ disableAutomaticTimeCorrection: H = !1,
72
+ openDatePickerOnFocus: Re = !0,
73
+ startTimeOptions: U = [],
74
+ endTimeOptions: ve,
75
+ locale: he,
76
+ localeCode: xe
77
+ } = T, W = at("(max-width: 767px)"), Y = xe ?? pe ?? "en-US", Ke = d(
78
+ () => Dt({ locale: he, localeCode: Y }),
79
+ [he, Y]
80
+ ), E = d(
81
+ () => D ? ot(D) : null,
82
+ [D]
83
+ ), R = d(() => D?.timing.slotIntervalMinutes ? D.timing.slotIntervalMinutes : pt(U) ?? 30, [D?.timing.slotIntervalMinutes, U]), [ne, j] = y(!1), [re, ie] = y(!1), [se, z] = y(!1), [ae, oe] = y(!1), [He, le] = y(void 0), [Ue, We] = y(!1), [ge, ze] = y(!1), [Ee, Ne] = y([]), [be, G] = y([]), [J, q] = y(void 0), b = N(null), ue = N(0), ce = N(0), fe = N(0), Me = N(void 0), $ = N(void 0), qe = h(() => {
84
+ le(void 0);
85
+ }, []), X = d(() => !r || !m ? !1 : Te(m, r) === 0, [r, m]), $e = d(() => x(n), [n]), k = h(
86
+ (e) => {
87
+ const c = (e instanceof Date ? e : e ? new Date(e) : void 0) ?? /* @__PURE__ */ new Date();
88
+ if (E)
89
+ return lt(c, E.timeZone) ?? void 0;
90
+ const u = c.getFullYear(), v = String(c.getMonth() + 1).padStart(2, "0"), S = String(c.getDate()).padStart(2, "0");
91
+ return `${u}-${v}-${S}`;
92
+ },
93
+ [E]
94
+ ), A = d(() => k(r), [r, k]), l = d(() => k(m ?? r), [m, r, k]), ye = E ? ut(/* @__PURE__ */ new Date(), E.timeZone) : null, O = ye?.dateString, de = ye?.minutesFromMidnight, B = d(() => O ? !!(r && A && A === O) : !!r && Te(r, /* @__PURE__ */ new Date()) === 0, [r, A, O]), Z = d(() => O ? !!(m && l && l === O) : !!m && Te(m, /* @__PURE__ */ new Date()) === 0, [m, l, O]), Ze = d(() => {
95
+ if (O)
96
+ return ct(O);
97
+ const e = /* @__PURE__ */ new Date();
98
+ return e.setHours(0, 0, 0, 0), e;
99
+ }, [O]), me = D?.timing.minBufferMinutes ?? 10, I = d(() => {
100
+ if (!B && !Z)
101
+ return null;
102
+ if (de != null)
103
+ return de + me;
104
+ const e = /* @__PURE__ */ new Date();
105
+ return e.setMinutes(e.getMinutes() + me), e.getHours() * 60 + e.getMinutes();
106
+ }, [de, Z, B, me]), Se = d(
107
+ () => B ? I : null,
108
+ [I, B]
109
+ ), Ce = h(
110
+ (e) => {
111
+ if (!E)
112
+ return;
113
+ const t = k(e);
114
+ if (!t)
115
+ return E.defaultEndTime;
116
+ const c = ft(t), u = E.getLastStartMinutesForWeekday(c, {
117
+ dateString: t
118
+ });
119
+ return typeof u == "number" ? dt(u) : E.defaultEndTime;
120
+ },
121
+ [E, k]
122
+ );
123
+ F(() => {
124
+ if (!s || !A)
78
125
  return;
79
- const i = (n instanceof Date ? n : n ? new Date(n) : void 0) ?? /* @__PURE__ */ new Date();
80
- return Ae(i, a.timeZone) ?? void 0;
81
- }, [a, n]), A = l(() => a ? Le(a, {
82
- date: se
83
- }) : null, [a, se]), S = l(() => a ? A?.startTimeSlots ?? [] : ae(y, b), [a, A?.startTimeSlots, b, y]), g = l(() => a ? A?.endTimeSlots ?? [] : ae(ee ?? y, b), [a, A?.endTimeSlots, ee, b, y]), m = d(
84
- (e, i) => {
85
- Me(i === "user"), C(e);
126
+ let e = !0;
127
+ return s(A, "start").then((t) => {
128
+ e && t && Ne(t);
129
+ }).catch((t) => {
130
+ console.error("Failed to fetch availability time slots", t);
131
+ }), () => {
132
+ e = !1;
133
+ };
134
+ }, [s, A]), F(() => {
135
+ if (!s)
136
+ return;
137
+ const e = Me.current, t = e !== void 0 && e !== l;
138
+ Me.current = l, t && l && ($.current = l);
139
+ }, [l, s]), F(() => {
140
+ if (!s)
141
+ return;
142
+ if (!l) {
143
+ G([]), q(void 0);
144
+ return;
145
+ }
146
+ let e = !0;
147
+ return q(void 0), s(l, "end").then((t) => {
148
+ e && (t ? (G(t), q(l)) : (G([]), q(void 0)));
149
+ }).catch((t) => {
150
+ console.error("Failed to fetch availability time slots", t), e && (G([]), q(void 0));
151
+ }), () => {
152
+ e = !1;
153
+ };
154
+ }, [l, s]);
155
+ const ee = d(() => s || !D ? null : mt(D, {
156
+ date: A
157
+ }), [D, s, A]), w = d(() => s ? Ee : D ? ee?.startTimeSlots ?? [] : we(U, R), [
158
+ D,
159
+ ee?.startTimeSlots,
160
+ s,
161
+ Ee,
162
+ R,
163
+ U
164
+ ]), L = d(() => s ? J === l ? be : [] : D ? ee?.endTimeSlots ?? [] : we(ve ?? U, R), [
165
+ D,
166
+ ee?.endTimeSlots,
167
+ l,
168
+ ve,
169
+ s,
170
+ be,
171
+ J,
172
+ R,
173
+ U
174
+ ]), M = h(
175
+ (e, t) => {
176
+ e !== n && (ze(t === "user"), K(e, { source: t }));
177
+ },
178
+ [K, n]
179
+ ), p = h(
180
+ (e, t = "auto") => {
181
+ e !== o && De(e, { source: t });
86
182
  },
87
- [C]
88
- ), L = l(() => S.length ? S.find((e) => !(e.isDisabled || Y != null && e.startMinutes < Y)) ?? null : null, [Y, S]);
89
- P(() => {
90
- w || ne || L && t !== L.value && m(L.value, "auto");
91
- }, [w, L, ne, t, m]), P(() => {
92
- if (w || !S.length)
183
+ [o, De]
184
+ ), te = d(() => w.length ? w.find((e) => !(e.isDisabled || Se != null && e.startMinutes < Se)) ?? null : null, [Se, w]);
185
+ F(() => {
186
+ H || ge || te && n !== te.value && M(te.value, "auto");
187
+ }, [H, te, ge, n, M]), F(() => {
188
+ if (H || !w.length)
93
189
  return;
94
- const e = t ? S.find((r) => r.value === t) : void 0, i = p ?? void 0, k = D ? i : null, h = (r) => {
95
- const E = typeof r == "number" ? r : null, W = S.find((ie) => !(ie.isDisabled || E != null && ie.startMinutes < E));
96
- W && W.value !== t ? m(W.value, "auto") : !W && t && m("", "auto");
190
+ const e = n ? w.find((f) => f.value === n) : void 0, t = I ?? void 0, c = B ? t : null, u = (f) => {
191
+ const a = typeof f == "number" ? f : null, g = w.find((P) => !(P.isDisabled || a != null && P.startMinutes < a));
192
+ g && g.value !== n ? M(g.value, "auto") : !g && n && M("", "auto");
97
193
  };
98
- if (t && !e) {
99
- h(k);
194
+ if (n && !e) {
195
+ u(c);
100
196
  return;
101
197
  }
102
198
  if (e?.isDisabled) {
103
- h(k);
199
+ u(c);
104
200
  return;
105
201
  }
106
- if (!D || i == null)
202
+ if (!B || t == null)
107
203
  return;
108
- const v = M(t);
109
- if (v != null && v >= i && !e?.isDisabled)
204
+ const v = x(n);
205
+ if (v != null && v >= t && !e?.isDisabled)
110
206
  return;
111
- const T = S.find((r) => !r.isDisabled && r.startMinutes >= i);
112
- T && T.value !== t && m(T.value, "auto");
113
- }, [w, p, D, t, S, m]), P(() => {
114
- if (w || !g.length)
207
+ const S = w.find((f) => !f.isDisabled && f.startMinutes >= t);
208
+ S && S.value !== n && M(S.value, "auto");
209
+ }, [H, I, B, n, w, M]), F(() => {
210
+ if (H || !L.length)
115
211
  return;
116
- const e = M(t), i = M(f), k = f ? g.find((r) => r.value === f) : void 0;
117
- if (U && e != null && i != null && i < e) {
118
- const r = [...g].reverse().find((E) => !E.isDisabled);
119
- r && r.value !== f ? c(r.value) : !r && f && c("");
212
+ if (s && $.current === l && J === l) {
213
+ $.current = void 0;
214
+ const g = [...L].reverse().find((P) => !P.isDisabled);
215
+ if (g && g.value !== o) {
216
+ p(g.value);
217
+ return;
218
+ }
219
+ }
220
+ const e = x(n), t = x(o), c = o ? L.find((a) => a.value === o) : void 0;
221
+ if (X && e != null && t != null && t < e) {
222
+ const a = [...L].reverse().find((g) => !g.isDisabled);
223
+ a && a.value !== o ? p(a.value) : !a && o && p("");
120
224
  return;
121
225
  }
122
- const h = [];
123
- B && p != null && h.push(p), U && e != null && h.push(e + b);
124
- const v = h.length ? Math.max(...h) : null;
125
- if (k?.isDisabled) {
126
- const r = g.find((E) => !(E.isDisabled || v != null && E.startMinutes < v));
127
- r && r.value !== f ? c(r.value) : !r && f && c("");
226
+ const u = [];
227
+ Z && I != null && u.push(I), X && e != null && u.push(e + R);
228
+ const v = u.length ? Math.max(...u) : null, S = (a) => {
229
+ const g = typeof a == "number" ? a : null, P = L.find((Oe) => !(Oe.isDisabled || g != null && Oe.startMinutes < g));
230
+ P && P.value !== o ? p(P.value) : !P && o && p("");
231
+ };
232
+ if (s && o && !c) {
233
+ S(v);
128
234
  return;
129
235
  }
130
- if (v == null || i != null && i >= v)
236
+ if (c?.isDisabled) {
237
+ S(v);
131
238
  return;
132
- const T = g.find((r) => !r.isDisabled && r.startMinutes >= v);
133
- T && T.value !== f ? c(T.value) : !T && f && c("");
239
+ }
240
+ if (v == null || t != null && t >= v)
241
+ return;
242
+ const f = L.find((a) => !a.isDisabled && a.startMinutes >= v);
243
+ f && f.value !== o ? p(f.value) : !f && o && p("");
134
244
  }, [
135
- g,
136
- w,
137
- p,
138
- f,
139
- B,
140
- U,
141
- c,
142
- b,
143
- t
144
- ]), P(() => (Te(!0), () => {
145
- I.current != null && clearTimeout(I.current);
146
- }), []), P(() => {
147
- $ && z && H(!1);
148
- }, [z, $]), P(() => {
149
- Z && V && R(!1);
150
- }, [V, Z]);
151
- const he = d((e) => {
152
- e && J.current && Date.now() < J.current || H(e);
153
- }, []), Ee = d((e) => {
154
- e && K.current && Date.now() < K.current || R(e);
155
- }, []), Oe = d((e) => {
156
- e && X.current && Date.now() < X.current || j(e);
157
- }, []), Ce = d(
158
- (e, { openTimePicker: i = !0 } = {}) => {
245
+ L,
246
+ H,
247
+ I,
248
+ l,
249
+ o,
250
+ s,
251
+ J,
252
+ Z,
253
+ X,
254
+ R,
255
+ n,
256
+ p
257
+ ]), F(() => (We(!0), () => {
258
+ b.current != null && clearTimeout(b.current);
259
+ }), []), F(() => {
260
+ re && ne && j(!1);
261
+ }, [ne, re]), F(() => {
262
+ ae && se && z(!1);
263
+ }, [se, ae]);
264
+ const _e = h((e) => {
265
+ e && ue.current && Date.now() < ue.current || j(e);
266
+ }, []), Qe = h((e) => {
267
+ e && ce.current && Date.now() < ce.current || z(e);
268
+ }, []), Ve = h((e) => {
269
+ e && fe.current && Date.now() < fe.current || oe(e);
270
+ }, []), Ye = h(
271
+ (e, {
272
+ openTimePicker: t,
273
+ openEndDatePicker: c,
274
+ close: u = !0
275
+ } = {}) => {
276
+ const v = t ?? C === "chained-times", S = c ?? C === "dates-first";
159
277
  if (!e) {
160
- H(!1);
278
+ u && j(!1);
161
279
  return;
162
280
  }
163
- s(e), J.current = Date.now() + 250, H(!1), o && e > o && F(e), i && Q(!0);
281
+ i(e), (u || S) && (ue.current = Date.now() + 250, j(!1)), m && e > m && _(e), v && ie(!0), S && (b.current != null && clearTimeout(b.current), W ? (z(!0), b.current = null) : b.current = setTimeout(() => {
282
+ z(!0);
283
+ }, 100));
164
284
  },
165
- [s, o, F]
166
- ), we = d(
285
+ [m, W, _, i, C]
286
+ ), je = h(
167
287
  (e) => {
168
- m(e, "user"), Q(!1), I.current != null && clearTimeout(I.current), e && n ? I.current = setTimeout(() => {
169
- R(!0);
170
- }, 100) : I.current = null;
288
+ M(e, "user"), ie(!1), b.current != null && clearTimeout(b.current), C === "chained-times" && e && r ? b.current = setTimeout(() => {
289
+ z(!0);
290
+ }, 100) : b.current = null;
171
291
  },
172
- [n, m]
173
- ), ye = d(
292
+ [C, r, M]
293
+ ), Ge = h(
174
294
  (e) => {
175
- e && e !== t && m(e, "user");
295
+ e && e !== n && M(e, "user");
176
296
  },
177
- [t, m]
178
- ), Ie = d(
179
- (e, { openTimePicker: i = !0 } = {}) => {
180
- F(e), G(void 0), K.current = Date.now() + 250, R(!1), e && i && j(!0);
297
+ [n, M]
298
+ ), Je = h(
299
+ (e, {
300
+ openTimePicker: t,
301
+ close: c = !0,
302
+ commit: u = C === "dates-first" ? W : !1
303
+ } = {}) => {
304
+ const v = t ?? C === "chained-times";
305
+ let S = o;
306
+ if (e && C === "dates-first") {
307
+ if (s) {
308
+ const a = k(e);
309
+ a && ($.current = a);
310
+ }
311
+ const f = Ce(e);
312
+ f && (S = f, p(f));
313
+ }
314
+ _(e), le(void 0), c && (ce.current = Date.now() + 250, z(!1)), e && v && oe(!0), e && u && Q && (typeof window > "u" ? Q(e, S) : requestAnimationFrame(() => Q(e, S)));
315
+ },
316
+ [
317
+ o,
318
+ s,
319
+ Ce,
320
+ W,
321
+ _,
322
+ Q,
323
+ C,
324
+ k,
325
+ p
326
+ ]
327
+ ), Xe = h(
328
+ (e) => {
329
+ p(e, "user");
181
330
  },
182
- [F]
183
- ), Pe = d((e) => {
184
- c(e);
185
- }, [c]), Be = d(
331
+ [p]
332
+ ), et = h(
186
333
  (e) => {
187
- c(e), X.current = Date.now() + 250, j(!1), x && (typeof window > "u" ? x() : requestAnimationFrame(() => {
188
- requestAnimationFrame(x);
334
+ $.current = void 0, p(e, "user"), fe.current = Date.now() + 250, oe(!1), V && (typeof window > "u" ? V() : requestAnimationFrame(() => {
335
+ requestAnimationFrame(V);
189
336
  }));
190
337
  },
191
- [c, x]
338
+ [V, p]
192
339
  );
193
340
  return {
194
- startDate: n,
195
- startTime: t,
196
- endDate: o,
197
- endTime: f,
198
- errors: le,
199
- labels: ue,
200
- labelClassName: oe,
201
- inputClassName: fe,
202
- currencyCode: ce,
203
- localeCode: De,
204
- slotIntervalMinutes: b,
205
- dateLocale: Se,
206
- numberOfMonths: me ? 1 : 2,
207
- isHydrated: ve,
208
- openDatePickerOnFocus: de,
209
- isStartDatePopoverOpen: z,
210
- setIsStartDatePopoverOpen: he,
211
- isStartTimeSelectOpen: $,
212
- setIsStartTimeSelectOpen: Q,
213
- isEndDatePopoverOpen: V,
214
- setIsEndDatePopoverOpen: Ee,
215
- isEndTimeSelectOpen: Z,
216
- setIsEndTimeSelectOpen: Oe,
217
- hoveredEndDate: pe,
218
- setHoveredEndDate: G,
219
- resetHoveredEndDate: be,
220
- startTimeSlots: S,
221
- availableEndTimeSlots: g,
222
- isStartToday: D,
223
- isEndToday: B,
224
- earliestMinutesForToday: p,
225
- startMinutesValue: ge,
226
- isSameDaySelection: U,
227
- updateStartTime: ye,
228
- selectStartDate: Ce,
229
- selectStartTime: we,
230
- selectEndDate: Ie,
231
- updateEndTime: Pe,
232
- selectEndTime: Be
341
+ startDate: r,
342
+ startTime: n,
343
+ endDate: m,
344
+ endTime: o,
345
+ errors: Pe,
346
+ labels: Fe ?? Tt,
347
+ t: ke,
348
+ language: pe ?? Y,
349
+ labelClassName: Ae,
350
+ inputClassName: Be,
351
+ buttonClassName: Ie,
352
+ currencyCode: Le,
353
+ localeCode: Y,
354
+ slotIntervalMinutes: R,
355
+ dateLocale: Ke,
356
+ numberOfMonths: W ? 1 : 2,
357
+ isMobile: W,
358
+ isHydrated: Ue,
359
+ openDatePickerOnFocus: Re,
360
+ isStartDatePopoverOpen: ne,
361
+ setIsStartDatePopoverOpen: _e,
362
+ isStartTimeSelectOpen: re,
363
+ setIsStartTimeSelectOpen: ie,
364
+ isEndDatePopoverOpen: se,
365
+ setIsEndDatePopoverOpen: Qe,
366
+ isEndTimeSelectOpen: ae,
367
+ setIsEndTimeSelectOpen: Ve,
368
+ hoveredEndDate: He,
369
+ setHoveredEndDate: le,
370
+ resetHoveredEndDate: qe,
371
+ startTimeSlots: w,
372
+ availableEndTimeSlots: L,
373
+ isStartToday: B,
374
+ isEndToday: Z,
375
+ minSelectableDate: Ze,
376
+ earliestMinutesForToday: I,
377
+ startMinutesValue: $e,
378
+ isSameDaySelection: X,
379
+ updateStartTime: Ge,
380
+ selectStartDate: Ye,
381
+ selectStartTime: je,
382
+ selectEndDate: Je,
383
+ updateEndTime: Xe,
384
+ selectEndTime: et
233
385
  };
234
386
  };
235
387
  export {
236
- Je as useBookingPeriodController
388
+ Ot as useBookingPeriodController
237
389
  };
package/dist/index.d.ts CHANGED
@@ -586,6 +586,10 @@ declare type BookingFlowStepsProps = {
586
586
 
587
587
  export declare type BookingFulfillment = "pickup" | "delivery";
588
588
 
589
+ export declare type BookingPeriodChangeMeta = {
590
+ source: "user" | "auto";
591
+ };
592
+
589
593
  declare type BookingPeriodConfig = {
590
594
  timing: BookingTimingConfig;
591
595
  openingHours: StoreOpeningHours;
@@ -598,11 +602,12 @@ export declare interface BookingPeriodControllerOptions {
598
602
  startDate?: Date;
599
603
  onStartDateChange: (date?: Date) => void;
600
604
  startTime?: string;
601
- onStartTimeChange: (time: string) => void;
605
+ onStartTimeChange: (time: string, meta?: BookingPeriodChangeMeta) => void;
602
606
  endDate?: Date;
603
607
  onEndDateChange: (date?: Date) => void;
604
608
  endTime?: string;
605
- onEndTimeChange: (time: string) => void;
609
+ onEndTimeChange: (time: string, meta?: BookingPeriodChangeMeta) => void;
610
+ onEndDateCommit?: (date?: Date, endTime?: string) => void;
606
611
  onEndTimeCommit?: () => void;
607
612
  errors?: {
608
613
  startDate?: string;
@@ -610,10 +615,15 @@ export declare interface BookingPeriodControllerOptions {
610
615
  endDate?: string;
611
616
  endTime?: string;
612
617
  };
613
- labels: BookingPeriodLabels;
618
+ labels?: BookingPeriodLabels;
619
+ t?: BookingPeriodTranslator;
620
+ language?: string;
614
621
  labelClassName?: string;
615
622
  inputClassName?: string;
623
+ buttonClassName?: string;
616
624
  bookingPeriodConfig?: BookingPeriodConfig;
625
+ fetchTimeSlots?: BookingPeriodTimeSlotsFetcher;
626
+ selectionFlow?: BookingPeriodSelectionFlow;
617
627
  currencyCode?: string;
618
628
  disableAutomaticTimeCorrection?: boolean;
619
629
  openDatePickerOnFocus?: boolean;
@@ -630,13 +640,17 @@ export declare interface BookingPeriodControllerValue {
630
640
  endTime?: string;
631
641
  errors: NonNullable<BookingPeriodControllerOptions["errors"]>;
632
642
  labels: BookingPeriodLabels;
643
+ t: BookingPeriodTranslator;
644
+ language: string;
633
645
  labelClassName?: string;
634
646
  inputClassName?: string;
647
+ buttonClassName?: string;
635
648
  currencyCode: string;
636
649
  localeCode: string;
637
650
  slotIntervalMinutes: number;
638
651
  dateLocale: Locale;
639
652
  numberOfMonths: number;
653
+ isMobile: boolean;
640
654
  isHydrated: boolean;
641
655
  openDatePickerOnFocus: boolean;
642
656
  isStartDatePopoverOpen: boolean;
@@ -654,6 +668,7 @@ export declare interface BookingPeriodControllerValue {
654
668
  availableEndTimeSlots: TimeSlot[];
655
669
  isStartToday: boolean;
656
670
  isEndToday: boolean;
671
+ minSelectableDate: Date;
657
672
  earliestMinutesForToday: number | null;
658
673
  startMinutesValue: number | null;
659
674
  isSameDaySelection: boolean;
@@ -664,10 +679,14 @@ export declare interface BookingPeriodControllerValue {
664
679
  updateStartTime: (value: string) => void;
665
680
  selectStartDate: (date: Date | undefined, options?: {
666
681
  openTimePicker?: boolean;
682
+ openEndDatePicker?: boolean;
683
+ close?: boolean;
667
684
  }) => void;
668
685
  selectStartTime: (value: string) => void;
669
686
  selectEndDate: (date: Date | undefined, options?: {
670
687
  openTimePicker?: boolean;
688
+ close?: boolean;
689
+ commit?: boolean;
671
690
  }) => void;
672
691
  /**
673
692
  * Immediate committed update.
@@ -704,12 +723,18 @@ declare type BookingPeriodProviderProps = BookingPeriodControllerOptions & {
704
723
  children: ReactNode;
705
724
  };
706
725
 
726
+ export declare type BookingPeriodSelectionFlow = "chained-times" | "dates-first";
727
+
707
728
  export declare const BookingPeriodSelector: ({ className, ...options }: BookingPeriodSelectorProps) => JSX.Element;
708
729
 
709
730
  declare type BookingPeriodSelectorProps = BookingPeriodControllerOptions & {
710
731
  className?: string;
711
732
  };
712
733
 
734
+ export declare type BookingPeriodTimeSlotsFetcher = (date: string, journey: JourneyType) => Promise<TimeSlot[] | null>;
735
+
736
+ export declare type BookingPeriodTranslator = (key: string, options?: Record<string, unknown>) => string;
737
+
713
738
  export declare type BookingScheduleInput = z.infer<typeof bookingScheduleInputSchema>;
714
739
 
715
740
  export declare const bookingScheduleInputSchema: z.ZodObject<{
@@ -1682,6 +1707,8 @@ export declare function isProductVariantCodeIdentifierKind(kind: string): boolea
1682
1707
 
1683
1708
  export declare const isStorefrontAvailabilityInsufficient: (record: StorefrontPublicAvailabilityRecord | undefined) => boolean;
1684
1709
 
1710
+ declare type JourneyType = "start" | "end";
1711
+
1685
1712
  export declare const Label: React_2.ForwardRefExoticComponent<React_2.LabelHTMLAttributes<HTMLLabelElement> & VariantProps<(props?: ClassProp | undefined) => string> & React_2.RefAttributes<HTMLLabelElement>>;
1686
1713
 
1687
1714
  export declare function Layout({ storefrontConfiguration }: LayoutProps): JSX.Element;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loczer/storefront-sdk",
3
- "version": "0.154.0",
3
+ "version": "0.155.0",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "registry": "https://registry.npmjs.org/"