@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
@@ -0,0 +1,129 @@
1
+ import axios from 'axios';
2
+ import React from 'react';
3
+ import { Platform, TextInput, TouchableOpacity } from 'react-native';
4
+ import { act, create } from 'react-test-renderer';
5
+
6
+ import AddNewOneTap from '..';
7
+ import { TESTID } from '../../../configs/Constants';
8
+ import { SCProvider } from '../../../context';
9
+ import { mockSCStore } from '../../../context/mockStore';
10
+ import Routes from '../../../utils/Route';
11
+
12
+ const wrapComponent = (route) => (
13
+ <SCProvider initState={mockSCStore({})}>
14
+ <AddNewOneTap route={route} />
15
+ </SCProvider>
16
+ );
17
+ jest.mock('axios');
18
+
19
+ jest.mock('react-redux', () => {
20
+ return {
21
+ ...jest.requireActual('react-redux'),
22
+ useSelector: () => 'vi',
23
+ };
24
+ });
25
+
26
+ const mockedNavigate = jest.fn();
27
+ jest.mock('@react-navigation/native', () => {
28
+ return {
29
+ ...jest.requireActual('@react-navigation/native'),
30
+ useNavigation: () => ({
31
+ navigate: mockedNavigate,
32
+ }),
33
+ };
34
+ });
35
+
36
+ jest.mock('axios');
37
+ let tree;
38
+
39
+ describe('test AddNewOneTap', () => {
40
+ beforeEach(() => {
41
+ axios.post.mockClear();
42
+ mockedNavigate.mockClear();
43
+ });
44
+ test('create AddNewOneTap success', async () => {
45
+ Platform.OS = 'ios';
46
+ let route = {
47
+ params: { type: 'one_tap', unit: { id: 1 } },
48
+ };
49
+
50
+ const response = {
51
+ status: 200,
52
+ data: {
53
+ id: 1,
54
+ unit: 1,
55
+ type: 'one_tap',
56
+ weekday_repeat: [],
57
+ script: { id: 1, name: 'William Miller' },
58
+ },
59
+ };
60
+
61
+ axios.post.mockImplementation(async () => {
62
+ return response;
63
+ });
64
+
65
+ await act(async () => {
66
+ tree = await create(wrapComponent(route));
67
+ });
68
+ const instance = tree.root;
69
+ const inputName = instance.findAll(
70
+ (el) =>
71
+ el.props.testID === TESTID.NAME_YOUR_BUTTON && el.type === TextInput
72
+ );
73
+ expect(inputName).toHaveLength(1);
74
+
75
+ await act(async () => {
76
+ await inputName[0].props.onChangeText('Tap to up');
77
+ });
78
+
79
+ const item = instance.findAll(
80
+ (el) =>
81
+ el.props.testID === TESTID.BOTTOM_VIEW_MAIN &&
82
+ el.type === TouchableOpacity
83
+ );
84
+
85
+ expect(item).toHaveLength(1);
86
+ await act(async () => {
87
+ await item[0].props.onPress();
88
+ });
89
+ expect(mockedNavigate).toHaveBeenCalledWith(Routes.ScriptDetail, {
90
+ havePermission: true,
91
+ id: 1,
92
+ type: 'one_tap',
93
+ name: 'Tap to up',
94
+ unit: {
95
+ id: 1,
96
+ },
97
+ });
98
+ });
99
+ test('create AddNewOneTap fail', async () => {
100
+ Platform.OS = 'android';
101
+ let route = {
102
+ params: { type: 'one_tap' },
103
+ };
104
+
105
+ const response = {
106
+ status: 400,
107
+ };
108
+
109
+ axios.post.mockImplementation(async () => {
110
+ return response;
111
+ });
112
+
113
+ await act(async () => {
114
+ tree = await create(wrapComponent(route));
115
+ });
116
+
117
+ const item = tree.root.findAll(
118
+ (el) =>
119
+ el.props.testID === TESTID.BOTTOM_VIEW_MAIN &&
120
+ el.type === TouchableOpacity
121
+ );
122
+
123
+ expect(item).toHaveLength(1);
124
+ await act(async () => {
125
+ await item[0].props.onPress();
126
+ });
127
+ expect(mockedNavigate).not.toBeCalled();
128
+ });
129
+ });
@@ -0,0 +1,80 @@
1
+ import React, { memo, useCallback, useState } from 'react';
2
+ import { ScrollView, SafeAreaView, Platform } from 'react-native';
3
+ import { useNavigation } from '@react-navigation/native';
4
+
5
+ import { API, Colors } from '../../configs';
6
+ import { TESTID } from '../../configs/Constants';
7
+ import _TextInput from '../../commons/Form/TextInput';
8
+ import styles from './AddNewOneTapStyles';
9
+ import { HeaderCustom } from '../../commons/Header';
10
+ import BottomButtonView from '../../commons/BottomButtonView';
11
+ import Text from '../../commons/Text';
12
+ import { useTranslations } from '../../hooks/Common/useTranslations';
13
+ import { axiosPost } from '../../utils/Apis/axios';
14
+ import Routes from '../../utils/Route';
15
+
16
+ const AddNewOneTap = memo(({ route }) => {
17
+ const { type, unit } = route.params;
18
+ const t = useTranslations();
19
+ const { navigate } = useNavigation();
20
+ const [name, setName] = useState(t('tap_to_run'));
21
+
22
+ const handleContinue = useCallback(async () => {
23
+ const { success, data } = await axiosPost(API.AUTOMATE.CREATE_AUTOMATE(), {
24
+ unit: unit.id,
25
+ type: type,
26
+ name: name,
27
+ });
28
+ if (success) {
29
+ navigate(Routes.ScriptDetail, {
30
+ unit: unit,
31
+ id: data.id,
32
+ name: name,
33
+ type: type,
34
+ havePermission: true,
35
+ });
36
+ }
37
+ }, [type, name, unit, navigate]);
38
+
39
+ const onChangeName = useCallback((text) => {
40
+ setName(text);
41
+ }, []);
42
+
43
+ return (
44
+ <SafeAreaView
45
+ style={
46
+ Platform.OS === 'android'
47
+ ? styles.containerAndroid
48
+ : styles.containerIOS
49
+ }
50
+ >
51
+ <HeaderCustom isShowClose />
52
+ <ScrollView>
53
+ <Text
54
+ testID={TESTID.ADD_NEW_DEVICE_ADD}
55
+ semibold
56
+ size={20}
57
+ color={Colors.Gray9}
58
+ style={styles.textHeader}
59
+ >
60
+ {t('name_your_button')}
61
+ </Text>
62
+ <_TextInput
63
+ placeholder={t('name_your_button')}
64
+ wrapStyle={styles.noMarginTop}
65
+ onChange={onChangeName}
66
+ textInputStyle={styles.textInput}
67
+ value={name}
68
+ testID={TESTID.NAME_YOUR_BUTTON}
69
+ />
70
+ </ScrollView>
71
+ <BottomButtonView
72
+ style={styles.viewBottomFixed}
73
+ mainTitle={t('continue')}
74
+ onPressMain={handleContinue}
75
+ />
76
+ </SafeAreaView>
77
+ );
78
+ });
79
+
80
+ export default AddNewOneTap;
@@ -0,0 +1,28 @@
1
+ import { StyleSheet } from 'react-native';
2
+ import { Colors } from '../../configs';
3
+
4
+ export default StyleSheet.create({
5
+ wrap: {
6
+ flex: 1,
7
+ backgroundColor: Colors.White,
8
+ },
9
+ container: {
10
+ paddingBottom: 250,
11
+ },
12
+ title: {
13
+ marginVertical: 16,
14
+ marginLeft: 16,
15
+ },
16
+ row: {
17
+ flexDirection: 'row',
18
+ justifyContent: 'space-between',
19
+ margin: 16,
20
+ },
21
+ viewBottom: {
22
+ borderColor: Colors.Gray4,
23
+ paddingVertical: 24,
24
+ borderTopWidth: 1,
25
+ backgroundColor: Colors.White,
26
+ },
27
+ automate: { marginRight: 16, marginLeft: 16 },
28
+ });
@@ -0,0 +1,100 @@
1
+ import React, { memo, useCallback, useContext } from 'react';
2
+ import { View, ScrollView, TouchableOpacity } from 'react-native';
3
+ import { useRoute, useNavigation } from '@react-navigation/native';
4
+ import { useTranslations } from '../../hooks/Common/useTranslations';
5
+
6
+ import { SCContext } from '../../context';
7
+ import { Action } from '../../context/actionType';
8
+ import Routes from '../../utils/Route';
9
+ import { HeaderCustom } from '../../commons/Header';
10
+ import Text from '../../commons/Text';
11
+ import BottomButtonView from '../../commons/BottomButtonView';
12
+ import ItemAutomate from '../../commons/Automate/ItemAutomate';
13
+ import ItemScriptAction from '../../commons/Automate/ItemScriptAction';
14
+ import ItemAddNewScriptAction from '../../commons/Automate/ItemAddNewScriptAction';
15
+
16
+ import styles from './AddNewScriptActionStyles';
17
+ import { Colors } from '../../configs';
18
+
19
+ const AddNewScriptAction = memo(() => {
20
+ const t = useTranslations();
21
+ const { params = {} } = useRoute();
22
+ const { navigate } = useNavigation();
23
+ // eslint-disable-next-line no-unused-vars
24
+ const { type, name, unit } = params;
25
+
26
+ // eslint-disable-next-line no-unused-vars
27
+ const { stateData, setAction } = useContext(SCContext);
28
+
29
+ const handleOnEdit = useCallback(() => {
30
+ alert(t('feature_under_development'));
31
+ }, [t]);
32
+
33
+ const handleOnAddNew = useCallback(() => {
34
+ navigate(Routes.SelectDevice, {
35
+ automateId: null,
36
+ unit,
37
+ scriptName: name,
38
+ });
39
+ }, [navigate, name, unit]);
40
+
41
+ const handleOnDone = useCallback(() => {
42
+ alert(t('feature_under_development'));
43
+ }, [t]);
44
+
45
+ const handleGoToAutomate = useCallback(() => {
46
+ alert(t('feature_under_development'));
47
+ }, [t]);
48
+
49
+ const handleGoBack = useCallback(() => {
50
+ setAction(Action.LIST_ACTION, {});
51
+ }, [setAction]);
52
+
53
+ return (
54
+ <View style={styles.wrap}>
55
+ <HeaderCustom isShowClose onGoBack={handleGoBack} />
56
+ <ScrollView scrollEnabled={true} contentContainerStyle={styles.container}>
57
+ <Text type="H2" bold style={styles.title}>
58
+ {name}
59
+ </Text>
60
+
61
+ <View style={styles.row}>
62
+ <Text type="H3" bold>
63
+ {t('how_to_start')}
64
+ </Text>
65
+ </View>
66
+ <View style={styles.automate}>
67
+ <ItemAutomate type={type} />
68
+ </View>
69
+ <View style={styles.row}>
70
+ <Text type="H3" bold>
71
+ {t('actions_list')}
72
+ </Text>
73
+ <TouchableOpacity onPress={handleOnEdit}>
74
+ <Text type="Label" color={Colors.Primary}>
75
+ {t('edit')}
76
+ </Text>
77
+ </TouchableOpacity>
78
+ </View>
79
+ {stateData?.listAction.map((item, index) => (
80
+ <ItemScriptAction order={index + 1} item={item} key={index} />
81
+ ))}
82
+ <ItemAddNewScriptAction
83
+ order={stateData?.listAction.length + 1}
84
+ title={t('add_new')}
85
+ onAddNew={handleOnAddNew}
86
+ />
87
+ </ScrollView>
88
+ <BottomButtonView
89
+ style={styles.viewBottom}
90
+ mainTitle={t('done')}
91
+ onPressMain={handleOnDone}
92
+ secondaryTitle={t('go_to_automate_scripts')}
93
+ typeSecondary="primaryUnderline"
94
+ onPressSecondary={handleGoToAutomate}
95
+ />
96
+ </View>
97
+ );
98
+ });
99
+
100
+ export default AddNewScriptAction;
@@ -3,7 +3,7 @@ import { View, Text, TouchableOpacity, Platform, Image } from 'react-native';
3
3
  import { useRoute, useNavigation } from '@react-navigation/native';
