Merged in fix/handle-single-ancillaries (pull request #3231)

Fix(STAY-128): Handle single ancillaries

* fix: refactor ancillaries flow

* fix: add logic to determine if an ancillary requires quantity

* fix: breakout ancillary description to its own component

* fix: cleanup

* fix: cleanup


Approved-by: Bianca Widstam
Approved-by: Erik Tiekstra
This commit is contained in:
Christel Westerberg
2025-11-28 15:02:45 +00:00
parent 4eee1cff64
commit 69f194f7bf
40 changed files with 1310 additions and 1197 deletions

View File

@@ -15,17 +15,15 @@ import type {
import type { Room } from "@/types/stores/my-stay"
export enum AncillaryStepEnum {
selectAncillary = 0,
selectQuantity = 1,
selectDelivery = 2,
confirmation = 3,
selectQuantity = 0,
selectDelivery = 1,
confirmation = 2,
}
type Step = {
step: AncillaryStepEnum
isValid: boolean
}
type Steps = {
[AncillaryStepEnum.selectAncillary]?: Step
[AncillaryStepEnum.selectQuantity]: Step
[AncillaryStepEnum.selectDelivery]: Step
[AncillaryStepEnum.confirmation]: Step
@@ -39,6 +37,7 @@ export type BreakfastData = {
priceAdult: number
priceChild: number
currency: string
totalPrice: number
}
interface AddAncillaryState {
@@ -52,8 +51,7 @@ interface AddAncillaryState {
ancillariesBySelectedCategory: Ancillary["ancillaryContent"]
openModal: () => void
closeModal: () => void
prevStep: () => void
prevStepMobile: () => void
prevStep: (isMobile: boolean) => void
breakfastData: BreakfastData | null
setBreakfastData: (breakfastData: BreakfastData | null) => void
isBreakfast: boolean
@@ -89,10 +87,6 @@ export const createAddAncillaryStore = (
(ancillary) => ancillary.translatedCategoryName
)
const steps = {
[AncillaryStepEnum.selectAncillary]: {
step: AncillaryStepEnum.selectAncillary,
isValid: true,
},
[AncillaryStepEnum.selectQuantity]: {
step: AncillaryStepEnum.selectQuantity,
isValid: false,
@@ -112,7 +106,7 @@ export const createAddAncillaryStore = (
categories,
selectedCategory,
ancillariesBySelectedCategory,
currentStep: AncillaryStepEnum.selectAncillary,
currentStep: AncillaryStepEnum.selectQuantity,
selectedAncillary: null,
breakfastData: null,
isBreakfast: false,
@@ -122,12 +116,12 @@ export const createAddAncillaryStore = (
set(
produce((state: AddAncillaryState) => {
state.isOpen = true
state.currentStep = AncillaryStepEnum.selectAncillary
})
),
closeModal: () =>
set(
produce((state: AddAncillaryState) => {
state.currentStep = AncillaryStepEnum.selectQuantity
state.isOpen = false
clearAncillarySessionData()
state.selectedAncillary = null
@@ -172,34 +166,7 @@ export const createAddAncillaryStore = (
})
),
prevStep: () =>
set(
produce((state: AddAncillaryState) => {
if (
state.currentStep === AncillaryStepEnum.selectAncillary ||
(state.currentStep === AncillaryStepEnum.selectQuantity &&
!state.steps[AncillaryStepEnum.selectAncillary])
) {
state.isOpen = false
clearAncillarySessionData()
state.selectedAncillary = null
state.steps = steps
} else {
if (
!state.selectedAncillary?.requiresDeliveryTime &&
state.currentStep === AncillaryStepEnum.confirmation
) {
state.currentStep = AncillaryStepEnum.selectQuantity
} else if (state.currentStep === AncillaryStepEnum.selectQuantity) {
state.currentStep = state.currentStep - 1
state.selectedAncillary = null
} else {
state.currentStep = state.currentStep - 1
}
}
})
),
prevStepMobile: () =>
prevStep: (isMobile) =>
set(
produce((state: AddAncillaryState) => {
if (state.currentStep === AncillaryStepEnum.selectQuantity) {
@@ -208,7 +175,10 @@ export const createAddAncillaryStore = (
state.selectedAncillary = null
state.steps = steps
} else {
if (state.currentStep === AncillaryStepEnum.confirmation) {
if (
(!state.selectedAncillary?.requiresDeliveryTime || isMobile) &&
state.currentStep === AncillaryStepEnum.confirmation
) {
state.currentStep = AncillaryStepEnum.selectQuantity
} else {
state.currentStep = state.currentStep - 1
@@ -219,14 +189,8 @@ export const createAddAncillaryStore = (
selectAncillary: (ancillary) =>
set(
produce((state: AddAncillaryState) => {
if (state.isOpen) {
state.steps[AncillaryStepEnum.selectAncillary]!.isValid = true
} else {
state.isOpen = true
delete state.steps[AncillaryStepEnum.selectAncillary]
}
state.isOpen = true
state.selectedAncillary = ancillary
state.currentStep = AncillaryStepEnum.selectQuantity
state.isBreakfast =
ancillary.id === BreakfastPackageEnum.ANCILLARY_REGULAR_BREAKFAST
})