35 lines
1.0 KiB
TypeScript
35 lines
1.0 KiB
TypeScript
import { basculerFacette, lireFiltres, rechercher } from '$serveur/requetes';
|
|||
|
|
import type { PageServerLoad } from './$types';
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Recherche à facettes — rendu serveur, jamais prérendue.
|
||
|
|
*
|
||
|
|
* Les facettes vivent dans `url.searchParams` : une URL de recherche est
|
||
|
|
* partageable et se recharge à l'identique. Le prérendu interdit d'y accéder,
|
||
|
|
* c'est pourquoi cette route reste en rendu serveur (§3bis).
|
||
|
|
*/
|
||
|
|
export const load: PageServerLoad = async ({ url }) => {
|
||
|
|
const filtres = lireFiltres(url.searchParams);
|
||
|
|
const resultats = rechercher(filtres);
|
||
|
|
|
||
|
|
return {
|
||
|
|
filtres,
|
||
|
|
resultats,
|
||
|
|
// Les liens de facette sont calculés côté serveur : la page fonctionne
|
||
|
|
// entièrement sans JavaScript.
|
||
|
|
liens: Object.fromEntries(
|
||
|
|
(['statut', 'theme', 'type', 'impact', 'guadeloupe', 'confiance'] as const).map(
|
||
|
|
(champ) => [
|
||
|
|
champ,
|
||
|
|
Object.fromEntries(
|
||
|
|
resultats.facettes[champ === 'guadeloupe' ? 'guadeloupe' : champ].map((f) => [
|
||
|
|
f.valeur,
|
||
|
|
basculerFacette(filtres, champ, f.valeur)
|
||
|
|
])
|
||
|
|
)
|
||
|
|
]
|
||
|
|
)
|
||
|
|
)
|
||
|
|
};
|
||
|
|
};
|