4
4
  import { chunk } from 'lodash';
5
5
  import Carousel from 'react-native-snap-carousel';
6
- import { t } from 'i18n-js';
6
+ import { useTranslations } from '../../hooks/Common/useTranslations';
7
7
 
8
8
  import { Images, Colors } from '../../configs';
9
9
  import { useHiddenStatusBar } from '../../hooks/Common/useStatusBar';
@@ -15,6 +15,7 @@ import { ModalFullVideo } from '../../commons/Modal';
15
15
  import Routes from '../../utils/Route';
16
16
 
17
17
  const AllCamera = () => {
18
+ const t = useTranslations();
18
19
  const carouselRef = useRef();
19
20
  const { params = {} } = useRoute();
20
21
  const { arrCameras = [], thumbnail = '' } = params;
@@ -1,5 +1,5 @@
1
1
  import { StyleSheet } from 'react-native';
2
- import { getStatusBarHeight } from '../../../configs/Constants';
2
+ import { getStatusBarHeight } from 'react-native-iphone-x-helper';
3
3
 
4
4
  export default StyleSheet.create({
5
5
  wrap: {
@@ -9,7 +9,7 @@ export default StyleSheet.create({
9
9
  paddingLeft: 7,
10
10
  paddingRight: 10,
11
11
  paddingBottom: 6,
12
- paddingTop: getStatusBarHeight(),
12
+ paddingTop: getStatusBarHeight() + 10,
13
13
  },
14
14
  button: {
15
15
  width: 35,
@@ -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,14 @@ 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));
504
512
  });
505
513
 
506
514
  const instance = tree.root;
507
515
  const sensorDisplayItem = instance.findAll(
508
516
  (el) => el.props.testID === TESTID.SENSOR_DISPLAY_ITEM
509
517
  );
510
- expect(sensorDisplayItem).toHaveLength(2);
518
+ expect(sensorDisplayItem).toHaveLength(4);
511
519
  });
