package adminview import "git.haelnorr.com/h/oslstats/internal/db" import "fmt" import "time" templ UserList(users *db.List[db.User]) {

User Management

if len(users.Items) == 0 {

No users found

} else {
@userTableHeader("id", "ID", users.PageOpts.OrderBy, string(users.PageOpts.Order)) @userTableHeader("username", "Username", users.PageOpts.OrderBy, string(users.PageOpts.Order)) @userTableHeader("created_at", "Created", users.PageOpts.OrderBy, string(users.PageOpts.Order)) for _, user := range users.Items { }
Discord ID RolesActions
{ fmt.Sprintf("%d", user.ID) } { user.Username } { user.DiscordID } if len(user.Roles) > 0 {
for _, role := range user.Roles { { role.DisplayName } }
} else { No roles }
{ formatTimestamp(user.CreatedAt) }
if users.Total > 0 { Showing { fmt.Sprintf("%d", users.PageOpts.StartItem()) } - { fmt.Sprintf("%d", users.PageOpts.EndItem(users.Total)) } of { fmt.Sprintf("%d", users.Total) } users } else { No users }
if users.Total > 0 && users.PageOpts.TotalPages(users.Total) > 1 {
@paginationButton("First", "<<", fmt.Sprintf("submitUsersPage(1, perPage, order, orderBy)"), !users.PageOpts.HasPrevPage()) @paginationButton("Previous", "<", fmt.Sprintf("submitUsersPage(%d, perPage, order, orderBy)", users.PageOpts.Page-1), !users.PageOpts.HasPrevPage()) for _, pageNum := range users.PageOpts.GetPageRange(users.Total, 7) { @pageNumberButton(pageNum, users.PageOpts.Page, "submitUsersPage") } @paginationButton("Next", ">", fmt.Sprintf("submitUsersPage(%d, perPage, order, orderBy)", users.PageOpts.Page+1), !users.PageOpts.HasNextPage(users.Total)) @paginationButton("Last", ">>", fmt.Sprintf("submitUsersPage(%d, perPage, order, orderBy)", users.PageOpts.TotalPages(users.Total)), !users.PageOpts.HasNextPage(users.Total))
}
}
} templ userTableHeader(field string, label string, currentField string, currentOrder string) { {{ isActive := currentField == field baseClasses := "px-4 py-3 text-left text-sm font-semibold text-text cursor-pointer select-none hover:text-blue transition-colors" arrow := "" if isActive { if currentOrder == "ASC" { arrow = " ↑" } else { arrow = " ↓" } } }} { label } if arrow != "" { { arrow } } } templ paginationButton(longText string, shortText string, onClick string, disabled bool) { } templ pageNumberButton(pageNum int, currentPage int, funcName string) { } func formatTimestamp(unixTime int64) string { t := time.Unix(unixTime, 0) return t.Format("Jan 2, 2006") }