refactor(admin): replace static dashboard stats with dynamic widget registry

This commit is contained in:
2026-04-15 20:43:10 -04:00
parent 371a69c499
commit 41edccc1a3
11 changed files with 198 additions and 69 deletions
+39
View File
@@ -0,0 +1,39 @@
/**
* Dashboard Server Registry — API générique
*
* Les features s'enregistrent ici via registerServerWidget().
* Ce fichier ne doit jamais importer une feature directement.
* Les features dépendent de ce fichier, pas l'inverse.
*/
const widgets = new Map(); // id → fetcher
/**
* Enregistre une fonction de fetch pour le tableau de bord.
* Appelé en side effect par chaque feature (ex: auth/dashboard.server.js).
* @param {string} id - Identifiant unique de la feature
* @param {() => Promise<any>} fetcher - Fonction async retournant des données sérialisables
*/
export function registerServerWidget(id, fetcher) {
widgets.set(id, fetcher);
}
/**
* Exécute tous les fetchers enregistrés en parallèle.
* Un fetcher qui échoue n'empêche pas les autres (Promise.allSettled).
* @returns {Promise<Record<string, any>>} Map featureId → données
*/
export async function collectAllDashboardData() {
const results = await Promise.allSettled(
Array.from(widgets.entries()).map(([id, fetcher]) =>
fetcher().then(data => ({ id, data }))
)
);
return results.reduce((acc, result) => {
if (result.status === 'fulfilled') {
acc[result.value.id] = result.value.data;
}
return acc;
}, {});
}