@eohjsc/react-native-smart-city 0.2.20 → 0.2.26

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 (340) 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/OneTap.svg +14 -0
  8. package/assets/images/OneTap@1x.svg +14 -0
  9. package/assets/images/Rearrange.svg +3 -0
  10. package/assets/images/Schedule.svg +39 -0
  11. package/assets/images/WeatherChange.svg +49 -0
  12. package/package.json +12 -2
  13. package/src/Images/Common/ActiveButton.png +0 -0
  14. package/src/Images/Common/ActiveButton@2x.png +0 -0
  15. package/src/Images/Common/ActiveButton@3x.png +0 -0
  16. package/src/Images/Common/arrow-back.png +0 -0
  17. package/src/Images/Common/checked@2x.png +0 -0
  18. package/src/Images/Common/checked@3x.png +0 -0
  19. package/src/Images/Common/file.png +0 -0
  20. package/src/Images/Common/fullscreen.png +0 -0
  21. package/src/Images/Common/refresh.png +0 -0
  22. package/src/commons/ActionGroup/NumberUpDownActionTemplate.js +1 -1
  23. package/src/commons/ActionGroup/OnOffTemplate/index.js +4 -4
  24. package/src/commons/ActionGroup/OptionsDropdownActionTemplate.js +7 -4
  25. package/src/commons/ActionGroup/StatesGridActionTemplate.js +12 -3
  26. package/src/commons/ActionGroup/ThreeButtonTemplate.js +13 -6
  27. package/src/commons/ActionGroup/ThreeButtonTemplateStyle.js +1 -1
  28. package/src/commons/ActionGroup/TimerActionTemplate.js +158 -33
  29. package/src/commons/ActionGroup/__test__/OnOffButtonTemplate.test.js +8 -13
  30. package/src/commons/ActionGroup/__test__/OnOffTemplate.test.js +3 -3
  31. package/src/commons/ActionGroup/__test__/OptionsDropdownTemplate.test.js +26 -45
  32. package/src/commons/ActionGroup/__test__/ThreeButtonTemplate.test.js +11 -5
  33. package/src/commons/ActionGroup/__test__/TimerActionTemplate.test.js +14 -8
  34. package/src/commons/ActionGroup/__test__/TimerActionTemplateWithutConfigValue.test.js +17 -23
  35. package/src/commons/ActionGroup/__test__/__snapshots__/ThreeButtonTemplate.test.js.snap +241 -223
  36. package/src/commons/ActionGroup/__test__/index.test.js +39 -107
  37. package/src/commons/ActionGroup/hooks/useDropdownAction.js +2 -1
  38. package/src/commons/ActionTemplate/ActionTemplateStyles.js +14 -0
  39. package/src/commons/ActionTemplate/OnOffButtonAction.js +40 -0
  40. package/src/commons/ActionTemplate/OnOffButtonActionStyles.js +11 -0
  41. package/src/commons/ActionTemplate/OneButtonAction.js +26 -0
  42. package/src/commons/ActionTemplate/OneButtonActionStyles.js +11 -0
  43. package/src/commons/ActionTemplate/ThreeButtonAction.js +55 -0
  44. package/src/commons/ActionTemplate/ThreeButtonActionStyles.js +11 -0
  45. package/src/commons/ActionTemplate/__test__/OnOffButtonAction.test.js +34 -0
  46. package/src/commons/ActionTemplate/__test__/OneButtonAction.test.js +33 -0
  47. package/src/commons/ActionTemplate/__test__/ThreeButtonAction.test.js +35 -0
  48. package/src/commons/ActionTemplate/__test__/index.test.js +71 -0
  49. package/src/commons/ActionTemplate/index.js +69 -0
  50. package/src/commons/Automate/ItemAddNewScriptAction.js +30 -0
  51. package/src/commons/Automate/ItemAddNewScriptActionStyles.js +38 -0
  52. package/src/commons/Automate/ItemAutomate.js +33 -0
  53. package/src/commons/Automate/ItemAutomateStyles.js +33 -0
  54. package/src/commons/Automate/ItemScriptAction.js +45 -0
  55. package/src/commons/Automate/ItemScriptActionStyles.js +42 -0
  56. package/src/commons/BottomScrollPicker/index.js +58 -0
  57. package/src/commons/BottomScrollPicker/styles.js +13 -0
  58. package/src/commons/BottomSheet/index.js +36 -0
  59. package/src/commons/BottomSheet/styles.js +37 -0
  60. package/src/commons/Button/index.js +6 -1
  61. package/src/commons/CameraDevice/index.js +2 -1
  62. package/src/commons/ChartLoading/__test__/ChartLoading.test.js +9 -7
  63. package/src/commons/ChartLoading/index.js +2 -1
  64. package/src/commons/DateTimeRangeChange/index.js +2 -1
  65. package/src/commons/Device/ConnectedViewHeader.js +3 -1
  66. package/src/commons/Device/DeviceAlertStatus.js +5 -2
  67. package/src/commons/Device/DisconnectedView.js +34 -26
  68. package/src/commons/Device/Emergency/EmergencyButton.js +2 -1
  69. package/src/commons/Device/Emergency/EmergencyDetail.js +2 -1
  70. package/src/commons/Device/Emergency/__test__/EmergencyButton.test.js +14 -6
  71. package/src/commons/Device/Emergency/__test__/EmergencyDetail.test.js +10 -2
  72. package/src/commons/Device/FlatListItems.js +3 -2
  73. package/src/commons/Device/FooterInfo.js +2 -1
  74. package/src/commons/Device/HistoryChart.js +2 -1
  75. package/src/commons/Device/ItemAddNew/index.js +6 -1
  76. package/src/commons/Device/SensorConnectedStatus.js +2 -1
  77. package/src/commons/Device/WindDirection/Compass/Compass.test.js +19 -11
  78. package/src/commons/Device/WindDirection/Compass/index.js +1 -1
  79. package/src/commons/Device/WindSpeed/LinearChart/__test__/LinearChart.test.js +9 -3
  80. package/src/commons/Device/WindSpeed/LinearChart/__test__/__snapshots__/LinearChart.test.js.snap +0 -81
  81. package/src/commons/Device/WindSpeed/LinearChart/index.js +2 -1
  82. package/src/commons/Device/__test__/ConnectedViewHeader.test.js +16 -8
  83. package/src/commons/Device/__test__/DeviceAlertStatus.test.js +13 -5
  84. package/src/commons/Device/__test__/DisconnectedView.test.js +13 -5
  85. package/src/commons/Device/__test__/FlatListItems.test.js +9 -1
  86. package/src/commons/Device/__test__/FooterInfo.test.js +13 -4
  87. package/src/commons/Device/__test__/SensorConnectedStatus.test.js +9 -1
  88. package/src/commons/Device/__test__/__snapshots__/DisconnectedView.test.js.snap +20 -20
  89. package/src/commons/DisplayChecking/__test__/DisplayChecking.test.js +28 -0
  90. package/src/commons/EmergencyButton/AlertSendConfirm.js +2 -1
  91. package/src/commons/EmergencyButton/AlertSent.js +3 -2
  92. package/src/commons/Explore/CityItem/index.js +2 -1
  93. package/src/commons/Explore/HeaderExplore/index.js +2 -1
  94. package/src/commons/Explore/HeaderLabel/index.js +2 -1
  95. package/src/commons/Explore/SearchBox/__test__/SearchBox.test.js +9 -2
  96. package/src/commons/Explore/SearchBox/index.js +2 -1
  97. package/src/commons/Explore/__test__/CityItem.test.js +13 -15
  98. package/src/commons/Explore/__test__/HeaderLabel.test.js +15 -9
  99. package/src/commons/Header/HeaderCustom.js +17 -1
  100. package/src/commons/Header/Styles/HeaderCustomStyles.js +2 -2
  101. package/src/commons/Header/__test__/HeaderCT.test.js +12 -4
  102. package/src/commons/HeaderAni/index.js +6 -3
  103. package/src/commons/IconComponent/index.js +18 -3
  104. package/src/commons/ImagePicker/__test__/ImagePicker.test.js +19 -13
  105. package/src/commons/ImagePicker/index.js +3 -1
  106. package/src/commons/MediaPlayer/index.js +2 -1
  107. package/src/commons/MediaPlayerDetail/__test__/MediaPlayerDetail.test.js +14 -8
  108. package/src/commons/MediaPlayerDetail/index.js +4 -1
  109. package/src/commons/MenuActionAddnew/__test__/MenuActionAddNew.test.js +11 -20
  110. package/src/commons/MenuActionAddnew/index.js +2 -1
  111. package/src/commons/Modal/ModalBottom.js +51 -0
  112. package/src/commons/Modal/ModalFullVideo.js +2 -1
  113. package/src/commons/Modal/Styles/ModalBottomStyles.js +35 -0
  114. package/src/commons/Modal/index.js +2 -1
  115. package/src/commons/NavBar/index.js +2 -2
  116. package/src/commons/SelectActionCard/SelectActionStyles.js +16 -0
  117. package/src/commons/SelectActionCard/index.js +30 -0
  118. package/src/commons/Sharing/DevicePermissionsCheckbox.js +2 -1
  119. package/src/commons/Sharing/MemberList.js +3 -1
  120. package/src/commons/Sharing/RowMember.js +3 -2
  121. package/src/commons/Sharing/StationDevicePermissions.js +2 -1
  122. package/src/commons/Sharing/__test__/DevicePermissionsCheckbox.test.js +15 -9
  123. package/src/commons/Sharing/__test__/MemberList.test.js +17 -25
  124. package/src/commons/Sharing/__test__/StationDevicePermission.test.js +17 -12
  125. package/src/commons/Sharing/__test__/WrapHeaderScrollable.test.js +0 -9
  126. package/src/commons/SubUnit/OneTap/ItemOneTap.js +97 -0
  127. package/src/commons/SubUnit/OneTap/ItemOneTapStyles.js +41 -0
  128. package/src/commons/SubUnit/OneTap/OneTapStyles.js +36 -0
  129. package/src/commons/SubUnit/OneTap/__test__/SubUnitAutomate.test.js +149 -0
  130. package/src/commons/SubUnit/OneTap/index.js +39 -0
  131. package/src/commons/SubUnit/ShortDetail.js +11 -6
  132. package/src/commons/SubUnit/__test__/ShortDetail.test.js +14 -6
  133. package/src/commons/Today/__test__/Today.test.js +9 -1
  134. package/src/commons/Today/__test__/__snapshots__/Today.test.js.snap +1 -1
  135. package/src/commons/Today/index.js +2 -1
  136. package/src/commons/Unit/SharedUnit.js +2 -1
  137. package/src/commons/UnitSummary/AirQuality/SegmentedRoundDisplay/index.js +1 -2
  138. package/src/commons/UnitSummary/AirQuality/__test__/index.test.js +16 -17
  139. package/src/commons/UnitSummary/AirQuality/index.js +5 -120
  140. package/src/commons/UnitSummary/AirQuality/styles.js +112 -0
  141. package/src/commons/UnitSummary/TotalPowerConsumption/index.js +2 -1
  142. package/src/commons/UnitSummary/__test__/TotalPowerConsumption.test.js +15 -9
  143. package/src/commons/WheelDateTimePicker/Picker.js +57 -0
  144. package/src/commons/WheelDateTimePicker/index.js +160 -0
  145. package/src/commons/WheelDateTimePicker/styles.js +21 -0
  146. package/src/configs/API.js +25 -0
  147. package/src/configs/Colors.js +1 -0
  148. package/src/configs/Constants.js +46 -0
  149. package/src/configs/Images.js +1 -0
  150. package/src/configs/SCConfig.js +7 -0
  151. package/src/context/SCContext.tsx +7 -37
  152. package/src/context/actionType.ts +11 -0
  153. package/src/context/mockStore.ts +49 -0
  154. package/src/context/reducer.ts +23 -0
  155. package/src/hooks/Common/__test__/useTranslations.test.js +23 -0
  156. package/src/hooks/Common/index.js +2 -0
  157. package/src/hooks/Common/useGetIdUser.js +9 -0
  158. package/src/hooks/Common/useTranslations.ts +34 -0
  159. package/src/iot/Monitor.js +2 -1
  160. package/src/iot/RemoteControl/Bluetooth.js +2 -6
  161. package/src/iot/RemoteControl/GoogleHome.js +1 -1
  162. package/src/iot/RemoteControl/Internet.js +1 -1
  163. package/src/iot/RemoteControl/LG.js +57 -15
  164. package/src/iot/RemoteControl/__test__/Bluetooth.test.js +3 -5
  165. package/src/iot/RemoteControl/__test__/GoogleHome.test.js +3 -3
  166. package/src/iot/RemoteControl/__test__/Internet.test.js +1 -8
  167. package/src/iot/RemoteControl/__test__/LgThinq.test.js +7 -10
  168. package/src/iot/RemoteControl/index.js +1 -1
  169. package/src/iot/states.js +1 -0
  170. package/src/navigations/SharedStack.js +2 -1
  171. package/src/navigations/UnitStack.js +62 -1
  172. package/src/screens/AQIGuide/__test__/AQIGuide.test.js +9 -1
  173. package/src/screens/AQIGuide/index.js +2 -2
  174. package/src/screens/ActivityLog/__test__/index.test.js +14 -39
  175. package/src/screens/ActivityLog/index.js +2 -1
  176. package/src/screens/AddCommon/SelectSubUnit.js +5 -4
  177. package/src/screens/AddCommon/SelectUnit.js +3 -2
  178. package/src/screens/AddCommon/__test__/SelectSubUnit.test.js +61 -0
  179. package/src/screens/AddCommon/__test__/SelectUnit.test.js +18 -10
  180. package/src/screens/AddLocationMaps/index.js +2 -1
  181. package/src/screens/AddNewAction/Device/DeviceStyles.js +43 -0
  182. package/src/screens/AddNewAction/Device/__test__/index.test.js +42 -0
  183. package/src/screens/AddNewAction/Device/index.js +33 -0
  184. package/src/screens/AddNewAction/SelectAction.js +152 -0
  185. package/src/screens/AddNewAction/SelectDevice.js +120 -0
  186. package/src/screens/AddNewAction/Styles/SelectActionStyles.js +24 -0
  187. package/src/screens/AddNewAction/Styles/SelectDeviceStyles.js +36 -0
  188. package/src/screens/AddNewAction/__test__/SelectAction.test.js +172 -0
  189. package/src/screens/AddNewAction/__test__/SelectDevice.test.js +191 -0
  190. package/src/screens/AddNewAutoSmart/__test__/AddNewAutoSmart.test.js +55 -0
  191. package/src/screens/AddNewAutoSmart/index.js +85 -0
  192. package/src/screens/AddNewAutoSmart/styles/AddNewAutoSmartStyles.js +36 -0
  193. package/src/screens/AddNewDevice/ConnectDevices.js +2 -1
  194. package/src/screens/AddNewDevice/ConnectingDevices.js +2 -1
  195. package/src/screens/AddNewDevice/__test__/AddNewDevice.test.js +29 -13
  196. package/src/screens/AddNewDevice/__test__/ConnectDevices.test.js +19 -7
  197. package/src/screens/AddNewDevice/__test__/ConnectingDevices.test.js +16 -6
  198. package/src/screens/AddNewDevice/hooks/useStateAlertRename.js +2 -1
  199. package/src/screens/AddNewDevice/index.js +2 -1
  200. package/src/screens/AddNewGateway/ConnectedGateway.js +2 -1
  201. package/src/screens/AddNewGateway/ConnectingGateway.js +99 -24
  202. package/src/screens/AddNewGateway/ConnectingGatewayStyles.js +92 -0
  203. package/src/screens/AddNewGateway/SetupGatewayWifi.js +3 -2
  204. package/src/screens/AddNewGateway/__test__/AddNewGateway.test.js +35 -72
  205. package/src/screens/AddNewGateway/__test__/ConnectedGateway.test.js +14 -4
  206. package/src/screens/AddNewGateway/__test__/ConnectingGateway.test.js +20 -10
  207. package/src/screens/AddNewGateway/hooks/useStateAlertRename.js +2 -1
  208. package/src/screens/AddNewGateway/index.js +2 -1
  209. package/src/screens/AddNewOneTap/AddNewOneTapStyles.js +43 -0
  210. package/src/screens/AddNewOneTap/__test__/AddNewOneTap.test.js +129 -0
  211. package/src/screens/AddNewOneTap/index.js +80 -0
  212. package/src/screens/AddNewScriptAction/AddNewScriptActionStyles.js +28 -0
  213. package/src/screens/AddNewScriptAction/index.js +100 -0
  214. package/src/screens/AllCamera/index.js +2 -1
  215. package/src/screens/Device/HeaderDevice/styles.js +2 -2
  216. package/src/screens/Device/__test__/detail.test.js +26 -18
  217. package/src/screens/Device/detail.js +56 -28
  218. package/src/screens/Device/hooks/useCountUp.js +4 -0
  219. package/src/screens/Device/hooks/useEmergencyButton.js +3 -2
  220. package/src/screens/Device/styles.js +5 -1
  221. package/src/screens/DeviceInfo/__test__/index.test.js +12 -3
  222. package/src/screens/DeviceInfo/index.js +2 -1
  223. package/src/screens/EditActionsList/Styles/indexStyles.js +84 -0
  224. package/src/screens/EditActionsList/index.js +186 -0
  225. package/src/screens/EmergencyContacts/EmergencyContactsAddNew.js +3 -2
  226. package/src/screens/EmergencyContacts/EmergencyContactsList.js +9 -2
  227. package/src/screens/EmergencyContacts/EmergencyContactsSelectContacts.js +2 -1
  228. package/src/screens/EmergencyContacts/__test__/EmergencyContactAddNew.test.js +15 -18
  229. package/src/screens/EmergencyContacts/__test__/EmergencyContactList.test.js +19 -23
  230. package/src/screens/EmergencyContacts/__test__/EmergencyContactsSelectContacts.test.js +10 -25
  231. package/src/screens/EmergencyContacts/hook.js +3 -2
  232. package/src/screens/Explore/index.js +3 -2
  233. package/src/screens/GuestInfo/components/AccessScheduleItem.js +27 -0
  234. package/src/screens/GuestInfo/components/AccessScheduleSheet.js +193 -0
  235. package/src/screens/GuestInfo/components/HeaderGuestInfo.js +31 -0
  236. package/src/screens/GuestInfo/components/RecurringDetail.js +99 -0
  237. package/src/screens/GuestInfo/components/RowGuestInfo.js +31 -0
  238. package/src/screens/GuestInfo/components/TemporaryDetail.js +46 -0
  239. package/src/screens/GuestInfo/constant.js +59 -0
  240. package/src/screens/GuestInfo/index.js +151 -0
  241. package/src/screens/GuestInfo/styles/AccessScheduleDetailStyles.js +31 -0
  242. package/src/screens/GuestInfo/styles/AccessScheduleItemStyles.js +22 -0
  243. package/src/screens/GuestInfo/styles/HeaderGuestInfoStyles.js +31 -0
  244. package/src/screens/GuestInfo/styles/indexStyles.js +38 -0
  245. package/src/screens/ManageAccess/__test__/ManageAccess.test.js +13 -1
  246. package/src/screens/ManageAccess/hooks/index.js +4 -0
  247. package/src/screens/ManageAccess/index.js +49 -20
  248. package/src/screens/ManageAccess/styles/ManageAccessStyles.js +3 -0
  249. package/src/screens/PlayBackCamera/index.js +9 -5
  250. package/src/screens/ScanChipQR/__test__/ScanChipQR.test.js +2 -11
  251. package/src/screens/ScanChipQR/components/QRScan/index.js +2 -1
  252. package/src/screens/ScriptDetail/Styles/indexStyles.js +143 -0
  253. package/src/screens/ScriptDetail/index.js +243 -0
  254. package/src/screens/SharedUnit/TabHeader.js +2 -1
  255. package/src/screens/SharedUnit/__test__/TabHeader.test.js +40 -0
  256. package/src/screens/SharedUnit/index.js +3 -2
  257. package/src/screens/Sharing/MemberList.js +2 -1
  258. package/src/screens/Sharing/SelectPermission.js +2 -1
  259. package/src/screens/Sharing/SelectUser.js +3 -2
  260. package/src/screens/Sharing/__test__/MemberList.test.js +17 -13
  261. package/src/screens/Sharing/__test__/SelectPermission.test.js +16 -8
  262. package/src/screens/Sharing/__test__/SelectUser.test.js +33 -15
  263. package/src/screens/Sharing/hooks/index.js +22 -17
  264. package/src/screens/SubUnit/AddSubUnit.js +3 -2
  265. package/src/screens/SubUnit/Detail.js +5 -4
  266. package/src/screens/SubUnit/ManageSubUnit.js +10 -9
  267. package/src/screens/SubUnit/__test__/AddSubUnit.test.js +17 -11
  268. package/src/screens/SubUnit/__test__/Detail.test.js +11 -31
  269. package/src/screens/SubUnit/__test__/ManageSubUnit.test.js +42 -31
  270. package/src/screens/SyncLGDevice/AddLGDevice.js +3 -2
  271. package/src/screens/TDSGuide/__test__/TDSGuide.test.js +9 -1
  272. package/src/screens/TDSGuide/index.js +2 -1
  273. package/src/screens/UVIndexGuide/__test__/UVIndexGuide.test.js +9 -1
  274. package/src/screens/UVIndexGuide/index.js +2 -1
  275. package/src/screens/Unit/AddMenu.js +3 -2
  276. package/src/screens/Unit/Detail.js +65 -20
  277. package/src/screens/Unit/ManageUnit/index.js +4 -3
  278. package/src/screens/Unit/ManageUnit.js +5 -4
  279. package/src/screens/Unit/MoreMenu.js +3 -2
  280. package/src/screens/Unit/SelectLocation.js +8 -2
  281. package/src/screens/Unit/SelectLocationStyles.js +11 -0
  282. package/src/screens/Unit/__test__/AddMenu.test.js +15 -15
  283. package/src/screens/Unit/__test__/CheckSendEmail.test.js +19 -10
  284. package/src/screens/Unit/__test__/Detail.test.js +92 -33
  285. package/src/screens/Unit/__test__/ManageUnit.test.js +16 -23
  286. package/src/screens/Unit/components/Header/index.js +2 -1
  287. package/src/screens/Unit/components/ListMyAllUnit/index.js +2 -1
  288. package/src/screens/Unit/components/MyUnit/index.js +2 -1
  289. package/src/screens/Unit/components/SearchLocation/index.js +2 -1
  290. package/src/screens/Unit/components/SharedUnit/index.js +2 -1
  291. package/src/screens/Unit/components/__test__/SharedUnit.test.js +11 -2
  292. package/src/screens/UnitSummary/__test__/index.test.js +12 -4
  293. package/src/screens/UnitSummary/components/3PPowerConsumption/__test__/3PPowerConsumption.test.js +13 -3
  294. package/src/screens/UnitSummary/components/3PPowerConsumption/index.js +2 -1
  295. package/src/screens/UnitSummary/components/PowerConsumption/__test__/PowerConsumption.test.js +16 -12
  296. package/src/screens/UnitSummary/components/PowerConsumption/index.js +2 -1
  297. package/src/screens/UnitSummary/components/RunningDevices/__test__/index.test.js +2 -2
  298. package/src/screens/UnitSummary/components/Temperature/index.js +2 -1
  299. package/src/screens/UnitSummary/components/TotalPowerConsumption/index.js +2 -1
  300. package/src/screens/UnitSummary/components/UvIndex/__test__/__snapshots__/index.test.js.snap +37 -37
  301. package/src/screens/UnitSummary/components/UvIndex/__test__/index.test.js +14 -6
  302. package/src/screens/UnitSummary/components/UvIndex/index.js +2 -1
  303. package/src/screens/UnitSummary/components/WaterQuality/__test__/index.test.js +11 -5
  304. package/src/screens/UnitSummary/components/WaterQuality/index.js +2 -1
  305. package/src/screens/UnitSummary/components/__test__/TotalPowerConsumption.test.js +13 -7
  306. package/src/screens/UnitSummary/index.js +2 -1
  307. package/src/screens/WaterQualityGuide/__test__/index.test.js +12 -12
  308. package/src/screens/WaterQualityGuide/index.js +2 -1
  309. package/src/utils/Converter/array.js +4 -0
  310. package/src/utils/Converter/time.js +29 -4
  311. package/src/utils/I18n/index.ts +6 -0
  312. package/src/utils/I18n/translations/en.json +48 -2
  313. package/src/utils/I18n/translations/vi.json +45 -1
  314. package/src/utils/I18n/translations.ts +45 -0
  315. package/src/utils/Route/index.js +8 -0
  316. package/src/commons/ChartLoading/__test__/__snapshots__/ChartLoading.test.js.snap +0 -66
  317. package/src/commons/Device/HistoryChart/__test__/HistoryChart.test.js +0 -57
  318. package/src/commons/Device/HistoryChart/__test__/__snapshots__/HistoryChart.test.js.snap +0 -593
  319. package/src/commons/Explore/SearchBox/__test__/__snapshots__/SearchBox.test.js.snap +0 -59
  320. package/src/commons/Explore/__test__/HeaderExplore.test.js +0 -21
  321. package/src/commons/Header/__test__/Header.test.js +0 -24
  322. package/src/commons/MenuActionAddnew/__test__/__snapshots__/MenuActionAddNew.test.js.snap +0 -788
  323. package/src/commons/Sharing/__test__/__snapshots__/WrapHeaderScrollable.test.js.snap +0 -174
  324. package/src/commons/UnitSummary/AirQuality/__test__/__snapshots__/index.test.js.snap +0 -26679
  325. package/src/iot/RemoteControl/__test__/index.test.js +0 -101
  326. package/src/iot/__test__/Monitor.test.js +0 -119
  327. package/src/screens/EmergencyContacts/__test__/__snapshots__/EmergencyContactAddNew.test.js.snap +0 -1706
  328. package/src/screens/EmergencyContacts/__test__/__snapshots__/EmergencyContactList.test.js.snap +0 -4276
  329. package/src/screens/EmergencyContacts/__test__/__snapshots__/EmergencyContactsSelectContacts.test.js.snap +0 -2240
  330. package/src/screens/SyncLGDevice/__test__/AddLGDevice.test.js +0 -358
  331. package/src/screens/Unit/MyAllUnit/__test__/__snapshots__/index.test.js.snap +0 -1001
  332. package/src/screens/Unit/MyAllUnit/__test__/index.test.js +0 -48
  333. package/src/screens/Unit/components/MyAllUnit/__test__/__snapshots__/index.test.js.snap +0 -1001
  334. package/src/screens/Unit/components/MyAllUnit/__test__/index.test.js +0 -48
  335. package/src/screens/Unit/components/__test__/MyUnit.test.js +0 -85
  336. package/src/screens/UnitSummary/components/WaterQuality/__test__/__snapshots__/index.test.js.snap +0 -1574
  337. package/src/screens/WaterQualityGuide/__test__/__snapshots__/index.test.js.snap +0 -3375
  338. package/src/utils/Converter/__test__/time.test.js +0 -126
  339. package/src/utils/I18n/index.js +0 -19
  340. package/src/utils/I18n/index.test.js +0 -7
