147 lines
3.1 KiB
Swift
147 lines
3.1 KiB
Swift
import Elementary
|
|
import ElementaryHTMX
|
|
import Fluent
|
|
import SharedModels
|
|
|
|
extension HTMLAttribute.hx {
|
|
static func get(route: SharedModels.ViewRoute) -> HTMLAttribute {
|
|
get(SharedModels.ViewRoute.router.path(for: route))
|
|
}
|
|
|
|
static func post(route: SharedModels.ViewRoute) -> HTMLAttribute {
|
|
post(SharedModels.ViewRoute.router.path(for: route))
|
|
}
|
|
|
|
static func put(route: SharedModels.ViewRoute) -> HTMLAttribute {
|
|
put(SharedModels.ViewRoute.router.path(for: route))
|
|
}
|
|
|
|
static func delete(route: SharedModels.ViewRoute) -> HTMLAttribute {
|
|
delete(SharedModels.ViewRoute.router.path(for: route))
|
|
}
|
|
}
|
|
|
|
extension HTMLAttribute.hx {
|
|
|
|
static func target(_ target: HXTarget) -> HTMLAttribute {
|
|
Self.target(target.selector)
|
|
}
|
|
}
|
|
|
|
extension HTMLAttribute where Tag: HTMLTrait.Attributes.Global {
|
|
static func id(_ target: HXTarget) -> Self {
|
|
id(target.id)
|
|
}
|
|
}
|
|
|
|
enum HXTarget {
|
|
case body
|
|
case employee(EmployeeKey)
|
|
case float
|
|
case purchaseOrders(PurchaseOrdersKey? = nil)
|
|
case search
|
|
case this
|
|
case user(UserKey)
|
|
|
|
var selector: String {
|
|
switch self {
|
|
case .body: return "body"
|
|
case .this: return "this"
|
|
default:
|
|
return "#\(id)"
|
|
}
|
|
}
|
|
|
|
var id: String {
|
|
switch self {
|
|
case let .employee(key): return key.key
|
|
case .float: return "float"
|
|
case let .purchaseOrders(key):
|
|
guard let key else { return "purchase-orders" }
|
|
return key.key
|
|
case .search: return "search"
|
|
case let .user(key): return key.key
|
|
case .this, .body:
|
|
fatalError("'\(selector)' can not be used as an id.")
|
|
}
|
|
}
|
|
|
|
enum PurchaseOrdersKey {
|
|
case table
|
|
case row(id: PurchaseOrder.ID)
|
|
|
|
var key: String {
|
|
switch self {
|
|
case .table: return "purchase-orders-table"
|
|
case let .row(id): return "purchase_order_\(id)"
|
|
}
|
|
}
|
|
}
|
|
|
|
enum EmployeeKey {
|
|
case table
|
|
case row(id: Employee.ID)
|
|
|
|
var key: String {
|
|
switch self {
|
|
case .table: return "employee-table"
|
|
case let .row(id): return "employee_\(id.uuidString)"
|
|
}
|
|
}
|
|
}
|
|
|
|
enum UserKey {
|
|
case form
|
|
case row(id: User.ID)
|
|
case table(Table? = nil)
|
|
|
|
var key: String {
|
|
switch self {
|
|
case .form: return "user-form"
|
|
case let .row(id): return "user_\(id)"
|
|
case let .table(table):
|
|
let key = "user-table"
|
|
guard let table else { return key }
|
|
return "\(key)-\(table.rawValue)"
|
|
}
|
|
}
|
|
|
|
enum Table: String {
|
|
case body
|
|
}
|
|
}
|
|
}
|
|
|
|
// TODO: Move to MainPage
|
|
enum ViewRoute: String {
|
|
|
|
case employees
|
|
case login
|
|
case purchaseOrders
|
|
case users
|
|
case vendors
|
|
|
|
var title: String {
|
|
switch self {
|
|
case .purchaseOrders:
|
|
return "Purchase Orders"
|
|
default:
|
|
return rawValue.capitalized
|
|
}
|
|
}
|
|
|
|
var description: String {
|
|
switch self {
|
|
case .employees:
|
|
return "Employees are who purchase orders can be issued to."
|
|
case .purchaseOrders, .login:
|
|
return ""
|
|
case .users:
|
|
return "Users are who can login and issue purchase orders for employees."
|
|
case .vendors:
|
|
return "Vendors are where purchase orders can be issued to."
|
|
}
|
|
}
|
|
|
|
}
|