Merge branch 'master' into feature/tracking

This commit is contained in:
Linus Flood
2024-11-25 10:14:12 +01:00
181 changed files with 3840 additions and 1723 deletions
+21 -26
View File
@@ -11,11 +11,12 @@ import {
signedInDetailsSchema,
} from "@/components/HotelReservation/EnterDetails/Details/schema"
import { DetailsContext } from "@/contexts/Details"
import { arrayMerge } from "@/utils/merge"
import { StepEnum } from "@/types/enums/step"
import type { DetailsState, InitialState } from "@/types/stores/details"
export const storageName = "details-storage"
export const detailsStorageName = "details-storage"
export function createDetailsStore(
initialState: InitialState,
isMember: boolean
@@ -27,13 +28,15 @@ export function createDetailsStore(
* we cannot use the data as `defaultValues` for our forms.
* RHF caches defaultValues on mount.
*/
const detailsStorageUnparsed = sessionStorage.getItem(storageName)
const detailsStorageUnparsed = sessionStorage.getItem(detailsStorageName)
if (detailsStorageUnparsed) {
const detailsStorage: Record<
"state",
Pick<DetailsState, "data">
> = JSON.parse(detailsStorageUnparsed)
initialState = merge(initialState, detailsStorage.state.data)
initialState = merge(detailsStorage.state.data, initialState, {
arrayMerge,
})
}
}
return create<DetailsState>()(
@@ -98,13 +101,6 @@ export function createDetailsStore(
})
)
},
updateValidity(property, isValid) {
return set(
produce((state: DetailsState) => {
state.isValid[property] = isValid
})
)
},
},
data: merge(
@@ -135,40 +131,39 @@ export function createDetailsStore(
},
totalPrice: {
euro: { currency: "", price: 0 },
local: { currency: "", price: 0 },
euro: { currency: "", amount: 0 },
local: { currency: "", amount: 0 },
},
}),
{
name: storageName,
onRehydrateStorage() {
name: detailsStorageName,
onRehydrateStorage(prevState) {
return function (state) {
if (state) {
const validatedBedType = bedTypeSchema.safeParse(state.data)
if (validatedBedType.success) {
state.actions.updateValidity(StepEnum.selectBed, true)
} else {
state.actions.updateValidity(StepEnum.selectBed, false)
if (validatedBedType.success !== state.isValid["select-bed"]) {
state.isValid["select-bed"] = validatedBedType.success
}
const validatedBreakfast = breakfastStoreSchema.safeParse(
state.data
)
if (validatedBreakfast.success) {
state.actions.updateValidity(StepEnum.breakfast, true)
} else {
state.actions.updateValidity(StepEnum.breakfast, false)
if (validatedBreakfast.success !== state.isValid.breakfast) {
state.isValid.breakfast = validatedBreakfast.success
}
const detailsSchema = isMember
? signedInDetailsSchema
: guestDetailsSchema
const validatedDetails = detailsSchema.safeParse(state.data)
if (validatedDetails.success) {
state.actions.updateValidity(StepEnum.details, true)
} else {
state.actions.updateValidity(StepEnum.details, false)
if (validatedDetails.success !== state.isValid.details) {
state.isValid.details = validatedDetails.success
}
const mergedState = merge(state.data, prevState.data, {
arrayMerge,
})
state.data = mergedState
}
}
},
-17
View File
@@ -1,17 +0,0 @@
"use client"
import { create } from "zustand"
interface RoomAvailabilityState {
noRoomsAvailable: boolean
setNoRoomsAvailable: () => void
setRoomsAvailable: () => void
}
const useRoomAvailableStore = create<RoomAvailabilityState>((set) => ({
noRoomsAvailable: false,
setNoRoomsAvailable: () => set(() => ({ noRoomsAvailable: true })),
setRoomsAvailable: () => set(() => ({ noRoomsAvailable: false })),
}))
export default useRoomAvailableStore
+1 -1
View File
@@ -13,7 +13,7 @@ import {
} from "@/components/HotelReservation/EnterDetails/Details/schema"
import { StepsContext } from "@/contexts/Steps"
import { storageName as detailsStorageName } from "./details"
import { detailsStorageName as detailsStorageName } from "./details"
import { StepEnum } from "@/types/enums/step"
import type { DetailsState } from "@/types/stores/details"