diff --git a/src/assets/style.css b/src/assets/style.css index fe2f0a0..00f20a0 100644 --- a/src/assets/style.css +++ b/src/assets/style.css @@ -40,6 +40,7 @@ td[data-dash-column="objet"] { background-color: #b33821; color: white; font-family: sans-serif; + text-align: left; } .dash-table-container diff --git a/src/pages/acheteur.py b/src/pages/acheteur.py index 54c3ada..6af4f51 100644 --- a/src/pages/acheteur.py +++ b/src/pages/acheteur.py @@ -12,6 +12,7 @@ from src.utils import ( get_departement_region, lf, meta_content, + setup_table_columns, ) register_page( @@ -24,8 +25,6 @@ register_page( order=5, ) -# 21690123100011 - layout = [ dcc.Store(id="acheteur_data", storage_type="memory"), dcc.Location(id="url", refresh="callback-nav"), @@ -214,30 +213,26 @@ def get_last_marches_table(data) -> html.Div: dff = pl.DataFrame(data) dff = format_montant(dff) + columns, tooltip = setup_table_columns( + dff, hideable=False, exclude=["titulaire_id", "titulaire_typeIdentifiant"] + ) data = dff.to_dicts() data = add_org_links_in_dict(data, "titulaire") table = html.Div( className="marches_table", - id="marches_datatable", + id="acheteur_datatable", children=dash_table.DataTable( data=data, markdown_options={"html": True}, page_action="native", filter_action="native", filter_options={"case": "insensitive", "placeholder_text": "Filtrer..."}, - columns=[ - { - "name": i, - "id": i, - "presentation": "markdown", - "type": "text", - "format": {"nully": "N/A"}, - "hideable": False, - } - for i in columns - if i not in ["titulaire_id", "titulaire_typeIdentifiant"] - ], + columns=columns, + tooltip_header=tooltip, + tooltip_duration=8000, + tooltip_delay=350, + cell_selectable=False, page_size=10, style_cell_conditional=[ { diff --git a/src/pages/home.py b/src/pages/home.py index a1ebaaa..b10465a 100644 --- a/src/pages/home.py +++ b/src/pages/home.py @@ -7,12 +7,12 @@ from dash import Input, Output, State, callback, dash_table, dcc, html, register from src.utils import ( add_org_links, add_resource_link, - data_schema, filter_table_data, format_montant, format_number, lf, meta_content, + setup_table_columns, sort_table_data, ) @@ -205,34 +205,7 @@ def update_table(page_current, page_size, filter_query, sort_by, data_timestamp) # Formatage des montants dff = format_montant(dff) - # Liste finale de colonnes - columns = [] - tooltip = {} - for column_id in dff.columns: - column_object = data_schema.get(column_id) - if column_object: - column_name = column_object.get("friendly_name", column_id) - else: - column_name = column_id - - column = { - "name": column_name, - "id": column_id, - "presentation": "markdown", - "type": "text", - "format": {"nully": "N/A"}, - "hideable": True, - } - columns.append(column) - - if column_object: - tooltip[column_id] = { - "value": f"""**{column_object.get("friendly_name", column_id)}** - - """ - + column_object["description"], - "type": "markdown", - } + columns, tooltip = setup_table_columns(dff) dicts = dff.to_dicts() diff --git a/src/pages/titulaire.py b/src/pages/titulaire.py index 7ea1a2a..2816f0f 100644 --- a/src/pages/titulaire.py +++ b/src/pages/titulaire.py @@ -12,6 +12,7 @@ from src.utils import ( get_departement_region, lf, meta_content, + setup_table_columns, ) register_page( @@ -216,6 +217,7 @@ def get_last_marches_table(data) -> html.Div: dff = pl.DataFrame(data) dff = format_montant(dff) + columns, tooltip = setup_table_columns(dff, hideable=False, exclude=["acheteur_id"]) data = dff.to_dicts() # Idéalement on utiliserait add_org_links(), mais le résultat attendu # est différent de home.py (Tableau) @@ -223,25 +225,18 @@ def get_last_marches_table(data) -> html.Div: table = html.Div( className="marches_table", - id="marches_datatable", + id="titulaire_datatable", children=dash_table.DataTable( data=data, markdown_options={"html": True}, page_action="native", filter_action="native", filter_options={"case": "insensitive", "placeholder_text": "Filtrer..."}, - columns=[ - { - "name": i, - "id": i, - "presentation": "markdown", - "type": "text", - "format": {"nully": "N/A"}, - "hideable": False, - } - for i in columns - if i not in ["titulaire_id"] - ], + columns=columns, + tooltip_header=tooltip, + tooltip_duration=8000, + tooltip_delay=350, + cell_selectable=False, page_size=10, style_cell_conditional=[ { diff --git a/src/utils.py b/src/utils.py index 91e5d0b..dc55c19 100644 --- a/src/utils.py +++ b/src/utils.py @@ -255,6 +255,40 @@ def sort_table_data(lff: pl.LazyFrame, sort_by: list) -> pl.LazyFrame: return lff +def setup_table_columns(dff, hideable: bool = True, exclude: list = None) -> tuple: + # Liste finale de colonnes + columns = [] + tooltip = {} + for column_id in dff.columns: + if exclude and column_id in exclude: + continue + column_object = data_schema.get(column_id) + if column_object: + column_name = column_object.get("friendly_name", column_id) + else: + column_name = column_id + + column = { + "name": column_name, + "id": column_id, + "presentation": "markdown", + "type": "text", + "format": {"nully": "N/A"}, + "hideable": hideable, + } + columns.append(column) + + if column_object: + tooltip[column_id] = { + "value": f"""**{column_object.get("friendly_name", column_id)}** + + """ + + column_object["description"], + "type": "markdown", + } + return columns, tooltip + + lf = get_decp_data() departements = get_departements() domain_name = (