field_ios

In-the-field app for Radroots on iOS
git clone https://radroots.dev/git/field_ios.git
Log | Files | Refs | README | LICENSE

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 }