feat(compte/vues): Ouvrir via URL courte + bouton copier (#112)

This commit is contained in:
Colin Maudry
2026-07-13 17:35:53 +02:00
parent 2a22951829
commit 0e0fb32222
2 changed files with 25 additions and 7 deletions
+8 -5
View File
@@ -1,7 +1,7 @@
import re
import dash_bootstrap_components as dbc
from dash import html
from dash import dcc, html
from unidecode import unidecode
from src.utils import DOMAIN_NAME
@@ -63,19 +63,22 @@ def saved_views_items(views) -> list:
def _view_row(view) -> html.Div:
view_id = view["id"]
share_url = build_view_url(view["name"], view["token"])
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(
# 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="/tableau",
href=share_url,
color="link",
size="sm",
),
dcc.Clipboard(
content=share_url,
title="Copier le lien vers cette vue",
style={"cursor": "pointer", "fontSize": "1.1rem"},
),
dbc.Button(
"Renommer",
id={"type": "vue-rename-open", "index": view_id},
+17 -2
View File
@@ -5,8 +5,8 @@ class _Row(dict):
"""Imite un sqlite3.Row : accès par clé."""
def _view(view_id, name, query):
return _Row(id=view_id, name=name, query=query)
def _view(view_id, name, query, token="abc123"):
return _Row(id=view_id, name=name, query=query, token=token)
def test_bar_style_hidden_for_non_subscriber():
@@ -96,3 +96,18 @@ def test_token_from_vue_param():
assert ui.token_from_vue_param("abc123") == "abc123"
assert ui.token_from_vue_param("") is None
assert ui.token_from_vue_param(None) is None
def test_view_row_open_uses_short_url(monkeypatch):
monkeypatch.setattr(ui, "DOMAIN_NAME", "test.colibre.fr")
row = ui._view_row(_view(1, "Mes Marchés", "q", token="tok123"))
text = str(row)
assert "https://test.colibre.fr/tableau?vue=mes-marches_tok123" in text
def test_view_row_has_clipboard_with_url(monkeypatch):
monkeypatch.setattr(ui, "DOMAIN_NAME", "test.colibre.fr")
row = ui._view_row(_view(1, "Mes Marchés", "q", token="tok123"))
text = str(row)
assert "Clipboard" in text
assert "Copier le lien" in text