| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- // LoopFollow
- // ConnectImportStepView.swift
- import SwiftUI
- /// The "copy from another phone" connect path: scan a QR code exported from an
- /// already-configured LoopFollow and apply those settings. Reuses the same
- /// scanner, preview, and import logic as Settings → Import/Export.
- struct ConnectImportStepView: View {
- @ObservedObject var viewModel: OnboardingViewModel
- @StateObject private var importVM = ImportExportSettingsViewModel()
- private var importSucceeded: Bool {
- importVM.qrCodeErrorMessage.contains("Successfully imported")
- }
- var body: some View {
- VStack(spacing: 0) {
- form
- OnboardingNavFooter(
- continueEnabled: viewModel.didImportSettings,
- showBack: viewModel.canGoBack,
- onBack: { viewModel.goBack() },
- onContinue: { viewModel.advance() }
- )
- }
- }
- private var form: some View {
- Form {
- Section {
- EmptyView()
- } header: {
- OnboardingStepHeader(
- systemImage: "qrcode",
- title: "Copy from another phone",
- subtitle: "On your other phone, open Settings → Nightscout (or Dexcom Share) → Import/Export and export to a QR code. Then scan it here."
- )
- .textCase(nil)
- .padding(.bottom, 8)
- }
- .listRowInsets(EdgeInsets())
- .listRowBackground(Color.clear)
- Section {
- Button {
- importVM.isShowingQRCodeScanner = true
- } label: {
- HStack {
- Image(systemName: "qrcode.viewfinder")
- .foregroundColor(.accentColor)
- Text(viewModel.didImportSettings ? "Scan a different code" : "Scan QR Code")
- }
- }
- }
- if viewModel.didImportSettings {
- Section {
- Label("Settings imported — you're connected.", systemImage: "checkmark.circle.fill")
- .foregroundColor(.green)
- }
- } else if !importVM.qrCodeErrorMessage.isEmpty {
- Section {
- Text(importVM.qrCodeErrorMessage)
- .font(.caption)
- .foregroundColor(.red)
- }
- }
- }
- .sheet(isPresented: $importVM.isShowingQRCodeScanner) {
- SimpleQRCodeScannerView { result in
- importVM.handleQRCodeScanResult(result)
- }
- }
- .sheet(isPresented: $importVM.showImportConfirmation) {
- ImportConfirmationView(viewModel: importVM)
- }
- .onChange(of: importVM.qrCodeErrorMessage) { message in
- if message.contains("Successfully imported") {
- viewModel.didImportSettings = true
- }
- }
- }
- }
|