@eohjsc/react-native-smart-city 0.2.21 → 0.2.27

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/README.md +1 -1
  2. package/assets/images/Add.svg +5 -0
  3. package/assets/images/AddLocationMaps/Point.svg +3 -0
  4. package/assets/images/CheckCircle.svg +4 -0
  5. package/assets/images/Close.svg +3 -0
  6. package/assets/images/HowToStart.svg +14 -0
  7. package/assets/images/Illustrations.svg +83 -0
  8. package/assets/images/OneTap.svg +14 -0
  9. package/assets/images/OneTap@1x.svg +14 -0
  10. package/assets/images/Rearrange.svg +3 -0
  11. package/assets/images/Schedule.svg +39 -0
  12. package/assets/images/ValueChange.svg +49 -0
  13. package/index.js +2 -0
  14. package/package.json +14 -2
  15. package/src/Images/Common/ActiveButton.png +0 -0
  16. package/src/Images/Common/ActiveButton@2x.png +0 -0
  17. package/src/Images/Common/ActiveButton@3x.png +0 -0
  18. package/src/Images/Common/arrow-back.png +0 -0
  19. package/src/Images/Common/checked@2x.png +0 -0
  20. package/src/Images/Common/checked@3x.png +0 -0
  21. package/src/Images/Common/file.png +0 -0
  22. package/src/Images/Common/fullscreen.png +0 -0
  23. package/src/Images/Common/refresh.png +0 -0
  24. package/src/commons/ActionGroup/NumberUpDownActionTemplate.js +1 -1
  25. package/src/commons/ActionGroup/OnOffTemplate/index.js +9 -4
  26. package/src/commons/ActionGroup/OptionsDropdownActionTemplate.js +4 -3
  27. package/src/commons/ActionGroup/StatesGridActionTemplate.js +2 -2
  28. package/src/commons/ActionGroup/ThreeButtonTemplate.js +13 -6
  29. package/src/commons/ActionGroup/ThreeButtonTemplateStyle.js +1 -1
  30. package/src/commons/ActionGroup/TimerActionTemplate.js +158 -33
  31. package/src/commons/ActionGroup/__test__/NumberUpDownTemplate.test.js +294 -0
  32. package/src/commons/ActionGroup/__test__/NumberUpDownTemplateWithNullConfigValue.test.js +60 -0
  33. package/src/commons/ActionGroup/__test__/OnOffButtonTemplate.test.js +8 -13
  34. package/src/commons/ActionGroup/__test__/OnOffTemplate.test.js +3 -3
  35. package/src/commons/ActionGroup/__test__/OptionsDropdownTemplate.test.js +26 -45
  36. package/src/commons/ActionGroup/__test__/ThreeButtonTemplate.test.js +11 -5
  37. package/src/commons/ActionGroup/__test__/TimerActionTemplate.test.js +14 -8
  38. package/src/commons/ActionGroup/__test__/TimerActionTemplateWithutConfigValue.test.js +17 -23
  39. package/src/commons/ActionGroup/__test__/__snapshots__/ThreeButtonTemplate.test.js.snap +241 -223
  40. package/src/commons/ActionGroup/__test__/index.test.js +39 -107
  41. package/src/commons/ActionGroup/hooks/useDropdownAction.js +2 -1
  42. package/src/commons/ActionTemplate/ActionTemplateStyles.js +14 -0
  43. package/src/commons/ActionTemplate/OnOffButtonAction.js +40 -0
  44. package/src/commons/ActionTemplate/OnOffButtonActionStyles.js +11 -0
  45. package/src/commons/ActionTemplate/OneButtonAction.js +26 -0
  46. package/src/commons/ActionTemplate/OneButtonActionStyles.js +11 -0
  47. package/src/commons/ActionTemplate/ThreeButtonAction.js +55 -0
  48. package/src/commons/ActionTemplate/ThreeButtonActionStyles.js +11 -0
  49. package/src/commons/ActionTemplate/__test__/OnOffButtonAction.test.js +34 -0
  50. package/src/commons/ActionTemplate/__test__/OneButtonAction.test.js +33 -0
  51. package/src/commons/ActionTemplate/__test__/ThreeButtonAction.test.js +35 -0
  52. package/src/commons/ActionTemplate/__test__/index.test.js +71 -0
  53. package/src/commons/ActionTemplate/index.js +69 -0
  54. package/src/commons/AlertAction/__test__/AlertAction.test.js +6 -6
  55. package/src/commons/AlertAction/index.js +2 -0
  56. package/src/commons/Automate/ItemAddNewScriptActionStyles.js +38 -0
  57. package/src/commons/Automate/ItemAutomate.js +39 -0
  58. package/src/commons/Automate/ItemAutomateStyles.js +33 -0
  59. package/src/commons/Automate/ItemScriptAction.js +45 -0
  60. package/src/commons/Automate/ItemScriptActionStyles.js +42 -0
  61. package/src/commons/Automate/__test__/ItemAutomate.test.js +16 -0
  62. package/src/commons/Automate/__test__/ItemScriptAction.test.js +16 -0
  63. package/src/commons/BackDefault/__test__/BackDefault.test.js +21 -0
  64. package/src/commons/BottomScrollPicker/index.js +62 -0
  65. package/src/commons/BottomScrollPicker/styles.js +13 -0
  66. package/src/commons/BottomSheet/index.js +41 -0
  67. package/src/commons/BottomSheet/styles.js +37 -0
  68. package/src/commons/Button/index.js +6 -1
  69. package/src/commons/ButtonPopup/__test__/__snapshots__/ButtonPopup.test.js.snap +2 -0
  70. package/src/commons/ButtonPopup/index.js +2 -0
  71. package/src/commons/Calendar/index.js +72 -0
  72. package/src/commons/Calendar/styles.js +11 -0
  73. package/src/commons/CameraDevice/index.js +2 -1
  74. package/src/commons/ChartLoading/__test__/ChartLoading.test.js +9 -7
  75. package/src/commons/ChartLoading/index.js +2 -1
  76. package/src/commons/DateTimeRangeChange/index.js +2 -1
  77. package/src/commons/Device/ConnectedViewHeader.js +3 -1
  78. package/src/commons/Device/DeviceAlertStatus.js +5 -2
  79. package/src/commons/Device/DisconnectedView.js +34 -26
  80. package/src/commons/Device/Emergency/EmergencyButton.js +2 -1
  81. package/src/commons/Device/Emergency/EmergencyDetail.js +2 -1
  82. package/src/commons/Device/Emergency/__test__/EmergencyButton.test.js +14 -6
  83. package/src/commons/Device/Emergency/__test__/EmergencyDetail.test.js +10 -2
  84. package/src/commons/Device/FlatListItems.js +3 -2
  85. package/src/commons/Device/FooterInfo.js +2 -1
  86. package/src/commons/Device/HistoryChart.js +2 -1
  87. package/src/commons/Device/ItemAddNew/index.js +8 -3
  88. package/src/commons/Device/SensorConnectedStatus.js +2 -1
  89. package/src/commons/Device/WindDirection/Compass/Compass.test.js +19 -11
  90. package/src/commons/Device/WindDirection/Compass/index.js +1 -1
  91. package/src/commons/Device/WindSpeed/LinearChart/__test__/LinearChart.test.js +9 -3
  92. package/src/commons/Device/WindSpeed/LinearChart/__test__/__snapshots__/LinearChart.test.js.snap +0 -81
  93. package/src/commons/Device/WindSpeed/LinearChart/index.js +2 -1
  94. package/src/commons/Device/__test__/ConnectedViewHeader.test.js +16 -8
  95. package/src/commons/Device/__test__/DeviceAlertStatus.test.js +13 -5
  96. package/src/commons/Device/__test__/DisconnectedView.test.js +13 -5
  97. package/src/commons/Device/__test__/FlatListItems.test.js +9 -1
  98. package/src/commons/Device/__test__/FooterInfo.test.js +13 -4
  99. package/src/commons/Device/__test__/SensorConnectedStatus.test.js +9 -1
  100. package/src/commons/Device/__test__/__snapshots__/DisconnectedView.test.js.snap +20 -20
  101. package/src/commons/DisplayChecking/__test__/DisplayChecking.test.js +28 -0
  102. package/src/commons/EmergencyButton/AlertSendConfirm.js +2 -1
  103. package/src/commons/EmergencyButton/AlertSent.js +3 -2
  104. package/src/commons/Explore/CityItem/index.js +2 -1
  105. package/src/commons/Explore/HeaderExplore/index.js +2 -1
  106. package/src/commons/Explore/HeaderLabel/index.js +2 -1
  107. package/src/commons/Explore/SearchBox/__test__/SearchBox.test.js +9 -2
  108. package/src/commons/Explore/SearchBox/index.js +2 -1
  109. package/src/commons/Explore/__test__/CityItem.test.js +13 -15
  110. package/src/commons/Explore/__test__/HeaderExplore.test.js +11 -7
  111. package/src/commons/Explore/__test__/HeaderLabel.test.js +15 -9
  112. package/src/commons/Explore/__test__/LocationItem.test.js +31 -0
  113. package/src/commons/Header/HeaderCustom.js +22 -2
  114. package/src/commons/Header/Styles/HeaderCustomStyles.js +2 -2
  115. package/src/commons/Header/__test__/HeaderCT.test.js +12 -4
  116. package/src/commons/HeaderAni/index.js +36 -5
  117. package/src/commons/HorizontalPicker/index.js +134 -0
  118. package/src/commons/HorizontalPicker/styles.js +56 -0
  119. package/src/commons/ImagePicker/__test__/ImagePicker.test.js +19 -13
  120. package/src/commons/ImagePicker/index.js +3 -1
  121. package/src/commons/MediaPlayer/index.js +2 -1
  122. package/src/commons/MediaPlayerDetail/__test__/MediaPlayerDetail.test.js +14 -8
  123. package/src/commons/MediaPlayerDetail/index.js +4 -1
  124. package/src/commons/MenuActionAddnew/__test__/MenuActionAddNew.test.js +11 -20
  125. package/src/commons/MenuActionAddnew/index.js +2 -1
  126. package/src/commons/Modal/ModalBottom.js +51 -0
  127. package/src/commons/Modal/ModalFullVideo.js +2 -1
  128. package/src/commons/Modal/Styles/ModalBottomStyles.js +35 -0
  129. package/src/commons/Modal/__test__/ModalBottom.test.js +39 -0
  130. package/src/commons/Modal/index.js +2 -1
  131. package/src/commons/NavBar/index.js +2 -2
  132. package/src/commons/RowItem/__test__/RowItem.test.js +16 -0
  133. package/src/commons/RowItem/index.js +61 -0
  134. package/src/commons/RowItem/styles.js +53 -0
  135. package/src/commons/SelectActionCard/SelectActionStyles.js +16 -0
  136. package/src/commons/SelectActionCard/index.js +30 -0
  137. package/src/commons/Sharing/DevicePermissionsCheckbox.js +2 -1
  138. package/src/commons/Sharing/MemberList.js +3 -1
  139. package/src/commons/Sharing/RowMember.js +3 -2
  140. package/src/commons/Sharing/StationDevicePermissions.js +2 -1
  141. package/src/commons/Sharing/WrapHeaderScrollable.js +78 -74
  142. package/src/commons/Sharing/__test__/DevicePermissionsCheckbox.test.js +15 -9
  143. package/src/commons/Sharing/__test__/MemberList.test.js +17 -25
  144. package/src/commons/Sharing/__test__/StationDevicePermission.test.js +17 -12
  145. package/src/commons/Sharing/__test__/WrapHeaderScrollable.test.js +0 -9
  146. package/src/commons/SubUnit/OneTap/ItemOneTap.js +101 -0
  147. package/src/commons/SubUnit/OneTap/ItemOneTapStyles.js +41 -0
  148. package/src/commons/SubUnit/OneTap/OneTapStyles.js +36 -0
  149. package/src/commons/SubUnit/OneTap/__test__/SubUnitAutomate.test.js +195 -0
  150. package/src/commons/SubUnit/OneTap/index.js +39 -0
  151. package/src/commons/SubUnit/ShortDetail.js +11 -6
  152. package/src/commons/SubUnit/__test__/ShortDetail.test.js +14 -6
  153. package/src/commons/Today/__test__/Today.test.js +9 -1
  154. package/src/commons/Today/__test__/__snapshots__/Today.test.js.snap +1 -1
  155. package/src/commons/Today/index.js +2 -1
  156. package/src/commons/Unit/SharedUnit.js +2 -1
  157. package/src/commons/Unit/__test__/SharedUnit.test.js +330 -0
  158. package/src/commons/UnitSummary/AirQuality/SegmentedRoundDisplay/index.js +1 -2
  159. package/src/commons/UnitSummary/AirQuality/__test__/index.test.js +16 -17
  160. package/src/commons/UnitSummary/AirQuality/index.js +5 -120
  161. package/src/commons/UnitSummary/AirQuality/styles.js +112 -0
  162. package/src/commons/UnitSummary/TotalPowerConsumption/index.js +2 -1
  163. package/src/commons/UnitSummary/__test__/TotalPowerConsumption.test.js +15 -9
  164. package/src/commons/WheelDateTimePicker/Picker.js +57 -0
  165. package/src/commons/WheelDateTimePicker/index.js +168 -0
  166. package/src/commons/WheelDateTimePicker/styles.js +21 -0
  167. package/src/commons/index.js +2 -0
  168. package/src/configs/API.js +29 -0
  169. package/src/configs/Colors.js +1 -0
  170. package/src/configs/Constants.js +61 -0
  171. package/src/configs/Images.js +1 -0
  172. package/src/configs/SCConfig.js +7 -0
  173. package/src/configs/Theme.js +20 -0
  174. package/src/context/SCContext.tsx +9 -39
  175. package/src/context/actionType.ts +11 -0
  176. package/src/context/mockStore.ts +51 -0
  177. package/src/context/reducer.ts +23 -0
  178. package/src/hooks/Common/__test__/useStatusbar.test.js +28 -0
  179. package/src/hooks/Common/__test__/useTranslations.test.js +23 -0
  180. package/src/hooks/Common/index.js +2 -0
  181. package/src/hooks/Common/useGetIdUser.js +9 -0
  182. package/src/hooks/Common/useTranslations.ts +34 -0
  183. package/src/iot/Monitor.js +2 -1
  184. package/src/iot/RemoteControl/Bluetooth.js +2 -6
  185. package/src/iot/RemoteControl/GoogleHome.js +1 -1
  186. package/src/iot/RemoteControl/Internet.js +1 -1
  187. package/src/iot/RemoteControl/LG.js +57 -15
  188. package/src/iot/RemoteControl/__test__/Bluetooth.test.js +3 -5
  189. package/src/iot/RemoteControl/__test__/GoogleHome.test.js +3 -3
  190. package/src/iot/RemoteControl/__test__/Internet.test.js +1 -8
  191. package/src/iot/RemoteControl/__test__/LgThinq.test.js +7 -10
  192. package/src/iot/RemoteControl/index.js +1 -1
  193. package/src/iot/states.js +1 -0
  194. package/src/navigations/AutomateStack.js +45 -0
  195. package/src/navigations/SharedStack.js +2 -1
  196. package/src/navigations/UnitStack.js +86 -6
  197. package/src/navigations/utils.js +8 -0
  198. package/src/screens/AQIGuide/__test__/AQIGuide.test.js +9 -1
  199. package/src/screens/AQIGuide/index.js +2 -2
  200. package/src/screens/ActivityLog/__test__/index.test.js +14 -39
  201. package/src/screens/ActivityLog/index.js +2 -1
  202. package/src/screens/AddCommon/SelectSubUnit.js +5 -4
  203. package/src/screens/AddCommon/SelectUnit.js +3 -2
  204. package/src/screens/AddCommon/__test__/SelectSubUnit.test.js +61 -0
  205. package/src/screens/AddCommon/__test__/SelectUnit.test.js +18 -10
  206. package/src/screens/AddLocationMaps/index.js +2 -1
  207. package/src/screens/AddNewAction/Components/LoadingSelectAction.js +40 -0
  208. package/src/screens/AddNewAction/Components/index.js +3 -0
  209. package/src/screens/AddNewAction/Device/DeviceStyles.js +43 -0
  210. package/src/screens/AddNewAction/Device/__test__/index.test.js +42 -0
  211. package/src/screens/AddNewAction/Device/index.js +33 -0
  212. package/src/screens/AddNewAction/SelectAction.js +237 -0
  213. package/src/screens/AddNewAction/SelectSensorDevices.js +150 -0
  214. package/src/screens/AddNewAction/SetupSensor.js +221 -0
  215. package/src/screens/AddNewAction/Styles/SelectActionStyles.js +62 -0
  216. package/src/screens/AddNewAction/Styles/SelectSensorDevicesStyles.js +36 -0
  217. package/src/screens/AddNewAction/Styles/SetupSensorStyles.js +76 -0
  218. package/src/screens/AddNewAction/__test__/SelectAction.test.js +153 -0
  219. package/src/screens/AddNewAction/__test__/SelectSensorDevices.test.js +191 -0
  220. package/src/screens/AddNewAction/__test__/SetupSensor.test.js +125 -0
  221. package/src/screens/AddNewAutoSmart/__test__/AddNewAutoSmart.test.js +112 -0
  222. package/src/screens/AddNewAutoSmart/index.js +113 -0
  223. package/src/screens/AddNewAutoSmart/styles/AddNewAutoSmartStyles.js +36 -0
  224. package/src/screens/AddNewDevice/ConnectDevices.js +2 -1
  225. package/src/screens/AddNewDevice/ConnectingDevices.js +2 -1
  226. package/src/screens/AddNewDevice/__test__/AddNewDevice.test.js +29 -13
  227. package/src/screens/AddNewDevice/__test__/ConnectDevices.test.js +19 -7
  228. package/src/screens/AddNewDevice/__test__/ConnectingDevices.test.js +16 -6
  229. package/src/screens/AddNewDevice/hooks/useStateAlertRename.js +2 -1
  230. package/src/screens/AddNewDevice/index.js +2 -1
  231. package/src/screens/AddNewGateway/ConnectedGateway.js +2 -1
  232. package/src/screens/AddNewGateway/ConnectingGateway.js +99 -24
  233. package/src/screens/AddNewGateway/ConnectingGatewayStyles.js +92 -0
  234. package/src/screens/AddNewGateway/SetupGatewayWifi.js +3 -2
  235. package/src/screens/AddNewGateway/__test__/AddNewGateway.test.js +35 -72
  236. package/src/screens/AddNewGateway/__test__/ConnectedGateway.test.js +14 -4
  237. package/src/screens/AddNewGateway/__test__/ConnectingGateway.test.js +20 -10
  238. package/src/screens/AddNewGateway/hooks/useStateAlertRename.js +2 -1
  239. package/src/screens/AddNewGateway/index.js +2 -1
  240. package/src/screens/AddNewOneTap/AddNewOneTapStyles.js +44 -0
  241. package/src/screens/AddNewOneTap/__test__/AddNewOneTap.test.js +130 -0
  242. package/src/screens/AddNewOneTap/index.js +83 -0
  243. package/src/screens/AllCamera/__test__/index.test.js +103 -0
  244. package/src/screens/AllCamera/index.js +2 -1
  245. package/src/screens/Automate/Components/Loading.js +64 -0
  246. package/src/screens/Automate/Styles/indexStyles.js +64 -0
  247. package/src/screens/Automate/__test__/Loading.test.js +16 -0
  248. package/src/screens/Automate/__test__/index.test.js +93 -0
  249. package/src/screens/Automate/index.js +148 -0
  250. package/src/screens/Device/HeaderDevice/styles.js +2 -2
  251. package/src/screens/Device/__test__/detail.test.js +90 -18
  252. package/src/screens/Device/detail.js +73 -35
  253. package/src/screens/Device/hooks/useCountUp.js +4 -0
  254. package/src/screens/Device/hooks/useEmergencyButton.js +3 -2
  255. package/src/screens/Device/styles.js +5 -1
  256. package/src/screens/DeviceInfo/__test__/index.test.js +12 -3
  257. package/src/screens/DeviceInfo/index.js +2 -1
  258. package/src/screens/EditActionsList/Styles/indexStyles.js +84 -0
  259. package/src/screens/EditActionsList/index.js +186 -0
  260. package/src/screens/EmergencyContacts/EmergencyContactsAddNew.js +3 -2
  261. package/src/screens/EmergencyContacts/EmergencyContactsList.js +9 -2
  262. package/src/screens/EmergencyContacts/EmergencyContactsSelectContacts.js +2 -1
  263. package/src/screens/EmergencyContacts/__test__/EmergencyContactAddNew.test.js +15 -18
  264. package/src/screens/EmergencyContacts/__test__/EmergencyContactList.test.js +19 -23
  265. package/src/screens/EmergencyContacts/__test__/EmergencyContactsSelectContacts.test.js +10 -25
  266. package/src/screens/EmergencyContacts/hook.js +3 -2
  267. package/src/screens/Explore/index.js +3 -2
  268. package/src/screens/GuestInfo/__test__/index.test.js +176 -0
  269. package/src/screens/GuestInfo/components/AccessScheduleItem.js +32 -0
  270. package/src/screens/GuestInfo/components/AccessScheduleSheet.js +204 -0
  271. package/src/screens/GuestInfo/components/HeaderGuestInfo.js +36 -0
  272. package/src/screens/GuestInfo/components/RecurringDetail.js +106 -0
  273. package/src/screens/GuestInfo/components/RowGuestInfo.js +31 -0
  274. package/src/screens/GuestInfo/components/TemporaryDetail.js +53 -0
  275. package/src/screens/GuestInfo/constant.js +59 -0
  276. package/src/screens/GuestInfo/index.js +150 -0
  277. package/src/screens/GuestInfo/styles/AccessScheduleDetailStyles.js +31 -0
  278. package/src/screens/GuestInfo/styles/AccessScheduleItemStyles.js +22 -0
  279. package/src/screens/GuestInfo/styles/HeaderGuestInfoStyles.js +31 -0
  280. package/src/screens/GuestInfo/styles/indexStyles.js +38 -0
  281. package/src/screens/ManageAccess/__test__/ManageAccess.test.js +13 -1
  282. package/src/screens/ManageAccess/hooks/index.js +4 -0
  283. package/src/screens/ManageAccess/index.js +49 -20
  284. package/src/screens/ManageAccess/styles/ManageAccessStyles.js +3 -0
  285. package/src/screens/PlayBackCamera/Timer.js +1 -1
  286. package/src/screens/PlayBackCamera/index.js +9 -5
  287. package/src/screens/ScanChipQR/__test__/ScanChipQR.test.js +2 -11
  288. package/src/screens/ScanChipQR/components/QRScan/index.js +2 -1
  289. package/src/screens/ScriptDetail/Styles/indexStyles.js +157 -0
  290. package/src/screens/ScriptDetail/__test__/index.test.js +119 -0
  291. package/src/screens/ScriptDetail/hooks/index.js +55 -0
  292. package/src/screens/ScriptDetail/index.js +344 -0
  293. package/src/screens/SelectUnit/Styles/indexStyles.js +55 -0
  294. package/src/screens/SelectUnit/__test__/index.test.js +85 -0
  295. package/src/screens/SelectUnit/index.js +100 -0
  296. package/src/screens/SetSchedule/__test__/index.test.js +97 -0
  297. package/src/screens/SetSchedule/components/RepeatOptionsPopup.js +56 -0
  298. package/src/screens/SetSchedule/components/RowItem.js +27 -0
  299. package/src/screens/SetSchedule/components/SelectWeekday.js +65 -0
  300. package/src/screens/SetSchedule/index.js +139 -0
  301. package/src/screens/SetSchedule/styles/RepeatOptionsPopupStyles.js +22 -0
  302. package/src/screens/SetSchedule/styles/RowItemStyles.js +29 -0
  303. package/src/screens/SetSchedule/styles/SelectWeekdayStyles.js +26 -0
  304. package/src/screens/SetSchedule/styles/indexStyles.js +22 -0
  305. package/src/screens/SharedUnit/TabHeader.js +2 -1
  306. package/src/screens/SharedUnit/__test__/TabHeader.test.js +40 -0
  307. package/src/screens/SharedUnit/index.js +3 -2
  308. package/src/screens/Sharing/MemberList.js +2 -1
  309. package/src/screens/Sharing/SelectPermission.js +2 -1
  310. package/src/screens/Sharing/SelectUser.js +3 -2
  311. package/src/screens/Sharing/__test__/MemberList.test.js +25 -28
  312. package/src/screens/Sharing/__test__/SelectPermission.test.js +16 -8
  313. package/src/screens/Sharing/__test__/SelectUser.test.js +33 -15
  314. package/src/screens/Sharing/hooks/index.js +22 -17
  315. package/src/screens/SubUnit/AddSubUnit.js +3 -2
  316. package/src/screens/SubUnit/Detail.js +5 -4
  317. package/src/screens/SubUnit/EditSubUnit.js +274 -0
  318. package/src/screens/SubUnit/EditSubUnitStyles.js +119 -0
  319. package/src/screens/SubUnit/ManageSubUnit.js +114 -371
  320. package/src/screens/SubUnit/ManageSubUnitStyles.js +40 -0
  321. package/src/screens/SubUnit/__test__/AddSubUnit.test.js +17 -11
  322. package/src/screens/SubUnit/__test__/Detail.test.js +11 -31
  323. package/src/screens/SubUnit/__test__/EditSubUnit.test.js +427 -0
  324. package/src/screens/SubUnit/__test__/ManageSubUnit.test.js +51 -384
  325. package/src/screens/SubUnit/hooks/__test__/useManageSubUnit.test.js +85 -0
  326. package/src/screens/SubUnit/hooks/useManageSubUnit.js +35 -0
  327. package/src/screens/SyncLGDevice/AddLGDevice.js +3 -2
  328. package/src/screens/TDSGuide/__test__/TDSGuide.test.js +9 -1
  329. package/src/screens/TDSGuide/index.js +2 -1
  330. package/src/screens/UVIndexGuide/__test__/UVIndexGuide.test.js +9 -1
  331. package/src/screens/UVIndexGuide/index.js +2 -1
  332. package/src/screens/Unit/AddMenu.js +3 -2
  333. package/src/screens/Unit/Detail.js +66 -20
  334. package/src/screens/Unit/ManageUnit/index.js +4 -3
  335. package/src/screens/Unit/ManageUnit.js +15 -4
  336. package/src/screens/Unit/MoreMenu.js +3 -2
  337. package/src/screens/Unit/SelectLocation.js +8 -2
  338. package/src/screens/Unit/SelectLocationStyles.js +11 -0
  339. package/src/screens/Unit/__test__/AddMenu.test.js +15 -15
  340. package/src/screens/Unit/__test__/CheckSendEmail.test.js +19 -10
  341. package/src/screens/Unit/__test__/Detail.test.js +92 -33
  342. package/src/screens/Unit/__test__/ManageUnit.test.js +16 -23
  343. package/src/screens/Unit/components/Header/index.js +2 -1
  344. package/src/screens/Unit/components/ListMyAllUnit/index.js +2 -1
  345. package/src/screens/Unit/components/MyUnit/index.js +2 -1
  346. package/src/screens/Unit/components/SearchLocation/__test__/RowLocation.test.js +36 -0
  347. package/src/screens/Unit/components/SearchLocation/index.js +2 -1
  348. package/src/screens/Unit/components/SharedUnit/index.js +2 -1
  349. package/src/screens/Unit/components/__test__/MyUnit.test.js +22 -72
  350. package/src/screens/Unit/components/__test__/MyUnitDevice.test.js +32 -0
  351. package/src/screens/Unit/components/__test__/SharedUnit.test.js +11 -2
  352. package/src/screens/UnitSummary/__test__/index.test.js +12 -4
  353. package/src/screens/UnitSummary/components/3PPowerConsumption/__test__/3PPowerConsumption.test.js +13 -3
  354. package/src/screens/UnitSummary/components/3PPowerConsumption/index.js +2 -1
  355. package/src/screens/UnitSummary/components/PowerConsumption/__test__/PowerConsumption.test.js +16 -12
  356. package/src/screens/UnitSummary/components/PowerConsumption/index.js +2 -1
  357. package/src/screens/UnitSummary/components/RunningDevices/__test__/index.test.js +2 -2
  358. package/src/screens/UnitSummary/components/Temperature/index.js +2 -1
  359. package/src/screens/UnitSummary/components/TotalPowerConsumption/index.js +2 -1
  360. package/src/screens/UnitSummary/components/UvIndex/__test__/__snapshots__/index.test.js.snap +37 -37
  361. package/src/screens/UnitSummary/components/UvIndex/__test__/index.test.js +14 -6
  362. package/src/screens/UnitSummary/components/UvIndex/index.js +2 -1
  363. package/src/screens/UnitSummary/components/WaterQuality/__test__/index.test.js +11 -5
  364. package/src/screens/UnitSummary/components/WaterQuality/index.js +2 -1
  365. package/src/screens/UnitSummary/components/__test__/TotalPowerConsumption.test.js +13 -7
  366. package/src/screens/UnitSummary/components/__test__/UnitSummary.test.js +67 -0
  367. package/src/screens/UnitSummary/components/__test__/index.test.js +48 -0
  368. package/src/screens/UnitSummary/components/index.js +1 -37
  369. package/src/screens/UnitSummary/components/indexstyles.js +39 -0
  370. package/src/screens/UnitSummary/index.js +2 -1
  371. package/src/screens/WaterQualityGuide/__test__/index.test.js +12 -12
  372. package/src/screens/WaterQualityGuide/index.js +2 -1
  373. package/src/utils/Apis/axios.js +0 -4
  374. package/src/utils/Converter/array.js +4 -0
  375. package/src/utils/Converter/time.js +29 -4
  376. package/src/utils/I18n/index.ts +6 -0
  377. package/src/utils/I18n/translations/en.json +77 -5
  378. package/src/utils/I18n/translations/vi.json +73 -3
  379. package/src/utils/I18n/translations.ts +45 -0
  380. package/src/utils/Route/index.js +13 -0
  381. package/src/utils/__test__/InitData.test.js +20 -0
  382. package/src/commons/ChartLoading/__test__/__snapshots__/ChartLoading.test.js.snap +0 -66
  383. package/src/commons/Device/HistoryChart/__test__/HistoryChart.test.js +0 -57
  384. package/src/commons/Device/HistoryChart/__test__/__snapshots__/HistoryChart.test.js.snap +0 -593
  385. package/src/commons/Explore/SearchBox/__test__/__snapshots__/SearchBox.test.js.snap +0 -59
  386. package/src/commons/Header/__test__/Header.test.js +0 -24
  387. package/src/commons/MenuActionAddnew/__test__/__snapshots__/MenuActionAddNew.test.js.snap +0 -788
  388. package/src/commons/Sharing/__test__/__snapshots__/WrapHeaderScrollable.test.js.snap +0 -174
  389. package/src/commons/UnitSummary/AirQuality/__test__/__snapshots__/index.test.js.snap +0 -26679
  390. package/src/iot/RemoteControl/__test__/index.test.js +0 -101
  391. package/src/iot/__test__/Monitor.test.js +0 -119
  392. package/src/screens/EmergencyContacts/__test__/__snapshots__/EmergencyContactAddNew.test.js.snap +0 -1706
  393. package/src/screens/EmergencyContacts/__test__/__snapshots__/EmergencyContactList.test.js.snap +0 -4276
  394. package/src/screens/EmergencyContacts/__test__/__snapshots__/EmergencyContactsSelectContacts.test.js.snap +0 -2240
  395. package/src/screens/SyncLGDevice/__test__/AddLGDevice.test.js +0 -358
  396. package/src/screens/Unit/MyAllUnit/__test__/__snapshots__/index.test.js.snap +0 -1001
  397. package/src/screens/Unit/MyAllUnit/__test__/index.test.js +0 -48
  398. package/src/screens/Unit/components/MyAllUnit/__test__/__snapshots__/index.test.js.snap +0 -1001
  399. package/src/screens/Unit/components/MyAllUnit/__test__/index.test.js +0 -48
  400. package/src/screens/UnitSummary/components/WaterQuality/__test__/__snapshots__/index.test.js.snap +0 -1574
  401. package/src/screens/WaterQualityGuide/__test__/__snapshots__/index.test.js.snap +0 -3375
  402. package/src/utils/Converter/__test__/time.test.js +0 -126
  403. package/src/utils/I18n/index.js +0 -19
  404. package/src/utils/I18n/index.test.js +0 -7
