Files
web/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/GuaranteeCallback/index.tsx
Bianca Widstam 3c1eee88b1 Merged in feat/SW-1370/Guarantee-my-stay-ancillaries (pull request #1545)
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
2025-03-21 07:29:04 +00:00

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 />
}