@eohjsc/react-native-smart-city 0.3.29 → 0.3.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (404) hide show
  1. package/package.json +7 -5
  2. package/src/Images/DevMode/close.png +0 -0
  3. package/src/Images/DevMode/close@2x.png +0 -0
  4. package/src/Images/DevMode/close@3x.png +0 -0
  5. package/src/Images/DevMode/plus.png +0 -0
  6. package/src/Images/DevMode/plus@2x.png +0 -0
  7. package/src/Images/DevMode/plus@3x.png +0 -0
  8. package/src/Images/DevMode/remove_circle.png +0 -0
  9. package/src/Images/DevMode/remove_circle@2x.png +0 -0
  10. package/src/Images/DevMode/remove_circle@3x.png +0 -0
  11. package/src/commons/Action/ItemQuickAction.js +2 -2
  12. package/src/commons/Action/__test__/ItemQuickAction.test.js +17 -9
  13. package/src/commons/ActionGroup/ColorPickerTemplate.js +36 -17
  14. package/src/commons/ActionGroup/CurtainButtonTemplate.js +6 -6
  15. package/src/commons/ActionGroup/NumberUpDownActionTemplate.js +18 -13
  16. package/src/commons/ActionGroup/OnOffSmartLock/AutoLock/ButtonWrapper.js +5 -2
  17. package/src/commons/ActionGroup/OnOffSmartLock/AutoLock/__test__/index.test.js +10 -4
  18. package/src/commons/ActionGroup/OnOffSmartLock/AutoLock/index.js +4 -4
  19. package/src/commons/ActionGroup/OnOffSmartLock/OnOffSmartLock.js +38 -45
  20. package/src/commons/ActionGroup/OnOffSmartLock/OnOffSmartLockStyle.js +1 -0
  21. package/src/commons/ActionGroup/OnOffSmartLock/PasscodeList/ItemPasscode.js +1 -1
  22. package/src/commons/ActionGroup/OnOffSmartLock/PasscodeList/__test__/index.test.js +2 -2
  23. package/src/commons/ActionGroup/OnOffSmartLock/PasscodeList/index.js +2 -2
  24. package/src/commons/ActionGroup/OnOffSmartLock/SetupGeneratePasscode/ButtonWrapper.js +2 -2
  25. package/src/commons/ActionGroup/OnOffSmartLock/SetupGeneratePasscode/__test__/index.test.js +12 -6
  26. package/src/commons/ActionGroup/OnOffSmartLock/SetupGeneratePasscode/index.js +8 -4
  27. package/src/commons/ActionGroup/OnOffTemplate/OnOffButtonTemplate.js +9 -10
  28. package/src/commons/ActionGroup/OnOffTemplate/index.js +2 -2
  29. package/src/commons/ActionGroup/OneBigButtonTemplate.js +5 -5
  30. package/src/commons/ActionGroup/OptionsDropdownActionTemplate.js +38 -22
  31. package/src/commons/ActionGroup/SliderRangeTemplate.js +24 -16
  32. package/src/commons/ActionGroup/SmartTiviActionTemplate/SmartTiviActionTemplate.js +25 -9
  33. package/src/commons/ActionGroup/SmartTiviActionTemplate/__test__/ControlPlay.test.js +13 -7
  34. package/src/commons/ActionGroup/SmartTiviActionTemplate/__test__/RectangleButton.test.js +9 -5
  35. package/src/commons/ActionGroup/SmartTiviActionTemplate/__test__/SmartTiviActionTemplate.test.js +25 -9
  36. package/src/commons/ActionGroup/SmartTiviActionTemplate/component/CircleButton.js +16 -6
  37. package/src/commons/ActionGroup/SmartTiviActionTemplate/component/ControlPlay.js +10 -4
  38. package/src/commons/ActionGroup/SmartTiviActionTemplate/component/RectangleButton.js +7 -3
  39. package/src/commons/ActionGroup/StatesGridActionTemplate.js +2 -2
  40. package/src/commons/ActionGroup/ThreeButtonTemplate.js +50 -60
  41. package/src/commons/ActionGroup/TwoButtonTemplate/index.js +135 -133
  42. package/src/commons/ActionGroup/__test__/NumberUpDownTemplate.test.js +7 -7
  43. package/src/commons/ActionGroup/__test__/OnOffSmartLock.test.js +3 -3
  44. package/src/commons/ActionGroup/__test__/OnOffTemplate.test.js +3 -3
  45. package/src/commons/ActionGroup/__test__/OptionsDropdownTemplate.test.js +9 -5
  46. package/src/commons/ActionGroup/__test__/index.test.js +7 -5
  47. package/src/commons/ActionGroup/index.js +35 -10
  48. package/src/commons/AlertAction/index.js +2 -2
  49. package/src/commons/Auth/AccountItem.js +9 -3
  50. package/src/commons/Auth/__test__/AccountItem.test.js +6 -3
  51. package/src/commons/Automate/ItemAutomate.js +13 -3
  52. package/src/commons/BackDefault/index.js +2 -2
  53. package/src/commons/BottomButtonView/index.js +4 -4
  54. package/src/commons/Button/index.js +2 -2
  55. package/src/commons/ButtonPopup/index.js +3 -3
  56. package/src/commons/Dashboard/MyPinnedSharedUnit/__test__/MyPinnedSharedUnit.test.js +3 -2
  57. package/src/commons/Dashboard/MyPinnedSharedUnit/index.js +4 -2
  58. package/src/commons/Dashboard/MyUnit/__test__/MyUnit.test.js +6 -3
  59. package/src/commons/Dashboard/MyUnit/index.js +5 -3
  60. package/src/commons/DevMode/CardDevMode.js +42 -0
  61. package/src/commons/DevMode/EmptyComponent.js +18 -0
  62. package/src/commons/DevMode/Item.js +21 -0
  63. package/src/commons/DevMode/Styles/CardStyles.js +40 -0
  64. package/src/commons/DevMode/Styles/EmptyComponentStyles.js +15 -0
  65. package/src/commons/DevMode/Styles/ItemStyles.js +27 -0
  66. package/src/commons/DevMode/Styles/TextWithLabelStyles.js +36 -0
  67. package/src/commons/DevMode/TextWithLabel.js +30 -0
  68. package/src/commons/DevMode/index.js +5 -1
  69. package/src/commons/Device/ConnectedViewHeader.js +2 -2
  70. package/src/commons/Device/DeviceAlertStatus.js +3 -3
  71. package/src/commons/Device/DisconnectedView.js +2 -2
  72. package/src/commons/Device/Emergency/EmergencyButton.js +2 -2
  73. package/src/commons/Device/Emergency/EmergencyDetail.js +1 -1
  74. package/src/commons/Device/Emergency/__test__/EmergencyButton.test.js +3 -2
  75. package/src/commons/Device/FlatListItems.js +2 -2
  76. package/src/commons/Device/ItemAddNew/index.js +10 -11
  77. package/src/commons/Device/ItemDevice.js +27 -20
  78. package/src/commons/Device/PMSensor/PMSensorIndicatior.js +1 -1
  79. package/src/commons/Device/RainningSensor/CurrentRainSensor.js +1 -1
  80. package/src/commons/Device/SensorConnectedStatus.js +5 -2
  81. package/src/commons/Device/WindDirection/Compass/index.js +6 -3
  82. package/src/commons/Device/WindSpeed/Anemometer/index.js +1 -1
  83. package/src/commons/Device/__test__/DeviceAlertStatus.test.js +8 -4
  84. package/src/commons/Device/__test__/FlatListItems.test.js +3 -2
  85. package/src/commons/Device/__test__/SensorConnectedStatus.test.js +4 -2
  86. package/src/commons/Explore/ActivityIndicator/index.js +5 -2
  87. package/src/commons/Explore/SearchBox/__test__/SearchBox.test.js +3 -3
  88. package/src/commons/Explore/SearchBox/index.js +2 -2
  89. package/src/commons/FieldTemplate/ChooseUserField/ChoosePopup.js +4 -4
  90. package/src/commons/FieldTemplate/ChooseUserField/__test__/index.test.js +11 -8
  91. package/src/commons/FieldTemplate/ChooseUserField/index.js +2 -2
  92. package/src/commons/FieldTemplate/PasscodeField/__test__/index.test.js +3 -2
  93. package/src/commons/FieldTemplate/PasscodeField/index.js +2 -2
  94. package/src/commons/FieldTemplate/ScheduleField/__test__/index.test.js +12 -7
  95. package/src/commons/Form/TextInput.js +2 -2
  96. package/src/commons/Form/TextInputPassword.js +2 -2
  97. package/src/commons/GroupCheckBox/__test__/GroupCheckBox.test.js +5 -3
  98. package/src/commons/GroupCheckBox/index.js +2 -2
  99. package/src/commons/Header/HeaderCustom.js +8 -2
  100. package/src/commons/HeaderAni/index.js +2 -3
  101. package/src/commons/MediaPlayerDetail/index.js +2 -2
  102. package/src/commons/MenuActionList/index.js +2 -2
  103. package/src/commons/MenuActionMore/index.js +6 -5
  104. package/src/commons/NavBar/index.js +4 -4
  105. package/src/commons/OneTapTemplate/NumberUpDownActionTemplate.js +11 -5
  106. package/src/commons/OneTapTemplate/OptionsDropdownActionTemplate.js +7 -3
  107. package/src/commons/OneTapTemplate/StatesGridActionTemplate.js +4 -2
  108. package/src/commons/OneTapTemplate/__test__/NumberUpDownActionTemplate.test.js +11 -8
  109. package/src/commons/OneTapTemplate/__test__/OptionsDropdownActionTemplate.test.js +9 -5
  110. package/src/commons/OneTapTemplate/__test__/StatesGridActionTemplate.test.js +5 -3
  111. package/src/commons/Popover/index.js +2 -12
  112. package/src/commons/PreventAccess/__test__/PreventAccess.test.js +5 -3
  113. package/src/commons/PreventAccess/index.js +3 -3
  114. package/src/commons/{Connecting → Processing}/__test__/Connecting.test.js +5 -4
  115. package/src/commons/Processing/index.js +93 -0
  116. package/src/commons/{Connecting → Processing}/styles.js +9 -1
  117. package/src/commons/SelectGateway/index.js +105 -0
  118. package/src/commons/SelectGateway/styles.js +55 -0
  119. package/src/commons/SelectSubUnit/__test__/SelectSubUnit.test.js +106 -0
  120. package/src/commons/SelectSubUnit/index.js +124 -0
  121. package/src/commons/SelectSubUnit/styles.js +55 -0
  122. package/src/commons/SelectUnit/__test__/SelectUnit.test.js +120 -0
  123. package/src/commons/SelectUnit/index.js +106 -0
  124. package/src/commons/SelectUnit/styles.js +54 -0
  125. package/src/commons/Sharing/WrapHeaderScrollable.js +6 -4
  126. package/src/commons/SubUnit/OneTap/ItemOneTap.js +7 -4
  127. package/src/commons/SubUnit/OneTap/__test__/SubUnitAutomate.test.js +25 -10
  128. package/src/commons/SubUnit/OneTap/index.js +9 -4
  129. package/src/commons/SubUnit/ShortDetail.js +11 -29
  130. package/src/commons/SubUnit/__test__/ShortDetail.test.js +15 -10
  131. package/src/commons/SummaryItem/index.js +2 -2
  132. package/src/commons/Unit/HeaderUnit/index.js +4 -5
  133. package/src/commons/Unit/SharedUnit.js +10 -8
  134. package/src/commons/Unit/__test__/HeaderUnit.test.js +13 -5
  135. package/src/commons/Unit/__test__/SharedUnit.test.js +30 -11
  136. package/src/commons/UnitSummary/AirQuality/__test__/index.test.js +13 -8
  137. package/src/commons/UnitSummary/AirQuality/index.js +7 -3
  138. package/src/commons/UnitSummary/TotalPowerBox.js +2 -2
  139. package/src/commons/UnitSummary/TotalPowerConsumption/index.js +2 -2
  140. package/src/commons/UnitSummary/__test__/TotalPowerBox.test.js +3 -2
  141. package/src/commons/UnitSummary/__test__/TotalPowerConsumption.test.js +4 -2
  142. package/src/commons/ViewButtonBottom/index.js +4 -4
  143. package/src/commons/WheelDateTimePicker/index.js +5 -3
  144. package/src/commons/WrapParallaxScrollView/index.js +2 -1
  145. package/src/configs/API.js +12 -14
  146. package/src/configs/AccessibilityLabel.js +608 -0
  147. package/src/configs/Colors.js +4 -0
  148. package/src/configs/Constants.js +1 -593
  149. package/src/configs/Images.js +3 -0
  150. package/src/context/actionType.ts +19 -3
  151. package/src/context/mockStore.ts +18 -3
  152. package/src/context/reducer.ts +66 -9
  153. package/src/hoc/withRemoteControl.js +1 -0
  154. package/src/hooks/Common/index.js +2 -2
  155. package/src/hooks/Common/useDevicesStatus.js +1 -1
  156. package/src/hooks/Common/{useGGHomeDeviceConnected.js → useHomeAssistantDeviceConnected.js} +3 -3
  157. package/src/hooks/Common/usePopover.js +6 -1
  158. package/src/hooks/IoT/__test__/{useGGHomeConnection.test.js → useHomeAssistantConnection.test.js} +18 -18
  159. package/src/hooks/IoT/__test__/useRemoteControl.test.js +17 -12
  160. package/src/hooks/IoT/index.js +2 -2
  161. package/src/hooks/IoT/useHomeAssistantConnection.js +91 -0
  162. package/src/hooks/IoT/useRemoteControl.js +6 -6
  163. package/src/hooks/IoT/useValueEvaluation.js +10 -19
  164. package/src/iot/RemoteControl/{GoogleHome.js → HomeAssistant.js} +27 -23
  165. package/src/iot/RemoteControl/LG.js +2 -1
  166. package/src/iot/RemoteControl/__test__/{GoogleHome.test.js → HomeAssistant.test.js} +30 -30
  167. package/src/navigations/AddDeviceStack.js +0 -14
  168. package/src/navigations/AddGatewayStack.js +51 -21
  169. package/src/navigations/Main.js +28 -4
  170. package/src/navigations/SmartIrStack.js +3 -3
  171. package/src/navigations/UnitStack.js +5 -8
  172. package/src/screens/AQIGuide/__test__/AQIGuide.test.js +5 -3
  173. package/src/screens/AQIGuide/index.js +5 -3
  174. package/src/screens/ActivityLog/FilterPopup.js +2 -2
  175. package/src/screens/ActivityLog/__test__/FilterPopup.test.js +2 -2
  176. package/src/screens/ActivityLog/__test__/index.test.js +3 -2
  177. package/src/screens/ActivityLog/index.js +3 -3
  178. package/src/screens/AddCommon/SelectSubUnit.js +44 -191
  179. package/src/screens/AddCommon/SelectUnit.js +51 -204
  180. package/src/screens/AddCommon/__test__/SelectSubUnit.test.js +7 -50
  181. package/src/screens/AddCommon/__test__/SelectUnit.test.js +28 -26
  182. package/src/screens/AddLocationMaps/__test__/index.test.js +13 -7
  183. package/src/screens/AddLocationMaps/index.js +3 -3
  184. package/src/screens/AddNewAction/Device/index.js +5 -1
  185. package/src/screens/AddNewAction/SelectAction.js +36 -20
  186. package/src/screens/AddNewAction/SelectSensorDevices.js +3 -3
  187. package/src/screens/AddNewAction/__test__/SelectAction.test.js +3 -2
  188. package/src/screens/AddNewAction/__test__/SelectSensorDevices.test.js +8 -3
  189. package/src/screens/AddNewAutoSmart/__test__/AddNewAutoSmart.test.js +11 -7
  190. package/src/screens/AddNewAutoSmart/index.js +11 -12
  191. package/src/screens/AddNewDevice/ConnectingDevices.js +1 -1
  192. package/src/screens/AddNewDevice/__test__/AddNewDevice.test.js +7 -4
  193. package/src/screens/AddNewDevice/index.js +4 -4
  194. package/src/screens/AddNewGateway/ConnectingDevice.js +40 -0
  195. package/src/screens/AddNewGateway/ConnectingModbusDevice.js +61 -0
  196. package/src/screens/AddNewGateway/ConnectingWifiDevice.js +70 -0
  197. package/src/screens/AddNewGateway/ConnectingZigbeeDevice.js +60 -0
  198. package/src/screens/AddNewGateway/PlugAndPlay/FirstWarning.js +21 -8
  199. package/src/screens/AddNewGateway/PlugAndPlay/__test__/FirstWarning.test.js +23 -4
  200. package/src/screens/AddNewGateway/RenameNewDevices.js +141 -0
  201. package/src/screens/AddNewGateway/RenameNewDevicesStyles.js +75 -0
  202. package/src/screens/AddNewGateway/ScanGatewayQR.js +57 -0
  203. package/src/screens/AddNewGateway/ScanModbusQR.js +53 -0
  204. package/src/screens/AddNewGateway/ScanWifiDeviceQR.js +55 -0
  205. package/src/screens/AddNewGateway/SelectDeviceSubUnit.js +31 -0
  206. package/src/screens/AddNewGateway/SelectDeviceType.js +52 -0
  207. package/src/screens/AddNewGateway/SelectDeviceUnit.js +29 -0
  208. package/src/screens/AddNewGateway/SelectModbusGateway.js +34 -0
  209. package/src/screens/AddNewGateway/SelectZigbeeGateway.js +34 -0
  210. package/src/screens/AddNewGateway/ShareWifiPassword.js +302 -0
  211. package/src/screens/AddNewGateway/ShareWifiPasswordStyles.js +44 -0
  212. package/src/screens/AddNewGateway/__test__/AddNewGateway.test.js +7 -4
  213. package/src/screens/AddNewGateway/__test__/ConnectingModbusDevice.test.js +63 -0
  214. package/src/screens/AddNewGateway/__test__/{SelectGateway.test.js → ConnectingWifiDevice.test.js} +15 -10
  215. package/src/screens/AddNewGateway/__test__/ConnectingZigbeeDevice.test.js +62 -0
  216. package/src/screens/AddNewGateway/__test__/RenameNewDevices.test.js +191 -0
  217. package/src/screens/AddNewGateway/__test__/ScanGatewayQR.test.js +73 -0
  218. package/src/screens/AddNewGateway/__test__/ScanModbusQR.test.js +75 -0
  219. package/src/screens/AddNewGateway/__test__/ScanWifiDeviceQR.test.js +73 -0
  220. package/src/screens/AddNewGateway/__test__/SelectDeviceSubUnit.test.js +47 -0
  221. package/src/screens/AddNewGateway/__test__/SelectDeviceType.test.js +89 -0
  222. package/src/screens/AddNewGateway/__test__/SelectDeviceUnit.test.js +48 -0
  223. package/src/screens/AddNewGateway/__test__/SelectModbusGateway.test.js +77 -0
  224. package/src/screens/AddNewGateway/__test__/SelectZigbeeGateway.test.js +77 -0
  225. package/src/screens/AddNewGateway/__test__/ShareWifiPassword.test.js +294 -0
  226. package/src/screens/AddNewGateway/hooks/__Tests__/index.test.js +27 -0
  227. package/src/screens/AddNewGateway/index.js +4 -4
  228. package/src/screens/AddNewOneTap/__test__/AddNewOneTap.test.js +5 -4
  229. package/src/screens/AddNewOneTap/index.js +4 -4
  230. package/src/screens/Automate/__test__/index.test.js +2 -2
  231. package/src/screens/Automate/index.js +6 -2
  232. package/src/screens/ConfirmUnitDeletion/__test__/ConfirmUnitDeletion.test.js +3 -2
  233. package/src/screens/ConfirmUnitDeletion/index.js +3 -3
  234. package/src/screens/Device/EditDevice/__test__/EditDevice.test.js +5 -5
  235. package/src/screens/Device/EditDevice/index.js +3 -3
  236. package/src/screens/Device/__test__/detail.test.js +38 -22
  237. package/src/screens/Device/components/DetailHistoryChart.js +7 -5
  238. package/src/screens/Device/components/SensorConnectStatusViewHeader.js +16 -17
  239. package/src/screens/Device/components/SensorDisplayItem.js +51 -26
  240. package/src/screens/Device/detail.js +65 -38
  241. package/src/screens/Device/hooks/useEvaluateValue.js +0 -2
  242. package/src/screens/Device/hooks/useFavoriteDevice.js +4 -2
  243. package/src/screens/DeviceInfo/__test__/index.test.js +8 -4
  244. package/src/screens/DeviceInfo/index.js +10 -6
  245. package/src/screens/Drawer/index.js +30 -13
  246. package/src/screens/EmergencyContacts/EmergencyContactsAddNew.js +11 -7
  247. package/src/screens/EmergencyContacts/EmergencyContactsList.js +1 -1
  248. package/src/screens/EmergencyContacts/EmergencyContactsSelectContacts.js +9 -10
  249. package/src/screens/EmergencyContacts/__test__/EmergencyContactAddNew.test.js +9 -5
  250. package/src/screens/EmergencyContacts/__test__/EmergencyContactList.test.js +7 -3
  251. package/src/screens/EmergencyContacts/__test__/EmergencyContactsSelectContacts.test.js +7 -3
  252. package/src/screens/EmergencySetting/__test__/DropDownItem.test.js +3 -2
  253. package/src/screens/EmergencySetting/components/DropDownItem.js +2 -2
  254. package/src/screens/EnterPassword/__test__/EnterPassword.test.js +6 -3
  255. package/src/screens/EnterPassword/index.js +5 -3
  256. package/src/screens/GuestInfo/__test__/index.test.js +18 -12
  257. package/src/screens/GuestInfo/components/AccessScheduleItem.js +2 -2
  258. package/src/screens/GuestInfo/components/AccessScheduleSheet.js +3 -3
  259. package/src/screens/GuestInfo/components/HeaderGuestInfo.js +2 -2
  260. package/src/screens/GuestInfo/components/RecurringDetail.js +4 -4
  261. package/src/screens/GuestInfo/components/TemporaryDetail.js +3 -3
  262. package/src/screens/GuestInfo/index.js +1 -1
  263. package/src/screens/HanetCamera/Detail.js +10 -4
  264. package/src/screens/HanetCamera/ManageAccess.js +4 -4
  265. package/src/screens/HanetCamera/MemberInfo.js +1 -1
  266. package/src/screens/HanetCamera/__test__/Detail.test.js +5 -3
  267. package/src/screens/HanetCamera/__test__/ManageAccess.test.js +10 -4
  268. package/src/screens/HanetCamera/__test__/MemberInfo.test.js +4 -2
  269. package/src/screens/HanetCamera/components/RequestFaceIDPopup.js +2 -2
  270. package/src/screens/ManageAccess/index.js +1 -1
  271. package/src/screens/MoveToAnotherSubUnit/__test__/index.test.js +4 -4
  272. package/src/screens/MoveToAnotherSubUnit/index.js +2 -2
  273. package/src/screens/Notification/__test__/NotificationItem.test.js +6 -30
  274. package/src/screens/Notification/components/NotificationItem.js +3 -19
  275. package/src/screens/PlayBackCamera/__test__/index.test.js +9 -6
  276. package/src/screens/PlayBackCamera/index.js +6 -6
  277. package/src/screens/ScanChipQR/components/QRScan/__test__/QRScan.test.js +1 -1
  278. package/src/screens/ScanChipQR/components/QRScan/index.js +10 -3
  279. package/src/screens/ScriptDetail/__test__/index.test.js +8 -4
  280. package/src/screens/ScriptDetail/index.js +7 -5
  281. package/src/screens/SelectUnit/__test__/index.test.js +4 -3
  282. package/src/screens/SelectUnit/index.js +3 -3
  283. package/src/screens/SetSchedule/index.js +1 -1
  284. package/src/screens/Sharing/Components/SensorItem.js +6 -3
  285. package/src/screens/Sharing/Components/Styles/SensorItemStyles.js +4 -0
  286. package/src/screens/Sharing/Components/Styles/TitleCheckBoxStyles.js +4 -0
  287. package/src/screens/Sharing/Components/TitleCheckBox.js +17 -8
  288. package/src/screens/Sharing/Components/__test__/SensorItem.test.js +4 -2
  289. package/src/screens/Sharing/InfoMemberUnit.js +7 -6
  290. package/src/screens/Sharing/MemberList.js +4 -4
  291. package/src/screens/Sharing/SelectPermission.js +9 -4
  292. package/src/screens/Sharing/SelectUser.js +9 -5
  293. package/src/screens/Sharing/__test__/InfoMemberUnit.test.js +3 -2
  294. package/src/screens/Sharing/__test__/SelectUser.test.js +7 -4
  295. package/src/screens/SideMenuDetail/__test__/index.test.js +11 -7
  296. package/src/screens/SideMenuDetail/index.js +2 -2
  297. package/src/screens/SmartIr/__test__/GroupButtonByType.test.js +4 -2
  298. package/src/screens/SmartIr/__test__/SelectDeviceType.test.js +5 -5
  299. package/src/screens/SmartIr/__test__/SmartIr.test.js +14 -6
  300. package/src/screens/SmartIr/components/GroupButtonByType/GroupButtonByType.js +4 -2
  301. package/src/screens/SmartIr/components/{SelectDeviceType.js → SelectIrDeviceType.js} +2 -2
  302. package/src/screens/SmartIr/index.js +1 -1
  303. package/src/screens/SubUnit/AddSubUnit.js +7 -3
  304. package/src/screens/SubUnit/Detail.js +6 -6
  305. package/src/screens/SubUnit/EditSubUnit.js +10 -6
  306. package/src/screens/SubUnit/ManageSubUnit.js +2 -2
  307. package/src/screens/SubUnit/__test__/AddSubUnit.test.js +6 -3
  308. package/src/screens/SubUnit/__test__/Detail.test.js +5 -3
  309. package/src/screens/SubUnit/__test__/EditSubUnit.test.js +9 -5
  310. package/src/screens/SubUnit/__test__/ManageSubUnit.test.js +3 -2
  311. package/src/screens/SyncLGDevice/AddLGDevice.js +4 -4
  312. package/src/screens/SyncLGDevice/__test__/AddLGDevice.test.js +7 -4
  313. package/src/screens/TDSGuide/__test__/TDSGuide.test.js +4 -2
  314. package/src/screens/TDSGuide/index.js +2 -2
  315. package/src/screens/Template/EditTemplate.js +152 -0
  316. package/src/screens/Template/GatewayList.js +51 -0
  317. package/src/screens/Template/Information.js +41 -0
  318. package/src/screens/Template/Styles/EditTemplateStyle.js +109 -0
  319. package/src/screens/Template/Styles/GatewayStyles.js +46 -0
  320. package/src/screens/Template/Styles/InformationStyles.js +16 -0
  321. package/src/screens/Template/Styles/detailStyles.js +35 -0
  322. package/src/screens/Template/Styles/indexStyles.js +2 -33
  323. package/src/screens/Template/__test__/EditTemplate.test.js +89 -0
  324. package/src/screens/Template/__test__/GatewayList.test.js +26 -0
  325. package/src/screens/Template/__test__/Information.test.js +16 -0
  326. package/src/screens/Template/__test__/detail.test.js +68 -0
  327. package/src/screens/Template/__test__/index.test.js +26 -1
  328. package/src/screens/Template/detail.js +154 -0
  329. package/src/screens/Template/index.js +38 -32
  330. package/src/screens/UVIndexGuide/__test__/UVIndexGuide.test.js +3 -2
  331. package/src/screens/UVIndexGuide/index.js +2 -2
  332. package/src/screens/Unit/AddMenu.js +6 -20
  333. package/src/screens/Unit/ChooseLocation.js +1 -1
  334. package/src/screens/Unit/Detail.js +14 -9
  335. package/src/screens/Unit/ManageUnit.js +21 -15
  336. package/src/screens/Unit/MyAllUnit/index.js +1 -1
  337. package/src/screens/Unit/SelectAddToFavorites.js +11 -2
  338. package/src/screens/Unit/SelectAddress.js +4 -4
  339. package/src/screens/Unit/SmartAccount.js +1 -1
  340. package/src/screens/Unit/SmartAccountItem.js +3 -3
  341. package/src/screens/Unit/Station/__test__/index.test.js +19 -3
  342. package/src/screens/Unit/Station/index.js +2 -2
  343. package/src/screens/Unit/Summaries.js +2 -2
  344. package/src/screens/Unit/__test__/CheckSendEmail.test.js +6 -6
  345. package/src/screens/Unit/__test__/Detail.test.js +90 -55
  346. package/src/screens/Unit/__test__/ManageUnit.test.js +40 -18
  347. package/src/screens/Unit/__test__/SelectAddress.test.js +15 -8
  348. package/src/screens/Unit/__test__/SmartAccount.test.js +42 -25
  349. package/src/screens/Unit/__test__/SmartAccountItem.test.js +4 -3
  350. package/src/screens/Unit/components/AutomateScript/index.js +8 -2
  351. package/src/screens/Unit/components/ListMyAllUnit/index.js +1 -1
  352. package/src/screens/Unit/components/MyAllUnit/__test__/Header.test.js +9 -5
  353. package/src/screens/Unit/components/MyAllUnit/index.js +1 -1
  354. package/src/screens/Unit/components/MyUnitDevice/index.js +8 -5
  355. package/src/screens/Unit/components/SharedUnit/index.js +12 -6
  356. package/src/screens/Unit/components/__test__/MyUnitDevice.test.js +2 -2
  357. package/src/screens/Unit/components/__test__/SharedUnit.test.js +24 -9
  358. package/src/screens/Unit/hook/useUnitConnectRemoteDevices.js +25 -11
  359. package/src/screens/UnitSummary/__test__/index.test.js +4 -2
  360. package/src/screens/UnitSummary/components/3PPowerConsumption/__test__/3PPowerConsumption.test.js +4 -2
  361. package/src/screens/UnitSummary/components/3PPowerConsumption/index.js +2 -2
  362. package/src/screens/UnitSummary/components/PowerConsumption/__test__/PowerConsumption.test.js +4 -2
  363. package/src/screens/UnitSummary/components/PowerConsumption/index.js +2 -2
  364. package/src/screens/UnitSummary/components/RunningDevices/__test__/index.test.js +5 -4
  365. package/src/screens/UnitSummary/components/RunningDevices/index.js +6 -3
  366. package/src/screens/UnitSummary/components/TotalPowerBox/index.js +2 -2
  367. package/src/screens/UnitSummary/components/TotalPowerConsumption/index.js +2 -2
  368. package/src/screens/UnitSummary/components/__test__/TotalPowerBox.test.js +3 -2
  369. package/src/screens/UnitSummary/components/__test__/TotalPowerConsumption.test.js +4 -2
  370. package/src/screens/UnitSummary/index.js +10 -8
  371. package/src/screens/WaterQualityGuide/__test__/index.test.js +17 -12
  372. package/src/screens/WaterQualityGuide/index.js +26 -10
  373. package/src/utils/Apis/axios.js +1 -0
  374. package/src/utils/I18n/translations/en.json +25 -10
  375. package/src/utils/I18n/translations/vi.json +22 -9
  376. package/src/utils/Route/index.js +22 -10
  377. package/src/commons/Connecting/index.js +0 -67
  378. package/src/commons/ConnectingProcess/DeviceItem/DeviceItem.js +0 -28
  379. package/src/commons/ConnectingProcess/DeviceItem/DeviceItemStyles.js +0 -41
  380. package/src/commons/ConnectingProcess/__test__/Connecting.test.js +0 -163
  381. package/src/commons/ConnectingProcess/__test__/DeviceItem.test.js +0 -19
  382. package/src/commons/ConnectingProcess/index.js +0 -213
  383. package/src/commons/ConnectingProcess/styles.js +0 -69
  384. package/src/hooks/IoT/useGGHomeConnection.js +0 -91
  385. package/src/iot/RemoteControl/index.js +0 -55
  386. package/src/screens/AddNewDevice/ConnectDevices.js +0 -184
  387. package/src/screens/AddNewDevice/__test__/ConnectDevices.test.js +0 -131
  388. package/src/screens/AddNewGateway/ConnectedGateway.js +0 -139
  389. package/src/screens/AddNewGateway/ConnectingGateway.js +0 -137
  390. package/src/screens/AddNewGateway/PlugAndPlay/ConnectWifiWarning.js +0 -214
  391. package/src/screens/AddNewGateway/PlugAndPlay/GatewayWifiList.js +0 -307
  392. package/src/screens/AddNewGateway/PlugAndPlay/__test__/ConnectWifiWarning.test.js +0 -75
  393. package/src/screens/AddNewGateway/PlugAndPlay/__test__/GatewayWifiList.test.js +0 -130
  394. package/src/screens/AddNewGateway/SelectGateway.js +0 -133
  395. package/src/screens/AddNewGateway/SetupGatewayWifi.js +0 -207
  396. package/src/screens/AddNewGateway/__test__/ConnectedGateway.test.js +0 -71
  397. package/src/screens/AddNewGateway/__test__/ConnectingGateway.test.js +0 -96
  398. package/src/screens/AddNewGateway/__test__/SetupGateway.test.js +0 -120
  399. package/src/screens/ScanChipQR/__test__/ScanChipQR.test.js +0 -115
  400. package/src/screens/ScanChipQR/hooks/index.js +0 -120
  401. package/src/screens/ScanChipQR/index.js +0 -29
  402. package/src/screens/ScanSensorQR/__test__/ScanSensorQR.test.js +0 -111
  403. package/src/screens/ScanSensorQR/hooks/index.js +0 -40
  404. package/src/screens/ScanSensorQR/index.js +0 -39
