58 lines
1.1 KiB
Swift
58 lines
1.1 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(route: .user(.form)),
|
|
.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(.row(id: user.id)))) {
|
|
td { user.username }
|
|
td { user.email }
|
|
td {
|
|
Button.detail().attributes(
|
|
.hx.get(route: .user(.get(id: user.id))),
|
|
.hx.target(.float),
|
|
.hx.swap(.outerHTML),
|
|
.hx.pushURL(true)
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|