1
0

home.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. const transport = require('../../utils/ble-transport')
  2. const syncService = require('../../utils/sync-service')
  3. const themeService = require('../../utils/theme-service')
  4. const {
  5. DEFAULT_DEVICE_FILTER,
  6. getHomePageState
  7. } = require('../../utils/home-view-model')
  8. const {
  9. createPageToast
  10. } = require('../../utils/page-toast')
  11. Page({
  12. data: getHomePageState(),
  13. onLoad() {
  14. this.pageToast = createPageToast(this, this.data)
  15. transport.init()
  16. themeService.init()
  17. this.unsubscribeTransport = transport.subscribe((transportState) => {
  18. const nextState = getHomePageState(transportState, this.data.deviceFilterMode, syncService.getState())
  19. this.setData(nextState)
  20. this.pageToast.showFromState(nextState)
  21. })
  22. this.unsubscribeSync = syncService.subscribe((syncState) => {
  23. this.setData(getHomePageState(transport.getState(), this.data.deviceFilterMode, syncState))
  24. })
  25. this.unsubscribeTheme = themeService.subscribe((themeState) => {
  26. this.setData(themeState)
  27. })
  28. },
  29. onShow() {
  30. if (this.pageToast) {
  31. this.pageToast.setActive(true)
  32. }
  33. },
  34. onHide() {
  35. if (this.pageToast) {
  36. this.pageToast.setActive(false)
  37. }
  38. },
  39. onUnload() {
  40. if (this.pageToast) {
  41. this.pageToast.destroy()
  42. this.pageToast = null
  43. }
  44. if (this.unsubscribeTransport) {
  45. this.unsubscribeTransport()
  46. this.unsubscribeTransport = null
  47. }
  48. if (this.unsubscribeSync) {
  49. this.unsubscribeSync()
  50. this.unsubscribeSync = null
  51. }
  52. if (this.unsubscribeTheme) {
  53. this.unsubscribeTheme()
  54. this.unsubscribeTheme = null
  55. }
  56. },
  57. onCommandChange(event) {
  58. transport.setCommandIndex(event.detail.value)
  59. },
  60. onSlaveAddressInput(event) {
  61. transport.setProtocolInput({
  62. slaveAddress: event.detail.value
  63. })
  64. },
  65. onRegisterAddressInput(event) {
  66. transport.setProtocolInput({
  67. registerAddress: event.detail.value
  68. })
  69. },
  70. onCommandValueInput(event) {
  71. transport.setProtocolInput({
  72. commandValue: event.detail.value
  73. })
  74. },
  75. onCoilValueChange(event) {
  76. transport.setProtocolInput({
  77. coilEnabled: !!event.detail.value
  78. })
  79. },
  80. sendGeneratedFrame() {
  81. if (!this.data.connectedDevice || !this.data.generatedHex) return
  82. transport.sendGeneratedFrame()
  83. },
  84. onHexInput(event) {
  85. transport.setSendHex(event.detail.value)
  86. },
  87. clearInput() {
  88. transport.clearInput()
  89. },
  90. sendHexFrame() {
  91. if (!this.data.connectedDevice) return
  92. transport.sendHexFrame()
  93. },
  94. startScan() {
  95. if (!this.data.canStartScan) return
  96. if (this.data.isDiscovering) {
  97. transport.stopScan()
  98. return
  99. }
  100. transport.startScan()
  101. },
  102. syncRegisters() {
  103. if (!this.data.canSyncRegisters) return
  104. syncService.syncAllRegisters()
  105. },
  106. clearDevices() {
  107. if (!this.data.canClearDevices) return
  108. transport.clearDevices()
  109. },
  110. onDeviceFilterTap(event) {
  111. const deviceFilterMode = event.currentTarget.dataset.filter || DEFAULT_DEVICE_FILTER
  112. this.setData(getHomePageState(transport.getState(), deviceFilterMode))
  113. },
  114. connectDevice(event) {
  115. transport.connectDeviceById(event.currentTarget.dataset.deviceId)
  116. },
  117. disconnectDevice() {
  118. if (!this.data.canDisconnectDevice) return
  119. transport.disconnectDevice()
  120. },
  121. clearLogs() {
  122. transport.clearLogs()
  123. }
  124. })