view-model.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. const transport = require('../../transport/ble-core.js')
  2. const themeService = require('../../store/theme-store.js')
  3. const DEFAULT_DEVICE_FILTER = 'all'
  4. const DEVICE_FILTER_OPTIONS = [
  5. { key: 'all', label: '全部' },
  6. { key: 'target', label: '目标' }
  7. ]
  8. function isTargetDevice(device) {
  9. return !!(device && (device.isTargetDevice || device.isTargetAdvertised))
  10. }
  11. function filterDevices(devices, filterMode) {
  12. if (filterMode === 'target') return devices.filter(isTargetDevice)
  13. return devices
  14. }
  15. function getHomePageState(
  16. transportState = transport.getState(),
  17. deviceFilterMode = DEFAULT_DEVICE_FILTER,
  18. themeState = themeService.getState()
  19. ) {
  20. const { connectedDevice } = transportState
  21. const filteredDevices = filterDevices(transportState.devices, deviceFilterMode)
  22. const allDeviceCount = transportState.devices.length
  23. const filteredDeviceCount = filteredDevices.length
  24. const connectionStatusText = connectedDevice
  25. ? '已连接'
  26. : (transportState.isConnecting ? '连接中' : '未连接')
  27. return {
  28. ...transportState,
  29. ...themeState,
  30. allDeviceCount,
  31. canClearDevices: !!allDeviceCount && !transportState.isConnecting,
  32. canDisconnectDevice: !!connectedDevice,
  33. canStartScan: !transportState.isConnecting,
  34. connectionCharacteristicText: connectedDevice ? transportState.characteristicText : '--',
  35. connectionDeviceId: connectedDevice ? connectedDevice.deviceId : '--',
  36. connectionName: connectedDevice ? connectedDevice.displayName : '',
  37. connectionServiceCount: connectedDevice ? transportState.connectedServiceCount : '--',
  38. connectionSignalText: connectedDevice ? connectedDevice.signalText : '--',
  39. connectionStatusText,
  40. devices: transportState.isDiscovering ? filteredDevices : [],
  41. deviceCountText: allDeviceCount
  42. ? (deviceFilterMode === 'target' ? `(${filteredDeviceCount}/${allDeviceCount})` : `(${allDeviceCount})`)
  43. : '',
  44. deviceFilterMode,
  45. deviceFilterOptions: DEVICE_FILTER_OPTIONS,
  46. emptyDeviceText: allDeviceCount && deviceFilterMode === 'target'
  47. ? '当前扫描结果中没有广播目标 UUID 的设备,可切回全部后连接确认特征值。'
  48. : '请确认设备已上电并处于可广播或配网状态。',
  49. emptyDeviceTitle: allDeviceCount && deviceFilterMode === 'target'
  50. ? '没有匹配目标特征的设备'
  51. : '还没有发现设备',
  52. scanButtonText: transportState.isDiscovering ? '停止' : '扫描',
  53. showDeviceSection: transportState.isDiscovering
  54. }
  55. }
  56. module.exports = {
  57. DEFAULT_DEVICE_FILTER,
  58. DEVICE_FILTER_OPTIONS,
  59. filterDevices,
  60. getHomePageState,
  61. isTargetDevice
  62. }