feat: Adds reset button to result container view.

This commit is contained in:
2025-02-27 14:39:00 -05:00
parent 75e13520a9
commit fad00520b0
6 changed files with 50 additions and 9 deletions

View File

@@ -64,6 +64,8 @@ let package = Package(
dependencies: [ dependencies: [
.product(name: "CasePaths", package: "swift-case-paths"), .product(name: "CasePaths", package: "swift-case-paths"),
.product(name: "Dependencies", package: "swift-dependencies"), .product(name: "Dependencies", package: "swift-dependencies"),
.product(name: "Elementary", package: "elementary"),
.product(name: "ElementaryHTMX", package: "elementary-htmx"),
.product(name: "PsychrometricClient", package: "swift-psychrometrics"), .product(name: "PsychrometricClient", package: "swift-psychrometrics"),
.product(name: "URLRouting", package: "swift-url-routing") .product(name: "URLRouting", package: "swift-url-routing")
], ],
@@ -72,7 +74,7 @@ let package = Package(
.target( .target(
name: "Styleguide", name: "Styleguide",
dependencies: [ dependencies: [
.product(name: "Elementary", package: "elementary") "Routes"
], ],
swiftSettings: swiftSettings swiftSettings: swiftSettings
), ),

File diff suppressed because one or more lines are too long

View File

@@ -1,8 +1,7 @@
import Elementary import Elementary
import ElementaryHTMX import ElementaryHTMX
import Routes
extension HTMLAttribute.hx { public extension HTMLAttribute.hx {
@Sendable @Sendable
static func get(route: SiteRoute.View) -> HTMLAttribute { static func get(route: SiteRoute.View) -> HTMLAttribute {
get(SiteRoute.View.router.path(for: route)) get(SiteRoute.View.router.path(for: route))

View File

@@ -19,3 +19,23 @@ public struct SubmitButton: HTML, Sendable {
) { label } ) { label }
} }
} }
public struct ResetButton: HTML, Sendable {
let label: String
public init(label: String = "Reset") {
self.label = label
}
public var content: some HTML<HTMLTag.button> {
button(.class("""
font-bold px-4 py-2 rounded-md transition-colors
bg-blue-500 dark:bg-yellow-300
hover:bg-blue-600 hover:dark:bg-yellow-400
text-yellow-300 dark:text-blue-500
""")) {
label
}
}
}

View File

@@ -1,12 +1,17 @@
import Elementary import Elementary
import ElementaryHTMX
import Routes
public struct ResultContainer<Body: HTML>: HTML { public struct ResultContainer<Body: HTML, Header: HTML>: HTML {
let body: Body let body: Body
let header: Header
public init( public init(
@HTMLBuilder body: () -> Body @HTMLBuilder body: () -> Body,
@HTMLBuilder header: () -> Header
) { ) {
self.body = body() self.body = body()
self.header = header()
} }
public var content: some HTML { public var content: some HTML {
@@ -15,10 +20,25 @@ public struct ResultContainer<Body: HTML>: HTML {
bg-blue-50 dark:bg-slate-600 bg-blue-50 dark:bg-slate-600
text-blue-500 dark:text-slate-200 text-blue-500 dark:text-slate-200
""")) { """)) {
div(.class("relative")) {
h3(.class("text-xl font-semibold mb-4")) { "Results" } h3(.class("text-xl font-semibold mb-4")) { "Results" }
header
}
body body
} }
} }
} }
extension ResultContainer: Sendable where Body: Sendable {} public extension ResultContainer where Header == _AttributedElement<ResetButton> {
init(
reset resetRoute: SiteRoute.View,
@HTMLBuilder body: () -> Body
) {
self.init(body: body) {
ResetButton()
.attributes(.class("absolute bottom-0 right-0"), .hx.get(route: resetRoute), .hx.target("#content"))
}
}
}
extension ResultContainer: Sendable where Body: Sendable, Header: Sendable {}

View File

@@ -42,7 +42,7 @@ struct MoldRiskResponse: HTML {
let response: MoldRisk.Response let response: MoldRisk.Response
var content: some HTML { var content: some HTML {
ResultContainer { ResultContainer(reset: .moldRisk(.index)) {
div( div(
.class(""" .class("""
p-2 rounded-lg shadow-lg \(response.riskLevel.backgroundColor) border-2 border \(response.riskLevel.borderColor) p-2 rounded-lg shadow-lg \(response.riskLevel.backgroundColor) border-2 border \(response.riskLevel.borderColor)