feat: add multiroom signup
This commit is contained in:
@@ -200,7 +200,7 @@ export function createRatesStore({
|
||||
`room[${idx}].counterratecode`,
|
||||
isMemberRate
|
||||
? selectedRate.product.productType.public.rateCode
|
||||
: selectedRate.product.productType.member?.rateCode ?? ""
|
||||
: (selectedRate.product.productType.member?.rateCode ?? "")
|
||||
)
|
||||
searchParams.set(
|
||||
`room[${idx}].ratecode`,
|
||||
@@ -236,6 +236,7 @@ export function createRatesStore({
|
||||
booking,
|
||||
filterOptions,
|
||||
hotelType,
|
||||
isUserLoggedIn,
|
||||
packages,
|
||||
pathname,
|
||||
petRoomPackage: packages.find(
|
||||
|
||||
@@ -1,104 +0,0 @@
|
||||
import { create } from "zustand"
|
||||
|
||||
import { calculateRoomSummary } from "./helper"
|
||||
|
||||
import type {
|
||||
RoomPackageCodeEnum,
|
||||
RoomPackages,
|
||||
} from "@/types/components/hotelReservation/selectRate/roomFilter"
|
||||
import type {
|
||||
Child,
|
||||
Rate,
|
||||
RateCode,
|
||||
} from "@/types/components/hotelReservation/selectRate/selectRate"
|
||||
import type { RoomConfiguration } from "@/types/trpc/routers/hotel/roomAvailability"
|
||||
|
||||
export interface RateSummaryParams {
|
||||
getFilteredRooms: (roomIndex: number) => RoomConfiguration[]
|
||||
availablePackages: RoomPackages
|
||||
roomCategories: Array<{ name: string; roomTypes: Array<{ code: string }> }>
|
||||
selectedPackagesByRoom: Record<number, RoomPackageCodeEnum[]>
|
||||
}
|
||||
|
||||
interface RateSelectionState {
|
||||
selectedRates: (RateCode | undefined)[]
|
||||
rateSummary: (Rate | null)[]
|
||||
isPriceDetailsModalOpen: boolean
|
||||
isSummaryOpen: boolean
|
||||
guestsInRooms: { adults: number; children?: Child[] }[]
|
||||
modifyRateIndex: number | null
|
||||
modifyRate: (index: number) => void
|
||||
closeModifyRate: () => void
|
||||
selectRate: (index: number, rate: RateCode | undefined) => void
|
||||
initializeRates: (count: number) => void
|
||||
calculateRateSummary: ({
|
||||
getFilteredRooms,
|
||||
availablePackages,
|
||||
roomCategories,
|
||||
}: RateSummaryParams) => void
|
||||
getSelectedRateSummary: () => Rate[]
|
||||
togglePriceDetailsModalOpen: () => void
|
||||
toggleSummaryOpen: () => void
|
||||
setGuestsInRooms: (index: number, adults: number, children?: Child[]) => void
|
||||
}
|
||||
|
||||
export const useRateSelectionStore = create<RateSelectionState>((set, get) => ({
|
||||
selectedRates: [],
|
||||
rateSummary: [],
|
||||
isPriceDetailsModalOpen: false,
|
||||
isSummaryOpen: false,
|
||||
guestsInRooms: [{ adults: 1 }],
|
||||
modifyRateIndex: null,
|
||||
modifyRate: (index) => set({ modifyRateIndex: index }),
|
||||
closeModifyRate: () => set({ modifyRateIndex: null }),
|
||||
selectRate: (index, rate) => {
|
||||
set((state) => {
|
||||
const newRates = [...state.selectedRates]
|
||||
newRates[index] = rate
|
||||
return {
|
||||
selectedRates: newRates,
|
||||
}
|
||||
})
|
||||
},
|
||||
initializeRates: (count) =>
|
||||
set({ selectedRates: new Array(count).fill(undefined) }),
|
||||
calculateRateSummary: (params) => {
|
||||
const { selectedRates } = get()
|
||||
|
||||
const summaries = selectedRates.map((selectedRate, roomIndex) => {
|
||||
if (!selectedRate) return null
|
||||
|
||||
return calculateRoomSummary({
|
||||
selectedRate,
|
||||
roomIndex,
|
||||
...params,
|
||||
})
|
||||
})
|
||||
|
||||
set({ rateSummary: summaries })
|
||||
},
|
||||
getSelectedRateSummary: () => {
|
||||
const { rateSummary } = get()
|
||||
return rateSummary.filter((summary): summary is Rate => summary !== null)
|
||||
},
|
||||
togglePriceDetailsModalOpen: () => {
|
||||
set((state) => ({
|
||||
isPriceDetailsModalOpen: !state.isPriceDetailsModalOpen,
|
||||
}))
|
||||
},
|
||||
|
||||
toggleSummaryOpen: () => {
|
||||
set((state) => ({
|
||||
isSummaryOpen: !state.isSummaryOpen,
|
||||
}))
|
||||
},
|
||||
setGuestsInRooms: (index, adults, children) => {
|
||||
set((state) => ({
|
||||
guestsInRooms: [
|
||||
...state.guestsInRooms.slice(0, index),
|
||||
{ adults, children },
|
||||
...state.guestsInRooms.slice(index + 1),
|
||||
],
|
||||
}))
|
||||
},
|
||||
}))
|
||||
Reference in New Issue
Block a user