@@ -1,5 +1,6 @@
1
1
  import { BleManager } from 'react-native-ble-plx';
2
2
  import Toast from 'react-native-toast-message';
3
+ import { getTranslate } from '../../../utils/I18n';
3
4
  import '../Bluetooth';
4
5
  import {
5
6
  scanBluetoothDevices,
@@ -8,7 +9,6 @@ import {
8
9
  SEND_COMMAND_OVER_BLUETOOTH_FAIL,
9
10
  clearFoundDevices,
10
11
  } from '../Bluetooth';
11
- import { t } from 'i18n-js';
12
12
 
13
13
  const bleManager = new BleManager();
14
14
 
@@ -32,7 +32,7 @@ describe('Test IOT Bluetooth', () => {
32
32
  expect(Toast.show).toBeCalledWith({
33
33
  type: 'success',
34
34
  position: 'bottom',
35
- text1: t('text_ble_is_powered_on'),
35
+ text1: getTranslate('en', 'text_ble_is_powered_on'),
36
36
  visibilityTime: 1000,
37
37
  });
38
38
  });
@@ -91,9 +91,7 @@ describe('Test IOT Bluetooth', () => {
91
91
  expect(Toast.show).toBeCalledWith({
92
92
  type: 'success',
93
93
  position: 'bottom',
94
- text1: t('Found bluetooth %{name} for remote control', {
95
- name: device.localName,
96
- }),
94
+ text1: 'Found bluetooth 123456 for remote control',
97
95
  visibilityTime: 1000,
98
96
  });
99
97
  });
@@ -1,6 +1,5 @@
1
1
  import { createConnection, getStates } from 'home-assistant-js-websocket';
2
2
  import Toast from 'react-native-toast-message';
3
- import { t } from 'i18n-js';
4
3
  import axios from 'axios';
5
4
  import {
6
5
  googleHomeConnect,
@@ -9,6 +8,7 @@ import {
9
8
  } from '../GoogleHome';
10
9
  import { getConfigGlobalState, setConfigGlobalState } from '../../states';
11
10
  import { API } from '../../../configs';
11
+ import { getTranslate } from '../../../utils/I18n';
12
12
 
13
13
  jest.mock('axios');
14
14
  jest.mock('home-assistant-js-websocket', () => {
@@ -177,9 +177,9 @@ describe('Remote Control Google Home', () => {
177
177
  });
178
178
  await googleHomeConnect(options);
179
179
  expect(Toast.show).toBeCalledWith({
180
- type: 'error',
180
+ type: 'success',
181
181
  position: 'bottom',
182
- text1: t('command_googlehome_lost'),
182
+ text1: getTranslate('en', 'command_googlehome_ready'),
183
183
  visibilityTime: 1000,
184
184
  });
185
185
  });
@@ -1,5 +1,3 @@
1
- import { t } from 'i18n-js';
2
-
3
1
  import Toast from 'react-native-toast-message';
4
2
  import axios from 'axios';
5
3
  import { sendCommandOverInternet } from '../Internet';
@@ -16,12 +14,7 @@ describe('Test IOT Remote Control Internet', () => {
16
14
  axios.post.mockImplementation(() => ({ status: 200 }));
17
15
  await sendCommandOverInternet({}, {}, 'internet');
18
16
  expect(axios.post).toBeCalled();
19
- expect(Toast.show).toBeCalledWith({
20
- type: 'success',
21
- position: 'bottom',
22
- text1: t('Command is sent to device via internet'),
23
- visibilityTime: 1000,
24
- });
17
+ expect(Toast.show).toBeCalledTimes(2);
25
18
  });
26
19
 
27
20
  test('Trigger action fail show error', async () => {
@@ -115,13 +115,13 @@ describe('Remote Control LG Thinq', () => {
115
115
  source: 'lg_thinq',
116
116
  }
117
117
  );
118
- expect(axios.get).toHaveBeenCalledTimes(1);
119
- expect(axios.get).toHaveBeenCalledWith(
118
+ expect(axios.get).toHaveBeenCalledTimes(0);
119
+ expect(axios.get).not.toHaveBeenCalledWith(
120
120
  API.IOT.LG.DEVICE_STATUS(sensor.id),
121
121
  {}
122
122
  );
123
123
  let configValues = getConfigGlobalState('configValues');
124
- expect(configValues).toEqual({ 1: 'AUTO' });
124
+ expect(configValues).toEqual({ 1: 'LOW' });
125
125
  });
126
126
 
127
127
  it('Send command over lg thinq but fetch device status failed', async () => {
@@ -149,8 +149,8 @@ describe('Remote Control LG Thinq', () => {
149
149
  });
150
150
 
151
151
  expect(axios.post).toHaveBeenCalledTimes(1);
152
- expect(axios.get).toHaveBeenCalledTimes(1);
153
- expect(axios.get).toHaveBeenCalledWith(
152
+ expect(axios.get).toHaveBeenCalledTimes(0);
153
+ expect(axios.get).not.toHaveBeenCalledWith(
154
154
  API.IOT.LG.DEVICE_STATUS(sensor.id),
155
155
  {}
156
156
  );
@@ -241,11 +241,8 @@ describe('Remote Control LG Thinq', () => {
241
241
  await act(async () => {
242
242
  await jest.runAllTimers();
243
243
  });
244
- expect(axios.get).toHaveBeenCalledTimes(2);
245
- expect(axios.get).toHaveBeenCalledWith(
246
- API.IOT.LG.DEVICE_STATUS(sensor.id),
247
- {}
248
- );
244
+ expect(axios.get).toHaveBeenCalledTimes(1);
245
+ expect(axios.get).toHaveBeenCalledWith(API.IOT.LG.DEVICE_STATUS(2), {});
249
246
  let configValues = getConfigGlobalState('configValues');
250
247
  expect(configValues).toEqual({ 1: 18, 2: 30 });
251
248
  });
@@ -5,7 +5,7 @@ import {
5
5
  import { sendCommandOverInternet } from './Internet';
6
6
  import { sendCommandOverGoogleHome } from './GoogleHome';
7
7
  import { ToastBottomHelper } from '../../utils/Utils';
8
- import { t } from 'i18n-js';
8
+ import t from '../../hooks/Common/useTranslations';
9
9
  import { sendCommandOverLGThinq } from './LG';
10
10
 
11
11
  export const sendRemoteCommand = async (sensor, action, data) => {
package/src/iot/states.js CHANGED
@@ -2,6 +2,7 @@ import { createGlobalState } from 'react-hooks-global-state';
2
2
 
3
3
  const { useGlobalState, setGlobalState, getGlobalState } = createGlobalState({
4
4
  configValues: {},
5
+ lang: 'en',
5
6
  });
6
7
 
7
8
  export const useConfigGlobalState = useGlobalState;
@@ -3,7 +3,7 @@ import { createStackNavigator } from '@react-navigation/stack';
3
3
  import { TouchableOpacity, StyleSheet } from 'react-native';
4
4
  import { useNavigation } from '@react-navigation/native';
5
5
  import { Icon } from '@ant-design/react-native';
6
- import { t } from 'i18n-js';
6
+ import { useTranslations } from '../hooks/Common/useTranslations';
7
7
 
8
8
  import Shared from '../screens/SharedUnit';
9
9
  import { Colors } from '../configs';
@@ -11,6 +11,7 @@ import Routes from '../utils/Route';
11
11
 
12
12
  const Stack = createStackNavigator();
13
13
  const SharedStack = memo(() => {
14
+ const t = useTranslations();
14
15
  const navigation = useNavigation();
15
16
  return (
16
17
  <Stack.Navigator>
@@ -2,7 +2,7 @@ import React, { memo } from 'react';
2
2
  import { StyleSheet } from 'react-native';
3
3
  import { IconOutline } from '@ant-design/icons-react-native';
4
4
  import { createStackNavigator } from '@react-navigation/stack';
5
- import { t } from 'i18n-js';
5
+ import { useTranslations } from '../hooks/Common/useTranslations';
6
6
  import { Colors, Device } from '../configs';
7
7
  import Route from '../utils/Route';
8
8
  import ActivityLogScreen from '../screens/ActivityLog';
@@ -21,15 +21,24 @@ import UVIndexGuide from '../screens/UVIndexGuide';
21
21
  import TDSGuide from '../screens/TDSGuide';
22
22
  import WaterQualityGuide from '../screens/WaterQualityGuide';
23
23
  import DeviceInfo from '../screens/DeviceInfo';
24
+ import AddNewOneTap from '../screens/AddNewOneTap';
25
+ import AddNewScriptAction from '../screens/AddNewScriptAction';
26
+ import AddNewAutoSmart from '../screens/AddNewAutoSmart';
24
27
  import PlaybackCamera from '../screens/PlayBackCamera';
25
28
  import AllCamera from '../screens/AllCamera';
26
29
  import ManageAccessScreen from '../screens/ManageAccess';
30
+ import GuestInfo from '../screens/GuestInfo';
31
+ import ScriptDetail from '../screens/ScriptDetail';
32
+ import EditActionsList from '../screens/EditActionsList';
33
+ import SelectDevice from '../screens/AddNewAction/SelectDevice';
34
+ import SelectAction from '../screens/AddNewAction/SelectAction';
27
35
 
28
36
  import _ from 'lodash';
29
37
 
30
38
  const Stack = createStackNavigator();
31
39
 
32
40
  export const UnitStack = memo((props) => {
41
+ const t = useTranslations();
33
42
  return (
34
43
  <Stack.Navigator
35
44
  screenOptions={{
@@ -173,6 +182,58 @@ export const UnitStack = memo((props) => {
173
182
  headerShown: false,
174
183
  }}
175
184
  />
185
+ <Stack.Screen
186
+ name={Route.GuestInfo}
187
+ component={GuestInfo}
188
+ options={{
189
+ headerShown: false,
190
+ }}
191
+ />
192
+ <Stack.Screen
193
+ name={Route.AddNewOneTap}
194
+ component={AddNewOneTap}
195
+ options={{
196
+ headerShown: false,
197
+ }}
198
+ />
199
+ <Stack.Screen
200
+ name={Route.AddNewAutoSmart}
201
+ component={AddNewAutoSmart}
202
+ options={{
203
+ headerShown: false,
204
+ }}
205
+ />
206
+ <Stack.Screen
207
+ name={Route.ScriptDetail}
208
+ component={ScriptDetail}
209
+ options={{
210
+ headerShown: false,
211
+ }}
212
+ />
213
+ <Stack.Screen
214
+ name={Route.EditActionsList}
215
+ component={EditActionsList}
216
+ options={{
217
+ headerShown: false,
218
+ }}
219
+ />
220
+ <Stack.Screen
221
+ name={Route.AddNewScriptAction}
222
+ component={AddNewScriptAction}
223
+ options={{
224
+ headerShown: false,
225
+ }}
226
+ />
227
+ <Stack.Screen
228
+ name={Route.SelectDevice}
229
+ component={SelectDevice}
230
+ options={{ headerShown: false }}
231
+ />
232
+ <Stack.Screen
233
+ name={Route.SelectAction}
234
+ component={SelectAction}
235
+ options={{ headerShown: false }}
236
+ />
176
237
  </Stack.Navigator>
177
238
  );
178
239
  });
@@ -5,6 +5,14 @@ import { act, create } from 'react-test-renderer';
5
5
  import AQIGuide from '..';
6
6
  import Text from '../../../commons/Text';
7
7
  import { TESTID } from '../../../configs/Constants';
8
+ import { SCProvider } from '../../../context';
9
+ import { mockSCStore } from '../../../context/mockStore';
10
+
11
+ const wrapComponent = () => (
12
+ <SCProvider initState={mockSCStore({})}>
13
+ <AQIGuide />
14
+ </SCProvider>
15
+ );
8
16
 
9
17
  jest.mock('react-redux', () => ({
10
18
  ...jest.requireActual('react-redux'),
@@ -29,7 +37,7 @@ describe('test AQIGuide', () => {
29
37
  test('render', async () => {
30
38
  let tree;
31
39
  act(() => {
32
- tree = create(<AQIGuide />);
40
+ tree = create(wrapComponent());
33
41
  });
34
42
 
35
43
  const instance = tree.root;
@@ -6,7 +6,7 @@ import {
6
6
  TouchableOpacity,
7
7
  SafeAreaView,
8
8
  } from 'react-native';
9
- import { t } from 'i18n-js';
9
+ import { useTranslations } from '../../hooks/Common/useTranslations';
10
10
 
11
11
  import { Colors, Theme } from '../../configs';
12
12
  import useTitleHeader from '../../hooks/Common/useTitleHeader';
@@ -21,9 +21,9 @@ import SvgVeryTired from '../../../assets/images/Feeling/very-tired.svg';
21
21
  import { useSCContextSelector } from '../../context';
22
22
 
23
23
  const AQIGuide = memo(() => {
24
+ const t = useTranslations();
24
25
  useTitleHeader(t('AQI Guide'));
25
26
  const language = useSCContextSelector((state) => state.language);
26
-
27
27
  const data = useMemo(
28
28
  () => ({
29
29
  titles: [
@@ -4,6 +4,8 @@ import { create } from 'react-test-renderer';
4
4
  import { act } from '@testing-library/react-hooks';
5
5
  import ActivityLog from '../';
6
6
  import { Constants } from '../../../configs';
7
+ import { SCProvider } from '../../../context';
8
+ import { mockSCStore } from '../../../context/mockStore';
7
9
 
8
10
  const mockUseSelector = jest.fn();
9
11
  const mockSetState = jest.fn();
@@ -34,41 +36,28 @@ jest.mock('@react-navigation/core', () => {
34
36
 
35
37
  jest.mock('axios');
36
38
 
39
+ const wrapComponent = () => (
40
+ <SCProvider initState={mockSCStore({})}>
41
+ <ActivityLog />
42
+ </SCProvider>
43
+ );
44
+
37
45
  describe('Test Activity log', () => {
38
46
  let tree;
39
47
  Date.now = jest.fn(() => new Date('2021-07-02T15:48:24.917932Z'));
40
- const data = [
41
- {
42
- date: '02/07/2021',
43
- data: [
44
- {
45
- id: 2,
46
- action: 'Gara Up',
47
- name: 'Kevin Love',
48
- created_at: '2021-07-01T15:48:24.917932Z',
49
- },
50
- {
51
- id: 1,
52
- action: 'Gara Down',
53
- name: 'Stephen Holloway',
54
- created_at: '2021-07-01T15:48:24.791769Z',
55
- },
56
- ],
57
- },
58
- ];
59
48
 
60
49
  afterEach(() => {
61
50
  mockSetState.mockClear();
62
51
  });
63
52
 
64
- it('render empty list', () => {
53
+ it('render empty list', async () => {
65
54
  useState.mockImplementationOnce((init) => [init, mockSetState]);
66
55
  useState.mockImplementationOnce((init) => [init, mockSetState]);
67
56
  useState.mockImplementationOnce((init) => [init, mockSetState]);
68
57
  useState.mockImplementationOnce((init) => [false, mockSetState]);
69
58
  useState.mockImplementationOnce((init) => [false, mockSetState]);
70
- act(() => {
71
- tree = create(<ActivityLog />);
59
+ await act(() => {
60
+ tree = create(wrapComponent());
72
61
  });
73
62
  const instance = tree.root;
74
63
  const SectionListElement = instance.findAllByType(SectionList);
@@ -81,28 +70,14 @@ describe('Test Activity log', () => {
81
70
  });
82
71
  });
83
72
 
84
- it('render list', () => {
85
- useState.mockImplementationOnce((init) => [data, mockSetState]);
86
- useState.mockImplementationOnce((init) => [false, mockSetState]);
87
- useState.mockImplementationOnce((init) => [init, mockSetState]);
88
- useState.mockImplementationOnce((init) => [false, mockSetState]);
89
- useState.mockImplementationOnce((init) => [false, mockSetState]);
90
- act(() => {
91
- tree = create(<ActivityLog />);
92
- });
93
- const instance = tree.root;
94
- const SectionListElement = instance.findAllByType(SectionList);
95
- expect(SectionListElement).toHaveLength(1);
96
- });
97
-
98
- it('render ActivityIndicator', () => {
73
+ it('render ActivityIndicator', async () => {
99
74
  useState.mockImplementationOnce((init) => [[], mockSetState]);
100
75
  useState.mockImplementationOnce((init) => [true, mockSetState]);
101
76
  useState.mockImplementationOnce((init) => [init, mockSetState]);
102
77
  useState.mockImplementationOnce((init) => [false, mockSetState]);
103
78
  useState.mockImplementationOnce((init) => [false, mockSetState]);
104
- act(() => {
105
- tree = create(<ActivityLog />);
79
+ await act(() => {
80
+ tree = create(wrapComponent());
106
81
  });
107
82
  const instance = tree.root;
108
83
  const ActivityIndicatorElement = instance.findAllByType(ActivityIndicator);
@@ -2,7 +2,7 @@
2
2
  import React, { useEffect } from 'react';
3
3
  import { View, Text, SectionList, ActivityIndicator } from 'react-native';
4
4
  import moment from 'moment';
5
- import { t } from 'i18n-js';
5
+ import { useTranslations } from '../../hooks/Common/useTranslations';
6
6
  import { Colors } from '../../configs';
7
7
  import { HeaderCustom } from '../../commons/Header';
8
8
  import { getTitleFromTime } from '../../utils/Converter/time';
@@ -13,6 +13,7 @@ import styles from './Styles/indexStyles';
13
13
  const keyExtractor = (item) => item.id;
14
14
 
15
15
  const ActivityLogScreen = () => {
16
+ const t = useTranslations();
16
17
  const { params = {} } = useRoute();
17
18
  const { sensor } = params;
18
19
  const { data, isLoading, isRefreshing, onLoadMore, onRefresh } =
@@ -1,5 +1,5 @@
1
1
  import { useIsFocused, useNavigation } from '@react-navigation/native';
2
- import { t } from 'i18n-js';
2
+ import { useTranslations } from '../../hooks/Common/useTranslations';
3
3
  import React, { useCallback, useEffect, useState } from 'react';
4
4
  import { SafeAreaView, ScrollView, TouchableOpacity, View } from 'react-native';
5
5
 
@@ -13,6 +13,7 @@ import styles from './SelectSubUnitStyles';
13
13
  import Button from '../../commons/Button';
14
14
 
15
15
  const AddCommonSelectSubUnit = ({ route }) => {
16
+ const t = useTranslations();
16
17
  const navigation = useNavigation();
17
18
  const isFocused = useIsFocused();
18
19
  const { addType, unit_id } = route.params;
@@ -32,7 +33,7 @@ const AddCommonSelectSubUnit = ({ route }) => {
32
33
  setSubTitle(t('select_a_sub_unit'));
33
34
  break;
34
35
  }
35
- }, [title, subTitle, addType]);
36
+ }, [title, subTitle, addType, t]);
36
37
 
37
38
  const fetchDetails = useCallback(async () => {
38
39
  const { success, data } = await axiosGet(
@@ -55,8 +56,8 @@ const AddCommonSelectSubUnit = ({ route }) => {
55
56
  switch (addType) {
56
57
  case 'AddNewGateway':
57
58
  navigation.navigate(Routes.ScanChipQR, {
58
- station: subUnits[selectedIndex].id,
59
- unit_name: unit.name,
59
+ station: subUnits[selectedIndex]?.id,
60
+ unit_name: unit?.name,
60
61
  ...route.params,
61
62
  });
62
63
  break;
@@ -1,5 +1,5 @@
1
1
  import { useNavigation } from '@react-navigation/native';
2
- import { t } from 'i18n-js';
2
+ import { useTranslations } from '../../hooks/Common/useTranslations';
3
3
  import React, { useCallback, useEffect, useState } from 'react';
4
4
  import {
5
5
  SafeAreaView,
@@ -19,6 +19,7 @@ import Routes from '../../utils/Route';
19
19
  import { TESTID } from '../../configs/Constants';
20
20
 
21
21
  const AddCommonSelectUnit = ({ route }) => {
22
+ const t = useTranslations();
22
23
  const navigation = useNavigation();
23
24
  const { addType } = route.params;
24
25
  const [selectedIndex, setSelectedIndex] = useState(-1);
@@ -49,7 +50,7 @@ const AddCommonSelectUnit = ({ route }) => {
49
50
  setSubTitle(t('add_new_subunit_select_unit'));
50
51
  break;
51
52
  }
52
- }, [title, subTitle, addType]);
53
+ }, [title, subTitle, addType, t]);
53
54
 
54
55
  useEffect(() => {
55
56
  (async () => {
@@ -0,0 +1,61 @@
1
+ import React from 'react';
2
+ import renderer, { act } from 'react-test-renderer';
3
+
4
+ import AddCommonSelectSubUnit from '../SelectSubUnit';
5
+ import { ViewButtonBottom } from '../../../commons';
6
+ import { SCProvider } from '../../../context';
7
+ import { mockSCStore } from '../../../context/mockStore';
8
+
9
+ jest.mock('axios');
10
+
11
+ const mockedGoBack = jest.fn();
12
+ const mockedNavigate = jest.fn();
13
+ jest.mock('@react-navigation/native', () => {
14
+ return {
15
+ ...jest.requireActual('@react-navigation/native'),
16
+ useNavigation: () => ({
17
+ navigate: mockedNavigate,
18
+ goBack: mockedGoBack,
19
+ }),
20
+ useIsFocused: () => ({}),
21
+ };
22
+ });
23
+
24
+ const wrapComponent = (route) => (
25
+ <SCProvider initState={mockSCStore({})}>
26
+ <AddCommonSelectSubUnit route={route} />
27
+ </SCProvider>
28
+ );
29
+
30
+ describe('Test SelectSubUnit', () => {
31
+ beforeEach(() => {
32
+ mockedNavigate.mockClear();
33
+ mockedGoBack.mockClear();
34
+ });
35
+ let tree;
36
+ test('test ViewButtonBottom leftClick', async () => {
37
+ const route = { params: { addType: 'AddNewGateway' } };
38
+ await act(async () => {
39
+ tree = renderer.create(wrapComponent(route));
40
+ });
41
+ const instance = tree.root;
42
+ const viewButtonBottom = instance.findByType(ViewButtonBottom);
43
+ act(() => {
44
+ viewButtonBottom.props.onLeftClick();
45
+ });
46
+ expect(mockedGoBack).toHaveBeenCalled();
47
+ });
48
+
49
+ test('test ViewButtonBottom onRightClick', async () => {
50
+ const route = { params: { addType: 'AddNewGateway' } };
51
+ await act(async () => {
52
+ tree = renderer.create(wrapComponent(route));
53
+ });
54
+ const instance = tree.root;
55
+ const viewButtonBottom = instance.findByType(ViewButtonBottom);
56
+ act(() => {
57
+ viewButtonBottom.props.onRightClick();
58
+ });
59
+ expect(mockedNavigate).toHaveBeenCalled();
60
+ });
61
+ });
@@ -6,6 +6,8 @@ import axios from 'axios';
6
6
  import AddCommonSelectUnit from '../SelectUnit';
7
7
  import Text from '../../../commons/Text';
8
8
  import { TESTID } from '../../../configs/Constants';
9
+ import { SCProvider } from '../../../context';
10
+ import { mockSCStore } from '../../../context/mockStore';
9
11
 
10
12
  jest.mock('axios');
11
13
 
@@ -21,6 +23,12 @@ jest.mock('@react-navigation/native', () => {
21
23
  };
22
24
  });
23
25
 
26
+ const wrapComponent = (route) => (
27
+ <SCProvider initState={mockSCStore({})}>
28
+ <AddCommonSelectUnit route={route} />
29
+ </SCProvider>
30
+ );
31
+
24
32
  describe('Test SelectUnit container', () => {
25
33
  beforeEach(() => {
26
34
  mockedNavigate.mockClear();
@@ -29,17 +37,17 @@ describe('Test SelectUnit container', () => {
29
37
  let tree;
30
38
  const list_type = ['AddSubUnit', 'AddDevice', 'AddMember', 'AddLGDevice', ''];
31
39
  const result = [
32
- 'Thêm khu vực',
33
- 'Thêm thiết bị',
34
- 'Chọn một địa điểm',
35
- 'Chọn một địa điểm',
36
- 'Thêm khu vực',
40
+ 'Add new sub-unit',
41
+ 'Add new device',
42
+ 'Select a unit',
43
+ 'Select a unit',
44
+ 'Add new sub-unit',
37
45
  ];
38
46
  list_type.forEach(function (type, i) {
39
47
  test(`create SelectUnit ${type} container`, () => {
40
48
  const route = { params: { addType: type } };
41
49
  act(() => {
42
- tree = renderer.create(<AddCommonSelectUnit route={route} />);
50
+ tree = renderer.create(wrapComponent(route));
43
51
  });
44
52
  const instance = tree.root;
45
53
  const button = instance.findAllByType(TouchableOpacity);
@@ -76,7 +84,7 @@ describe('Test SelectUnit container', () => {
76
84
  });
77
85
 
78
86
  await act(async () => {
79
- tree = renderer.create(<AddCommonSelectUnit route={route} />);
87
+ tree = renderer.create(wrapComponent(route));
80
88
  });
81
89
 
82
90
  const instance = tree.root;
@@ -149,7 +157,7 @@ describe('test single SelectUnit', () => {
149
157
  });
150
158
 
151
159
  await act(async () => {
152
- tree = renderer.create(<AddCommonSelectUnit route={route} />);
160
+ tree = renderer.create(wrapComponent(route));
153
161
  });
154
162
 
155
163
  const instance = tree.root;
@@ -190,7 +198,7 @@ describe('test single SelectUnit', () => {
190
198
  });
191
199
 
192
200
  await act(async () => {
193
- tree = renderer.create(<AddCommonSelectUnit route={route} />);
201
+ tree = renderer.create(wrapComponent(route));
194
202
  });
195
203
 
196
204
  const instance = tree.root;
@@ -209,7 +217,7 @@ describe('test single SelectUnit', () => {
209
217
  test('click goBack', async () => {
210
218
  const route = { params: { addType: 'AddSubUnit' } };
211
219
  await act(async () => {
212
- tree = renderer.create(<AddCommonSelectUnit route={route} />);
220
+ tree = renderer.create(wrapComponent(route));
213
221
  });
214
222
 
215
223
  const instance = tree.root;
@@ -3,7 +3,7 @@ import { View, StyleSheet } from 'react-native';
3
3
  import MapView, { Marker, Circle, PROVIDER_GOOGLE } from 'react-native-maps';
4
4
  import { getStatusBarHeight } from 'react-native-iphone-x-helper';
5
5
  import { useNavigation } from '@react-navigation/native';
6
- import { t } from 'i18n-js';
6
+ import { useTranslations } from '../../hooks/Common/useTranslations';
7
7
 
8
8
  import { Colors } from '../../configs';
9
9
  import Text from '../../commons/Text';
@@ -17,6 +17,7 @@ const initialRegion = {
17
17
  };
18
18
 
19
19
  const AddLocationMaps = memo(() => {
20
+ const t = useTranslations();
20
21
  const { goBack } = useNavigation();
21
22
  const [color, setColor] = useState(Colors.Black);
22
23
  useEffect(() => {
@@ -0,0 +1,43 @@
1
+ import { StyleSheet } from 'react-native';
2
+ import { Colors, Constants } from '../../../configs';
3
+
4
+ const marginItem = 12;
5
+ const marginHorizontal = 16;
6
+ const widthItem = (Constants.width - marginHorizontal * 2 - marginItem) / 2;
7
+ const heightItem = (widthItem / 166) * 96;
8
+
9
+ export default StyleSheet.create({
10
+ container: {
11
+ padding: 12,
12
+ borderRadius: 10,
13
+ shadowColor: Colors.Shadow,
14
+ shadowOffset: {
15
+ width: 0,
16
+ height: 2,
17
+ },
18
+ shadowOpacity: 0.1,
19
+ shadowRadius: 3,
20
+ elevation: 4,
21
+ width: widthItem,
22
+ height: heightItem,
23
+ backgroundColor: Colors.White,
24
+ justifyContent: 'space-between',
25
+ marginBottom: 16,
26
+ },
27
+ active: {
28
+ borderColor: Colors.Primary,
29
+ borderWidth: 2,
30
+ },
31
+ boxIcon: {
32
+ flexDirection: 'row',
33
+ justifyContent: 'space-between',
34
+ },
35
+ lineHeight22: {
36
+ lineHeight: 22,
37
+ },
38
+ iconSensor: {
39
+ width: 40,
40
+ height: 40,
41
+ resizeMode: 'contain',
42
+ },
43
+ });