nouveau-theatre-de-besancon/assets/js/calendar.js

187 lines
4.5 KiB
JavaScript
Raw Normal View History

2024-07-24 09:43:31 +02:00
dayjs.locale("fr");
2024-07-24 15:56:28 +02:00
function getDatesInMonth(month) {
const year = dayjs().month(month).year();
2024-08-28 19:11:58 +02:00
const daysInMonth = dayjs(new Date(year, month, 0)).daysInMonth();
const dates = {};
2024-07-24 09:43:31 +02:00
for (let day = 1; day <= daysInMonth; day++) {
const currentDay = dayjs(new Date(year, month, day));
2024-08-28 19:11:58 +02:00
const dayInitial = currentDay.format("dd")[0].toUpperCase(); // Get the initial of the day in French
dates[parseInt(currentDay.format("DD"))] = {
sessions: [],
full: currentDay.format("DD-MM-YYYY"),
initial: dayInitial,
};
2024-07-24 09:43:31 +02:00
}
return dates;
2024-07-24 09:43:31 +02:00
}
2024-07-24 15:56:28 +02:00
2024-08-28 08:46:00 +02:00
async function getMapadoEvent(id) {
const requestEndPoint = "ticketings/" + id;
const requestParams = [];
const requestFields = [
{ name: "startDate" },
{ name: "bookableStock" },
{
name: "eventDateList",
subfields: [{ name: "@id" }, { name: "bookableStock" }],
},
];
const requestOptions = {
method: "POST",
body: JSON.stringify({ requestEndPoint, requestParams, requestFields }),
};
const response = await fetch("/mapado-api.json", requestOptions);
const json = await response.json();
const event = json["hydra:member"];
console.log(`Événement Mapado`, event);
}
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");
2024-07-29 08:57:35 +02:00
const requestEndPoint = "event_dates";
const requestParams = [
2024-07-29 08:57:35 +02:00
{ name: "itemsPerPage", value: 100 },
{ name: "contract", value: contractId },
{ name: "after", value: firstDayOfMonth },
{ name: "before", value: firstDayOfNextMonth },
{ name: "order", value: "asc" },
];
const requestFields = [
2024-07-29 08:57:35 +02:00
{ 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" },
2024-07-29 08:57:35 +02:00
],
},
2024-07-29 08:57:35 +02:00
],
},
];
2024-07-29 08:57:35 +02:00
const requestOptions = {
2024-07-29 08:57:35 +02:00
method: "POST",
body: JSON.stringify({ requestEndPoint, requestParams, requestFields }),
};
2024-07-29 08:57:35 +02:00
const response = await fetch("/mapado-api.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 {
2024-07-26 10:33:31 +02:00
day: getDay(eventDate),
title: eventDate.ticketing.title,
startTime: getStartTime(eventDate),
2024-07-29 08:57:35 +02:00
ticketingUrl: getTicketingUrl(eventDate),
id: getId(eventDate),
};
});
return mapadoDates;
2024-07-24 15:56:28 +02:00
}
2024-07-26 10:33:31 +02:00
function getDay(eventDate) {
const date = eventDate.startDate.slice(0, 10);
const splittedDate = date.split("-");
const day = splittedDate[2];
2024-07-29 08:57:35 +02:00
return day;
2024-07-26 10:33:31 +02:00
}
function getStartTime(eventDate) {
const rawTime = eventDate.startDate.slice(11, 19);
const time = dayjs(`2000-01-01T${rawTime}`);
2024-07-29 08:57:35 +02:00
const formattedTime = time.format("HH[h]mm");
return formattedTime;
2024-07-26 10:33:31 +02:00
}
function getTicketingUrl(eventDate) {
2024-07-29 08:57:35 +02:00
const baseUrl = "https://cdn-besancon.mapado.com/event/";
return baseUrl + eventDate.ticketing.slug;
}
function getId(eventData) {
const endpoint = eventData.ticketing["@id"];
const splitString = endpoint.split("/");
const id = parseInt(splitString[3]);
return id;
}
2024-07-29 09:57:01 +02:00
async function getMergedDates(monthNumb, dates) {
2024-07-29 08:57:35 +02:00
const month = dayjs().month(monthNumb).format("YYYY-MM");
const requestParams = {
month,
dates,
};
const requestOptions = {
method: "POST",
body: JSON.stringify(requestParams),
};
const response = await fetch("/month-dates.json", requestOptions);
const json = await response.json();
return json;
2024-07-26 10:33:31 +02:00
}
2024-08-28 08:46:00 +02:00
async function updateMapadoEvent(pageUri) {
const headers = new Headers();
const requestOptions = {
method: "POST",
headers: headers,
redirect: "follow",
body: JSON.stringify({
pageUri,
}),
};
const response = await fetch("/update-mapado-event.json", requestOptions);
const json = await response.json();
console.log("Séance récupérées de Mapado", json);
2024-08-28 08:46:00 +02:00
return json;
}
function dateToFrench(date) {
date = dayjs(date);
return date.format("D MMMM YYYY");
}