v5.4.1 Partage : correctif permissions + autocomplete membres (inclut v5.4.0 Interactions de bloc)
FlowDeck CI / test (push) Failing after 18s
FlowDeck CI / docker (push) Skipped

- Fix "Invalid permission" : le client envoyait editor/commenter/viewer alors que
  l'API attend view/comment/edit (invitePermission -> 'edit', menu participants aligné)
- PUT /api/pages/{page_id}/share/{share_id} : mise à jour de permission persistée
- Autocomplete des membres existants dans le champ d'invitation (search users + debounce,
  navigation clavier, envoi user_id pour lier le partage au compte)
- Upsert anti-doublon dans le partage + trim email backend
- 12 tests tests/test_sharing.py ; suite 319 verte (+3 PDF pre-existants)

Sans oublier v5.4.0 (non publie jusque-la) :
- Undo/Redo (Ctrl+Z/Ctrl+Shift+Z/Ctrl+Y), duplicate (Ctrl+D), menu de bloc (turn
  into, couleurs, lien #fdblk-, move to, delete), drag&drop multi-selection,
  slash "Actions", en-tetes de tableau (has_header/first_col_header) + exports,
  sync realtime immédiat apres mutation ; 9 tests test_block_interactions.py
This commit is contained in:
2026-09-08 09:34:41 -04:00
parent f84ff201ea
commit b3c90efa73
12 changed files with 1055 additions and 119 deletions
+58
View File
@@ -1,5 +1,63 @@
# Changelog - FlowDeck
## v5.4.1 (2026-09-08) — Partage de page : correctif permissions + autocomplete membres
> Le partage à un membre existant échouait avec « Invalid permission. Use view,
> comment, or edit. » — le client envoyait `editor`/`commenter`/`viewer` alors
> que l'API n'accepte que `view`/`comment`/`edit`. Corrigé, et enrichi.
- **Correctif permissions** — défaut du champ d'invitation passé à `edit` ;
valeurs, libellés et surbrillance du menu de permission des participants
alignés sur le contrat API (`view`/`comment`/`edit`).
- **Mise à jour de permission persistée** — nouvel endpoint
`PUT /api/pages/{page_id}/share/{share_id}` ; le menu de permission d'un
participant enregistre désormais le changement (avant : visuel uniquement).
- **Autocomplete des membres existants** — en tapant dans le champ d'invitation,
recherche dans `/api/notifications/users/search?q=` (debounce 150 ms) avec
liste de suggestions (avatar couleur, login, nom complet), navigation
clavier ↑/↓/Entrée/Échap ; soi-même et membres déjà partagés exclus.
- **Partage lié au compte** — la sélection d'un membre dans les suggestions
envoie `user_id`, le partage est donc lié au compte (pas seulement à un
email) ; un email peut toujours être saisi librement.
- **Upsert anti-doublon** — partager un membre déjà présent met à jour sa
permission au lieu de créer une ligne dupliquée ; trim de l'email côté serveur.
- **Tests** (tests/test_sharing.py) : partage par user_id/email, permission
invalide rejetée, upsert, PUT permission, suppression avec unset is_shared,
erreurs d'auth. Suite complète 319 verte (+3 PDF pré-existants).
## v5.4.0 (2026-09-08) — Interactions de bloc
> Manipulation riche des blocs façon Notion : undo/redo, duplication, menu de
> bloc ⋮ (turn into, couleurs, lien vers le bloc, déplacer, supprimer),
> glisser-déposer multi-sélection et en-têtes de tableau configurables.
- **Undo/Redo** : pile d'historique (100 entrées) alimentée à chaque mutation
(frappe Entrée, retour arrière, slash, tableau, toggle, colonnes…), rappel
`Ctrl+Z` / `Ctrl+Shift+Z` ou `Ctrl+Y`, restauration avec re-focus du bloc.
- **Duplication de bloc** : `Ctrl+D`, menu bloc ou commande slash « Duplicate » ;
copie profonde (enfants columns/toggle inclus) insérée juste en dessous ;
en multi-sélection, le groupe entier est dupliqué.
- **Menu de bloc ⋮** sur la poignée (clic ou clic droit) : « Turn into »
(sous-menu conservant le contenu), Duplicate, Copy link to block
(`#fdblk-<id>`, scrolls/focus au chargement), Move to… (dialogue de
recherche des pages de l'arbre, déplacement du bloc via l'API), Delete,
couleur de texte et de fond appliquées à un bloc ou à la sélection.
- **Glisser-déposer multi-sélection** : `Shift+clic` sur la poignée ajoute un
bloc à la sélection ; déplacer un bloc sélectionné déplace tout le groupe
(reconstruction de l'ordre depuis le DOM via `data-id`).
- **Commandes slash étendues** : groupe « Actions » avec Duplicate, Turn
into…, Copy link to block et Delete block.
- **En-têtes de tableau** : toggles « Header row » / « First col » dans la
barre du tableau ; `has_header` (toujours actif par défaut) et nouveaux
`first_col_header` persistés et pris en compte dans les exports Markdown/HTML
(app/services/export.py) ainsi que que dans `blocksToMarkdown` client.
- **Intégration realtime** : méthode `syncNow`/`forceEmit` sur `window.__fdRT`
appelée après chaque mutation programmatique pour pousser immédiatement les
ops (undo, duplicate, drag, turn into, couleurs, déplacement, toggles).
- **Tests** (tests/test_block_interactions.py) : persistance des blocs avec
`has_header`/`first_col_header`/`style`, exports table Markdown/HTML,
endpoint « Move to » (get page + POST blocks sur la cible).
## v5.3.0 (2026-09-08) — Realtime : édition collaborative en direct
> Deux utilisateurs peuvent maintenant éditer une même page **en même temps**