Acter les choix d'interface et retirer les points traites d'IDEES.md
CLAUDE.md gagne une section « Interface — décisions actées » : les deux modes de la fiche et le mode porté par l'URL, les deux exceptions assumées qui restent hors édition (statut, prêts), la liste en lecture seule, le format réservé aux ebooks et son corollaire sur le formulaire, l'agrandissement de couverture. Y figure aussi le piège Blazor du routeur qui ne redessine pas quand aucun paramètre ne change. IDEES.md perd sa section « Interface — retours d'usage », désormais entièrement traitée. La recherche sans accents y reste, mais annotée : elle paraît réglée par la refonte du schéma — « Emile » remonte bien « Émile Zola » sur l'API — sans avoir été traitée comme un point à part entière. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -465,6 +465,67 @@ livre sorti depuis six mois qu'on avait oublié, pas celui prêté hier.
|
||||
(`ServiceLivresApi.EnUtc`). Sans cela le prêt se décalerait d'un jour pour la moitié du globe.
|
||||
Vérifié en exécution : saisie du 12/08 → `2026-08-11 22:00` en base (CEST).
|
||||
|
||||
## Interface — décisions actées le 2026-08-18
|
||||
|
||||
Retours d'usage d'`IDEES.md`, appliqués et donc retirés de ce fichier-là.
|
||||
|
||||
### La fiche d'un livre a deux modes, et le mode est dans l'URL
|
||||
|
||||
`/livres/{id}` consulte, `/livres/{id}/edition` modifie. Ouvrir une fiche depuis le catalogue ne
|
||||
doit rien pouvoir casser — sur mobile on ouvre une fiche pour *regarder*, et l'ancienne page
|
||||
plaçait un formulaire vivant sous le pouce.
|
||||
|
||||
Le mode n'est **pas** un booléen interne : le mettre dans l'adresse rend l'écran d'édition
|
||||
partageable et fait du bouton « retour » du navigateur une sortie d'édition naturelle. Vérifié.
|
||||
|
||||
⚠️ **Piège Blazor à connaître.** Les deux `@page` visent le même composant avec le même `Id` :
|
||||
passer de l'un à l'autre ne change **aucun paramètre**, et le routeur ne déclenche alors **aucun
|
||||
nouveau rendu**. Constaté en exécution : l'URL passait à `/edition`, l'écran restait en
|
||||
consultation (alors qu'un chargement direct de l'URL fonctionnait, ce qui masque le défaut).
|
||||
Le composant s'abonne donc à `NavigationManager.LocationChanged` pour se redessiner lui-même.
|
||||
|
||||
### Ce qui reste manipulable sans entrer en édition
|
||||
|
||||
Deux exceptions assumées, parce que ce ne sont pas des modifications de la *fiche* :
|
||||
|
||||
| Action | Où | Pourquoi hors « Éditer » |
|
||||
|---|---|---|
|
||||
| Statut de lecture | bloc dédié sur la fiche en consultation | Action la plus fréquente de l'application, et elle ne touche qu'à **ma** lecture, pas à la fiche commune. L'enfouir derrière « Éditer » serait un recul |
|
||||
| Prêter / marquer rendu | bloc « Prêt » sur la fiche en consultation | Gestes du quotidien, et le prêt est une donnée **du foyer** : n'importe qui doit pouvoir noter un retour sans ouvrir un formulaire d'édition |
|
||||
|
||||
Corollaire : le statut modifié depuis la consultation doit **rafraîchir la saisie du formulaire
|
||||
d'édition**, sinon un passage ultérieur en édition réécrirait l'ancienne valeur.
|
||||
|
||||
La **suppression**, elle, n'est offerte que dans le mode édition : c'est le seul écran où l'on
|
||||
vient pour changer quelque chose.
|
||||
|
||||
### La liste ne se manipule pas
|
||||
|
||||
Dans le catalogue, le statut de lecture est une **pastille en lecture seule**, sur la même ligne
|
||||
que les autres étiquettes. Les trois boutons *À lire / En cours / Lu* directement actionnables
|
||||
depuis chaque carte ont été retirés : trop faciles à déclencher par erreur en faisant défiler.
|
||||
|
||||
Pas de pastille = « non commencé », cohérent avec l'absence de ligne en base.
|
||||
|
||||
### Le format ne s'affiche que pour les ebooks
|
||||
|
||||
Un livre est **physique par défaut** : c'est le cas majoritaire, et l'étiquette sur chaque ligne
|
||||
n'apprenait rien. Seul « Numérique » apparaît, dans la liste comme sur la fiche.
|
||||
|
||||
⚠️ Conséquence à ne pas casser : le formulaire d'ajout **doit** présélectionner *Physique*,
|
||||
sinon on créerait des fiches sans format en croyant que « rien d'affiché = physique ». C'est
|
||||
acquis sans code particulier (`Format.Physique` vaut 0, valeur par défaut de l'énumération) —
|
||||
mais si l'énumération change d'ordre un jour, ce comportement tombe.
|
||||
|
||||
### Couverture agrandissable au clic
|
||||
|
||||
Vignette et fiche : cliquer l'image l'affiche en grand sur fond sombre, fermeture au clic
|
||||
extérieur ou par Échap. Le calque est focalisé à l'ouverture (`FocusAsync`) — sans focus, aucun
|
||||
`keydown` ne lui parviendrait et Échap resterait sans effet.
|
||||
|
||||
**Le substitut à initiale n'est jamais cliquable** : le bouton déclencheur n'est rendu que
|
||||
lorsqu'une URL de couverture existe. Sans couverture, il n'y a rien à agrandir.
|
||||
|
||||
## Historique du projet (pourquoi ces choix)
|
||||
|
||||
L'utilisateur a testé deux solutions existantes avant de se lancer dans un projet custom :
|
||||
|
||||
Reference in New Issue
Block a user