- Barre de filtres en carte : recherche texte (titre, projet, #numéro, étiquettes ; accents/casse ignorés, raccourci /), listes Projet et Étiquette avec compteurs, chips de colonnes colorées multi-sélection, 4 tris. - Facettes calculées côté serveur ; filtrage instantané côté client (attributs data-*), compteur en direct, compteurs de section, état vide + réinitialisation. - Filtres structurels persistés en localStorage. - 281 tests verts (3 nouveaux, palier 22) ; vérifié en Chromium réel sur les vraies données (467 issues : recherche 'agent' -> 24 résultats instantanés).
This commit is contained in:
+35
-1
@@ -4245,14 +4245,48 @@ async def my_issues(request: Request):
|
||||
logger.debug("search failed for /my (conn %s): %s", cid, exc)
|
||||
total = len(results)
|
||||
groups = _group_issue_results(results)
|
||||
# Facettes de filtrage (0.33.0) : compteurs calculés une
|
||||
# fois côté serveur ; le filtrage lui-même est instantané
|
||||
# côté client, sur des attributs data-* des lignes.
|
||||
names = _ws_names(request)
|
||||
order = _ws_keys(request)
|
||||
repo_facets = [
|
||||
{"full_name": g["full_name"], "count": len(g["rows"])}
|
||||
for g in groups
|
||||
]
|
||||
col_counts: dict[str, int] = {}
|
||||
label_counts: dict[str, int] = {}
|
||||
for g in groups:
|
||||
for row in g["rows"]:
|
||||
col_counts[row["column"]] = col_counts.get(row["column"], 0) + 1
|
||||
for label in row["issue"].get("labels") or []:
|
||||
name = label.get("name") or ""
|
||||
if name:
|
||||
label_counts[name] = label_counts.get(name, 0) + 1
|
||||
column_facets = [
|
||||
{"key": key, "count": col_counts[key]}
|
||||
for key in order
|
||||
if key in col_counts
|
||||
] + [
|
||||
{"key": key, "count": count}
|
||||
for key, count in col_counts.items()
|
||||
if key not in order
|
||||
]
|
||||
label_facets = [
|
||||
{"name": name, "count": label_counts[name]}
|
||||
for name in sorted(label_counts, key=str.lower)
|
||||
]
|
||||
return render(
|
||||
request,
|
||||
"my.html",
|
||||
user=user,
|
||||
groups=groups,
|
||||
total=total,
|
||||
column_labels=_ws_names(request),
|
||||
column_labels=names,
|
||||
column_colors=_ws_colors(request),
|
||||
repo_facets=repo_facets,
|
||||
column_facets=column_facets,
|
||||
label_facets=label_facets,
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user