feat: Working on route and id helpers for views.

This commit is contained in:
2025-01-17 23:50:04 -05:00
parent 531a385dba
commit d8328314ed
21 changed files with 585 additions and 255 deletions

View File

@@ -20,7 +20,7 @@ struct EmployeeForm: HTML {
Float(shouldDisplay: shouldShow, resetURL: "/employees") {
form(
employee == nil ? .hx.post(targetURL) : .hx.put(targetURL),
employee == nil ? .hx.target("#employee-table") : .hx.target("#employee_\(employee!.id)"),
.hx.target(target),
employee == nil
? .hx.swap(.beforeEnd.transition(true).swap("0.5s"))
: .hx.swap(.outerHTML.transition(true).swap("0.5s")),
@@ -62,6 +62,13 @@ struct EmployeeForm: HTML {
}
}
private var target: HXTarget {
guard let employee else {
return .employee(.table)
}
return .employee(.row(id: employee.id))
}
private var buttonLabel: String {
guard employee != nil else { return "Create" }
return "Update"

View File

@@ -14,14 +14,14 @@ struct EmployeeTable: HTML {
Button.add()
.attributes(
.style("padding: 0px 10px;"),
.hx.get("/employees/create"),
.hx.target("#float"),
.hx.get(route: .employees(.create)),
.hx.target(.float),
.hx.swap(.outerHTML.transition(true).swap("0.5s"))
)
}
}
}
tbody(.id("employee-table")) {
tbody(.id(.employee(.table))) {
for employee in employees {
Row(employee: employee)
}
@@ -33,14 +33,14 @@ struct EmployeeTable: HTML {
let employee: Employee
var content: some HTML {
tr(.id("employee_\(employee.id)")) {
td { "\(employee.firstName.capitalized) \(employee.lastName.capitalized)" }
tr(.id(.employee(.row(id: employee.id)))) {
td { employee.fullName }
td {
Button.detail()
.attributes(
.style("padding-left: 15px;"),
.hx.get("/employees/\(employee.id)"),
.hx.target("#float"),
.hx.get(route: .employees(.id(employee.id))),
.hx.target(.float),
.hx.pushURL(true),
.hx.swap(.outerHTML.transition(true).swap("0.5s"))
)