Feat/SW-1370/Guarantee my stay ancillaries * feat(SW-1370): guarantee for ancillaries * feat(SW-1370): remove console log * feat(SW-1370): add translations * feat(SW-1370): small fix * feat(SW-1370): fix must be guaranteed * feat(SW-1370): fix logic and comments pr * feat(SW-1370): fix comments pr * feat(SW-1370): fix comments pr * feat(SW-1370): add translation * feat(SW-1370): add translation and fix pr comment * feat(SW-1370): fix pr comment * feat(SW-1370): fix encoding path refId issue * feat(SW-1370): refactor AddAncillaryStore usage and introduce context provider * feat(SW-1370): refactor * feat(SW-1370): refactor ancillaries * feat(SW-1370): fix merge Approved-by: Simon.Emanuelsson
78 lines
2.0 KiB
TypeScript
78 lines
2.0 KiB
TypeScript
"use client"
|
|
|
|
import { useRouter } from "next/navigation"
|
|
import { useEffect } from "react"
|
|
|
|
import { trpc } from "@/lib/trpc/client"
|
|
|
|
import LoadingSpinner from "@/components/LoadingSpinner"
|
|
|
|
import { clearAncillarySessionData, getAncillarySessionData } from "../utils"
|
|
|
|
import type { Lang } from "@/constants/languages"
|
|
|
|
export default function GuaranteeAncillaryHandler({
|
|
confirmationNumber,
|
|
returnUrl,
|
|
lang,
|
|
}: {
|
|
confirmationNumber: string
|
|
returnUrl: string
|
|
lang: Lang
|
|
}) {
|
|
const router = useRouter()
|
|
|
|
const addAncillary = trpc.booking.packages.useMutation({
|
|
onSuccess: () => {
|
|
clearAncillarySessionData()
|
|
router.replace(returnUrl)
|
|
},
|
|
onError: () => {
|
|
router.replace(`${returnUrl}&errorCode=AncillaryFailed`)
|
|
},
|
|
})
|
|
|
|
useEffect(() => {
|
|
if (addAncillary.isPending || addAncillary.submittedAt) {
|
|
return
|
|
}
|
|
|
|
const sessionData = getAncillarySessionData()
|
|
if (!sessionData?.formData || !sessionData?.selectedAncillary) {
|
|
router.replace(`${returnUrl}&errorCode=AncillaryFailed`)
|
|
return
|
|
}
|
|
|
|
const { formData, selectedAncillary } = sessionData
|
|
const packages = []
|
|
|
|
if (selectedAncillary?.id && formData.quantityWithCard) {
|
|
packages.push({
|
|
code: selectedAncillary.id,
|
|
quantity: formData.quantityWithCard,
|
|
comment: formData.optionalText || undefined,
|
|
})
|
|
}
|
|
|
|
if (selectedAncillary?.loyaltyCode && formData.quantityWithPoints) {
|
|
packages.push({
|
|
code: selectedAncillary.loyaltyCode,
|
|
quantity: formData.quantityWithPoints,
|
|
comment: formData.optionalText || undefined,
|
|
})
|
|
}
|
|
|
|
addAncillary.mutate({
|
|
confirmationNumber,
|
|
ancillaryComment: formData.optionalText,
|
|
ancillaryDeliveryTime: selectedAncillary.requiresDeliveryTime
|
|
? formData.deliveryTime
|
|
: undefined,
|
|
packages,
|
|
language: lang,
|
|
})
|
|
}, [confirmationNumber, returnUrl, addAncillary, lang, router])
|
|
|
|
return <LoadingSpinner />
|
|
}
|