61 lines
1.2 KiB
Swift
61 lines
1.2 KiB
Swift
import DatabaseClient
|
|
import Dependencies
|
|
import Elementary
|
|
import ElementaryHTMX
|
|
import SharedModels
|
|
|
|
struct UserTable: HTML {
|
|
|
|
let users: [User]
|
|
|
|
var content: some HTML {
|
|
table(.id("user-table")) {
|
|
thead {
|
|
tr {
|
|
th { "Username" }
|
|
th { "Email" }
|
|
th(.style("width: 50px;")) {
|
|
Button.add()
|
|
.attributes(
|
|
.hx.get("/users/create"),
|
|
.hx.target("#float"),
|
|
.hx.swap(.outerHTML)
|
|
)
|
|
}
|
|
}
|
|
}
|
|
tbody(.id("user-table-body")) {
|
|
for user in users {
|
|
Row(user: user)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
struct Row: HTML {
|
|
let user: User
|
|
|
|
init(user: User) {
|
|
self.user = user
|
|
}
|
|
|
|
var content: some HTML<HTMLTag.tr> {
|
|
tr(.id("user_\(user.id)")) {
|
|
td { user.username }
|
|
td { user.email }
|
|
td {
|
|
button(
|
|
.hx.get("/users/\(user.id.uuidString)"),
|
|
.hx.target("#float"),
|
|
.hx.swap(.outerHTML),
|
|
.hx.pushURL(true),
|
|
.class("btn-detail")
|
|
) {
|
|
"〉"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|