@pisell/private-materials 6.11.655 → 6.11.656

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.
@@ -619,4 +619,4 @@ function showDiscountScanFailMessage(val, scene = "goodpass", locales) {
619
619
  return scene === "goodpass" ? locales.getText("pisell2.text.goodpass.code-invalid-cart") : locales.getText("pisell2.voucher.code-invalid-cart");
620
620
  }
621
621
  //#endregion
622
- export { deleteCacheParams, findNextDuration, flexibleObj, formatProductListByCategory, formatResource, getCacheParams, getDays, getDiscountTime, getDiscountTimeByDayMinutes, getDuration, getEndDate, getErrorList, getIsEdit, getIsEject, getIsOnlySession, getLastServer, getMainPrice, getNowTime, getProductTotalPrice, getServeStartTime, getServerItemExtend, getServiceTime, getServiceTimes, getShopOpeningHours, isNowTime, isSessionProduct, isWalkIn, request, showDiscountScanFailMessage, sliceDayIntoFiveMinutes };
622
+ export { deleteCacheParams, findNextDuration, flexibleObj, formatProductListByCategory, formatResource, getCacheParams, getDays, getDiscountTime, getDiscountTimeByDayMinutes, getDuration, getEndDate, getErrorList, getIsEdit, getIsEject, getIsOnlySession, getLastServer, getMainPrice, getNowTime, getProductTotalPrice, getServeStartTime, getServerItemExtend, getServiceTime, getServiceTimes, isNowTime, isSessionProduct, isWalkIn, request, showDiscountScanFailMessage, sliceDayIntoFiveMinutes };
@@ -2,7 +2,7 @@ import { _objectSpread2 } from "../../../../../_virtual/_@oxc-project_runtime@0.
2
2
  import { _asyncToGenerator } from "../../../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/asyncToGenerator.js";
3
3
  import { getDurationProps, getTimeObj } from "../../../../../components/booking/info2/service/addService/utils.js";
4
4
  import { isNormalProductByDurationSchedule } from "../../../../../components/booking/info/service2/utils.js";
5
- import { getDiscountTime, getServiceTimes, getShopOpeningHours, isSessionProduct } from "../../../../../components/booking/utils.js";
5
+ import { getDiscountTime, getServiceTimes, isSessionProduct } from "../../../../../components/booking/utils.js";
6
6
  import Duration from "../../../../../components/booking/materiels/duration/index.js";
7
7
  import SkuDetailLoadingPanel from "../../../LoadingPanel.js";
8
8
  import { selectionFlowText } from "../../i18n.js";
