dsfr-data-context — dashboard à filtre commun
dsfr-data-context orchestre des filtres transverses multi-sources :
un seul jeu de contrôles d'UI pilote toutes les vues d'un dashboard. Ici, les rappels de
produits RappelConso (DGCCRF) : une liste et un graphique partagent les
mêmes filtres catégorie + période, sans une ligne de JavaScript.
Opt-in : sans contexte, chaque dsfr-data-source reste un
pipeline autonome. On ne pose le contexte que pour un dashboard multi-vues. Les filtres
se combinent en AND (un whereKey stable par filtre) et
url-sync permet de partager un lien déjà filtré.
Démo — RappelConso filtré
Derniers rappels
Rappels par sous-catégorie
Le code
<!-- 1. Contrôles d'UI natifs (aucune contrainte de structure) -->
<select id="ctx-categorie">...</select>
<input type="month" id="ctx-mois">
<input type="number" id="ctx-jours">
<!-- 2. Le contexte : qui écoute quoi, vers quelles sources -->
<dsfr-data-context id="ctx-rappel" sources="src-rappel-liste src-rappel-graph" url-sync>
<dsfr-data-context-filter field="categorie_produit" label="Catégorie"
operator="eq" ui="ctx-categorie"></dsfr-data-context-filter>
<dsfr-data-context-filter field="date_publication" label="Mois"
operator="month-of" ui="ctx-mois"></dsfr-data-context-filter>
<dsfr-data-context-filter field="date_publication" label="Période"
operator="last-n-days" ui="ctx-jours"></dsfr-data-context-filter>
</dsfr-data-context>
<!-- 3. Récap des filtres actifs (chaque tag est supprimable) -->
<dsfr-data-context-tags for="ctx-rappel"></dsfr-data-context-tags>
<!-- 4. Les vues : des pipelines source → affichage ordinaires -->
<dsfr-data-source id="src-rappel-liste" api-type="opendatasoft" ... server-side></dsfr-data-source>
<dsfr-data-list source="src-rappel-liste" ...></dsfr-data-list>
<dsfr-data-source id="src-rappel-graph" api-type="opendatasoft" ... group-by="..." server-side></dsfr-data-source>
<dsfr-data-chart source="src-rappel-graph" ...></dsfr-data-chart>
Points clés
- AND systématique : catégorie + mois se cumulent ; deux filtres sur
date_publicationrestent deux émetteurs distincts (plage = intersection). - Dialectes automatiques : la clause est traduite en ODSQL pour OpenDataSoft, en colon pour Tabular/Grist — le même HTML marche sur les deux.
url-sync: l'état des filtres vit dans l'URL (?categorie_produit=Jouets&date_publication=2026-05) → rechargement et partage de lien. Les bornes dynamiques sérialisent l'intention (« 90 »), jamais les dates résolues.apply-to(non utilisé ici) : restreint un filtre à un sous-ensemble des sources.