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:
@@ -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
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user