feat(admin): add /admin user list page
This commit is contained in:
@@ -0,0 +1,19 @@
|
|||||||
|
import dash_bootstrap_components as dbc
|
||||||
|
from dash import html
|
||||||
|
|
||||||
|
|
||||||
|
def not_admin():
|
||||||
|
return html.Div(
|
||||||
|
html.H2("404", id="admin-404-heading"), className="py-5 text-center"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def admin_nav(active: str):
|
||||||
|
return dbc.Nav(
|
||||||
|
[
|
||||||
|
dbc.NavLink("Utilisateurs", href="/admin", active=(active == "liste")),
|
||||||
|
dbc.NavLink("Journal", href="/admin/journal", active=(active == "journal")),
|
||||||
|
],
|
||||||
|
pills=True,
|
||||||
|
class_name="mb-4",
|
||||||
|
)
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
import dash_bootstrap_components as dbc
|
||||||
|
from dash import dash_table, html, register_page
|
||||||
|
|
||||||
|
from src.admin.guard import is_admin
|
||||||
|
from src.auth.db import list_users
|
||||||
|
from src.pages.admin._shell import admin_nav, not_admin
|
||||||
|
from src.subscriptions.db import get_current
|
||||||
|
|
||||||
|
register_page(
|
||||||
|
__name__,
|
||||||
|
path="/admin",
|
||||||
|
title="Panneau admin | colibre",
|
||||||
|
name="Admin",
|
||||||
|
description="Panneau d'administration interne.",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def _rows():
|
||||||
|
rows = []
|
||||||
|
for user in list_users():
|
||||||
|
sub = get_current(user["id"])
|
||||||
|
rows.append(
|
||||||
|
{
|
||||||
|
"email": user["email"],
|
||||||
|
"vérifié": "oui" if user["email_verified"] else "non",
|
||||||
|
"plan": sub["plan"] if sub else "",
|
||||||
|
"statut": sub["status"] if sub else "",
|
||||||
|
"créé le": user["created_at"],
|
||||||
|
"voir": f"[Voir](/admin/user/{user['id']})",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return rows
|
||||||
|
|
||||||
|
|
||||||
|
def layout(**_):
|
||||||
|
if not is_admin():
|
||||||
|
return not_admin()
|
||||||
|
return dbc.Container(
|
||||||
|
[
|
||||||
|
html.H2("Panneau admin"),
|
||||||
|
admin_nav("liste"),
|
||||||
|
dash_table.DataTable(
|
||||||
|
id="admin-users-table",
|
||||||
|
columns=[
|
||||||
|
{"name": "Email", "id": "email"},
|
||||||
|
{"name": "Vérifié", "id": "vérifié"},
|
||||||
|
{"name": "Plan", "id": "plan"},
|
||||||
|
{"name": "Statut", "id": "statut"},
|
||||||
|
{"name": "Créé le", "id": "créé le"},
|
||||||
|
{"name": "", "id": "voir", "presentation": "markdown"},
|
||||||
|
],
|
||||||
|
data=_rows(),
|
||||||
|
filter_action="native",
|
||||||
|
sort_action="native",
|
||||||
|
page_action="native",
|
||||||
|
page_size=20,
|
||||||
|
markdown_options={"link_target": "_self"},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
fluid=True,
|
||||||
|
className="py-4",
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user