Files
web/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddedAncillaries/RemoveButton.tsx
Erik Tiekstra 8e08af718c feat(BOOK-743): Replaced deprecated Button component
Approved-by: Bianca Widstam
2026-01-21 09:38:38 +00:00

111 lines
3.0 KiB
TypeScript

import { useRouter } from "next/navigation"
import { useIntl } from "react-intl"
import { Button } from "@scandic-hotels/design-system/Button"
import { toast } from "@scandic-hotels/design-system/Toast"
import { trpc } from "@scandic-hotels/trpc/client"
import Dialog from "@/components/Dialog"
import useLang from "@/hooks/useLang"
import { trackRemoveAncillary } from "@/utils/tracking/myStay"
import type { PackageSchema } from "@scandic-hotels/trpc/types/bookingConfirmation"
import type { Room } from "@/types/stores/my-stay"
export default function RemoveButton({
refId,
codes,
title,
booking,
ancillary,
addedBreakfastPackages,
}: {
refId: string
codes: string[]
title?: string
booking: Room
ancillary: PackageSchema
addedBreakfastPackages: PackageSchema[] | undefined
}) {
const lang = useLang()
const intl = useIntl()
const utils = trpc.useUtils()
const router = useRouter()
const removePackage = trpc.booking.removePackage.useMutation()
return (
<Dialog
bodyText={intl.formatMessage({
id: "myStay.removeAncillary.confirmationText",
defaultMessage: "Are you sure you want to remove this product?",
})}
proceedText={intl.formatMessage({
id: "common.remove",
defaultMessage: "Remove",
})}
proceedIsPending={removePackage.isPending}
cancelButtonText={intl.formatMessage({
id: "common.cancel",
defaultMessage: "Cancel",
})}
titleText={`${intl.formatMessage({
id: "common.remove",
defaultMessage: "Remove",
})} ${title}`}
trigger={
<Button variant="Text" size="sm" leadingIconName="delete">
{intl.formatMessage({
id: "common.remove",
defaultMessage: "Remove",
})}
</Button>
}
proceedOnClick={(close) => {
removePackage.mutate(
{
language: lang,
refId,
codes,
},
{
onSuccess: (data) => {
if (!data) {
throw new Error()
}
toast.success(
intl.formatMessage({
id: "myStay.removeAncillary.success",
defaultMessage:
"The product has now been removed from your booking.",
})
)
utils.booking.get.invalidate({
refId: refId,
})
trackRemoveAncillary(
ancillary,
booking.hotelId,
booking.ancillary?.deliveryTime,
addedBreakfastPackages
)
router.refresh()
close()
},
onError: () => {
toast.error(
intl.formatMessage({
id: "errorMessage.somethingWentWrong",
defaultMessage: "Something went wrong!",
})
)
},
}
)
}}
/>
)
}