| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- // LoopFollow
- // BLEDeviceSelectionView.swift
- import SwiftUI
- struct BLEDeviceSelectionView: View {
- @ObservedObject var bleManager: BLEManager
- var selectedFilter: BackgroundRefreshType
- var onSelectDevice: (BLEDevice) -> Void
- var body: some View {
- VStack {
- List {
- let filteredDevices = bleManager.devices.filter { selectedFilter.matches($0) && !isSelected($0) }
- if filteredDevices.isEmpty {
- Text("No devices found yet. They'll appear here when discovered.")
- .foregroundColor(.secondary)
- .multilineTextAlignment(.center)
- .padding()
- } else {
- ForEach(filteredDevices, id: \.id) { device in
- HStack {
- VStack(alignment: .leading) {
- Text(device.name ?? "Unknown")
- Text("RSSI: \(device.rssi) dBm")
- .foregroundColor(.secondary)
- .font(.footnote)
- if let offset = BLEManager.shared.expectedSensorFetchOffsetString(for: device) {
- Text("Expected bg delay: \(offset)")
- .foregroundColor(.secondary)
- .font(.footnote)
- }
- }
- Spacer()
- }
- .contentShape(Rectangle())
- .onTapGesture {
- onSelectDevice(device)
- }
- }
- }
- }
- }
- .onAppear {
- bleManager.startScanning()
- }
- .onDisappear {
- bleManager.stopScanning()
- }
- }
- private func isSelected(_ device: BLEDevice) -> Bool {
- guard let selectedDevice = Storage.shared.selectedBLEDevice.value else {
- return false
- }
- return selectedDevice.id == device.id
- }
- }
|