TeraCivilDateField.swift (1325B)
1 import SwiftUI 2 3 struct TeraCivilDateField: View { 4 let label: String 5 let identifier: String 6 @Binding var raw: String? 7 8 var body: some View { 9 VStack(alignment: .leading, spacing: 8) { 10 Text(label).font(.subheadline.weight(.semibold)) 11 ViewThatFits(in: .horizontal) { 12 HStack { components } 13 VStack(alignment: .leading) { components } 14 } 15 if raw != nil, TeraCivilDateInput(raw: raw).value == nil { 16 Text("Enter a valid year, month and day.").font(.caption).foregroundStyle(.secondary) 17 } 18 } 19 .accessibilityElement(children: .contain) 20 .accessibilityLabel(label) 21 .accessibilityIdentifier(identifier) 22 } 23 24 private var components: some View { 25 ForEach(Array(["Year", "Month", "Day"].enumerated()), id: \.offset) { index, name in 26 VStack(alignment: .leading) { 27 Text(name).font(.caption) 28 TextField(name, text: Binding( 29 get: { TeraCivilDateInput(raw: raw).component(index) }, 30 set: { raw = TeraCivilDateInput(raw: raw).replacing(index, with: $0) } 31 )) 32 .keyboardType(.numberPad) 33 .textFieldStyle(.roundedBorder) 34 .accessibilityLabel("\(label), \(name)") 35 .accessibilityIdentifier("\(identifier).\(name.lowercased())") 36 } 37 .frame(minWidth: index == 0 ? 90 : 70) 38 } 39 } 40 }