40 lines
1.2 KiB
JavaScript
40 lines
1.2 KiB
JavaScript
/**
|
|
* 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;
|
|
}, {});
|
|
}
|