BLEDeviceSelectionView.swift 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. //
  2. // BLEDeviceSelectionView.swift
  3. // LoopFollow
  4. //
  5. import SwiftUI
  6. struct BLEDeviceSelectionView: View {
  7. @ObservedObject var bleManager: BLEManager
  8. var selectedFilter: BackgroundRefreshType
  9. var onSelectDevice: (BLEDevice) -> Void
  10. var body: some View {
  11. VStack {
  12. Text("Scanning for \(selectedFilter.rawValue)")
  13. .font(.headline)
  14. List {
  15. ForEach(bleManager.devices.filter { selectedFilter.matches($0) && !isSelected($0) }, id: \.id) { device in
  16. HStack {
  17. VStack(alignment: .leading) {
  18. Text(device.name ?? "Unknown")
  19. Text("\(device.rssi) dBm")
  20. .foregroundColor(.secondary)
  21. .font(.footnote)
  22. }
  23. Spacer()
  24. }
  25. .contentShape(Rectangle())
  26. .onTapGesture {
  27. onSelectDevice(device)
  28. }
  29. }
  30. }
  31. }
  32. .onAppear {
  33. bleManager.startScanning()
  34. }
  35. .onDisappear {
  36. bleManager.stopScanning()
  37. }
  38. }
  39. private func isSelected(_ device: BLEDevice) -> Bool {
  40. guard let selectedDevice = Storage.shared.selectedBLEDevice.value else {
  41. return false
  42. }
  43. return selectedDevice.id == device.id
  44. }
  45. }