last update
This commit is contained in:
@@ -79,8 +79,10 @@
|
||||
};
|
||||
|
||||
/**
|
||||
* Cache de données brutes qu'un module expose aux autres, pour éviter de
|
||||
* refaire un appel réseau déjà effectué.
|
||||
* Ce qu'un module expose aux autres : des données brutes déjà chargées (pour
|
||||
* éviter de refaire un appel réseau) et des FABRIQUES d'écran, quand deux
|
||||
* pages rendent le même bloc à partir de la même API — voir
|
||||
* `comptes-acces.js`, partagé par l'espace DSI et l'onglet Administration.
|
||||
*/
|
||||
const shared = {
|
||||
lastAgentOverviewData: null,
|
||||
@@ -177,6 +179,58 @@
|
||||
return data?.details ? `${base} Détail : ${data.details}` : base;
|
||||
}
|
||||
|
||||
/**
|
||||
* Appel d'API mutualisé : lit le JSON et transforme toute réponse non-OK en
|
||||
* exception, de sorte que l'appelant n'a qu'un seul `catch` à écrire.
|
||||
*
|
||||
* Chaque écran avait recopié ces quatre lignes ; elles vivent ici depuis
|
||||
* qu'elles servaient à l'identique dans quatre modules.
|
||||
*/
|
||||
async function apiJson(url, options = {}) {
|
||||
const response = await fetch(url, options);
|
||||
const data = await readJsonResponse(response);
|
||||
if (!response.ok) throw new Error(apiErrorMessage(data, 'Opération impossible.'));
|
||||
return data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Raccourci des appels mutants : POST JSON avec le jeton CSRF DANS LE CORPS.
|
||||
* PTA ne lit jamais le jeton depuis un en-tête (voir Csrf::assertPayload).
|
||||
*/
|
||||
function postJson(url, payload) {
|
||||
return apiJson(url, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ csrf_token: window.PTA_CONFIG?.csrfToken, ...payload }),
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Message dans un bandeau désigné par son identifiant HTML.
|
||||
*
|
||||
* `showMessage()` vise le bandeau unique de l'éditeur de planning
|
||||
* (`elements.messageBox`) ; les écrans qui en portent plusieurs — comptes,
|
||||
* jetons, journal — passent par ici.
|
||||
*/
|
||||
function showMessageIn(id, text, type = 'info') {
|
||||
const box = document.getElementById(id);
|
||||
if (!box) return;
|
||||
box.className = `message message-${type}`;
|
||||
box.textContent = text;
|
||||
}
|
||||
|
||||
/**
|
||||
* « 2026-08-20 09:41:07.482 » → « 20/08/2026 09:41 ».
|
||||
* Découpage de chaîne pour la même raison que `formatDate()` : `new Date()`
|
||||
* interpréterait la valeur en UTC.
|
||||
*/
|
||||
function formatDateTime(value) {
|
||||
if (!value) return '—';
|
||||
const [date, time = ''] = String(value).split(' ');
|
||||
const [year, month, day] = date.split('-');
|
||||
return `${day}/${month}/${year} ${time.slice(0, 5)}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Date → « AAAA-MM-JJ » en heure LOCALE.
|
||||
* `toISOString()` convertirait en UTC et décalerait la date d'un jour selon
|
||||
@@ -284,6 +338,10 @@
|
||||
clearMessage,
|
||||
readJsonResponse,
|
||||
apiErrorMessage,
|
||||
apiJson,
|
||||
postJson,
|
||||
showMessageIn,
|
||||
formatDateTime,
|
||||
parseIsoWeek,
|
||||
timeToMinutes,
|
||||
formatDuration,
|
||||
|
||||
Reference in New Issue
Block a user