Files
web/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/GuaranteeCallback/index.tsx
Anton Gunnarsson 846fd904a6 Merged in feat/sw-2859-set-up-shared-trpc-package (pull request #2319)
feat(SW-2859): Create trpc package

* Add isEdge, safeTry and dataCache to new common package

* Add eslint and move prettier config

* Clean up tests

* Create trpc package and move initialization

* Move errors and a few procedures

* Move telemetry to common package

* Move tokenManager to common package

* Add Sentry to procedures

* Clean up procedures

* Fix self-referencing imports

* Add exports to packages and lint rule to prevent relative imports

* Add env to trpc package

* Add eslint to trpc package

* Apply lint rules

* Use direct imports from trpc package

* Add lint-staged config to trpc

* Move lang enum to common

* Restructure trpc package folder structure

* Fix lang imports


Approved-by: Linus Flood
2025-06-18 12:14:20 +00:00

100 lines
2.5 KiB
TypeScript

"use client"
import { useRouter } from "next/navigation"
import { useEffect } from "react"
import { trpc } from "@/lib/trpc/client"
import {
clearAncillarySessionData,
getAncillarySessionData,
} from "@/components/HotelReservation/MyStay/utils/ancillaries"
import LoadingSpinner from "@/components/LoadingSpinner"
import {
trackAncillaryFailed,
trackAncillarySuccess,
} from "@/utils/tracking/myStay"
import type { Lang } from "@scandic-hotels/common/constants/language"
export default function GuaranteeAncillaryHandler({
confirmationNumber,
returnUrl,
refId,
lang,
}: {
confirmationNumber: string
refId: string
returnUrl: string
lang: Lang
}) {
const router = useRouter()
const addAncillary = trpc.booking.packages.useMutation()
useEffect(() => {
if (addAncillary.isPending || addAncillary.submittedAt) {
return
}
const sessionData = getAncillarySessionData()
if (
!sessionData?.formData ||
!sessionData?.selectedAncillary ||
!sessionData?.packages
) {
router.replace(`${returnUrl}&errorCode=AncillaryFailed`)
return
}
const { formData, selectedAncillary, packages, breakfastData } = sessionData
addAncillary.mutate(
{
refId,
ancillaryComment: formData.optionalText,
ancillaryDeliveryTime: selectedAncillary.requiresDeliveryTime
? formData.deliveryTime
: undefined,
packages,
language: lang,
},
{
onSuccess: (data) => {
if (data) {
trackAncillarySuccess(
confirmationNumber,
packages,
formData.deliveryTime,
"room + ancillary",
selectedAncillary,
breakfastData
)
clearAncillarySessionData()
router.replace(returnUrl)
} else {
trackAncillaryFailed(
packages,
formData.deliveryTime,
selectedAncillary,
breakfastData
)
router.replace(`${returnUrl}&errorCode=AncillaryFailed`)
}
},
onError: () => {
trackAncillaryFailed(
packages,
formData.deliveryTime,
selectedAncillary,
breakfastData
)
router.replace(`${returnUrl}&errorCode=AncillaryFailed`)
},
}
)
}, [confirmationNumber, refId, returnUrl, addAncillary, lang, router])
return <LoadingSpinner />
}