feat: helpers UI/validation des vues sauvegardées #95

This commit is contained in:
Colin Maudry
2026-06-29 16:22:54 +02:00
parent 22fc0cbab2
commit 3d09b489b9
2 changed files with 128 additions and 0 deletions
+69
View File
@@ -0,0 +1,69 @@
import dash_bootstrap_components as dbc
from dash import html
def bar_style(has_subscription: bool) -> dict:
return {} if has_subscription else {"display": "none"}
def clean_view_name(name: str | None) -> str:
return (name or "").strip()
def prepare_view_to_save(
has_subscription: bool, name: str | None
) -> tuple[str | None, str | None]:
if not has_subscription:
return None, "Réservé aux abonné·es."
clean = clean_view_name(name)
if not clean:
return None, "Veuillez saisir un nom pour la vue."
return clean, None
def saved_views_items(views) -> list:
return [
dbc.DropdownMenuItem(view["name"], href=f"/tableau?{view['query']}")
for view in views
]
def _view_row(view) -> html.Div:
view_id = view["id"]
return html.Div(
className="saved-view-row d-flex align-items-center gap-2 mb-2",
children=[
html.Span(view["name"], className="flex-grow-1"),
dbc.Button(
"Ouvrir",
href=f"/tableau?{view['query']}",
color="link",
size="sm",
),
dbc.Button(
"Renommer",
id={"type": "vue-rename-open", "index": view_id},
color="secondary",
outline=True,
size="sm",
),
dbc.Button(
"Supprimer",
id={"type": "vue-delete", "index": view_id},
color="danger",
outline=True,
size="sm",
),
],
)
def views_table(views) -> html.Div:
if not views:
return html.Div(
html.P(
"Vous n'avez pas encore de vue enregistrée. "
"Créez-en une depuis le Tableau, bouton « Sauvegarder la vue »."
)
)
return html.Div([_view_row(v) for v in views])