Merged in fix/SW-3194-cross-validation-enter-details (pull request #2604)
fix(SW-3194): crossvalidation for multiroom enter details * fix(SW-3194): crossvalidation for multiroom enter details * fix(SW-3194): use getValues Approved-by: Hrishikesh Vaipurkar
This commit is contained in:
@@ -37,7 +37,7 @@ export default function Details() {
|
|||||||
}))
|
}))
|
||||||
|
|
||||||
const {
|
const {
|
||||||
actions: { updateDetails, setIncomplete },
|
actions: { updateDetails, updatePartialGuestData, setIncomplete },
|
||||||
idx,
|
idx,
|
||||||
room,
|
room,
|
||||||
roomNr,
|
roomNr,
|
||||||
@@ -93,6 +93,7 @@ export default function Details() {
|
|||||||
formState: { isValid, errors },
|
formState: { isValid, errors },
|
||||||
setValue,
|
setValue,
|
||||||
watch,
|
watch,
|
||||||
|
getValues,
|
||||||
} = methods
|
} = methods
|
||||||
|
|
||||||
const { trackFormSubmit } = useFormTracking(
|
const { trackFormSubmit } = useFormTracking(
|
||||||
@@ -114,9 +115,21 @@ export default function Details() {
|
|||||||
if (isValid) {
|
if (isValid) {
|
||||||
handleSubmit(updateDetails)()
|
handleSubmit(updateDetails)()
|
||||||
} else {
|
} else {
|
||||||
|
updatePartialGuestData({
|
||||||
|
firstName: getValues("firstName")?.toString(),
|
||||||
|
lastName: getValues("lastName")?.toString(),
|
||||||
|
membershipNo: getValues("membershipNo")?.toString(),
|
||||||
|
})
|
||||||
setIncomplete()
|
setIncomplete()
|
||||||
}
|
}
|
||||||
}, [handleSubmit, isValid, setIncomplete, updateDetails])
|
}, [
|
||||||
|
handleSubmit,
|
||||||
|
isValid,
|
||||||
|
setIncomplete,
|
||||||
|
updateDetails,
|
||||||
|
updatePartialGuestData,
|
||||||
|
getValues,
|
||||||
|
])
|
||||||
|
|
||||||
useEffect(updateDetailsStore, [updateDetailsStore])
|
useEffect(updateDetailsStore, [updateDetailsStore])
|
||||||
|
|
||||||
|
|||||||
@@ -26,8 +26,8 @@ export const multiroomErrors = {
|
|||||||
} as const
|
} as const
|
||||||
|
|
||||||
export type CrossValidationData = {
|
export type CrossValidationData = {
|
||||||
firstName: string
|
firstName: string | undefined
|
||||||
lastName: string
|
lastName: string | undefined
|
||||||
membershipNo: string | undefined
|
membershipNo: string | undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -73,8 +73,8 @@ export function getMultiroomDetailsSchema(
|
|||||||
(data) =>
|
(data) =>
|
||||||
!crossValidationData.some(
|
!crossValidationData.some(
|
||||||
(room) =>
|
(room) =>
|
||||||
room.firstName.toLowerCase() === data.firstName.toLowerCase() &&
|
room.firstName?.toLowerCase() === data.firstName.toLowerCase() &&
|
||||||
room.lastName.toLowerCase() === data.lastName.toLowerCase()
|
room.lastName?.toLowerCase() === data.lastName.toLowerCase()
|
||||||
),
|
),
|
||||||
{
|
{
|
||||||
message: multiroomErrors.FIRST_AND_LAST_NAME_UNIQUE,
|
message: multiroomErrors.FIRST_AND_LAST_NAME_UNIQUE,
|
||||||
@@ -85,8 +85,8 @@ export function getMultiroomDetailsSchema(
|
|||||||
(data) =>
|
(data) =>
|
||||||
!crossValidationData.some(
|
!crossValidationData.some(
|
||||||
(room) =>
|
(room) =>
|
||||||
room.firstName.toLowerCase() === data.firstName.toLowerCase() &&
|
room.firstName?.toLowerCase() === data.firstName.toLowerCase() &&
|
||||||
room.lastName.toLowerCase() === data.lastName.toLowerCase()
|
room.lastName?.toLowerCase() === data.lastName.toLowerCase()
|
||||||
),
|
),
|
||||||
{
|
{
|
||||||
message: multiroomErrors.FIRST_AND_LAST_NAME_UNIQUE,
|
message: multiroomErrors.FIRST_AND_LAST_NAME_UNIQUE,
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ export default function Details({ user }: DetailsProps) {
|
|||||||
}))
|
}))
|
||||||
|
|
||||||
const {
|
const {
|
||||||
actions: { updateDetails, setIncomplete },
|
actions: { updateDetails, updatePartialGuestData, setIncomplete },
|
||||||
room,
|
room,
|
||||||
roomNr,
|
roomNr,
|
||||||
idx,
|
idx,
|
||||||
@@ -89,6 +89,7 @@ export default function Details({ user }: DetailsProps) {
|
|||||||
subscribe,
|
subscribe,
|
||||||
setValue,
|
setValue,
|
||||||
watch,
|
watch,
|
||||||
|
getValues,
|
||||||
} = methods
|
} = methods
|
||||||
|
|
||||||
const { trackFormSubmit } = useFormTracking(
|
const { trackFormSubmit } = useFormTracking(
|
||||||
@@ -117,9 +118,21 @@ export default function Details({ user }: DetailsProps) {
|
|||||||
if (formState.isValid) {
|
if (formState.isValid) {
|
||||||
handleSubmit(onSubmit)()
|
handleSubmit(onSubmit)()
|
||||||
} else {
|
} else {
|
||||||
|
updatePartialGuestData({
|
||||||
|
firstName: getValues("firstName")?.toString(),
|
||||||
|
lastName: getValues("lastName")?.toString(),
|
||||||
|
membershipNo: getValues("membershipNo")?.toString(),
|
||||||
|
})
|
||||||
setIncomplete()
|
setIncomplete()
|
||||||
}
|
}
|
||||||
}, [handleSubmit, formState.isValid, onSubmit, setIncomplete])
|
}, [
|
||||||
|
handleSubmit,
|
||||||
|
formState.isValid,
|
||||||
|
onSubmit,
|
||||||
|
setIncomplete,
|
||||||
|
updatePartialGuestData,
|
||||||
|
getValues,
|
||||||
|
])
|
||||||
|
|
||||||
useEffect(updateDetailsStore, [updateDetailsStore])
|
useEffect(updateDetailsStore, [updateDetailsStore])
|
||||||
const countryCode = watch("countryCode")
|
const countryCode = watch("countryCode")
|
||||||
|
|||||||
@@ -258,6 +258,21 @@ export function createDetailsStore(
|
|||||||
})
|
})
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
updatePartialGuestData(data) {
|
||||||
|
return set(
|
||||||
|
produce((state: DetailsState) => {
|
||||||
|
const currentRoom = state.rooms[idx].room
|
||||||
|
|
||||||
|
//Update only the parts that are relevant for cross-validation
|
||||||
|
if (data.firstName !== undefined)
|
||||||
|
currentRoom.guest.firstName = data.firstName
|
||||||
|
if (data.lastName !== undefined)
|
||||||
|
currentRoom.guest.lastName = data.lastName
|
||||||
|
if (data.membershipNo !== undefined)
|
||||||
|
currentRoom.guest.membershipNo = data.membershipNo
|
||||||
|
})
|
||||||
|
)
|
||||||
|
},
|
||||||
updateDetails(data) {
|
updateDetails(data) {
|
||||||
return set(
|
return set(
|
||||||
produce((state: DetailsState) => {
|
produce((state: DetailsState) => {
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import type {
|
|||||||
SignedInDetailsSchema,
|
SignedInDetailsSchema,
|
||||||
} from "@/types/components/hotelReservation/enterDetails/details"
|
} from "@/types/components/hotelReservation/enterDetails/details"
|
||||||
import type { StepEnum } from "@/types/enums/step"
|
import type { StepEnum } from "@/types/enums/step"
|
||||||
|
import type { CrossValidationData } from "@/components/HotelReservation/EnterDetails/Details/Multiroom/schema"
|
||||||
import type { Price } from "../components/hotelReservation/price"
|
import type { Price } from "../components/hotelReservation/price"
|
||||||
|
|
||||||
export interface InitialRoomData {
|
export interface InitialRoomData {
|
||||||
@@ -64,6 +65,7 @@ export interface RoomState {
|
|||||||
updateJoin: (join: boolean) => void
|
updateJoin: (join: boolean) => void
|
||||||
updatePriceForMembershipNo: (membershipNo: string, isValid: boolean) => void
|
updatePriceForMembershipNo: (membershipNo: string, isValid: boolean) => void
|
||||||
updateDetails: (data: DetailsSchema) => void
|
updateDetails: (data: DetailsSchema) => void
|
||||||
|
updatePartialGuestData: (data: CrossValidationData) => void
|
||||||
}
|
}
|
||||||
isComplete: boolean
|
isComplete: boolean
|
||||||
room: Room
|
room: Room
|
||||||
|
|||||||
Reference in New Issue
Block a user