Login Form
swift
import SwiftUI
import FormCraft
@FormCraft
private struct LoginFormFields: FormCraftFields {
var login = FormCraftField(value: "") { value in
await FormCraftValidationRules()
.string()
.trimmed()
.notEmpty()
.email()
.validate(value: value)
}
var password = FormCraftField(value: "") { value in
await FormCraftValidationRules()
.string()
.trimmed()
.notEmpty()
.validate(value: value)
}
}
struct LoginFormView: View {
@State private var loginForm = FormCraft(fields: LoginFormFields())
private func handleLogin(
data: FormCraftValidatedFields<LoginFormFields>
) async {
print(data.login)
print(data.password)
}
var body: some View {
VStack(spacing: 12) {
FormCraftView(formConfig: loginForm) {
FormCraftControllerView(
formConfig: loginForm,
key: \.login
) { value, field in
TextField("Email", text: value)
.textFieldStyle(.roundedBorder)
if let firstError = field.errors?.messages.first {
Text(firstError)
.foregroundStyle(.red)
}
}
FormCraftControllerView(
formConfig: loginForm,
key: \.password
) { value, field in
SecureField("Password", text: value)
.textFieldStyle(.roundedBorder)
if let firstError = field.errors?.messages.first {
Text(firstError)
.foregroundStyle(.red)
}
}
}
Button("Login", action: loginForm.handleSubmit(onSuccess: handleLogin))
.disabled(loginForm.formState.isSubmitting)
}
}
}