NightscoutConfigRootView.swift 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import SwiftUI
  2. extension NightscoutConfig {
  3. struct RootView: BaseView {
  4. @EnvironmentObject var viewModel: ViewModel<Provider>
  5. private var portFormater: NumberFormatter {
  6. let formatter = NumberFormatter()
  7. formatter.allowsFloats = false
  8. return formatter
  9. }
  10. var body: some View {
  11. Form {
  12. Section {
  13. TextField("URL", text: $viewModel.url)
  14. .disableAutocorrection(true)
  15. .textContentType(.URL)
  16. .autocapitalization(.none)
  17. .keyboardType(.URL)
  18. SecureField("API secret", text: $viewModel.secret)
  19. .disableAutocorrection(true)
  20. .autocapitalization(.none)
  21. .textContentType(.password)
  22. .keyboardType(.asciiCapable)
  23. if !viewModel.message.isEmpty {
  24. Text(viewModel.message)
  25. }
  26. if viewModel.connecting {
  27. HStack {
  28. Text("Connecting...")
  29. Spacer()
  30. ProgressView()
  31. }
  32. }
  33. }
  34. Section {
  35. Button("Connect") { viewModel.connect() }
  36. .disabled(viewModel.url.isEmpty || viewModel.connecting)
  37. Button("Delete") { viewModel.delete() }.foregroundColor(.red).disabled(viewModel.connecting)
  38. }
  39. Section {
  40. Toggle("Allow uploads", isOn: $viewModel.isUploadEnabled)
  41. }
  42. Section(header: Text("Local glucose source")) {
  43. Toggle("Use local glucose server", isOn: $viewModel.useLocalSource)
  44. HStack {
  45. Text("Port")
  46. DecimalTextField("", value: $viewModel.localPort, formatter: portFormater)
  47. }
  48. }
  49. }
  50. .navigationBarTitle("Nightscout Config", displayMode: .automatic)
  51. }
  52. }
  53. }