Feat(SW-1275) cancel booking my stay * feat(SW-1276) UI implementation Desktop part 1 for MyStay * feat(SW-1276) UI implementation Desktop part 2 for MyStay * feat(SW-1276) UI implementation Mobile part 1 for MyStay * refactor: move files from MyStay/MyStay to MyStay * feat(SW-1276) Sidepeek implementation * feat(SW-1276): Refactoring * feat(SW-1276) UI implementation Mobile part 2 for MyStay * feat(SW-1276): translations * feat(SW-1276) fixed skeleton * feat(SW-1276): Added missing translations * feat(SW-1276) fixed translations * feat(SW-1275) cancel modal * feat(SW-1275): Mutate cancel booking * feat(SW-1275) added translations * feat(SW-1275) match current cancellationReason * feat(SW-1275) Added modal for manage stay * feat(SW-1275) Added missing icon * feat(SW-1275) New Dont cancel button * feat(SW-1275) Added preperation for Cancellation number * feat(SW-1275): added --modal-box-shadow * feat(SW-1718) Add to calendar * feat(SW-1718) general add to calendar Approved-by: Niclas Edenvin
51 lines
1.5 KiB
TypeScript
51 lines
1.5 KiB
TypeScript
"use client"
|
|
import { createEvent } from "ics"
|
|
import { useIntl } from "react-intl"
|
|
|
|
import { dt } from "@/lib/dt"
|
|
|
|
import { toast } from "@/components/TempDesignSystem/Toasts"
|
|
import useLang from "@/hooks/useLang"
|
|
|
|
import type { AddToCalendarProps } from "@/types/components/hotelReservation/bookingConfirmation/actions/addToCalendar"
|
|
|
|
export default function AddToCalendar({
|
|
checkInDate,
|
|
event,
|
|
hotelName,
|
|
renderButton,
|
|
}: AddToCalendarProps) {
|
|
const lang = useLang()
|
|
const intl = useIntl()
|
|
|
|
async function downloadBooking() {
|
|
try {
|
|
const d = dt(checkInDate).locale(lang).format("YYYY-MM-DD")
|
|
const filename = `${hotelName.toLowerCase().split(" ").join("_")}-${d}.ics`
|
|
|
|
createEvent(event, (error, value) => {
|
|
if (error) {
|
|
console.error("ICS Error:", error)
|
|
toast.error(intl.formatMessage({ id: "Failed to add to calendar" }))
|
|
return
|
|
}
|
|
|
|
const file = new File([value], filename, { type: "text/calendar" })
|
|
const url = URL.createObjectURL(file)
|
|
const anchor = document.createElement("a")
|
|
anchor.href = url
|
|
anchor.download = filename
|
|
document.body.appendChild(anchor)
|
|
anchor.click()
|
|
document.body.removeChild(anchor)
|
|
URL.revokeObjectURL(url)
|
|
})
|
|
} catch (error) {
|
|
console.error("Download error:", error)
|
|
toast.error(intl.formatMessage({ id: "Failed to add to calendar" }))
|
|
}
|
|
}
|
|
|
|
return renderButton(downloadBooking)
|
|
}
|