@@ -7,13 +7,15 @@ import { API } from '../../../configs';
7
7
  import { AlertSendConfirm } from '../../../commons/EmergencyButton/AlertSendConfirm';
8
8
  import { AlertSent } from '../../../commons/EmergencyButton/AlertSent';
9
9
  import { AlertAction, ButtonPopup, MenuActionMore } from '../../../commons';
10
- import { t } from 'i18n-js';
11
10
  import { TESTID } from '../../../configs/Constants';
12
11
  import Text from '../../../commons/Text';
13
12
  import { IconFill } from '@ant-design/icons-react-native';
14
13
  // import CurrentRainSensor from 'components/Device/RainningSensor/CurrentRainSensor';
15
14
  import CurrentRainSensor from '../../../commons/Device/RainningSensor/CurrentRainSensor';
16
15
  import { ConnectedViewHeader } from '../../../commons/Device';
16
+ import { getTranslate } from '../../../utils/I18n';
17
+ import { SCProvider } from '../../../context';
18
+ import { mockSCStore } from '../../../context/mockStore';
17
19
 
18
20
  const mockedNavigate = jest.fn();
19
21
  const mockedDispatch = jest.fn();
@@ -66,6 +68,12 @@ const mockAxios = (
66
68
  });
67
69
  };
68
70
 
