| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- // LoopFollow
- // DexcomConnectStepView.swift
- import SwiftUI
- struct DexcomConnectStepView: View {
- @ObservedObject var viewModel: DexcomSettingsViewModel
- @ObservedObject var onboarding: OnboardingViewModel
- var body: some View {
- VStack(spacing: 0) {
- ConnectionStatusPill(
- color: statusColor,
- message: viewModel.statusMessage,
- isLoading: viewModel.statusKind == .checking,
- systemImage: statusIcon
- )
- .padding(.horizontal)
- .padding(.top, 12)
- .padding(.bottom, 8)
- .animation(.easeInOut(duration: 0.25), value: viewModel.statusKind)
- form
- OnboardingNavFooter(
- continueEnabled: viewModel.canVerifyProceed,
- showBack: onboarding.canGoBack,
- onBack: { onboarding.goBack() },
- onContinue: { onboarding.advance() }
- )
- }
- }
- private var form: some View {
- Form {
- Section {
- EmptyView()
- } header: {
- OnboardingStepHeader(
- systemImage: "sensor.tag.radiowaves.forward.fill",
- title: "Connect Dexcom Share",
- subtitle: "Sign in with the Dexcom Share account that shares glucose data."
- )
- .textCase(nil)
- .padding(.bottom, 8)
- }
- .listRowInsets(EdgeInsets())
- .listRowBackground(Color.clear)
- Section(header: Text("Dexcom Share")) {
- HStack {
- Text("Username")
- TextField("Enter Username", text: $viewModel.userName)
- .textContentType(.username)
- .autocapitalization(.none)
- .disableAutocorrection(true)
- .multilineTextAlignment(.trailing)
- }
- HStack {
- Text("Password")
- TogglableSecureInput(
- placeholder: "Enter Password",
- text: $viewModel.password,
- style: .singleLine,
- textContentType: .password
- )
- }
- Picker("Server", selection: $viewModel.server) {
- Text("US").tag("US")
- Text("Outside US").tag("NON-US")
- }
- .pickerStyle(.segmented)
- }
- }
- }
- // MARK: - Status pill mapping
- private var statusColor: Color {
- switch viewModel.statusKind {
- case .idle: return .secondary
- case .checking: return .orange
- case .connected: return .green
- case .error: return .red
- }
- }
- private var statusIcon: String? {
- switch viewModel.statusKind {
- case .idle: return "circle"
- case .checking: return nil
- case .connected: return "checkmark.circle.fill"
- case .error: return "exclamationmark.triangle.fill"
- }
- }
- }
|