Skip to content

fix(core): ne pas relayer order-by en tri serveur sur une colonne issue d'unpivot#410

Merged
bmatge merged 1 commit into
mainfrom
fix/394-order-by-unpivot-server-sort
Jul 18, 2026
Merged

fix(core): ne pas relayer order-by en tri serveur sur une colonne issue d'unpivot#410
bmatge merged 1 commit into
mainfrom
fix/394-order-by-unpivot-server-sort

Conversation

@bmatge

@bmatge bmatge commented Jul 18, 2026

Copy link
Copy Markdown
Owner

Résumé

Quand une dsfr-data-query porte un order-by sur une colonne créée en aval de la source (ex. annee, produite par dsfr-data-unpivot), la négociation serveur atteignait l'adapter Grist à travers la délégation transparente getAdapter() des transformateurs et poussait le tri en ?sort=annee côté serveur. La colonne n'existant pas dans la table Grist (format wide c2017…c2026), l'API répondait 500 unknown key annee et la source partagée tombait en erreur pour tous ses abonnés (charts, KPI).

Correctif

Piste 1 de l'issue : tri client systématique quand la chaîne transforme le schéma.

  • Nouveau hook optionnel transformsSchema() sur le contrat SourceElement (packages/core/src/utils/source-element.ts) : true si le composant (ou un transformateur en amont de lui) crée/renomme des colonnes par rapport au schéma de la source qui fetch.
  • dsfr-data-unpivot : répond toujours true (crée var-name/value-name, supprime les colonnes dépliées).
  • dsfr-data-normalize : répond true si rename/compute/flatten/lowercase-keys sont actifs ; sinon délègue le statut à son amont (couvre la chaîne normalize → unpivot → source).
  • dsfr-data-query.\_negotiateServerSide() : quand l'amont transforme le schéma, aucune délégation serveur (order-by, mais aussi group-by/aggregate/where — mêmes noms de colonnes post-transformation, même 500). Tout s'exécute client-side sur les données transformées.

Une query branchée directement sur une source (ou derrière un normalize purement « valeurs » : numeric-auto, trim…) continue de déléguer comme avant — non-régression couverte par un test de contrôle.

Tests

  • tests/query-orderby-unpivot.test.ts (9 tests) : repro du bug (l'order-by n'atteint plus la source), repli en tri client post-unpivot, extension à where/group-by, contrôle de non-régression sur la délégation directe, et statuts transformsSchema() sur la chaîne.
  • Suite complète : 150 fichiers / 3624 tests verts ; typecheck, ESLint et Prettier OK.
  • Changeset patch dsfr-data inclus.

Fixes #394

🤖 Generated with Claude Code

…ue d'unpivot (#394)

La négociation serveur de dsfr-data-query atteignait l'adapter Grist à
travers la délégation transparente getAdapter() des transformateurs et
poussait l'order-by en ?sort= serveur, alors que la colonne triée (annee)
était créée côté client par dsfr-data-unpivot → 500 unknown key, source
partagée en erreur pour tous ses abonnés.

Nouveau hook optionnel transformsSchema() sur le contrat SourceElement :
unpivot répond toujours true, normalize répond true si rename/compute/
flatten/lowercase-keys (sinon délègue à son amont). Quand la chaîne
transforme le schéma, dsfr-data-query ne délègue plus rien au serveur —
order-by, group-by et where s'exécutent client-side sur les données
post-transformation.

Fixes #394

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@bmatge
bmatge merged commit 344e929 into main Jul 18, 2026
9 checks passed
@bmatge
bmatge deleted the fix/394-order-by-unpivot-server-sort branch July 18, 2026 23:00
@github-actions github-actions Bot mentioned this pull request Jul 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] order-by d'une query relayé en tri serveur vers l'adapter Grist avec une colonne créée par dsfr-data-unpivot → 500 unknown key

1 participant