feat(compte/vues): Ouvrir via URL courte + bouton copier (#112)
This commit is contained in:
@@ -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},
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user