nouveau-theatre-de-besancon/assets/js/calendar.js
2024-07-26 10:33:31 +02:00

102 lines
2.6 KiB
JavaScript

dayjs.locale("fr");
function getDatesInMonth(month) {
const year = dayjs().month(month).year();
const daysInMonth = dayjs(new Date(year, month, 0)).daysInMonth() + 1;
const dates = {};
for (let day = 1; day <= daysInMonth; day++) {
const currentDay = dayjs(new Date(year, month, day));
dates[parseInt(currentDay.format("DD"))] = [];
}
return dates;
}
async function getMapadoDates(monthNumb) {
const contractId = "1941";
const firstDayOfMonth = dayjs()
.month(monthNumb)
.startOf("month")
.format("YYYY-MM-DD");
const firstDayOfNextMonth = dayjs(firstDayOfMonth)
.add(1, "month")
.format("YYYY-MM-DD");
const requestEndPoint = 'event_dates'
const requestParams = [
{ name: 'itemsPerPage', value: 100 },
{ name: 'contract', value: contractId },
{ name: 'after', value: firstDayOfMonth },
{ name: 'before', value: firstDayOfNextMonth },
{ name: 'order', value: 'asc' }
]
const requestFields = [
{ name: 'startDate', },
{ name: 'bookableStock', },
{ name: 'ticketing', subfields: [
{ name: "@id", },
{ name: "title", },
{ name: "slug", },
{ name: "venue", subfields: [
{ name: "@id" },
{ name: "address" },
{ name: "zipCode" },
{ name: "city" },
{ name: "countryCode" },
{ name: "timezone" },
]
},
]
},
];
const requestOptions = {
method: 'POST',
body: JSON.stringify({requestEndPoint, requestParams, requestFields})
}
const response = await fetch('/mapado.json', requestOptions);
const json = await response.json();
const eventDates = json["hydra:member"];
console.log(
`Événements Mapado de ${dayjs(firstDayOfMonth).format("MMMM")} ${dayjs(
firstDayOfMonth
).format("YYYY")}`,
eventDates
);
const mapadoDates = eventDates.map((eventDate) => {
return {
day: getDay(eventDate),
title: eventDate.ticketing.title,
startTime: getStartTime(eventDate),
ticketingUrl: getTicketingUrl(eventDate)
};
});
return mapadoDates;
}
function getDay(eventDate) {
const date = eventDate.startDate.slice(0, 10);
const splittedDate = date.split("-");
const day = splittedDate[2];
return day
}
function getStartTime(eventDate) {
const rawTime = eventDate.startDate.slice(11, 19);
const time = dayjs(`2000-01-01T${rawTime}`);
const formattedTime = time.format('HH[h]mm');
return formattedTime
}
function getTicketingUrl(eventDate) {
const baseUrl = "https://cdn-besancon.mapado.com/event/"
return baseUrl + eventDate.ticketing.slug
}