feat(vue-fiches): tri ordre d'origine, triDefaut, libellés de vue et adaptateur mot (B6-M2)

Extensions optionnelles du composant partagé, sans effet sur / et /agences :
tri 'ordre' (ordre du tableau d'entrée) avec config.triDefaut et libellesTri,
prop libellesVue (Graphe au lieu de Carte, Voir dans le graphe), adaptateur
toMiniMot (kind 'mot'). 22 cas ajoutés à test-vue-fiches (80/80).

Co-Authored-By: Claude Sonnet <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0136n5xMLHuaBDLcPJYCDjRW
This commit is contained in:
Jules Neny
2026-10-08 16:56:18 +02:00
co-authored by Claude Sonnet
parent 68d3b080d7
commit 11f24c7925
5 changed files with 135 additions and 6 deletions
+8 -1
View File
@@ -10,13 +10,14 @@
import type { MiniFiche } from '../composables/useFicheAdapter'
export type EtatVue = 'carte' | 'mixte' | 'fiches'
export type TriFiches = 'pertinence' | 'nom' | 'recent'
export type TriFiches = 'pertinence' | 'nom' | 'recent' | 'ordre'
export const ETATS_VUE: EtatVue[] = ['carte', 'mixte', 'fiches']
export const LIBELLES_TRI: Record<TriFiches, string> = {
pertinence: 'Pertinence',
nom: 'A → Z',
recent: 'Récentes',
ordre: 'Ordre d’origine',
}
export interface ValeurFiltre {
@@ -57,6 +58,10 @@ export interface ConfigVueFiches {
groupes: GroupeDef[]
etats: EtatVue[]
sousVues?: SousVuesCarte
/** Tri sans filtre actif (défaut : `nom`). Doit figurer dans `tris`. */
triDefaut?: TriFiches
/** Libellés de tri propres à la page (sinon `LIBELLES_TRI`). */
libellesTri?: Partial<Record<TriFiches, string>>
}
export interface EtatFiches {
@@ -227,6 +232,7 @@ export function triEffectif(etat: EtatFiches, cfg: ConfigVueFiches): TriFiches {
if (etat.tri) return etat.tri
const filtreEtiquette = Object.values(etat.filtres).some((v) => v.length > 0)
if (filtreEtiquette && cfg.tris.includes('pertinence')) return 'pertinence'
if (cfg.triDefaut && cfg.tris.includes(cfg.triDefaut)) return cfg.triDefaut
return cfg.tris.includes('nom') ? 'nom' : cfg.tris[0] ?? 'nom'
}
@@ -250,6 +256,7 @@ function idNum(f: MiniFiche): number {
export function trierFiches(fiches: MiniFiche[], tri: TriFiches, etat: EtatFiches): MiniFiche[] {
const copie = [...fiches]
if (tri === 'ordre') return copie // ordre du tableau d'entrée (déjà filtré, jamais réordonné)
if (tri === 'nom') return copie.sort(parNom)
if (tri === 'pertinence') {
const score = new Map(copie.map((f) => [f, pertinence(f, etat)]))