@@ -10,7 +10,7 @@ import { buildDraftCacheItem, getModuleOptions, getUnsupportedBookingFlowReason,
10
10
  import TimeResourceSelector from "../../../../../components/eventBooking/components/timeResourceSelector/index.js";
11
11
  import { resolveAvailabilityStatus } from "../../../../../components/eventBooking/components/bookingAvailabilityCalendar/utils.js";
12
12
  import { validateAvailabilityTimeAutoResolution } from "../autoResolution.js";
13
- import { getAvailabilityCandidateDurationMinutes, getPosFlexibleDurationPresetCandidates, getSessionPresetCandidates, isFlexibleDurationValue, isSameAvailabilityCandidateRange, resolvePosCustomTimeBaseMinutes, resolvePosCustomTimeCandidate, resolvePosCustomTimeDefaultDurationMinutes, resolvePosCustomTimeDefaultStartTime, resolvePosFlexibleBusinessDurationMinutes, resolvePosFlexibleDurationInitialCandidate, shouldShowPosCustomTimeCandidateCards } from "./posCustomTime.js";
13
+ import { getAvailabilityCandidateDurationMinutes, getPosFlexibleDurationPresetCandidates, getSessionPresetCandidates, isFlexibleDurationValue, isSameAvailabilityCandidateRange, resolvePosCustomTimeBaseMinutes, resolvePosCustomTimeCandidate, resolvePosCustomTimeDefaultDurationMinutes, resolvePosCustomTimeDefaultStartTime, resolvePosFlexibleBusinessDurationMinutes, resolvePosFlexibleDurationInitialCandidate, shouldResetPosFlexibleTimeForDate, shouldShowPosCustomTimeCandidateCards } from "./posCustomTime.js";
14
14
  import dayjs from "dayjs";
15
15
  import React, { useEffect, useMemo } from "react";
16
16
  import { Alert, Space } from "antd";
@@ -174,6 +174,7 @@ const refreshAvailabilityTimes = function() {
174
174
  const requestedStartTime = getAvailabilityStartTimeOverride(context, startTimeOverride);
175
175
  const selectedDate = context.draft.booking.startDate.format("YYYY-MM-DD");
176
176
  const requestId = Date.now() + Math.random();
177
+ const previousTimeData = context.getModuleData(module.key);
177
178
  const posCustomTimeHydrationKey = posCustomTimeAvailability && requestedDuration && requestedStartTime ? `${selectedDate}|${requestedStartTime}|${requestedDuration}` : void 0;
178
179
  context.setModuleData(module.key, {
179
180
  requestId,
@@ -191,13 +192,14 @@ const refreshAvailabilityTimes = function() {
191
192
  const candidates = (group === null || group === void 0 ? void 0 : group.ranges) || [];
192
193
  const product = context.draft.productData;
193
194
  if (posDurationAvailability && selectionIntent === "restore" && isFlexibleDurationValue(product === null || product === void 0 ? void 0 : product.duration)) {
194
- var _context$hostContext, _moduleOptions$slice, _normalizeDurationMin3;
195
+ var _context$hostContext, _moduleOptions$slice, _context$draft$bookin2, _normalizeDurationMin3;
195
196
  const moduleOptions = getModuleOptions(module);
196
197
  const configuredSlice = (_context$hostContext = context.hostContext) === null || _context$hostContext === void 0 || (_context$hostContext = _context$hostContext.bookingConfig) === null || _context$hostContext === void 0 || (_context$hostContext = _context$hostContext.config) === null || _context$hostContext === void 0 || (_context$hostContext = _context$hostContext.basic) === null || _context$hostContext === void 0 ? void 0 : _context$hostContext.service_time;
197
198
  const fallbackSlice = (_moduleOptions$slice = moduleOptions.slice) !== null && _moduleOptions$slice !== void 0 ? _moduleOptions$slice : typeof configuredSlice === "object" ? configuredSlice === null || configuredSlice === void 0 ? void 0 : configuredSlice.value : configuredSlice;
198
199
  const baseDurationMinutes = resolvePosCustomTimeBaseMinutes(group === null || group === void 0 ? void 0 : group.slotStepMinutes, fallbackSlice);
199
- const nextStartTime = resolvePosCustomTimeDefaultStartTime(context.draft.booking.startTime, baseDurationMinutes);
200
- const nextDuration = resolvePosCustomTimeDefaultDurationMinutes((_normalizeDurationMin3 = normalizeDurationMinutesValue(context.draft.booking.duration)) !== null && _normalizeDurationMin3 !== void 0 ? _normalizeDurationMin3 : context.draft.booking.duration, baseDurationMinutes, context.services.selectionFlowMode === "edit" ? void 0 : resolvePosFlexibleBusinessDurationMinutes(nextStartTime, getShopOpeningHours()));
200
+ const resetForSelectedDate = shouldResetPosFlexibleTimeForDate((_context$draft$bookin2 = context.draft.booking.selectedCandidate) !== null && _context$draft$bookin2 !== void 0 ? _context$draft$bookin2 : previousTimeData === null || previousTimeData === void 0 ? void 0 : previousTimeData.selectedCandidate, selectedDate);
201
+ const nextStartTime = resolvePosCustomTimeDefaultStartTime(resetForSelectedDate ? null : context.draft.booking.startTime, baseDurationMinutes);
202
+ const nextDuration = resolvePosCustomTimeDefaultDurationMinutes(resetForSelectedDate ? product === null || product === void 0 ? void 0 : product.duration : (_normalizeDurationMin3 = normalizeDurationMinutesValue(context.draft.booking.duration)) !== null && _normalizeDurationMin3 !== void 0 ? _normalizeDurationMin3 : context.draft.booking.duration, baseDurationMinutes, context.services.selectionFlowMode === "edit" ? void 0 : resolvePosFlexibleBusinessDurationMinutes(nextStartTime, (group === null || group === void 0 ? void 0 : group.operatingEndAt) ? dayjs(group.operatingEndAt).format("HH:mm") : void 0));
201
203
  const changedFields = [];
202
204
  if (nextStartTime !== context.draft.booking.startTime) changedFields.push("booking.startTime");
203
205
  if (nextDuration !== context.draft.booking.duration) changedFields.push("booking.duration");
@@ -280,7 +282,7 @@ const refreshAvailabilityTimes = function() {
280
282
  const normallySelectableCandidates = times.filter((candidate) => isAvailabilityCandidateSelectable(candidate));
281
283
  const selectableCandidates = normallySelectableCandidates.length > 0 || !allowUnavailable ? normallySelectableCandidates : times;
282
284
  const shouldPreserveRequestedPosStart = posCustomTimeAvailability && Boolean(requestedPosStartTime && requestedPosDuration);
283
- const displayCandidates = posSessionAvailability ? getSessionPresetCandidates(times) : posDurationAvailability && isFlexibleDurationValue(product === null || product === void 0 ? void 0 : product.duration) ? getPosFlexibleDurationPresetCandidates(times, requestedCustomRange, customSelectionIntent) : times;
285
+ const displayCandidates = posSessionAvailability ? getSessionPresetCandidates(times) : posDurationAvailability && isFlexibleDurationValue(product === null || product === void 0 ? void 0 : product.duration) ? getPosFlexibleDurationPresetCandidates(times, requestedCustomRange, customSelectionIntent, Boolean(!customSelectionIntent && existingCandidate && existingCandidate.date === selectedDate && (previousTimeData === null || previousTimeData === void 0 ? void 0 : previousTimeData.timeSlots.some((slot) => String(slot.id) === String(existingCandidate.key))))) : times;
284
286
  const fallbackCandidate = shouldPreserveRequestedPosStart ? void 0 : selectableCandidates[0];
285
287
  const preferPosFlexiblePreset = posDurationAvailability && isFlexibleDurationValue(product === null || product === void 0 ? void 0 : product.duration) && !customSelectionIntent && context.services.selectionFlowMode !== "edit" && (selectionIntent === "fallback" || !existingCandidate || existingCandidate.date !== selectedDate);
286
288
  const initialCandidate = posDurationAvailability && isFlexibleDurationValue(product === null || product === void 0 ? void 0 : product.duration) ? resolvePosFlexibleDurationInitialCandidate({
@@ -594,12 +596,12 @@ const TimeFlowModuleComponent = ({ context, module, registerHandle }) => {
594
596
  return () => registerHandle === null || registerHandle === void 0 ? void 0 : registerHandle(null);
595
597
  }, [handle, registerHandle]);
596
598
  useEffect(() => {
597
- var _context$draft$bookin2;
599
+ var _context$draft$bookin3;
598
600
  if (!usePosCustomTimeAvailability || !availability) return;
599
601
  if (!startTime || !hasDurationValue(duration)) return;
600
602
  if (availabilityData === null || availabilityData === void 0 ? void 0 : availabilityData.selectedCandidate) return;
601
603
  if (moduleStatus === "loading") return;
602
- const selectedDate = (_context$draft$bookin2 = context.draft.booking.startDate) === null || _context$draft$bookin2 === void 0 ? void 0 : _context$draft$bookin2.format("YYYY-MM-DD");
604
+ const selectedDate = (_context$draft$bookin3 = context.draft.booking.startDate) === null || _context$draft$bookin3 === void 0 ? void 0 : _context$draft$bookin3.format("YYYY-MM-DD");
603
605
  const requestedDuration = getAvailabilityDurationOverride(context);
604
606
  const requestedStartTime = getAvailabilityStartTimeOverride(context);
605
607
  if (!selectedDate || !requestedDuration || !requestedStartTime) return;
@@ -41,6 +41,7 @@ const resolvePosFlexibleBusinessDurationMinutes = (startTime, closingTime) => {
41
41
  const duration = closingMinute > startMinute ? closingMinute - startMinute : closingMinute < startMinute ? closingMinute + 1440 - startMinute : 0;
42
42
  return duration > 0 ? duration : null;
43
43
  };
44
+ const shouldResetPosFlexibleTimeForDate = (candidate, selectedDate) => Boolean(candidate && candidate.date !== selectedDate);
44
45
  const resolvePosCustomTimeDefaultDurationMinutes = (currentValue, baseDurationMinutes, flexibleDefaultMinutes) => {
45
46
  if (isFlexibleDurationValue(currentValue)) {
46
47
  const flexibleMinutes = Number(flexibleDefaultMinutes);
@@ -72,10 +73,10 @@ const resolvePosCustomTimeCandidate = (params) => {
72
73
  return params.restoredDraftCandidate || params.restoredExistingCandidate || params.fallbackCandidate;
73
74
  };
74
75
  const getSessionPresetCandidates = (candidates) => candidates.filter((candidate) => candidate.source === "session_schedule");
75
- const getPosFlexibleDurationPresetCandidates = (candidates, requestedCustomRange, customSelectionIntent = false) => {
76
+ const getPosFlexibleDurationPresetCandidates = (candidates, requestedCustomRange, customSelectionIntent = false, preserveRequestedRange = false) => {
76
77
  if (!requestedCustomRange) return [...candidates];
77
- const presets = candidates.filter((candidate) => !isSameAvailabilityCandidateRange(candidate, requestedCustomRange));
78
- return presets.length > 0 || customSelectionIntent ? presets : [...candidates];
78
+ if (preserveRequestedRange && !customSelectionIntent) return [...candidates];
79
+ return candidates.filter((candidate) => !isSameAvailabilityCandidateRange(candidate, requestedCustomRange));
79
80
  };
80
81
  const resolvePosFlexibleDurationInitialCandidate = (params) => {
81
82
  const firstAvailablePreset = params.presetCandidates.find((candidate) => (!candidate.status || candidate.status === "available" || candidate.status === "limited") && !(typeof candidate.maxPartySize === "number" && candidate.maxPartySize <= 0));
@@ -83,4 +84,4 @@ const resolvePosFlexibleDurationInitialCandidate = (params) => {
83
84
  return params.restoredCandidate || params.fallbackCandidate;
84
85
  };
85
86
  //#endregion
86
- export { getAvailabilityCandidateDurationMinutes, getPosFlexibleDurationPresetCandidates, getSessionPresetCandidates, isFlexibleDurationValue, isSameAvailabilityCandidateRange, resolvePosCustomTimeBaseMinutes, resolvePosCustomTimeCandidate, resolvePosCustomTimeDefaultDurationMinutes, resolvePosCustomTimeDefaultStartTime, resolvePosFlexibleBusinessDurationMinutes, resolvePosFlexibleDurationInitialCandidate, shouldShowPosCustomTimeCandidateCards };
87
+ export { getAvailabilityCandidateDurationMinutes, getPosFlexibleDurationPresetCandidates, getSessionPresetCandidates, isFlexibleDurationValue, isSameAvailabilityCandidateRange, resolvePosCustomTimeBaseMinutes, resolvePosCustomTimeCandidate, resolvePosCustomTimeDefaultDurationMinutes, resolvePosCustomTimeDefaultStartTime, resolvePosFlexibleBusinessDurationMinutes, resolvePosFlexibleDurationInitialCandidate, shouldResetPosFlexibleTimeForDate, shouldShowPosCustomTimeCandidateCards };
@@ -168,6 +168,7 @@ interface SelectionFlowAvailabilityService {
168
168
  title?: string;
169
169
  kind: 'normal' | 'duration' | 'session' | 'venue_slot';
170
170
  slotStepMinutes?: number;
171
+ operatingEndAt?: string;
171
172
  ranges: SelectionFlowAvailabilityCandidate[];
172
173
  }>>;
173
174
  queryBookingAvailability: (contextId: string, request: Record<string, unknown>) => Promise<{
@@ -645,7 +645,6 @@ exports.getServeStartTime = getServeStartTime;
645
645
  exports.getServerItemExtend = getServerItemExtend;
646
646
  exports.getServiceTime = getServiceTime;
647
647
  exports.getServiceTimes = getServiceTimes;
648
- exports.getShopOpeningHours = getShopOpeningHours;
649
648
  exports.isNowTime = isNowTime;
650
649
  exports.isSessionProduct = isSessionProduct;
651
650
  exports.isWalkIn = isWalkIn;
@@ -178,6 +178,7 @@ const refreshAvailabilityTimes = function() {
178
178
  const requestedStartTime = getAvailabilityStartTimeOverride(context, startTimeOverride);
179
179
  const selectedDate = context.draft.booking.startDate.format("YYYY-MM-DD");
180
180
  const requestId = Date.now() + Math.random();
181
+ const previousTimeData = context.getModuleData(module.key);
181
182
  const posCustomTimeHydrationKey = posCustomTimeAvailability && requestedDuration && requestedStartTime ? `${selectedDate}|${requestedStartTime}|${requestedDuration}` : void 0;
182
183
  context.setModuleData(module.key, {
183
184
  requestId,
@@ -195,13 +196,14 @@ const refreshAvailabilityTimes = function() {
195
196
  const candidates = (group === null || group === void 0 ? void 0 : group.ranges) || [];
196
197
  const product = context.draft.productData;
197
198
  if (posDurationAvailability && selectionIntent === "restore" && require_posCustomTime.isFlexibleDurationValue(product === null || product === void 0 ? void 0 : product.duration)) {
198
- var _context$hostContext, _moduleOptions$slice, _normalizeDurationMin3;
199
+ var _context$hostContext, _moduleOptions$slice, _context$draft$bookin2, _normalizeDurationMin3;
199
200
  const moduleOptions = require_index$1.getModuleOptions(module);
200
201
  const configuredSlice = (_context$hostContext = context.hostContext) === null || _context$hostContext === void 0 || (_context$hostContext = _context$hostContext.bookingConfig) === null || _context$hostContext === void 0 || (_context$hostContext = _context$hostContext.config) === null || _context$hostContext === void 0 || (_context$hostContext = _context$hostContext.basic) === null || _context$hostContext === void 0 ? void 0 : _context$hostContext.service_time;
201
202
  const fallbackSlice = (_moduleOptions$slice = moduleOptions.slice) !== null && _moduleOptions$slice !== void 0 ? _moduleOptions$slice : typeof configuredSlice === "object" ? configuredSlice === null || configuredSlice === void 0 ? void 0 : configuredSlice.value : configuredSlice;
202
203
  const baseDurationMinutes = require_posCustomTime.resolvePosCustomTimeBaseMinutes(group === null || group === void 0 ? void 0 : group.slotStepMinutes, fallbackSlice);
203
- const nextStartTime = require_posCustomTime.resolvePosCustomTimeDefaultStartTime(context.draft.booking.startTime, baseDurationMinutes);
204
- const nextDuration = require_posCustomTime.resolvePosCustomTimeDefaultDurationMinutes((_normalizeDurationMin3 = normalizeDurationMinutesValue(context.draft.booking.duration)) !== null && _normalizeDurationMin3 !== void 0 ? _normalizeDurationMin3 : context.draft.booking.duration, baseDurationMinutes, context.services.selectionFlowMode === "edit" ? void 0 : require_posCustomTime.resolvePosFlexibleBusinessDurationMinutes(nextStartTime, require_utils$2.getShopOpeningHours()));
204
+ const resetForSelectedDate = require_posCustomTime.shouldResetPosFlexibleTimeForDate((_context$draft$bookin2 = context.draft.booking.selectedCandidate) !== null && _context$draft$bookin2 !== void 0 ? _context$draft$bookin2 : previousTimeData === null || previousTimeData === void 0 ? void 0 : previousTimeData.selectedCandidate, selectedDate);
205
+ const nextStartTime = require_posCustomTime.resolvePosCustomTimeDefaultStartTime(resetForSelectedDate ? null : context.draft.booking.startTime, baseDurationMinutes);
206
+ const nextDuration = require_posCustomTime.resolvePosCustomTimeDefaultDurationMinutes(resetForSelectedDate ? product === null || product === void 0 ? void 0 : product.duration : (_normalizeDurationMin3 = normalizeDurationMinutesValue(context.draft.booking.duration)) !== null && _normalizeDurationMin3 !== void 0 ? _normalizeDurationMin3 : context.draft.booking.duration, baseDurationMinutes, context.services.selectionFlowMode === "edit" ? void 0 : require_posCustomTime.resolvePosFlexibleBusinessDurationMinutes(nextStartTime, (group === null || group === void 0 ? void 0 : group.operatingEndAt) ? (0, dayjs.default)(group.operatingEndAt).format("HH:mm") : void 0));
205
207
  const changedFields = [];
206
208
  if (nextStartTime !== context.draft.booking.startTime) changedFields.push("booking.startTime");
207
209
  if (nextDuration !== context.draft.booking.duration) changedFields.push("booking.duration");
@@ -284,7 +286,7 @@ const refreshAvailabilityTimes = function() {
284
286
  const normallySelectableCandidates = times.filter((candidate) => isAvailabilityCandidateSelectable(candidate));
285
287
  const selectableCandidates = normallySelectableCandidates.length > 0 || !allowUnavailable ? normallySelectableCandidates : times;
286
288
  const shouldPreserveRequestedPosStart = posCustomTimeAvailability && Boolean(requestedPosStartTime && requestedPosDuration);
287
- const displayCandidates = posSessionAvailability ? require_posCustomTime.getSessionPresetCandidates(times) : posDurationAvailability && require_posCustomTime.isFlexibleDurationValue(product === null || product === void 0 ? void 0 : product.duration) ? require_posCustomTime.getPosFlexibleDurationPresetCandidates(times, requestedCustomRange, customSelectionIntent) : times;
289
+ const displayCandidates = posSessionAvailability ? require_posCustomTime.getSessionPresetCandidates(times) : posDurationAvailability && require_posCustomTime.isFlexibleDurationValue(product === null || product === void 0 ? void 0 : product.duration) ? require_posCustomTime.getPosFlexibleDurationPresetCandidates(times, requestedCustomRange, customSelectionIntent, Boolean(!customSelectionIntent && existingCandidate && existingCandidate.date === selectedDate && (previousTimeData === null || previousTimeData === void 0 ? void 0 : previousTimeData.timeSlots.some((slot) => String(slot.id) === String(existingCandidate.key))))) : times;
288
290
  const fallbackCandidate = shouldPreserveRequestedPosStart ? void 0 : selectableCandidates[0];
289
291
  const preferPosFlexiblePreset = posDurationAvailability && require_posCustomTime.isFlexibleDurationValue(product === null || product === void 0 ? void 0 : product.duration) && !customSelectionIntent && context.services.selectionFlowMode !== "edit" && (selectionIntent === "fallback" || !existingCandidate || existingCandidate.date !== selectedDate);
290
292
  const initialCandidate = posDurationAvailability && require_posCustomTime.isFlexibleDurationValue(product === null || product === void 0 ? void 0 : product.duration) ? require_posCustomTime.resolvePosFlexibleDurationInitialCandidate({
@@ -598,12 +600,12 @@ const TimeFlowModuleComponent = ({ context, module, registerHandle }) => {
598
600
  return () => registerHandle === null || registerHandle === void 0 ? void 0 : registerHandle(null);
599
601
  }, [handle, registerHandle]);
600
602
  (0, react.useEffect)(() => {
601
- var _context$draft$bookin2;
603
+ var _context$draft$bookin3;
602
604
  if (!usePosCustomTimeAvailability || !availability) return;
603
605
  if (!startTime || !hasDurationValue(duration)) return;
604
606
  if (availabilityData === null || availabilityData === void 0 ? void 0 : availabilityData.selectedCandidate) return;
605
607
  if (moduleStatus === "loading") return;
606
- const selectedDate = (_context$draft$bookin2 = context.draft.booking.startDate) === null || _context$draft$bookin2 === void 0 ? void 0 : _context$draft$bookin2.format("YYYY-MM-DD");
608
+ const selectedDate = (_context$draft$bookin3 = context.draft.booking.startDate) === null || _context$draft$bookin3 === void 0 ? void 0 : _context$draft$bookin3.format("YYYY-MM-DD");
607
609
  const requestedDuration = getAvailabilityDurationOverride(context);
608
610
  const requestedStartTime = getAvailabilityStartTimeOverride(context);
609
611
  if (!selectedDate || !requestedDuration || !requestedStartTime) return;
@@ -43,6 +43,7 @@ const resolvePosFlexibleBusinessDurationMinutes = (startTime, closingTime) => {
43
43
  const duration = closingMinute > startMinute ? closingMinute - startMinute : closingMinute < startMinute ? closingMinute + 1440 - startMinute : 0;
44
44
  return duration > 0 ? duration : null;
45
45
  };
46
+ const shouldResetPosFlexibleTimeForDate = (candidate, selectedDate) => Boolean(candidate && candidate.date !== selectedDate);
46
47
  const resolvePosCustomTimeDefaultDurationMinutes = (currentValue, baseDurationMinutes, flexibleDefaultMinutes) => {
47
48
  if (isFlexibleDurationValue(currentValue)) {
48
49
  const flexibleMinutes = Number(flexibleDefaultMinutes);
@@ -74,10 +75,10 @@ const resolvePosCustomTimeCandidate = (params) => {
74
75
  return params.restoredDraftCandidate || params.restoredExistingCandidate || params.fallbackCandidate;
75
76
  };
76
77
  const getSessionPresetCandidates = (candidates) => candidates.filter((candidate) => candidate.source === "session_schedule");
77
- const getPosFlexibleDurationPresetCandidates = (candidates, requestedCustomRange, customSelectionIntent = false) => {
78
+ const getPosFlexibleDurationPresetCandidates = (candidates, requestedCustomRange, customSelectionIntent = false, preserveRequestedRange = false) => {
78
79
  if (!requestedCustomRange) return [...candidates];
79
- const presets = candidates.filter((candidate) => !isSameAvailabilityCandidateRange(candidate, requestedCustomRange));
80
- return presets.length > 0 || customSelectionIntent ? presets : [...candidates];
80
+ if (preserveRequestedRange && !customSelectionIntent) return [...candidates];
81
+ return candidates.filter((candidate) => !isSameAvailabilityCandidateRange(candidate, requestedCustomRange));
81
82
  };
82
83
  const resolvePosFlexibleDurationInitialCandidate = (params) => {
83
84
  const firstAvailablePreset = params.presetCandidates.find((candidate) => (!candidate.status || candidate.status === "available" || candidate.status === "limited") && !(typeof candidate.maxPartySize === "number" && candidate.maxPartySize <= 0));
@@ -96,4 +97,5 @@ exports.resolvePosCustomTimeDefaultDurationMinutes = resolvePosCustomTimeDefault
96
97
  exports.resolvePosCustomTimeDefaultStartTime = resolvePosCustomTimeDefaultStartTime;
97
98
  exports.resolvePosFlexibleBusinessDurationMinutes = resolvePosFlexibleBusinessDurationMinutes;
98
99
  exports.resolvePosFlexibleDurationInitialCandidate = resolvePosFlexibleDurationInitialCandidate;
100
+ exports.shouldResetPosFlexibleTimeForDate = shouldResetPosFlexibleTimeForDate;
99
101
  exports.shouldShowPosCustomTimeCandidateCards = shouldShowPosCustomTimeCandidateCards;
@@ -168,6 +168,7 @@ interface SelectionFlowAvailabilityService {
168
168
  title?: string;
169
169
  kind: 'normal' | 'duration' | 'session' | 'venue_slot';
170
170
  slotStepMinutes?: number;
171
+ operatingEndAt?: string;
171
172
  ranges: SelectionFlowAvailabilityCandidate[];
172
173
  }>>;
173
174
  queryBookingAvailability: (contextId: string, request: Record<string, unknown>) => Promise<{
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pisell/private-materials",
3
- "version": "6.11.655",
3
+ "version": "6.11.656",
4
4
  "main": "./lib/index.js",
5
5
  "module": "./es/index.js",
6
6
  "types": "./lib/index.d.ts",
@@ -69,11 +69,11 @@
69
69
  "react-zoom-pan-pinch": "^3.7.0",
70
70
  "styled-components": "^6.0.0-rc.3",
71
71
  "use-sync-external-store": "^1.6.0",
72
- "@pisell/pi-payment-sdk": "0.0.3",
73
72
  "@pisell/utils": "3.0.4",
74
- "@pisell/date-picker": "3.0.10",
73
+ "@pisell/icon": "0.0.11",
75
74
  "@pisell/materials": "6.11.256",
76
- "@pisell/icon": "0.0.11"
75
+ "@pisell/pi-payment-sdk": "0.0.3",
76
+ "@pisell/date-picker": "3.0.10"
77
77
  },
78
78
  "peerDependencies": {
79
79
  "react": "^18.0.0",