feat(tableau): vues sauvegardées en JSON AST, retrait URL riche (#41)

Les vues stockent désormais {filterModel, columnState} en JSON dans
saved_views.query au lieu d'une query string DSL. Le rappel d'une vue
applique filterModel + columnState à la grille AG Grid via un nouveau
callback apply_saved_view, déclenché par pattern-matching sur les items
du menu "Mes vues" (désormais cliquables au lieu de liens href).

Retire restore_view_from_url, sync_url_and_reset_button,
show_confirmation, le bouton "Partager la vue" et le clientside
clean_filters de tableau.py - la migration AG Grid retire le mécanisme
d'URL riche sans rétrocompatibilité.

Le lien "Ouvrir" de compte/vues.py pointe maintenant vers /tableau nu
(limitation connue documentée, le rappel cross-page reste à faire).
This commit is contained in:
Colin Maudry
2026-07-10 08:35:31 +02:00
parent fbea2ebd53
commit 8efd8db07e
3 changed files with 41 additions and 138 deletions
+9 -2
View File
@@ -23,7 +23,11 @@ def prepare_view_to_save(
def saved_views_items(views) -> list:
return [
dbc.DropdownMenuItem(view["name"], href=f"/tableau?{view['query']}")
dbc.DropdownMenuItem(
view["name"],
id={"type": "saved-view-item", "index": view["id"]},
n_clicks=0,
)
for view in views
]
@@ -35,8 +39,11 @@ def _view_row(view) -> html.Div:
children=[
html.Span(view["name"], className="flex-grow-1"),
dbc.Button(
# Limitation connue : la vue n'est pas appliquée automatiquement
# en arrivant sur /tableau depuis cette page. Le mécanisme de
# rappel multi-page reste à faire (voir tableau.py `apply_saved_view`).
"Ouvrir",
href=f"/tableau?{view['query']}",
href="/tableau",
color="link",
size="sm",
),