512
520
 
513
521
  test('render CurrentRainSensor', async () => {
@@ -548,24 +556,24 @@ describe('test DeviceDetail', () => {
548
556
  mockAxios(responseDisplay, responseDisplayValueV2);
549
557
 
550
558
  await act(async () => {
551
- tree = await create(<DeviceDetail account={account} route={route} />);
559
+ tree = await create(wrapComponent(account, route));
552
560
  });
553
561
 
554
562
  const instance = tree.root;
555
563
  const sensorDisplayItem = instance.findAll(
556
564
  (el) => el.props.testID === TESTID.SENSOR_DISPLAY_ITEM
557
565
  );
558
- expect(sensorDisplayItem).toHaveLength(4);
566
+ expect(sensorDisplayItem).toHaveLength(1);
559
567
 
560
568
  const currentRainSensor = instance.findAllByType(CurrentRainSensor);
561
- expect(currentRainSensor).toHaveLength(0); // not crash app
569
+ expect(currentRainSensor).toHaveLength(1); // not crash app
562
570
  });
563
571
 
564
572
  test('not fetch value if not managed by backend', async () => {
565
573
  route.params.sensor.is_managed_by_backend = false;
566
574
 
567
575
  await act(async () => {
568
- tree = await create(<DeviceDetail account={account} route={route} />);
576
+ tree = await create(wrapComponent(account, route));
569
577
  });
570
578
 
571
579
  expect(axios.get).not.toBeCalledWith(API.SENSOR.DISPLAY_VALUES_V2(1));
@@ -612,7 +620,7 @@ describe('test DeviceDetail', () => {
612
620
  mockAxios(responseDisplay, responseDisplayValueV2);
613
621
 
614
622
  await act(async () => {
615
- tree = await create(<DeviceDetail account={account} route={route} />);
623
+ tree = await create(wrapComponent(account, route));
616
624
  });
617
625
 
618
626
  const instance = tree.root;
@@ -626,7 +634,7 @@ describe('test DeviceDetail', () => {
626
634
 
627
635
  test('HeaderDevice button more onClick', async () => {
628
636
  await act(async () => {
629
- tree = await create(<DeviceDetail account={account} route={route} />);
637
+ tree = await create(wrapComponent(account, route));
630
638
  });
631
639
  const instance = tree.root;
632
640
  const menu = instance.findByType(MenuActionMore);
@@ -648,7 +656,7 @@ describe('test DeviceDetail', () => {
648
656
  sensor.is_favourite = false;
649
657
 
650
658
  await act(async () => {
651
- tree = await create(<DeviceDetail account={account} route={route} />);
659
+ tree = await create(wrapComponent(account, route));
652
660
  });
653
661
  const instance = tree.root;
654
662
 
@@ -677,7 +685,7 @@ describe('test DeviceDetail', () => {
677
685
  sensor.is_favourite = true;
678
686
 
679
687
  await act(async () => {
680
- tree = await create(<DeviceDetail account={account} route={route} />);
688
+ tree = await create(wrapComponent(account, route));
681
689
  });
682
690
  const instance = tree.root;
683
691