71
+ const wrapComponent = (account, route) => (
72
+ <SCProvider initState={mockSCStore({})}>
73
+ <DeviceDetail account={account} route={route} />
74
+ </SCProvider>
75
+ );
76
+
69
77
  describe('test DeviceDetail', () => {
70
78
  let tree;
71
79
  let route;
@@ -205,7 +213,7 @@ describe('test DeviceDetail', () => {
205
213
  mockAxios(responseDisplay, responseDisplayValueV2, responseRemoteControl);
206
214
 
207
215
  await act(async () => {
208
- tree = await create(<DeviceDetail account={account} route={route} />);
216
+ tree = await create(wrapComponent(account, route));
209
217
  });
210
218
  const instance = tree.root;
211
219
  expect(axios.get).toHaveBeenCalledTimes(4);
@@ -265,7 +273,7 @@ describe('test DeviceDetail', () => {
265
273
 
266
274
  test('AlertSendConfirm onSendNowAlert', async () => {
267
275
  await act(async () => {
268
- tree = await create(<DeviceDetail account={account} route={route} />);
276
+ tree = await create(wrapComponent(account, route));
269
277
  });
270
278
  const instance = tree.root;
271
279
  const alertSendConfirm = instance.findByType(AlertSendConfirm);
@@ -300,7 +308,7 @@ describe('test DeviceDetail', () => {
300
308
 
301
309
  test('ButtonPopup onClick', async () => {
302
310
  await act(async () => {
303
- tree = await create(<DeviceDetail account={account} route={route} />);
311
+ tree = await create(wrapComponent(account, route));
304
312
  });
305
313
  const instance = tree.root;
306
314
  const buttonPopup = instance.find(
@@ -327,7 +335,7 @@ describe('test DeviceDetail', () => {
327
335
  await jest.runOnlyPendingTimers();
328
336
  });
329
337
  expect(buttonPopup.props.visible).toEqual(true);
330
- expect(buttonPopup.props.mainTitle).toEqual(t('ok'));
338
+ expect(buttonPopup.props.mainTitle).toEqual(getTranslate('en', 'ok'));
331
339
  await act(async () => {
332
340
  await buttonPopup.props.onPressMain();
333
341
  await buttonPopup.props.onClose();
@@ -337,7 +345,7 @@ describe('test DeviceDetail', () => {
337
345
 
338
346
  test('ButtonPopup render', async () => {
339
347
  await act(async () => {
340
- tree = await create(<DeviceDetail account={account} route={route} />);
348
+ tree = await create(wrapComponent(account, route));
341
349
  });
342
350
  const instance = tree.root;
343
351
  const buttonPopupTitle = instance.find(
@@ -360,7 +368,7 @@ describe('test DeviceDetail', () => {
360
368
 
361
369
  test('ScrollView onRefresh', async () => {
362
370
  await act(async () => {
363
- tree = await create(<DeviceDetail account={account} route={route} />);
371
+ tree = await create(wrapComponent(account, route));
364
372
  });
365
373
  const instance = tree.root;
366
374
  const scrollView = instance.findByType(ScrollView);
@@ -369,7 +377,7 @@ describe('test DeviceDetail', () => {
369
377
  await act(async () => {
370
378
  refreshControl.props.onRefresh();
371
379
  });
372
- expect(axios.get).toHaveBeenCalledTimes(8);
380
+ expect(axios.get).toHaveBeenCalledTimes(7);
373
381
  });
374
382
 
375
383
  test('Should render SensorDisplayItem', async () => {
@@ -500,14 +508,78 @@ describe('test DeviceDetail', () => {
500
508
  mockAxios(responseDisplay, responseDisplayValueV2);
501
509
 
502
510
  await act(async () => {
503
- tree = await create(<DeviceDetail account={account} route={route} />);
511
+ tree = await create(wrapComponent(account, route));
512
+ });
513
+
514
+ const instance = tree.root;
515
+ const sensorDisplayItem = instance.findAll(
516
+ (el) => el.props.testID === TESTID.SENSOR_DISPLAY_ITEM
517
+ );
518
+ expect(sensorDisplayItem).toHaveLength(4);
519
+ });
520
+
521
+ test('render SensorDisplayItem emercency', async () => {
522
+ const responseDisplay = {
523
+ status: 200,
524
+ data: {
525
+ items: [
526
+ {
527
+ id: 1,
528
+ order: 1,
529
+ template: 'emergency',
530
+ type: 'emergency',
531
+ configuration: {
532
+ camera: null,
533
+ device: {
534
+ configs: { id: 521, value: null, time: null },
535
+ last_event: { id: 374, reportedAt: '' },
536
+ id: 1,
537
+ group: {
538
+ id: 1,
539
+ contacts: [
540
+ {
541
+ id: 1,
542
+ group: 1,
543
+ name: 'user1',
544
+ phone_number: '038111111',
545
+ },
546
+ {
547
+ id: 2,
548
+ group: 1,
549
+ name: 'user1',
550
+ phone_number: '038111112',
551
+ },
552
+ { id: 3, group: 1, name: 'user1', phone_number: '' },
553
+ ],
554
+ },
555
+ },
556
+ title: '',
557
+ },
558
+ },
559
+ ],
560
+ },
561
+ };
562
+
563
+ const responseDisplayValueV2 = {
564
+ status: 200,
565
+ data: {
566
+ configs: [],
567
+ is_connected: true,
568
+ last_updated: '2021-01-24T12:00:00.000Z',
569
+ },
570
+ };
571
+
572
+ mockAxios(responseDisplay, responseDisplayValueV2);
573
+
574
+ await act(async () => {
575
+ tree = await create(wrapComponent(account, route));
504
576
  });
505
577
 
506
578
  const instance = tree.root;
507
579
  const sensorDisplayItem = instance.findAll(
508
580
  (el) => el.props.testID === TESTID.SENSOR_DISPLAY_ITEM
509
581
  );
510
- expect(sensorDisplayItem).toHaveLength(2);
582
+ expect(sensorDisplayItem).toHaveLength(1);
511
583
  });
512
584
 
513
585
  test('render CurrentRainSensor', async () => {
@@ -548,24 +620,24 @@ describe('test DeviceDetail', () => {
548
620
  mockAxios(responseDisplay, responseDisplayValueV2);
549
621
 
550
622
  await act(async () => {
551
- tree = await create(<DeviceDetail account={account} route={route} />);
623
+ tree = await create(wrapComponent(account, route));
552
624
  });
553
625
 
554
626
  const instance = tree.root;
555
627
  const sensorDisplayItem = instance.findAll(
556
628
  (el) => el.props.testID === TESTID.SENSOR_DISPLAY_ITEM
557
629
  );
558
- expect(sensorDisplayItem).toHaveLength(4);
630
+ expect(sensorDisplayItem).toHaveLength(1);
559
631
 
560
632
  const currentRainSensor = instance.findAllByType(CurrentRainSensor);
561
- expect(currentRainSensor).toHaveLength(0); // not crash app
633
+ expect(currentRainSensor).toHaveLength(1); // not crash app
562
634
  });
563
635
 
564
636
  test('not fetch value if not managed by backend', async () => {
565
637
  route.params.sensor.is_managed_by_backend = false;
566
638
 
567
639
  await act(async () => {
568
- tree = await create(<DeviceDetail account={account} route={route} />);
640
+ tree = await create(wrapComponent(account, route));
569
641
  });
570
642
 
571
643
  expect(axios.get).not.toBeCalledWith(API.SENSOR.DISPLAY_VALUES_V2(1));
@@ -612,7 +684,7 @@ describe('test DeviceDetail', () => {
612
684
  mockAxios(responseDisplay, responseDisplayValueV2);
613
685
 
614
686
  await act(async () => {
615
- tree = await create(<DeviceDetail account={account} route={route} />);
687
+ tree = await create(wrapComponent(account, route));
616
688
  });
617
689
 
618
690
  const instance = tree.root;
@@ -626,7 +698,7 @@ describe('test DeviceDetail', () => {
626
698
 
627
699
  test('HeaderDevice button more onClick', async () => {
628
700
  await act(async () => {
629
- tree = await create(<DeviceDetail account={account} route={route} />);
701
+ tree = await create(wrapComponent(account, route));
630
702
  });
631
703
  const instance = tree.root;
632
704
  const menu = instance.findByType(MenuActionMore);
@@ -648,7 +720,7 @@ describe('test DeviceDetail', () => {
648
720
  sensor.is_favourite = false;
649
721
 
650
722
  await act(async () => {
651
- tree = await create(<DeviceDetail account={account} route={route} />);
723
+ tree = await create(wrapComponent(account, route));
652
724
  });
653
725
  const instance = tree.root;
654
726
 
@@ -677,7 +749,7 @@ describe('test DeviceDetail', () => {
677
749
  sensor.is_favourite = true;
678
750
 
679
751
  await act(async () => {
680
- tree = await create(<DeviceDetail account={account} route={route} />);
752
+ tree = await create(wrapComponent(account, route));
681
753
  });
682
754
  const instance = tree.root;
683
755
 
@@ -1,7 +1,7 @@
1
1
  import React, { memo, useCallback, useEffect, useMemo, useState } from 'react';
2
2
  import { RefreshControl, ScrollView, View } from 'react-native';
3
3
  import { connect } from 'react-redux';
4
- import { t } from 'i18n-js';
4
+ import { useTranslations } from '../../hooks/Common/useTranslations';
5
5
  import moment from 'moment';
6
6
  import _ from 'lodash';
7
7
  import { get } from 'lodash';
@@ -37,7 +37,7 @@ import Text from '../../commons/Text';
37
37
  import { transformDatetime } from '../../utils/Converter/time';
38
38
  import { AlertAction, ButtonPopup, MenuActionMore } from '../../commons';
39
39
  import EmergencyButton from '../../commons/Device/Emergency/EmergencyButton';
40
- import { TESTID } from '../../configs/Constants';
40
+ import { DEVICE_TYPE, TESTID } from '../../configs/Constants';
41
41
  import FooterInfo from '../../commons/Device/FooterInfo';
42
42
  import Routes from '../../utils/Route';
43
43
  import { sendRemoteCommand } from '../../iot/RemoteControl';
@@ -55,6 +55,7 @@ const { standardizeHeight } = standardizeCameraScreenSize(
55
55
  );
56
56
 
57
57
  const DeviceDetail = ({ account, route }) => {
58
+ const t = useTranslations();
58
59
  const navigation = useNavigation();
59
60
  const [offsetTitle, setOffsetTitle] = useState(1);
60
61
  const [display, setDisplay] = useState({ items: [] });
@@ -75,6 +76,12 @@ const DeviceDetail = ({ account, route }) => {
75
76
  const [isFavourite, setIsFavourite] = useState(sensor.is_favourite);
76
77
  const { isOwner } = useIsOwnerOfUnit(unit.user_id);
77
78
 
79
+ const isShowSetupEmergencyContact =
80
+ display.items.filter(
81
+ (item) =>
82
+ item.type === 'emergency' && item.configuration.type === 'button'
83
+ ).length > 0;
84
+
78
85
  const addToFavorites = useCallback(async () => {
79
86
  const { success } = await axiosPost(
80
87
  API.SENSOR.ADD_TO_FAVOURITES(unit.id, sensor.station.id, sensor.id)
@@ -102,11 +109,11 @@ const DeviceDetail = ({ account, route }) => {
102
109
  text: t('remove_device'),
103
110
  },
104
111
  ],
105
- []
112
+ [t]
106
113
  );
107
114
 
108
115
  const listMenuItem = useMemo(() => {
109
- const menuItems = [];
116
+ const menuItems = [...listMenuItemDefault];
110
117
  if (
111
118
  display.items.some((i) => getActionComponent(i.configuration.template))
112
119
  ) {
@@ -123,6 +130,13 @@ const DeviceDetail = ({ account, route }) => {
123
130
  });
124
131
  }
125
132
  }
133
+ if (isShowSetupEmergencyContact) {
134
+ menuItems.push({
135
+ route: Routes.ActivityLog,
136
+ data: { sensor },
137
+ text: t('activity_log'),
138
+ });
139
+ }
126
140
  menuItems.push({
127
141
  route: Routes.DeviceInfo,
128
142
  text: t('device_info'),
@@ -131,24 +145,26 @@ const DeviceDetail = ({ account, route }) => {
131
145
  },
132
146
  });
133
147
  if (!isFavourite) {
134
- menuItems.push({
148
+ menuItems.unshift({
135
149
  doAction: addToFavorites,
136
150
  text: t('add_to_favorites'),
137
151
  });
138
152
  } else {
139
- menuItems.push({
153
+ menuItems.unshift({
140
154
  doAction: removeFromFavorites,
141
155
  text: t('remove_from_favorites'),
142
156
  });
143
157
  }
144
- return [...listMenuItemDefault, ...menuItems];
158
+ return [...menuItems];
145
159
  }, [
146
- display,
147
- sensor,
148
- unit,
149
- isOwner,
160
+ display.items,
161
+ t,
150
162
  isFavourite,
163
+ isShowSetupEmergencyContact,
151
164
  listMenuItemDefault,
165
+ sensor,
166
+ isOwner,
167
+ unit,
152
168
  addToFavorites,
153
169
  removeFromFavorites,
154
170
  ]);
@@ -299,7 +315,7 @@ const DeviceDetail = ({ account, route }) => {
299
315
  setLastUpdated(data.last_updated);
300
316
  }
301
317
  };
302
- if (sensor.is_managed_by_backend) {
318
+ if (sensor.is_managed_by_backend && !sensor.is_other_device) {
303
319
  const updateInterval = setInterval(() => fetchValues(), 5000);
304
320
  fetchValues();
305
321
  return () => clearInterval(updateInterval);
@@ -331,12 +347,6 @@ const DeviceDetail = ({ account, route }) => {
331
347
  item.type === 'emergency' && item.configuration.type === 'detail'
332
348
  ).length > 0;
333
349
 
334
- const isShowSetupEmergencyContact =
335
- display.items.filter(
336
- (item) =>
337
- item.type === 'emergency' && item.configuration.type === 'button'
338
- ).length > 0;
339
-
340
350
  const isDisplayTime =
341
351
  display.items.filter(
342
352
  (item) => item.type !== 'action' && item.type !== 'camera'
@@ -358,7 +368,9 @@ const DeviceDetail = ({ account, route }) => {
358
368
  <>
359
369
  <ConnectedViewHeader
360
370
  lastUpdated={lastUpdated}
361
- isDisplayTime={isDisplayTime}
371
+ isDisplayTime={
372
+ isShowSetupEmergencyContact ? false : isDisplayTime
373
+ }
362
374
  />
363
375
  {display.items.map((item) => (
364
376
  <SensorDisplayItem
@@ -379,13 +391,10 @@ const DeviceDetail = ({ account, route }) => {
379
391
  return <DisconnectedView sensor={sensor} />;
380
392
  }
381
393
  } else {
382
- if (isGGHomeConnected) {
394
+ if (sensor.device_type === DEVICE_TYPE.LG_THINQ) {
383
395
  return (
384
396
  <>
385
- <ConnectedViewHeader
386
- lastUpdated={lastUpdated}
387
- type={'GoogleHome'}
388
- />
397
+ <ConnectedViewHeader lastUpdated={lastUpdated} />
389
398
  {display.items.map((item) => (
390
399
  <SensorDisplayItem
391
400
  testID={TESTID.SENSOR_DISPLAY_ITEM}
@@ -402,7 +411,31 @@ const DeviceDetail = ({ account, route }) => {
402
411
  </>
403
412
  );
404
413
  } else {
405
- return <DisconnectedView sensor={sensor} type={'GoogleHome'} />;
414
+ if (isGGHomeConnected) {
415
+ return (
416
+ <>
417
+ <ConnectedViewHeader
418
+ lastUpdated={lastUpdated}
419
+ type={'GoogleHome'}
420
+ />
421
+ {display.items.map((item) => (
422
+ <SensorDisplayItem
423
+ testID={TESTID.SENSOR_DISPLAY_ITEM}
424
+ key={item.id.toString()}
425
+ item={item}
426
+ emergency={onEmergencyButtonPress}
427
+ sensor={sensor}
428
+ getData={getData}
429
+ maxValue={maxValue}
430
+ offsetTitle={offsetTitle}
431
+ setOffsetTitle={setOffsetTitle}
432
+ />
433
+ ))}
434
+ </>
435
+ );
436
+ } else {
437
+ return <DisconnectedView sensor={sensor} type={'GoogleHome'} />;
438
+ }
406
439
  }
407
440
  }
408
441
  };
@@ -544,6 +577,7 @@ const DeviceDetail = ({ account, route }) => {
544
577
  childRef={childRef}
545
578
  onItemClick={onItemMenuClicked}
546
579
  wrapStyle={styles.menuAction}
580
+ isTextCenter={false}
547
581
  />
548
582
  </View>
549
583
  );
@@ -609,6 +643,7 @@ const SensorDisplayItem = ({
609
643
  offsetTitle,
610
644
  setOffsetTitle,
611
645
  }) => {
646
+ const t = useTranslations();
612
647
  const doAction = useCallback(
613
648
  (action, data) => {
614
649
  sendRemoteCommand(sensor, action, data);
@@ -691,16 +726,19 @@ const SensorDisplayItem = ({
691
726
  return false;
692
727
  };
693
728
 
694
- const EmergencyCountdown = memo(({ countUpStr }) => (
695
- <View style={styles.countDown}>
696
- <Text type="Label" center style={styles.messageCountDown}>
697
- {t('time_since_the_emergency_button_was_pressed')}
698
- </Text>
699
- <Text type="H3" center semibold color={Colors.Red6}>
700
- {countUpStr}
701
- </Text>
702
- </View>
703
- ));
729
+ const EmergencyCountdown = memo(({ countUpStr }) => {
730
+ const t = useTranslations();
731
+ return (
732
+ <View style={styles.countDown}>
733
+ <Text type="Label" center style={styles.messageCountDown}>
734
+ {t('time_since_the_emergency_button_was_pressed')}
735
+ </Text>
736
+ <Text type="H3" center semibold color={Colors.Red6}>
737
+ {countUpStr}
738
+ </Text>
739
+ </View>
740
+ );
741
+ });
704
742
 
705
743
  const mapStateToProps = (state) => ({
706
744
  account: state.auth.account,
@@ -16,6 +16,10 @@ export const useCountUp = (eventTime) => {
16
16
  };
17
17
  }, [eventTime]);
18
18
 
19
+ if (!eventTime) {
20
+ return {};
21
+ }
22
+
19
23
  const diffSeconds = currentTime.diff(eventTime, 'seconds');
20
24
  const seconds = diffSeconds > 0 ? diffSeconds % 60 : 0;
21
25
  const minutes = parseInt(diffSeconds / 60, 10) % 60;
@@ -1,5 +1,5 @@
1
1
  import { useCallback, useState } from 'react';
2
- import { t } from 'i18n-js';
2
+ import { useTranslations } from '../../../hooks/Common/useTranslations';
3
3
 
4
4
  import { API } from '../../../configs';
5
5
  import { axiosPost, axiosPut } from '../../../utils/Apis/axios';
@@ -80,6 +80,7 @@ const useEmergencyButton = (fetchDataDeviceDetail) => {
80
80
  };
81
81
 
82
82
  export const useAlertResolveEmergency = (lastEvent, fetchDataDeviceDetail) => {
83
+ const t = useTranslations();
83
84
  const [showPopupResolveSuccess, setShowPopupResolveSuccess] = useState(false);
84
85
  const [stateAlertResolve, setStateAlertResolve] = useState({
85
86
  visible: false,
@@ -125,7 +126,7 @@ export const useAlertResolveEmergency = (lastEvent, fetchDataDeviceDetail) => {
125
126
  hideAlertResolve();
126
127
  ToastBottomHelper.error(t('alert_resolve_error'));
127
128
  }
128
- }, [hideAlertResolve, lastEvent, fetchDataDeviceDetail]);
129
+ }, [lastEvent.id, hideAlertResolve, fetchDataDeviceDetail, t]);
129
130
 
130
131
  return {
131
132
  showPopupResolveSuccess,
@@ -1,4 +1,4 @@
1
- import { StyleSheet } from 'react-native';
1
+ import { Platform, StyleSheet } from 'react-native';
2
2
  import { Colors, Device } from '../../configs';
3
3
  import { standardizeCameraScreenSize } from '../../utils/Utils';
4
4
 
@@ -67,6 +67,10 @@ export default StyleSheet.create({
67
67
  borderRadius: 10,
68
68
  borderBottomRightRadius: 10,
69
69
  borderBottomLeftRadius: 10,
70
+ marginTop: Platform.select({
71
+ ios: 0,
72
+ android: -25,
73
+ }),
70
74
  },
71
75
  wrapTemplate: {
72
76
  marginBottom: 20,
@@ -1,9 +1,11 @@
1
1
  import React from 'react';
2
2
  import { create } from 'react-test-renderer';
3
3
  import { act } from '@testing-library/react-hooks';
4
- import { TESTID } from 'configs/Constants';
4
+ import { TESTID } from '../../../configs/Constants';
5
5
  import DeviceInfo from '../';
6
6
  import { View } from 'react-native';
7
+ import { SCProvider } from '../../../context';
8
+ import { mockSCStore } from '../../../context/mockStore';
7
9
 
8
10
  jest.mock('axios');
9
11
 
@@ -32,12 +34,19 @@ jest.mock('@react-navigation/core', () => {
32
34
  }),
33
35
  };
34
36
  });
37
+
38
+ const wrapComponent = () => (
39
+ <SCProvider initState={mockSCStore({})}>
40
+ <DeviceInfo />
41
+ </SCProvider>
42
+ );
43
+
35
44
  describe('Test DeviceInfo', () => {
36
45
  let tree;
37
46
 
38
47
  it('render DeviceInfo', async () => {
39
48
  await act(async () => {
40
- tree = await create(<DeviceInfo />);
49
+ tree = await create(wrapComponent());
41
50
  });
42
51
  const instance = tree.root;
43
52
  const battety = instance.findAll(
@@ -55,6 +64,6 @@ describe('Test DeviceInfo', () => {
55
64
  (el) =>
56
65
  el.props.testID === TESTID.DEVICE_INFO_CHIP_INFO && el.type === View
57
66
  );
58
- expect(chip.length).toEqual(1);
67
+ expect(chip.length).toEqual(5);
59
68
  });
60
69
  });
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { View } from 'react-native';
3
- import { t } from 'i18n-js';
3
+ import { useTranslations } from '../../hooks/Common/useTranslations';
4
4
  import { HeaderCustom } from '../../commons/Header';
5
5
  import { useRoute } from '@react-navigation/native';
6
6
  import Text from '../../commons/Text';
@@ -8,6 +8,7 @@ import styles from './DeviceInfoStyles';
8
8
  import { TESTID } from '../../configs/Constants';
9
9
 
10
10
  const DeviceInfo = () => {
11
+ const t = useTranslations();
11
12
  const { params = {} } = useRoute();
12
13
  const { deviceInfo } = params;
13
14
  const configuration = deviceInfo[0] ? deviceInfo[0].configuration : {};
@@ -0,0 +1,84 @@
1
+ import { Colors } from '../../../configs';
2
+ import { StyleSheet } from 'react-native';
3
+
4
+ export default StyleSheet.create({
5
+ wrap: {
6
+ flex: 1,
7
+ backgroundColor: Colors.White,
8
+ },
9
+ headerAniStyle: {
10
+ borderBottomWidth: 0,
11
+ },
12
+ wrapContent: {
13
+ flex: 1,
14
+ paddingHorizontal: 16,
15
+ },
16
+ wrapItem: {
17
+ flexDirection: 'row',
18
+ height: 100,
19
+ marginBottom: 16,
20
+ },
21
+ leftItem: {
22
+ width: 41,
23
+ height: '100%',
24
+ borderWidth: 1,
25
+ justifyContent: 'center',
26
+ alignItems: 'center',
27
+ borderRadius: 4,
28
+ borderColor: Colors.Gray4,
29
+ },
30
+ rightItem: {
31
+ flex: 1,
32
+ marginLeft: 4,
33
+ borderRadius: 4,
34
+ borderColor: Colors.Gray4,
35
+ borderWidth: 1,
36
+ flexDirection: 'row',
37
+ paddingVertical: 15,
38
+ paddingHorizontal: 16,
39
+ },
40
+ rightItemAdd: {
41
+ flex: 1,
42
+ marginLeft: 4,
43
+ borderRadius: 4,
44
+ borderColor: Colors.Gray4,
45
+ },
46
+ noBorder: {
47
+ borderWidth: 0,
48
+ },
49
+ iconItem: {
50
+ width: 40,
51
+ height: 40,
52
+ marginRight: 24,
53
+ },
54
+ contentItem: {
55
+ flex: 1,
56
+ },
57
+ containerStyle: {
58
+ marginVertical: 16,
59
+ },
60
+ wrapBottom: {
61
+ height: 80,
62
+ justifyContent: 'space-between',
63
+ alignItems: 'center',
64
+ flexDirection: 'row',
65
+ paddingHorizontal: 70,
66
+ },
67
+ closeButton: {
68
+ width: 40,
69
+ height: 30,
70
+ alignItems: 'center',
71
+ marginRight: -10,
72
+ },
73
+ wrapChildModal: {
74
+ padding: 16,
75
+ },
76
+ messageDelete: {
77
+ fontSize: 16,
78
+ lineHeight: 24,
79
+ color: Colors.Gray9,
80
+ },
81
+ textHighlight: {
82
+ fontWeight: 'bold',
83
+ },
84
+ });