diff --git a/src/assets/style.css b/src/assets/style.css index e754bcf..7bde8b5 100644 --- a/src/assets/style.css +++ b/src/assets/style.css @@ -146,7 +146,7 @@ td[data-dash-column="objet"],td[data-dash-column="titulaire_nom"],td[data-dash-c /* Page de recherche */ #search { - margin: auto; + margin: 50px auto 0px auto; width: 450px; font-size: 18px; height: 30px; @@ -162,6 +162,16 @@ td[data-dash-column="objet"],td[data-dash-column="titulaire_nom"],td[data-dash-c margin-right: 12px; } +.results_acheteur { + grid-column: 1; + grid-row: 1; +} + +.results_titulaire { + grid-column: 2; + grid-row: 1; +} + /* Menu de navigation */ .navbar { @@ -191,7 +201,7 @@ summary > h3 { padding-top: 28px; } -/* Vue acheteur/titulaire */ +/* Vue acheteur/titulaire/recherche */ .wrapper { display: grid; grid-gap: 10px; @@ -199,9 +209,6 @@ summary > h3 { justify-content: space-between; } -.wrapper > div { -} - .org_title { grid-column: 1 / 3; grid-row: 1; diff --git a/src/pages/recherche.py b/src/pages/recherche.py index 6789440..e74a720 100644 --- a/src/pages/recherche.py +++ b/src/pages/recherche.py @@ -32,7 +32,7 @@ layout = html.Div( # className="search_options", # children=[dcc.RadioItems(options=["Acheteur(s)"])], # ), - html.Div(id="search_results"), + html.Div(id="search_results", className="wrapper"), ], ) @@ -62,13 +62,37 @@ def update_search_results(query): columns, tooltip = setup_table_columns(results, hideable=False) org_content = [ - html.H3(f"{org_type.title()}s : {count}"), - dash_table.DataTable( - columns=columns, - data=results.to_dicts(), - page_size=5, - style_table={"overflowX": "auto"}, - markdown_options={"html": True}, + html.Div( + className=f"results_{org_type}", + children=[ + html.H3(f"{org_type.title()}s : {count}"), + dash_table.DataTable( + columns=columns, + data=results.to_dicts(), + page_size=10, + # style_table={"overflowX": "auto"}, + markdown_options={"html": True}, + cell_selectable=False, + style_cell_conditional=[ + { + "if": {"column_id": "acheteur_nom"}, + "maxWidth": "250px", + "textAlign": "left", + "overflow": "hidden", + "lineHeight": "18px", + "whiteSpace": "normal", + }, + { + "if": {"column_id": "titulaire_nom"}, + "maxWidth": "250px", + "textAlign": "left", + "overflow": "hidden", + "lineHeight": "18px", + "whiteSpace": "normal", + }, + ], + ), + ], ) if count > 0 else html.P(f"Aucun {org_type} trouvé."), diff --git a/src/utils.py b/src/utils.py index d2c7bc4..9552df2 100644 --- a/src/utils.py +++ b/src/utils.py @@ -234,7 +234,7 @@ def get_org_data(dff: pl.DataFrame, org_type: str) -> pl.DataFrame: f"{org_type}_latitude", f"{org_type}_longitude" ), ) - lff = lff.group_by(cs.starts_with(org_type)).len("len_uid") + lff = lff.group_by(cs.starts_with(org_type)).len("Marchés") return lff.collect() @@ -406,10 +406,11 @@ def search_org(dff: pl.DataFrame, query: str, org_type: str) -> pl.DataFrame: if not query.strip(): return dff.select(pl.lit(False).alias("matches")) + sleep(0.2) + # Normalize query normalized_query = unidecode(query.strip()).upper() tokens = [" " + t.strip() for t in normalized_query.split() if t.strip()] - print(tokens) # Define columns based on entity type cols = [ @@ -440,15 +441,15 @@ def search_org(dff: pl.DataFrame, query: str, org_type: str) -> pl.DataFrame: # Sélection des colonnes if org_type == "acheteur": - dff = dff.select(cols + ["len_uid"]) + dff = dff.select(cols + ["Marchés"]) if org_type == "titulaire": - dff = dff.select(cols + ["len_uid", "titulaire_typeIdentifiant"]) + dff = dff.select(cols + ["Marchés", "titulaire_typeIdentifiant"]) # Apply and filter dff = ( dff.with_columns(token_matches + [match_score]) .filter(pl.col("match_score") == len(tokens)) - .sort("len_uid", descending=True) + .sort("Marchés", descending=True) .drop([f"token_{token}" for token in tokens]) ) @@ -463,7 +464,7 @@ def search_org(dff: pl.DataFrame, query: str, org_type: str) -> pl.DataFrame: ).alias("Département") ) - dff = dff.select(f"{org_type}_id", f"{org_type}_nom", "Département") + dff = dff.select(f"{org_type}_id", f"{org_type}_nom", "Département", "Marchés") return dff