import { DateTime } from "luxon";
import { couleurs } from "./colors";
/**
* Cette fonction récupère une liste de communes en fonction d'un code postal donné à l'aide d'une API
* d'IGN France.
* @param {String} cp - Le paramètre `cp` est une chaîne représentant un code postal français. Il est converti
* en entier à l'aide de `parseInt()` avant d'être utilisé dans la requête API.
* @param { Function } - onDone est une fonction de rappel qui sera exécutée lorsque l'appel API réussit et
* renvoie une réponse. Il prend les données de réponse comme argument et peut être utilisé pour gérer
* les données dans la fonction appelante.
* @param { Function } - Le paramètre `onError` est une fonction de rappel qui sera exécutée s'il y a une
* erreur lors de la requête de récupération. Il permet une gestion personnalisée des erreurs et peut
* être utilisé pour afficher des messages d'erreur ou effectuer d'autres actions en réponse à une
* erreur.
*/
export async function getCommunes(cp, onDone = undefined, onError = undefined) {
const codePostal = parseInt(cp);
await fetch(
"https://apicarto.ign.fr/api/codes-postaux/communes/" + codePostal,
{
method: "GET",
headers: {
Accept: "application/json",
},
},
)
.then((response) => response.json())
.then((json) => {
if (onDone) onDone(json);
})
.catch((error) => {
if (onError) onError(error);
console.error("Erreur : " + error);
});
}
/**
* Il s'agit d'une fonction JavaScript qui utilise l'API-adresse.data.gouv.fr pour rechercher des
* adresses à partir d'une requête et renvoie les résultats au format JSON.
* @param { String } query - L'adresse ou la requête d'emplacement à rechercher dans l'API.
* @param { Function } - onDone est une fonction de rappel qui sera exécutée lorsque l'appel API réussit et
* renvoie une réponse. Il prend la réponse JSON comme paramètre.
* @param { Function } - Le paramètre `onError` est une fonction de rappel qui sera exécutée s'il y a une
* erreur lors de l'appel de l'API. C'est un paramètre optionnel qui peut être passé à la fonction
* `findAdresse`. S'il est fourni, il recevra l'objet d'erreur comme argument.
*/
export async function findAdresse(
query,
onDone = undefined,
onError = undefined,
) {
// https://api-adresse.data.gouv.fr/search/?q=
query = encodeURIComponent(query);
await fetch(
"https://api-adresse.data.gouv.fr/search/?q=" + query + "&limit=15",
{
method: "GET",
headers: {
Accept: "application/json",
},
},
)
.then((response) => response.json())
.then((json) => {
if (onDone) onDone(json);
})
.catch((error) => {
if (onError) onError(error);
console.error("Erreur : " + error);
});
}
/**
* @description La fonction `getDataFromGouvFr` récupère les données de l'API du gouvernement français pour les
* jours fériés et les formate dans une structure de données spécifique.
* @param events - Le paramètre `events` est un tableau d'objets représentant des événements. (store.loadedEvents)
* @param colors - Le paramètre `colors` est un objets représentant des couleurs. (Piveteau)
* @returns les données formatées, qui incluent les événements récupérés depuis le point de terminaison
* API "https://calendrier.api.gouv.fr/jours-feries/metropole/". Les événements sont formatés dans une
* structure spécifique et renvoyés sous forme d'objet.
*/
export async function getDataFromGouvFr(events, colors = couleurs) {
let year = DateTime.now().year;
const loadedEvents = events;
const sortedData = [];
const formatData = (json) => {
for (let date in json) sortedData.push({ date, comment: json[date] });
};
for (let i = year; i <= year + 1; i++) {
await fetch(
"https://calendrier.api.gouv.fr/jours-feries/metropole/" + i + ".json",
{
method: "GET",
headers: {
Accept: "application/json",
},
},
)
.then((response) => response.json())
.then((json) => {
formatData(json);
})
.catch((error) => console.error("Erreur : " + error));
}
const formatedData = () => {
const data =
loadedEvents.length === 0
? {
events: [],
}
: loadedEvents;
for (let each of sortedData) {
const index = data.events.findIndex(
(event) =>
event.start === DateTime.fromISO(each.date).toISODate() &&
event.name === "Férié : " + each.comment,
);
if (index === -1)
data.events.push({
name: "Férié : " + each.comment,
start: DateTime.fromISO(each.date).toISODate(),
end: DateTime.fromISO(each.date).toISODate(),
color: colors.b3BusinnessDays,
timed: false,
});
}
return data;
};
return formatedData();
}