@@ -16,7 +16,7 @@ import _TextInput from '../../commons/Form/TextInput';
16
16
  import WrapHeaderScrollable from '../../commons/Sharing/WrapHeaderScrollable';
17
17
 
18
18
  import { useIsOwnerOfUnit } from '../../hooks/Common';
19
- import { TESTID } from '../../configs/Constants';
19
+ import { AccessibilityLabel } from '../../configs/Constants';
20
20
  import { IconOutline } from '@ant-design/icons-react-native';
21
21
  import styles from './ManageUnitStyles';
22
22
  import { useNavigation } from '@react-navigation/native';
@@ -35,7 +35,7 @@ const ButtonWrapper = ({
35
35
  return (
36
36
  <TouchableOpacity
37
37
  onPress={onPress}
38
- testID={testId}
38
+ accessibilityLabel={testId}
39
39
  style={styles.buttonWrapper}
40
40
  >
41
41
  <View style={styles.buttonInfo}>
@@ -68,7 +68,7 @@ const ButtonWrapper = ({
68
68
 
69
69
  const ManageUnit = ({ route }) => {
70
70
  const t = useTranslations();
71
- const { unit } = route.params;
71
+ const { unit } = route?.params || {};
72
72
  const navigation = useNavigation();
73
73
  const { isOwner } = useIsOwnerOfUnit(unit.user_id);
74
74
  const [showEdit, setshowEdit, setHideEdit] = useBoolean();
@@ -222,18 +222,20 @@ const ManageUnit = ({ route }) => {
222
222
  value={unitData.icon}
223
223
  icon
224
224
  title={t('icon_unit')}
225
- testID={TESTID.MANAGE_UNIT_CHANGE_PHOTO}
225
+ accessibilityLabel={AccessibilityLabel.MANAGE_UNIT_CHANGE_PHOTO}
226
226
  />
227
227
  <ButtonWrapper
228
228
  onPress={setshowEdit}
229
- testID={TESTID.MANAGE_UNIT_CHANGE_NAME}
229
+ accessibilityLabel={AccessibilityLabel.MANAGE_UNIT_CHANGE_NAME}
230
230
  title={t('unit_name')}
231
231
  value={unitData.name}
232
232
  />
233
233
  <ButtonWrapper
234
234
  onPress={goSelectLocation}
235
235
  title={t('location')}
236
- testID={TESTID.MANAGE_UNIT_CHANGE_LOCATION}
236
+ accessibilityLabel={
237
+ AccessibilityLabel.MANAGE_UNIT_CHANGE_LOCATION
238
+ }
237
239
  >
238
240
  <Text type="Body" color={Colors.Gray7} style={styles.location}>
239
241
  {unitData.address}
@@ -243,14 +245,16 @@ const ManageUnit = ({ route }) => {
243
245
  onPress={goToManageSubUnit}
244
246
  title={t('manage_sub_units')}
245
247
  value={`${SensorNumbers} sub-units`}
246
- testID={TESTID.MANAGE_UNIT_GO_TO_SUBUNIT}
248
+ accessibilityLabel={
249
+ AccessibilityLabel.MANAGE_UNIT_GO_TO_SUBUNIT
250
+ }
247
251
  />
248
252
  <ButtonWrapper
249
253
  onPress={() => handleChoosePhoto('background')}
250
254
  title={t('unit_wallpaper')}
251
255
  value={t('tap_to_change')}
252
256
  valueColor={Colors.Orange}
253
- testID={TESTID.MANAGE_UNIT_CHANGE_PHOTO}
257
+ accessibilityLabel={AccessibilityLabel.MANAGE_UNIT_CHANGE_PHOTO}
254
258
  >
255
259
  <View style={styles.boxImage}>
256
260
  <Image
@@ -261,7 +265,7 @@ const ManageUnit = ({ route }) => {
261
265
  style={styles.image}
262
266
  defaultSource={Images.BgDevice}
263
267
  resizeMode="cover"
264
- testID={TESTID.SUB_UNIT_BACKGROUND}
268
+ accessibilityLabel={AccessibilityLabel.SUB_UNIT_BACKGROUND}
265
269
  />
266
270
  </View>
267
271
  </ButtonWrapper>
@@ -271,7 +275,7 @@ const ManageUnit = ({ route }) => {
271
275
  setShowImagePicker={setShowImagePicker}
272
276
  setImageUrl={onUpdateImage}
273
277
  optionsCapture={options}
274
- testID={TESTID.MANAGE_UNIT_IMAGE_PICKER}
278
+ accessibilityLabel={AccessibilityLabel.MANAGE_UNIT_IMAGE_PICKER}
275
279
  />
276
280
  </>
277
281
  )}
@@ -281,7 +285,7 @@ const ManageUnit = ({ route }) => {
281
285
  <TouchableOpacity
282
286
  style={styles.removeButton}
283
287
  onPress={setshowRemove}
284
- testID={TESTID.MANAGE_UNIT_SHOW_REMOVE}
288
+ accessibilityLabel={AccessibilityLabel.MANAGE_UNIT_SHOW_REMOVE}
285
289
  >
286
290
  <Text
287
291
  type={'H4'}
@@ -298,7 +302,7 @@ const ManageUnit = ({ route }) => {
298
302
  onBackButtonPress={setHideEdit}
299
303
  onBackdropPress={setHideEdit}
300
304
  style={styles.modalContainer}
301
- testID={TESTID.MANAGE_UNIT_MODAL_RENAME}
305
+ accessibilityLabel={AccessibilityLabel.MANAGE_UNIT_MODAL_RENAME}
302
306
  >
303
307
  <Animated.View style={[styles.popoverStyle, animatedStyle]}>
304
308
  <View style={styles.modalWrapper}>
@@ -313,7 +317,9 @@ const ManageUnit = ({ route }) => {
313
317
  textInputStyle={styles.textInputStyle}
314
318
  wrapStyle={styles.textInputWrapStyle}
315
319
  selectionColor={Colors.Primary}
316
- testID={TESTID.MANAGE_UNIT_MODAL_RENAME_INPUT_NAME}
320
+ accessibilityLabel={
321
+ AccessibilityLabel.MANAGE_UNIT_MODAL_RENAME_INPUT_NAME
322
+ }
317
323
  />
318
324
 
319
325
  <ViewButtonBottom
@@ -321,7 +327,7 @@ const ManageUnit = ({ route }) => {
321
327
  onLeftClick={setHideEdit}
322
328
  rightTitle={t('rename')}
323
329
  onRightClick={goRename}
324
- testIDPrefix={TESTID.PREFIX.MANAGE_UNIT}
330
+ accessibilityLabelPrefix={AccessibilityLabel.PREFIX.MANAGE_UNIT}
325
331
  />
326
332
  </View>
327
333
  </Animated.View>
@@ -337,7 +343,7 @@ const ManageUnit = ({ route }) => {
337
343
  rightButtonTitle={t('remove')}
338
344
  rightButtonClick={goRemove}
339
345
  rightButtonStyle={styles.rightButtonStyle}
340
- testIDPrefix={TESTID.PREFIX.MANAGE_UNIT_ALERT}
346
+ accessibilityLabelPrefix={AccessibilityLabel.PREFIX.MANAGE_UNIT_ALERT}
341
347
  />
342
348
  </>
343
349
  );
@@ -9,7 +9,7 @@ const AnimatedScrollView = Animated.createAnimatedComponent(ScrollView);
9
9
 
10
10
  const MyAllUnit = ({ route, navigation }) => {
11
11
  const animatedScrollYValue = useRef(new Animated.Value(0)).current;
12
- const unitItems = route.params.myUnits;
12
+ const unitItems = route?.params?.myUnits;
13
13
 
14
14
  return (
15
15
  <SafeAreaView style={[styles.wrap, styles.backgroundWhite]}>
@@ -21,12 +21,13 @@ import { SCContext } from '../../context';
21
21
  import { Action } from '../../context/actionType';
22
22
  import { axiosGet, axiosPost } from '../../utils/Apis/axios';
23
23
  import { API, Colors } from '../../configs';
24
+ import { AccessibilityLabel } from '../../configs/Constants';
24
25
  import styles from './SelectAddToFavoritesStyles';
25
26
 
26
27
  const SelectAddToFavorites = memo(({ route }) => {
27
28
  const t = useTranslations();
28
29
  const { goBack } = useNavigation();
29
- const { unitId } = route.params;
30
+ const { unitId } = route?.params || {};
30
31
  const { setAction } = useContext(SCContext);
31
32
  const [listStation, setListStation] = useState([]);
32
33
  const [listMenuItem, setListMenuItem] = useState([]);
@@ -136,7 +137,11 @@ const SelectAddToFavorites = memo(({ route }) => {
136
137
 
137
138
  const rightComponent = useMemo(
138
139
  () => (
139
- <TouchableOpacity style={styles.buttonClose} onPress={goBack}>
140
+ <TouchableOpacity
141
+ accessibilityLabel={AccessibilityLabel.ICON_BACK}
142
+ style={styles.buttonClose}
143
+ onPress={goBack}
144
+ >
140
145
  <Icon name={'close'} size={24} color={Colors.Black} />
141
146
  </TouchableOpacity>
142
147
  ),
@@ -151,6 +156,8 @@ const SelectAddToFavorites = memo(({ route }) => {
151
156
  style={styles.wrap}
152
157
  contentContainerStyle={styles.contentContainerStyle}
153
158
  scrollIndicatorInsets={{ right: 1 }}
159
+ accessibilityLabel={AccessibilityLabel.LIST_FAVORITES}
160
+ idLabelScrollView={AccessibilityLabel.LIST_FAVORITES}
154
161
  >
155
162
  <Text bold type="H2" style={styles.title}>
156
163
  {t('select_device')}
@@ -162,6 +169,8 @@ const SelectAddToFavorites = memo(({ route }) => {
162
169
  listMenuItem={listMenuItem}
163
170
  onSnapToItem={onSnapToItem}
164
171
  indexStation={indexStation}
172
+ idLabelItem={AccessibilityLabel.SUB_UNIT_FAVORITES}
173
+ idLabelIconBars={AccessibilityLabel.NAVBAR_ICON_BARS_ADD_FAVORITES}
165
174
  style={styles.navbar}
166
175
  />
167
176
  )}
@@ -23,7 +23,7 @@ import { API, Colors, SCConfig } from '../../configs';
23
23
  import { axiosGet } from '../../utils/Apis/axios';
24
24
  import Routes from '../../utils/Route';
25
25
  import {
26
- TESTID,
26
+ AccessibilityLabel,
27
27
  MAP_INITIAL_REGION,
28
28
  EOH_LOCATION,
29
29
  } from '../../configs/Constants';
@@ -32,7 +32,7 @@ navigator.geolocation = require('@react-native-community/geolocation');
32
32
 
33
33
  const SelectAddress = memo(({ route }) => {
34
34
  const t = useTranslations();
35
- const { updateLocation } = route.params;
35
+ const { updateLocation } = route?.params || {};
36
36
  const { navigate, goBack } = useNavigation();
37
37
  const [input, setInput] = useState('');
38
38
  const [searchData, setSearchData] = useState([]);
@@ -192,7 +192,7 @@ const SelectAddress = memo(({ route }) => {
192
192
  <TouchableOpacity
193
193
  onPress={getCurrentPosition}
194
194
  style={styles.button}
195
- testID={TESTID.BUTTON_YOUR_LOCATION}
195
+ accessibilityLabel={AccessibilityLabel.BUTTON_YOUR_LOCATION}
196
196
  >
197
197
  <IconOutline name="aim" size={27} color={Colors.Primary} />
198
198
  <Text type="Body" color={Colors.Gray9} style={styles.text} bold>
@@ -203,7 +203,7 @@ const SelectAddress = memo(({ route }) => {
203
203
  <TouchableOpacity
204
204
  onPress={chooseOnMap}
205
205
  style={styles.button}
206
- testID={TESTID.BUTTON_CHOOSE_ON_MAP}
206
+ accessibilityLabel={AccessibilityLabel.BUTTON_CHOOSE_ON_MAP}
207
207
  >
208
208
  <IconFill name="environment" size={27} color={Colors.Primary} />
209
209
  <Text type="Body" color={Colors.Gray9} style={styles.text} bold>
@@ -64,7 +64,7 @@ const ListSmartAccount = ({ route }) => {
64
64
  if (!smartAccountRef?.current) {
65
65
  return;
66
66
  }
67
- if (item.action === 'remove') {
67
+ if (item?.action === 'remove') {
68
68
  onShowRemoveAlert(smartAccountRef.current.brand)();
69
69
  }
70
70
  },
@@ -5,7 +5,7 @@ import styles from './SmartAccountStyles';
5
5
  import { Colors } from '../../configs';
6
6
  import Text from '../../commons/Text';
7
7
  import { Icon } from '@ant-design/react-native';
8
- import { TESTID } from '../../configs/Constants';
8
+ import { AccessibilityLabel } from '../../configs/Constants';
9
9
 
10
10
  export const SmartAccountItem = memo(
11
11
  ({ item, onShowMenuMore, gotoSmartAccountDetail }) => {
@@ -23,7 +23,7 @@ export const SmartAccountItem = memo(
23
23
  <TouchableOpacity
24
24
  style={styles.wrapText}
25
25
  onPress={onPressGotoSmartAccountDetail}
26
- testID={TESTID.SMART_ACCOUNT_ITEM}
26
+ accessibilityLabel={AccessibilityLabel.SMART_ACCOUNT_ITEM}
27
27
  >
28
28
  <FImage
29
29
  source={{ uri: item?.logo }}
@@ -40,7 +40,7 @@ export const SmartAccountItem = memo(
40
40
  </View>
41
41
  </TouchableOpacity>
42
42
  <TouchableOpacity
43
- testID={TESTID.SMART_ACCOUNT_ITEM_PRESSMORE}
43
+ accessibilityLabel={AccessibilityLabel.SMART_ACCOUNT_ITEM_PRESSMORE}
44
44
  onPress={onPressMore}
45
45
  ref={buttonMoreRef}
46
46
  >
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { FlatList } from 'react-native';
2
+ import { FlatList, TouchableOpacity } from 'react-native';
3
3
  import { act, create } from 'react-test-renderer';
4
4
  import Station from '..';
5
5
  import { SCProvider } from '../../../../context';
@@ -10,14 +10,18 @@ const mockOnSnapToItem = jest.fn();
10
10
  const wrapComponent = (route) => (
11
11
  <SCProvider initState={mockSCStore({})}>
12
12
  <Station
13
- listStation={[{ id: 1, station: { id: 1 }, text: 'station1' }]}
13
+ listStation={[
14
+ { id: 1, station: { id: 1 }, text: 'station1' },
15
+ { id: 2, station: { id: 2 }, text: 'station1' },
16
+ { id: 3, station: { id: 3 }, text: 'station1' },
17
+ ]}
14
18
  onSnapToItem={mockOnSnapToItem}
15
19
  indexStation={1}
16
20
  />
17
21
  </SCProvider>
18
22
  );
19
23
 
20
- describe('Test Station', async () => {
24
+ describe('Test Station', () => {
21
25
  let tree;
22
26
  let route = {
23
27
  unitId: 1,
@@ -37,5 +41,17 @@ describe('Test Station', async () => {
37
41
  const instance = tree.root;
38
42
  const FlatLists = instance.findAllByType(FlatList);
39
43
  expect(FlatLists).toHaveLength(1);
44
+ await FlatLists[0].props.onScroll({
45
+ nativeEvent: {
46
+ contentInset: { bottom: 10, left: 10, right: 10, top: 10 },
47
+ contentOffset: { x: 10, y: 0 },
48
+ contentSize: { height: 10, width: 10 },
49
+ layoutMeasurement: { height: 10, width: 10 },
50
+ zoomScale: 1,
51
+ },
52
+ });
53
+ const TouchableOpacities = instance.findAllByType(TouchableOpacity);
54
+ await TouchableOpacities[0].props.onPress();
55
+ expect(mockOnSnapToItem).toBeCalled();
40
56
  });
41
57
  });
@@ -1,6 +1,6 @@
1
1
  import React, { memo, useEffect, useRef, useState } from 'react';
2
2
  import { View, Text, TouchableOpacity, FlatList } from 'react-native';
3
- import { TESTID } from '../../../configs/Constants';
3
+ import { AccessibilityLabel } from '../../../configs/Constants';
4
4
  import styles from './StationStyles';
5
5
 
6
6
  const Station = ({ listStation = [], onSnapToItem, indexStation }) => {
@@ -24,7 +24,7 @@ const Station = ({ listStation = [], onSnapToItem, indexStation }) => {
24
24
  key={index}
25
25
  style={styles.wrapTitle}
26
26
  onPress={handleOnSnapToItem(item, index)}
27
- testID={`${TESTID.SUB_UNIT_NAME}-${item?.station?.id}`}
27
+ accessibilityLabel={`${AccessibilityLabel.SUB_UNIT_NAME}-${item?.station?.id}`}
28
28
  >
29
29
  <Text
30
30
  style={[styles.title, index === indexStation && styles.titleActive]}
@@ -6,7 +6,7 @@ import { useIsFocused, useNavigation } from '@react-navigation/native';
6
6
  import { axiosGet } from '../../utils/Apis/axios';
7
7
  import { API } from '../../configs';
8
8
  import { useReceiveNotifications } from '../../hooks';
9
- import { TESTID } from '../../configs/Constants';
9
+ import { AccessibilityLabel } from '../../configs/Constants';
10
10
  import { useSCContextSelector } from '../../context';
11
11
 
12
12
  const Summaries = memo(({ unit }) => {
@@ -112,7 +112,7 @@ const Summaries = memo(({ unit }) => {
112
112
  <ScrollView
113
113
  horizontal={true}
114
114
  scrollIndicatorInsets={{ right: 1 }}
115
- accessibilityLabel={TESTID.UNIT_DETAIL_UNIT_SUMMARY_VIEW}
115
+ accessibilityLabel={AccessibilityLabel.UNIT_DETAIL_UNIT_SUMMARY_VIEW}
116
116
  >
117
117
  {unitSummaries.map((item, index) => (
118
118
  <SummaryItem key={index} item={item} goToSummary={goToSummary} />
@@ -22,9 +22,9 @@ jest.mock('react-redux', () => ({
22
22
  },
23
23
  }));
24
24
 
25
- jest.mock('../../../iot/RemoteControl/GoogleHome', () => ({
26
- ...jest.requireActual('../../../iot/RemoteControl/GoogleHome'),
27
- googleHomeConnect: jest.fn(async () => ({
25
+ jest.mock('../../../iot/RemoteControl/HomeAssistant', () => ({
26
+ ...jest.requireActual('../../../iot/RemoteControl/HomeAssistant'),
27
+ homeAssistantConnect: jest.fn(async () => ({
28
28
  [1]: {},
29
29
  })),
30
30
  }));
@@ -66,7 +66,7 @@ const wrapComponent = (route, unitData, account) => (
66
66
  </SCProvider>
67
67
  );
68
68
 
69
- describe('Test UnitDetail google home disconnect', () => {
69
+ describe('Test UnitDetail home assistant disconnect', () => {
70
70
  let tree;
71
71
  const route = {
72
72
  params: {
@@ -75,7 +75,7 @@ describe('Test UnitDetail google home disconnect', () => {
75
75
  };
76
76
  const account = {};
77
77
 
78
- test('when unit has google home disconnect call api check send email', async () => {
78
+ test('when unit has home assistant disconnect call api check send email', async () => {
79
79
  const unitData = {
80
80
  remote_control_options: {
81
81
  googlehome: [
@@ -89,7 +89,7 @@ describe('Test UnitDetail google home disconnect', () => {
89
89
  ],
90
90
  },
91
91
  };
92
- mock.onGet(API.GOOGLE_HOME.CHECK_SEND_EMAIL()).reply(200);
92
+ mock.onGet(API.HOME_ASSISTANT.CHECK_SEND_EMAIL()).reply(200);
93
93
  await act(() => {
94
94
  tree = create(wrapComponent(route, unitData, account));
95
95
  });
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { TouchableOpacity, View } from 'react-native';
2
+ import { Platform, TouchableOpacity, View } from 'react-native';
3
3
  import MockAdapter from 'axios-mock-adapter';
4
4
  import renderer, { act } from 'react-test-renderer';
5
5
  import ParallaxScrollView from '../../../libs/react-native-parallax-scroll-view';
@@ -8,13 +8,14 @@ import { useIsFocused } from '@react-navigation/native';
8
8
  import AsyncStorage from '@react-native-community/async-storage';
9
9
  import UnitDetail from '../Detail';
10
10
  import { API } from '../../../configs';
11
- import { TESTID } from '../../../configs/Constants';
11
+ import { AccessibilityLabel } from '../../../configs/Constants';
12
12
  import { SCProvider } from '../../../context';
13
13
  import { mockSCStore } from '../../../context/mockStore';
14
14
  import CameraDevice from '../../../commons/CameraDevice';
15
15
  import SubUnitFavorites from '../../../commons/SubUnit/Favorites';
16
16
  import api from '../../../utils/Apis/axios';
17
17
  import PreventAccess from '../../../commons/PreventAccess';
18
+ import Routes from '../../../utils/Route';
18
19
 
19
20
  const mockDispatch = jest.fn();
20
21
  jest.mock('react-native/Libraries/Animated/NativeAnimatedHelper');
@@ -54,12 +55,12 @@ jest.mock('@react-navigation/native', () => {
54
55
  };
55
56
  });
56
57
 
57
- const mockConnectGoogleHome = jest.fn();
58
+ const mockConnectHomeAssistant = jest.fn();
58
59
  jest.mock('../../../hooks/IoT', () => {
59
60
  return {
60
61
  ...jest.requireActual('../../../hooks/IoT'),
61
- useGGHomeConnection: () => ({
62
- connectGoogleHome: mockConnectGoogleHome,
62
+ useHomeAssistantConnection: () => ({
63
+ connectHomeAssistant: mockConnectHomeAssistant,
63
64
  }),
64
65
  };
65
66
  });
@@ -83,6 +84,7 @@ describe('Test UnitDetail', () => {
83
84
  const detailUnitApiUrl = API.UNIT.UNIT_DETAIL(1);
84
85
  const summaryUnitApiUrl = API.UNIT.UNIT_SUMMARY(1);
85
86
  const sensorStatusApiUrl = API.UNIT.SENSORS_STATUS(1);
87
+ const getAutomates = API.UNIT.AUTOMATE(1);
86
88
 
87
89
  let tree;
88
90
 
@@ -90,6 +92,46 @@ describe('Test UnitDetail', () => {
90
92
  jest.clearAllTimers();
91
93
  useIsFocused.mockImplementation(() => true);
92
94
  AsyncStorage.clear();
95
+ mock.resetHistory();
96
+ });
97
+
98
+ test('render subunit camera devices', async () => {
99
+ const unitData = {
100
+ stations: [
101
+ {
102
+ camera_devices: [
103
+ {
104
+ configuration: {
105
+ id: 4,
106
+ name: 'Camera cửa nhà xe',
107
+ uri: 'rtsp://admin:hd543211@/ISAPI/Streaming/Channels/101/',
108
+ preview_uri:
109
+ 'rtsp://admin:hd543211@/ISAPI/Streaming/Channels/101/',
110
+ playback: 'rtsp://admin:hd543211@/Streaming/tracks/101/',
111
+ },
112
+ id: 41,
113
+ order: 1,
114
+ template: 'camera',
115
+ type: 'camera',
116
+ },
117
+ ],
118
+ },
119
+ ],
120
+ };
121
+
122
+ await act(async () => {
123
+ tree = await renderer.create(
124
+ wrapComponent({ params: { ...route.params, unitData } }, account)
125
+ );
126
+ });
127
+ const instance = tree.root;
128
+ const CameraDeviceViews = instance.findAllByType(CameraDevice);
129
+ expect(CameraDeviceViews).toHaveLength(1);
130
+ await CameraDeviceViews[0].props.goToPlayBack()();
131
+ expect(mockedNavigate).toBeCalledWith(Routes.PlaybackCamera, {
132
+ item: undefined,
133
+ thumbnail: undefined,
134
+ });
93
135
  });
94
136
 
95
137
  test('fetch unit detail success', async () => {
@@ -144,7 +186,8 @@ describe('Test UnitDetail', () => {
144
186
  });
145
187
  const instance = tree.root;
146
188
  const button1 = instance.find(
147
- (el) => el.props.testID === TESTID.BUTTON_PREVENT_ACCESS
189
+ (el) =>
190
+ el.props.accessibilityLabel === AccessibilityLabel.BUTTON_PREVENT_ACCESS
148
191
  );
149
192
  expect(button1.props.isVisible).toBeTruthy();
150
193
  });
@@ -192,7 +235,7 @@ describe('Test UnitDetail', () => {
192
235
  expect(refreshControl).toBeDefined();
193
236
  });
194
237
 
195
- test('when unit has google home action then connect to google home', async () => {
238
+ test('when unit has home assistant action then connect to home assistant', async () => {
196
239
  const unitData = {
197
240
  remote_control_options: {
198
241
  googlehome: [
@@ -209,7 +252,7 @@ describe('Test UnitDetail', () => {
209
252
  wrapComponent({ params: { ...route.params, unitData } }, account)
210
253
  );
211
254
  });
212
- expect(mockConnectGoogleHome).toBeCalled();
255
+ expect(mockConnectHomeAssistant).toBeCalled();
213
256
  });
214
257
 
215
258
  test('when unit has bluetooth action then scan for devices', async () => {
@@ -297,7 +340,7 @@ describe('Test UnitDetail', () => {
297
340
  const instance = tree.root;
298
341
  const icon = await instance.findAll(
299
342
  (el) =>
300
- el.props.testID === TESTID.NAVBAR_ICON_BARS &&
343
+ el.props.accessibilityLabel === AccessibilityLabel.NAVBAR_ICON_BARS &&
301
344
  el.type === TouchableOpacity
302
345
  );
303
346
  expect(icon.length).toEqual(1);
@@ -307,53 +350,14 @@ describe('Test UnitDetail', () => {
307
350
  });
308
351
 
309
352
  const menu = instance.findAll(
310
- (el) => el.props.testID === TESTID.NAVBAR_MENU_ACTION_MORE
353
+ (el) =>
354
+ el.props.accessibilityLabel ===
355
+ AccessibilityLabel.NAVBAR_MENU_ACTION_MORE
311
356
  );
312
357
  expect(menu).toHaveLength(1);
313
358
  expect(menu[0].props.isVisible).toEqual(true);
314
359
  });
315
360
 
316
- test('render subunit camera devices', async () => {
317
- const unitData = {
318
- stations: [
319
- {
320
- camera_devices: [
321
- {
322
- configuration: {
323
- id: 4,
324
- name: 'Camera cửa nhà xe',
325
- uri: 'rtsp://admin:hd543211@/ISAPI/Streaming/Channels/101/',
326
- preview_uri:
327
- 'rtsp://admin:hd543211@/ISAPI/Streaming/Channels/101/',
328
- playback: 'rtsp://admin:hd543211@/Streaming/tracks/101/',
329
- },
330
- id: 41,
331
- order: 1,
332
- template: 'camera',
333
- type: 'camera',
334
- },
335
- ],
336
- },
337
- ],
338
- };
339
-
340
- await act(async () => {
341
- tree = await renderer.create(
342
- wrapComponent({ params: { ...route.params, unitData } }, account)
343
- );
344
- });
345
- const instance = tree.root;
346
- const CameraDeviceViews = instance.findAllByType(CameraDevice);
347
- expect(CameraDeviceViews).toHaveLength(0);
348
-
349
- const fullCamera = tree.root.findAll(
350
- (el) =>
351
- el.props.testID === TESTID.SUB_UNIT_FULL_CAMERA &&
352
- el.type === TouchableOpacity
353
- );
354
- expect(fullCamera).toHaveLength(0);
355
- });
356
-
357
361
  test('onPress subunit camera devices', async () => {
358
362
  const unitData = {
359
363
  stations: [
@@ -388,7 +392,7 @@ describe('Test UnitDetail', () => {
388
392
  expect(CameraDeviceViews).toHaveLength(0);
389
393
  const goDetailButton = tree.root.findAll(
390
394
  (el) =>
391
- el.props.testID === TESTID.SUB_UNIT_GO_DETAIL &&
395
+ el.props.accessibilityLabel === AccessibilityLabel.SUB_UNIT_GO_DETAIL &&
392
396
  el.type === TouchableOpacity
393
397
  );
394
398
 
@@ -396,7 +400,7 @@ describe('Test UnitDetail', () => {
396
400
  await act(async () => {
397
401
  await goDetailButton[0].props.onPress();
398
402
  });
399
- expect(mockedNavigate).not.toHaveBeenCalled();
403
+ expect(mockedNavigate).toHaveBeenCalled();
400
404
  });
401
405
 
402
406
  test('render subunit favorites', async () => {
@@ -439,7 +443,8 @@ describe('Test UnitDetail', () => {
439
443
  });
440
444
  const instance = tree.root;
441
445
  const navBar = instance.find(
442
- (el) => el.props.testID === TESTID.NAVBAR_ON_SNAP_ITEM
446
+ (el) =>
447
+ el.props.accessibilityLabel === AccessibilityLabel.NAVBAR_ON_SNAP_ITEM
443
448
  );
444
449
 
445
450
  await act(() => {
@@ -449,8 +454,38 @@ describe('Test UnitDetail', () => {
449
454
  expect(navBar).toBeDefined();
450
455
  const viewAutomate = instance.findAll(
451
456
  (el) =>
452
- el.props.testID === TESTID.VIEW_SUB_UNIT_AUTOMATE && el.type === View
457
+ el.props.accessibilityLabel ===
458
+ AccessibilityLabel.VIEW_SUB_UNIT_AUTOMATE && el.type === View
453
459
  );
454
460
  expect(viewAutomate).toHaveLength(1);
455
461
  });
462
+
463
+ test('test get automate onPress goBack', async () => {
464
+ Platform.OS = 'ios';
465
+ route.params.isSuccessfullyConnected = true;
466
+ jest.useFakeTimers();
467
+ mock.onGet(getAutomates).reply(200, [{}]);
468
+ await act(async () => {
469
+ tree = await renderer.create(wrapComponent(route, account));
470
+ });
471
+ jest.runAllTimers();
472
+ const instance = tree.root;
473
+ const PreventAccesss = instance.findByType(PreventAccess);
474
+ expect(PreventAccesss).toBeDefined();
475
+ const TouchableOpacities = instance.findAllByType(TouchableOpacity);
476
+ await TouchableOpacities[0].props.onPress();
477
+ expect(mockedNavigate).toBeCalled();
478
+ });
479
+
480
+ test('test onPress goBack with routeName', async () => {
481
+ route.params.routeName = 'test';
482
+ route.params.isSuccessfullyConnected = false;
483
+ await act(async () => {
484
+ tree = await renderer.create(wrapComponent(route, account));
485
+ });
486
+ const instance = tree.root;
487
+ const TouchableOpacities = instance.findAllByType(TouchableOpacity);
488
+ await TouchableOpacities[0].props.onPress();
489
+ expect(mockedNavigate).toBeCalled();
490
+ });
456
491
  });