@eohjsc/react-native-smart-city 0.5.8 → 0.6.0-rc1

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 (304) hide show
  1. package/README.md +1 -1
  2. package/android/build.gradle +8 -10
  3. package/package.json +52 -69
  4. package/src/commons/Action/__test__/ItemQuickAction.test.js +2 -2
  5. package/src/commons/ActionGroup/NumberUpDownActionTemplate.js +3 -3
  6. package/src/commons/ActionGroup/OnOffSmartLock/AutoLock/ButtonWrapper.js +3 -3
  7. package/src/commons/ActionGroup/OnOffSmartLock/PasscodeList/__test__/index.test.js +3 -3
  8. package/src/commons/ActionGroup/OnOffSmartLock/PasscodeList/index.js +3 -3
  9. package/src/commons/ActionGroup/OnOffSmartLock/SetupGeneratePasscode/ButtonWrapper.js +2 -2
  10. package/src/commons/ActionGroup/OnOffSmartLock/SetupGeneratePasscode/__test__/index.test.js +0 -15
  11. package/src/commons/ActionGroup/OnOffTemplate/OnOffSimpleTemplate.js +2 -2
  12. package/src/commons/ActionGroup/OptionsDropdownActionTemplate.js +2 -2
  13. package/src/commons/ActionGroup/SmartTiviActionTemplate/SmartTiviActionTemplate.js +2 -2
  14. package/src/commons/ActionGroup/SmartTiviActionTemplate/component/CircleButton.js +5 -5
  15. package/src/commons/ActionGroup/SmartTiviActionTemplate/component/ControlPlay.js +3 -3
  16. package/src/commons/ActionGroup/TerminalBoxTemplate.js +2 -2
  17. package/src/commons/ActionGroup/TextBoxTemplate.js +2 -2
  18. package/src/commons/ActionGroup/ThreeButtonTemplate/__test__/ThreeButtonTemplate.test.js +4 -4
  19. package/src/commons/ActionGroup/TimerActionTemplate.js +3 -4
  20. package/src/commons/ActionGroup/TwoButtonTemplate/index.js +2 -2
  21. package/src/commons/ActionGroup/__test__/NumberUpDownTemplate.test.js +2 -9
  22. package/src/commons/ActionGroup/__test__/OnOffButtonTemplate.test.js +4 -11
  23. package/src/commons/ActionGroup/__test__/OnOffSmartLock.test.js +2 -9
  24. package/src/commons/ActionGroup/__test__/OnOffTemplate.test.js +4 -18
  25. package/src/commons/ActionGroup/__test__/OneBigButtonTemplate.test.js +2 -2
  26. package/src/commons/ActionGroup/__test__/OptionsDropdownTemplate.test.js +1 -8
  27. package/src/commons/ActionGroup/__test__/StatesGridActionTemplate.test.js +0 -7
  28. package/src/commons/ActionGroup/__test__/SwitchButtonTemplate.test.js +4 -15
  29. package/src/commons/ActionGroup/__test__/TerminalBoxTemplate.test.js +0 -7
  30. package/src/commons/ActionGroup/__test__/TextBoxTemplate.test.js +1 -8
  31. package/src/commons/ActionGroup/__test__/TimerActionTemplate.test.js +1 -8
  32. package/src/commons/ActionGroup/__test__/TimerActionTemplateWithutConfigValue.test.js +1 -8
  33. package/src/commons/ActionGroup/__test__/TwoButtonTemplate.test.js +2 -9
  34. package/src/commons/ActionGroup/__test__/index.test.js +14 -21
  35. package/src/commons/ActionTemplate/__test__/index.test.js +2 -0
  36. package/src/commons/ActionTemplate/__test__/utils.js +21 -0
  37. package/src/commons/ActionTemplate/index.js +1 -2
  38. package/src/commons/BackDefault/index.js +2 -2
  39. package/src/commons/ButtonPopup/index.js +2 -2
  40. package/src/commons/Dashboard/MyPinnedSharedUnit/__test__/MyPinnedSharedUnit.test.js +1 -12
  41. package/src/commons/Dashboard/MyUnit/__test__/MyUnit.test.js +27 -20
  42. package/src/commons/Dashboard/MyUnit/index.js +0 -1
  43. package/src/commons/DateTimeRangeChange/DateTimeButton.js +2 -2
  44. package/src/commons/Device/ConnectedViewHeader.js +2 -2
  45. package/src/commons/Device/DisconnectedView.js +2 -2
  46. package/src/commons/Device/Emergency/EmergencyDetail.js +3 -3
  47. package/src/commons/Device/Emergency/__test__/EmergencyDetail.test.js +2 -2
  48. package/src/commons/Device/FlatListItems.js +3 -3
  49. package/src/commons/Device/Hanet/ItemHanetDevice.js +3 -3
  50. package/src/commons/Device/Hanet/ItemHanetDevice.test.js +3 -11
  51. package/src/commons/Device/HorizontalBarChart.js +1 -1
  52. package/src/commons/Device/ItemAddNew/index.js +2 -2
  53. package/src/commons/Device/ItemDevice.js +2 -2
  54. package/src/commons/Device/PowerConsumptionChart.js +154 -0
  55. package/src/commons/Device/SonosSpeaker/index.js +3 -3
  56. package/src/commons/Device/WaterPurifierStatus/AlertStatusMachine.js +2 -2
  57. package/src/commons/Device/WaterQualitySensor/QualityIndicatorsItem.js +2 -6
  58. package/src/commons/DisplayChecking/index.js +2 -2
  59. package/src/commons/EmergencyButton/AlertSendConfirm.js +2 -2
  60. package/src/commons/EmergencyButton/AlertSent.js +2 -2
  61. package/src/commons/FieldTemplate/ChooseUserField/index.js +2 -2
  62. package/src/commons/Form/CurrencyInput.js +1 -15
  63. package/src/commons/Header/HeaderCustom.js +3 -3
  64. package/src/commons/HeaderAni/index.js +2 -2
  65. package/src/commons/IconComponent/index.js +3 -3
  66. package/src/commons/MenuActionAddnew/__test__/MenuActionAddNew.test.js +1 -1
  67. package/src/commons/MenuActionList/__test__/MenuActionList.test.js +1 -0
  68. package/src/commons/NavBar/index.js +2 -2
  69. package/src/commons/OneTapTemplate/NumberUpDownActionTemplate.js +3 -3
  70. package/src/commons/PreventAccess/__test__/PreventAccess.test.js +1 -13
  71. package/src/commons/Processing/__test__/Connecting.test.js +3 -14
  72. package/src/commons/SearchLocation/index.js +2 -2
  73. package/src/commons/SelectActionCard/index.js +2 -2
  74. package/src/commons/SelectSubUnit/__test__/SelectSubUnit.test.js +1 -18
  75. package/src/commons/SelectSubUnit/index.js +2 -2
  76. package/src/commons/SelectUnit/__test__/SelectUnit.test.js +1 -13
  77. package/src/commons/Sharing/BtnRemoveMember.js +2 -2
  78. package/src/commons/Sharing/StationDevicePermissions.js +2 -2
  79. package/src/commons/Sharing/WrapHeaderScrollable.js +1 -1
  80. package/src/commons/Sharing/__test__/DevicePermissionsCheckbox.test.js +1 -1
  81. package/src/commons/SubUnit/DeviceTemplate/ConfigAndEvaluation/ConfigAndEvaluation.js +2 -2
  82. package/src/commons/SubUnit/DeviceTemplate/ConfigValue/ConfigValue.js +2 -2
  83. package/src/commons/SubUnit/DeviceTemplate/EvaluationOverConfig/EvaluationOverConfig.js +2 -2
  84. package/src/commons/SubUnit/Item/index.js +2 -2
  85. package/src/commons/SubUnit/OneTap/ItemOneTap.js +2 -2
  86. package/src/commons/SubUnit/OneTap/__test__/SubUnitAutomate.test.js +11 -8
  87. package/src/commons/SubUnit/__test__/Favorites.test.js +1 -13
  88. package/src/commons/SubUnit/__test__/ShortDetail.test.js +5 -16
  89. package/src/commons/Tabbar/__test__/index.test.js +0 -11
  90. package/src/commons/Unit/HeaderUnit/index.js +4 -4
  91. package/src/commons/Unit/SharedUnit.js +5 -5
  92. package/src/commons/Unit/__test__/HeaderUnit.test.js +3 -15
  93. package/src/commons/Unit/__test__/SharedUnit.test.js +94 -105
  94. package/src/commons/UnitSummary/AirQuality/SegmentedRoundDisplay/index.js +11 -30
  95. package/src/commons/UnitSummary/ConfigHistoryChart/index.js +6 -61
  96. package/src/commons/Widgets/IFrame/IFrame.js +54 -0
  97. package/src/commons/Widgets/IFrame/IFrameStyles.js +35 -0
  98. package/src/commons/Widgets/IFrame/__tests__/IFrame.test.js +74 -0
  99. package/src/commons/Widgets/IFrame/index.js +0 -0
  100. package/src/commons/Widgets/IFrameWithConfig/IFrameWithConfig.js +163 -0
  101. package/src/commons/Widgets/IFrameWithConfig/IFrameWithConfigStyles.js +9 -0
  102. package/src/commons/Widgets/IFrameWithConfig/__tests__/IFrameWithConfig.test.js +284 -0
  103. package/src/commons/Widgets/IFrameWithConfig/index.js +0 -0
  104. package/src/commons/Widgets/Widget.js +0 -0
  105. package/src/commons/Widgets/index.js +0 -0
  106. package/src/configs/Constants.js +5 -0
  107. package/src/hooks/Common/__test__/useAndroidTranslucentStatusBar.test.js +4 -15
  108. package/src/hooks/Common/useDevicesStatus.js +42 -24
  109. package/src/hooks/IoT/__test__/useRemoteControl.test.js +1 -1
  110. package/src/hooks/IoT/__test__/useWatchConfigs.test.js +0 -7
  111. package/src/iot/RemoteControl/HomeAssistant.js +1 -1
  112. package/src/iot/RemoteControl/__test__/Bluetooth.test.js +234 -232
  113. package/src/navigations/AutomateStack.js +2 -2
  114. package/src/navigations/EmergencyContactsStack.js +2 -2
  115. package/src/navigations/SharedStack.js +2 -2
  116. package/src/navigations/UnitStack.js +2 -2
  117. package/src/screens/ActivityLog/hooks/index.js +7 -4
  118. package/src/screens/ActivityLog/index.js +2 -2
  119. package/src/screens/AddCommon/__test__/SelectSubUnit.test.js +4 -21
  120. package/src/screens/AddCommon/__test__/SelectUnit.test.js +7 -19
  121. package/src/screens/AddLocationMaps/__test__/index.test.js +3 -13
  122. package/src/screens/AddLocationMaps/index.js +4 -4
  123. package/src/screens/AddNewDevice/__test__/AddNewDevice.test.js +3 -20
  124. package/src/screens/AddNewGateway/PlugAndPlay/__test__/FirstWarning.test.js +11 -18
  125. package/src/screens/AddNewGateway/PlugAndPlay/__test__/ZigbeeDeviceConnectGuide.test.js +4 -21
  126. package/src/screens/AddNewGateway/RenameNewDevices.js +2 -2
  127. package/src/screens/AddNewGateway/__test__/AddNewGateway.test.js +3 -3
  128. package/src/screens/AddNewGateway/__test__/ConnectingModbusDevice.test.js +0 -17
  129. package/src/screens/AddNewGateway/__test__/ConnectingWifiDevice.test.js +4 -19
  130. package/src/screens/AddNewGateway/__test__/ConnectingWifiGuide.test.js +3 -15
  131. package/src/screens/AddNewGateway/__test__/ConnectingZigbeeDevice.test.js +31 -51
  132. package/src/screens/AddNewGateway/__test__/RenameNewDevices.test.js +9 -22
  133. package/src/screens/AddNewGateway/__test__/ScanGatewayQR.test.js +12 -19
  134. package/src/screens/AddNewGateway/__test__/ScanModbusQR.test.js +6 -16
  135. package/src/screens/AddNewGateway/__test__/ScanWifiDeviceQR.test.js +4 -15
  136. package/src/screens/AddNewGateway/__test__/SelectDeviceSubUnit.test.js +3 -3
  137. package/src/screens/AddNewGateway/__test__/SelectDeviceType.test.js +18 -10
  138. package/src/screens/AddNewGateway/__test__/SelectDeviceUnit.test.js +1 -1
  139. package/src/screens/AddNewGateway/__test__/SelectModbusGateway.test.js +12 -9
  140. package/src/screens/AddNewGateway/__test__/SelectZigbeeGateway.test.js +12 -9
  141. package/src/screens/AddNewGateway/__test__/ShareWifiPassword.test.js +7 -21
  142. package/src/screens/AddNewGateway/hooks/__Tests__/index.test.js +1 -10
  143. package/src/screens/AllGateway/DetailConfigActionInternal/__test__/index.test.js +0 -20
  144. package/src/screens/AllGateway/DetailConfigActionModbus/__test__/index.test.js +7 -24
  145. package/src/screens/AllGateway/DeviceGatewayInfo/__test__/index.test.js +0 -17
  146. package/src/screens/AllGateway/DeviceInternalDetail/__test__/index.test.js +84 -100
  147. package/src/screens/AllGateway/DeviceModbusDetail/__test__/index.test.js +64 -82
  148. package/src/screens/AllGateway/DeviceZigbeeDetail/__test__/index.test.js +36 -55
  149. package/src/screens/AllGateway/GatewayConnectionMethods/__test__/index.test.js +9 -18
  150. package/src/screens/AllGateway/GatewayDetail/__test__/index.test.js +10 -37
  151. package/src/screens/AllGateway/GatewayInfo/__test__/index.test.js +7 -32
  152. package/src/screens/AllGateway/__test__/index.test.js +1 -14
  153. package/src/screens/AllGateway/components/GatewayItem/__test__/index.test.js +0 -12
  154. package/src/screens/AllGateway/components/TabPaneCT/__test__/index.test.js +1 -13
  155. package/src/screens/AllGateway/components/TabPaneCT/index.js +1 -1
  156. package/src/screens/AllGateway/hooks/__test__/index.test.js +1 -8
  157. package/src/screens/AllGateway/test-utils.js +1 -1
  158. package/src/screens/Automate/AddNewAction/NewActionWrapper.js +2 -2
  159. package/src/screens/Automate/AddNewAction/SetupConfigCondition.js +27 -28
  160. package/src/screens/Automate/AddNewAction/__test__/ChooseAction.test.js +3 -3
  161. package/src/screens/Automate/AddNewAction/__test__/ChooseConfig.test.js +8 -5
  162. package/src/screens/Automate/AddNewAction/__test__/SelectControlDevices.test.js +2 -2
  163. package/src/screens/Automate/AddNewAction/__test__/SelectMonitorDevices.test.js +1 -18
  164. package/src/screens/Automate/AddNewAction/__test__/SetupConfigCondition.test.js +17 -15
  165. package/src/screens/Automate/AddNewAutoSmart/__test__/AddNewAutoSmart.test.js +4 -4
  166. package/src/screens/Automate/EditActionsList/__tests__/UpdateActionScript.test.js +38 -55
  167. package/src/screens/Automate/EditActionsList/__tests__/UpdateDelayScript.test.js +0 -18
  168. package/src/screens/Automate/EditActionsList/__tests__/UpdateNotifyScript.test.js +1 -19
  169. package/src/screens/Automate/EditActionsList/__tests__/index.test.js +14 -11
  170. package/src/screens/Automate/OneTap/__test__/AddNewOneTap.test.js +3 -3
  171. package/src/screens/Automate/Scenario/__test__/AddNewOneTap.test.js +2 -2
  172. package/src/screens/Automate/ScriptDetail/Components/AddActionScript.js +2 -2
  173. package/src/screens/Automate/ScriptDetail/__test__/index.test.js +33 -25
  174. package/src/screens/Automate/ScriptDetail/index.js +5 -6
  175. package/src/screens/Automate/SetSchedule/__test__/index.test.js +4 -4
  176. package/src/screens/Automate/SetSchedule/components/RowItem.js +3 -3
  177. package/src/screens/Automate/__test__/MultiUnits.test.js +5 -5
  178. package/src/screens/Automate/__test__/index.test.js +6 -6
  179. package/src/screens/Automate/index.js +2 -2
  180. package/src/screens/ChangePosition/__test__/index.test.js +1 -14
  181. package/src/screens/ConfirmUnitDeletion/__test__/ConfirmUnitDeletion.test.js +0 -12
  182. package/src/screens/Device/EditDevice/__test__/EditDevice.test.js +1 -11
  183. package/src/screens/Device/EditDevice/index.js +2 -2
  184. package/src/screens/Device/__test__/detail.test.js +11 -11
  185. package/src/screens/Device/__test__/sensorDisplayItem.test.js +3 -15
  186. package/src/screens/Device/components/SensorDisplayItem.js +23 -5
  187. package/src/screens/Device/components/__test__/VisualChart.test.js +2 -9
  188. package/src/screens/Device/detail.js +11 -10
  189. package/src/screens/Drawer/Drawer.test.js +3 -11
  190. package/src/screens/Drawer/index.js +3 -4
  191. package/src/screens/EmergencyContacts/EmergencyContactsList.js +4 -8
  192. package/src/screens/EmergencyContacts/EmergencyContactsSelectContacts.js +3 -3
  193. package/src/screens/EmergencyContacts/__test__/EmergencyContactAddNew.test.js +4 -17
  194. package/src/screens/EmergencyContacts/__test__/EmergencyContactList.test.js +3 -14
  195. package/src/screens/EmergencyContacts/__test__/EmergencyContactsSelectContacts.test.js +0 -10
  196. package/src/screens/EmergencySetting/components/DropDownItem.js +2 -2
  197. package/src/screens/EnterPassword/__test__/EnterPassword.test.js +4 -17
  198. package/src/screens/GuestInfo/__test__/index.test.js +0 -11
  199. package/src/screens/GuestInfo/components/RowGuestInfo.js +2 -2
  200. package/src/screens/GuestInfo/index.js +2 -2
  201. package/src/screens/HanetCamera/Detail.js +2 -2
  202. package/src/screens/HanetCamera/ManageAccess.js +3 -4
  203. package/src/screens/HanetCamera/MemberInfo.js +4 -4
  204. package/src/screens/HanetCamera/__test__/CaptureFaceID.test.js +2 -16
  205. package/src/screens/HanetCamera/__test__/Detail.test.js +1 -12
  206. package/src/screens/HanetCamera/__test__/ManageAccess.test.js +5 -16
  207. package/src/screens/HanetCamera/__test__/MemberInfo.test.js +5 -18
  208. package/src/screens/HanetCamera/components/RequestFaceIDPopup.js +2 -2
  209. package/src/screens/ManageAccess/__test__/ManageAccess.test.js +3 -19
  210. package/src/screens/ManageAccess/index.js +3 -3
  211. package/src/screens/MoveToAnotherSubUnit/__test__/index.test.js +5 -5
  212. package/src/screens/Notification/__test__/NotificationItem.test.js +9 -19
  213. package/src/screens/Notification/index.js +3 -3
  214. package/src/screens/PlayBackCamera/Styles/index.js +2 -4
  215. package/src/screens/PlayBackCamera/Timer.js +65 -47
  216. package/src/screens/PlayBackCamera/__test__/index.test.js +32 -33
  217. package/src/screens/PlayBackCamera/index.js +115 -112
  218. package/src/screens/ScanChipQR/components/QRScan/__test__/QRScan.test.js +0 -11
  219. package/src/screens/ScanChipQR/components/QRScan/index.js +3 -3
  220. package/src/screens/SelectUnit/__test__/index.test.js +1 -21
  221. package/src/screens/SelectUnit/index.js +2 -2
  222. package/src/screens/SharedUnit/TabHeader.js +2 -2
  223. package/src/screens/Sharing/Components/EndDevice.js +3 -3
  224. package/src/screens/Sharing/UnitMemberList.js +2 -2
  225. package/src/screens/Sharing/__test__/InfoMemberUnit.test.js +9 -4
  226. package/src/screens/Sharing/__test__/SelectShareDevice.test.js +2 -15
  227. package/src/screens/Sharing/__test__/SelectUser.test.js +2 -22
  228. package/src/screens/Sharing/__test__/UnitMemberList.test.js +2 -2
  229. package/src/screens/Sharing/__test__/UpdateShareDevice.test.js +4 -17
  230. package/src/screens/Sharing/hooks/__test__/index.test.js +2 -13
  231. package/src/screens/SmartAccount/Connecting/index.js +0 -2
  232. package/src/screens/SmartAccount/ListDevice/__test__/ListDevice.test.js +3 -18
  233. package/src/screens/SmartAccount/SuccessfullyConnected/__test__/SuccessfullyConnected.test.js +11 -21
  234. package/src/screens/SmartAccount/SuccessfullyConnected/index.js +3 -4
  235. package/src/screens/SmartAccount/__test__/Connecting.test.js +30 -36
  236. package/src/screens/SmartAccount/__test__/SmartAccount.test.js +12 -21
  237. package/src/screens/SmartIr/__test__/GroupButtonByType.test.js +7 -17
  238. package/src/screens/SmartIr/__test__/SelectBrand.test.js +1 -11
  239. package/src/screens/SmartIr/__test__/SelectDeviceType.test.js +1 -12
  240. package/src/screens/SmartIr/__test__/SmartIr.test.js +3 -11
  241. package/src/screens/SmartIr/components/GroupButtonByType/GroupButtonByType.js +3 -3
  242. package/src/screens/SmartIr/components/SelectBrand.js +2 -2
  243. package/src/screens/SubUnit/AddSubUnit.js +1 -0
  244. package/src/screens/SubUnit/EditSubUnit.js +3 -2
  245. package/src/screens/SubUnit/ManageSubUnit.js +4 -5
  246. package/src/screens/SubUnit/__test__/AddSubUnit.test.js +9 -31
  247. package/src/screens/SubUnit/__test__/Detail.test.js +4 -28
  248. package/src/screens/SubUnit/__test__/EditSubUnit.test.js +12 -30
  249. package/src/screens/SubUnit/__test__/ManageSubUnit.test.js +2 -2
  250. package/src/screens/SubUnit/hooks/__test__/useManageSubUnit.test.js +0 -12
  251. package/src/screens/SyncLGDevice/__test__/AddLGDevice.test.js +7 -20
  252. package/src/screens/Template/__test__/EditTemplate.test.js +2 -13
  253. package/src/screens/Template/__test__/GatewayList.test.js +0 -9
  254. package/src/screens/Template/__test__/detail.test.js +4 -4
  255. package/src/screens/Template/__test__/index.test.js +1 -12
  256. package/src/screens/Template/detail.js +2 -2
  257. package/src/screens/Unit/SelectAddToFavorites.js +2 -2
  258. package/src/screens/Unit/SelectAddress.js +4 -4
  259. package/src/screens/Unit/SmartAccountItem.js +2 -2
  260. package/src/screens/Unit/Summaries.js +26 -25
  261. package/src/screens/Unit/__test__/AddMenu.test.js +5 -2
  262. package/src/screens/Unit/__test__/CheckSendEmail.test.js +0 -12
  263. package/src/screens/Unit/__test__/ChooseLocation.test.js +1 -4
  264. package/src/screens/Unit/__test__/Detail.test.js +5 -5
  265. package/src/screens/Unit/__test__/ManageUnit.test.js +2 -17
  266. package/src/screens/Unit/__test__/MoreMenu.test.js +1 -11
  267. package/src/screens/Unit/__test__/SelectAddToFavorites.test.js +3 -14
  268. package/src/screens/Unit/__test__/SelectAddress.test.js +4 -17
  269. package/src/screens/Unit/__test__/SmartAccount.test.js +14 -11
  270. package/src/screens/Unit/__test__/SmartAccountItem.test.js +0 -11
  271. package/src/screens/Unit/__test__/Summaries.test.js +2 -14
  272. package/src/screens/Unit/components/AutomateScript/index.js +2 -2
  273. package/src/screens/Unit/components/ButtonWrapper/index.js +3 -4
  274. package/src/screens/Unit/components/Header/index.js +3 -3
  275. package/src/screens/Unit/components/SharedUnit/index.js +5 -5
  276. package/src/screens/Unit/components/__test__/Header.test.js +1 -14
  277. package/src/screens/Unit/components/__test__/MyUnitDevice.test.js +1 -11
  278. package/src/screens/Unit/components/__test__/SharedUnit.test.js +1 -11
  279. package/src/screens/UnitSummary/__test__/index.test.js +51 -17
  280. package/src/screens/UnitSummary/components/3PPowerConsumption/__test__/3PPowerConsumption.test.js +0 -12
  281. package/src/screens/UnitSummary/components/3PPowerConsumption/index.js +10 -23
  282. package/src/screens/UnitSummary/components/AirQuality/__test__/index.test.js +1 -7
  283. package/src/screens/UnitSummary/components/AirQuality/index.js +3 -3
  284. package/src/screens/UnitSummary/components/PowerConsumption/__test__/PowerConsumption.test.js +38 -14
  285. package/src/screens/UnitSummary/components/PowerConsumption/index.js +21 -30
  286. package/src/screens/UnitSummary/components/RunningDevices/__test__/index.test.js +1 -16
  287. package/src/screens/UnitSummary/components/Temperature/index.js +5 -1
  288. package/src/screens/UnitSummary/components/UvIndex/__test__/index.test.js +0 -8
  289. package/src/screens/UnitSummary/components/UvIndex/index.js +2 -2
  290. package/src/screens/UnitSummary/components/WaterQuality/Item/index.js +2 -2
  291. package/src/screens/UnitSummary/components/WaterQuality/__test__/index.test.js +14 -18
  292. package/src/screens/UnitSummary/index.js +4 -8
  293. package/src/utils/Converter/__test__/timer.test.js +8 -0
  294. package/src/utils/Functions/preloadImages.js +13 -14
  295. package/src/utils/Storage.js +1 -1
  296. package/src/commons/Device/HistoryChart.js +0 -225
  297. package/src/commons/Device/WindSpeed/LinearChart/__test__/LinearChart.test.js +0 -48
  298. package/src/commons/Device/WindSpeed/LinearChart/index.js +0 -155
  299. package/src/commons/UnitSummary/ConfigHistoryChart/__test__/ConfigHistoryChart.test.js +0 -289
  300. package/src/screens/Device/__test__/DetailHistoryChart.test.js +0 -69
  301. package/src/screens/Device/components/DetailHistoryChart.js +0 -118
  302. package/src/screens/UnitSummary/components/Temperature/ChartAverage/index.js +0 -62
  303. package/src/screens/UnitSummary/components/Temperature/__test__/ChartAverage.test.js +0 -17
  304. package/src/utils/dateHelper/getTickValues.js +0 -22
@@ -1,225 +0,0 @@
1
- import React, { memo, useCallback, useState, useMemo, useEffect } from 'react';
2
- import { StyleSheet, View, Dimensions } from 'react-native';
3
- import moment from 'moment';
4
- import { useTranslations } from '../../hooks/Common/useTranslations';
5
-
6
- import { Colors } from '../../configs';
7
- import Text from '../../commons/Text';
8
- import Button from '../../commons/Button';
9
- import CurrencyInput from '../../commons/Form/CurrencyInput';
10
- import DateTimeRangeChange from '../DateTimeRangeChange';
11
- import HorizontalBarChart from './HorizontalBarChart';
12
- import LinearChart from './LinearChart';
13
- import ChartAggregationOption from '../ChartAggregationOption';
14
- import { formatMoney } from '../../utils/Utils';
15
-
16
- const { width } = Dimensions.get('window');
17
-
18
- const HistoryChart = memo(
19
- ({
20
- datas,
21
- chartConfig,
22
- setChartConfig,
23
- style,
24
- formatType,
25
- startDate,
26
- endDate,
27
- setEndDate,
28
- setStartDate,
29
- groupBy,
30
- setGroupBy,
31
- configuration = {},
32
- }) => {
33
- const t = useTranslations();
34
- const [price, setPrice] = useState(null);
35
-
36
- const [eventPicker, setEventPicker] = useState({
37
- showModalEnd: false,
38
- showModalStart: false,
39
- startTime: startDate ? startDate : moment().subtract(1, 'day'),
40
- endTime: endDate ? endDate : moment(),
41
- });
42
-
43
- const selectStart = useCallback((date) => {
44
- setEventPicker((state) => {
45
- if (typeof date === 'number') {
46
- return state;
47
- }
48
- if (moment(date) < state.endTime) {
49
- return {
50
- ...state,
51
- showModalStart: false,
52
- startTime: date ? moment(date) : moment().valueOf(),
53
- };
54
- } else {
55
- return {
56
- ...state,
57
- showModalStart: false,
58
- startTime: date ? moment(date) : moment().valueOf(),
59
- endTime: date ? moment(date).add(1, 'day') : moment().valueOf(),
60
- };
61
- }
62
- });
63
- }, []);
64
-
65
- const selectEnd = useCallback((date) => {
66
- setEventPicker((state) => {
67
- if (typeof date === 'number') {
68
- return state;
69
- }
70
- if (moment(date).add(1, 'day') > state.startTime) {
71
- return {
72
- ...state,
73
- showModalEnd: false,
74
- endTime: date ? moment(date) : moment().valueOf(),
75
- };
76
- }
77
- return {
78
- ...state,
79
- showModalEnd: false,
80
- startTime: date ? moment(date).add(-1, 'day') : moment().valueOf(),
81
- endTime: date ? moment(date) : moment().valueOf(),
82
- };
83
- });
84
- }, []);
85
-
86
- const onCalculateCost = useCallback(() => {
87
- setChartConfig((config) => ({
88
- ...config,
89
- price,
90
- }));
91
- }, [setChartConfig, price]);
92
-
93
- const totalPrice = useMemo(() => {
94
- if (configuration.config !== 'power_consumption') {
95
- return null;
96
- }
97
- const { price: chartPrice } = chartConfig;
98
- if (chartPrice === '' || isNaN(chartPrice)) {
99
- return null;
100
- }
101
- const sum = datas[0].data.reduce((a, b) => a + b.y, 0);
102
- const roundedSum = sum * chartPrice;
103
- return roundedSum.toFixed();
104
- }, [configuration, datas, chartConfig]);
105
-
106
- const renderChart = useMemo(() => {
107
- if (configuration.type === 'line_chart') {
108
- return (
109
- <View style={styles.chartContainer}>
110
- <View style={[styles.chart, { width: width }]}>
111
- <LinearChart datas={datas} />
112
- </View>
113
- </View>
114
- );
115
- }
116
- if (configuration.type === 'horizontal_bar_chart') {
117
- return <HorizontalBarChart datas={datas} config={chartConfig} />;
118
- }
119
- }, [chartConfig, configuration.type, datas]);
120
-
121
- useEffect(() => {
122
- setStartDate(eventPicker.startTime);
123
- }, [eventPicker.startTime, setStartDate]);
124
-
125
- useEffect(() => {
126
- setEndDate(eventPicker.endTime);
127
- }, [eventPicker.endTime, setEndDate]);
128
-
129
- return (
130
- <View style={style}>
131
- <View style={styles.historyView}>
132
- <View style={styles.titleHistory}>
133
- <Text size={20} semibold color={Colors.Gray9}>
134
- {t('history')}
135
- </Text>
136
- {configuration.type === 'horizontal_bar_chart' && (
137
- <ChartAggregationOption
138
- groupBy={groupBy}
139
- setGroupBy={setGroupBy}
140
- />
141
- )}
142
- </View>
143
- {!(
144
- configuration.type === 'horizontal_bar_chart' && groupBy !== 'date'
145
- ) && (
146
- <DateTimeRangeChange
147
- startTime={eventPicker.startTime}
148
- selectStart={selectStart}
149
- selectEnd={selectEnd}
150
- endTime={eventPicker.endTime}
151
- formatType={formatType}
152
- />
153
- )}
154
- </View>
155
- {configuration.config === 'power_consumption' && (
156
- <View style={styles.wrapCalculateCost}>
157
- <Text type="H4">
158
- {t('input_price_to_calculate_electricity_cost')}
159
- </Text>
160
- <View style={styles.row}>
161
- <CurrencyInput
162
- value={price}
163
- onChange={setPrice}
164
- minValue={0}
165
- maxValue={100000000}
166
- placeholder={'0'}
167
- onSubmitEditing={onCalculateCost}
168
- />
169
- <Button
170
- type="primary"
171
- title={t('calculate_cost')}
172
- onPress={onCalculateCost}
173
- style={styles.buttonCalculate}
174
- textSemiBold={false}
175
- />
176
- </View>
177
- </View>
178
- )}
179
- {renderChart}
180
- {configuration.config === 'power_consumption' && !!chartConfig.price && (
181
- <Text type="H4">
182
- {t('total_power_price')} <Text bold>{formatMoney(totalPrice)}</Text>
183
- </Text>
184
- )}
185
- </View>
186
- );
187
- }
188
- );
189
-
190
- export default HistoryChart;
191
-
192
- const styles = StyleSheet.create({
193
- historyView: {
194
- paddingTop: 16,
195
- },
196
- titleHistory: {
197
- flexDirection: 'row',
198
- alignItems: 'center',
199
- justifyContent: 'space-between',
200
- },
201
- chartInfo: {
202
- flexDirection: 'row',
203
- justifyContent: 'center',
204
- alignItems: 'center',
205
- },
206
- chartContainer: {
207
- marginLeft: -8,
208
- },
209
- chart: {
210
- height: 300,
211
- },
212
- wrapCalculateCost: {
213
- marginTop: 12,
214
- },
215
- row: {
216
- flexDirection: 'row',
217
- alignItems: 'center',
218
- marginTop: 8,
219
- },
220
- buttonCalculate: {
221
- width: null,
222
- flex: null,
223
- paddingHorizontal: 12,
224
- },
225
- });
@@ -1,48 +0,0 @@
1
- import React from 'react';
2
- import Svg from 'react-native-svg';
3
- import LinearChart from '../';
4
- import renderer, { act } from 'react-test-renderer';
5
- import { SCProvider } from '../../../../../context';
6
- import { mockSCStore } from '../../../../../context/mockStore';
7
-
8
- Date.now = jest.fn(() => 1487076708000);
9
-
10
- const wrapComponent = (chartOptions, datasShow) => (
11
- <SCProvider initState={mockSCStore({})}>
12
- <LinearChart chartOptions={chartOptions} datasShow={datasShow} />
13
- </SCProvider>
14
- );
15
-
16
- describe('Test LinearChart', () => {
17
- let wrapper;
18
-
19
- it('LinearChart render', async () => {
20
- const chartOptions = {
21
- showAll: true,
22
- };
23
- const datasShow = [
24
- {
25
- data: [
26
- {
27
- x: 0,
28
- y: 1,
29
- },
30
- {
31
- x: 1,
32
- y: 2,
33
- },
34
- {
35
- x: 2,
36
- y: 3,
37
- },
38
- ],
39
- },
40
- ];
41
- await act(async () => {
42
- wrapper = renderer.create(wrapComponent(chartOptions, datasShow));
43
- });
44
- const instance = wrapper.root;
45
- const Svgs = instance.findAllByType(Svg);
46
- expect(Svgs).toHaveLength(1);
47
- });
48
- });
@@ -1,155 +0,0 @@
1
- import React, { memo } from 'react';
2
- import Svg, { G } from 'react-native-svg';
3
- import {
4
- VictoryLine,
5
- VictoryAxis,
6
- VictoryScatter,
7
- VictoryTooltip,
8
- } from 'victory-native';
9
- import { useTranslations } from '../../../../hooks/Common/useTranslations';
10
-
11
- import { Colors } from '../../../../configs';
12
- import ChartLoading from '../../../ChartLoading';
13
- import ValueBalloon from '../../../Device/WindSpeed/LinearChart/ValueBalloon';
14
- import { getMaxValueIndex } from '../../../../utils/chartHelper/getMaxValueIndex';
15
- import getTickValues from '../../../../utils/dateHelper/getTickValues';
16
-
17
- const LinearChart = memo(
18
- ({
19
- startTime,
20
- endTime,
21
- datasShow,
22
- configuration,
23
- datasColor,
24
- chartOptions,
25
- }) => {
26
- const t = useTranslations();
27
- const datas = chartOptions.showAll
28
- ? datasShow
29
- : datasShow.filter((item, index) => index === chartOptions.index);
30
- if (!datasShow[0].data) {
31
- return <ChartLoading />;
32
- }
33
- if (!datasShow[0].data.length) {
34
- return <ChartLoading message={t('no_data')} />;
35
- }
36
- const chartTick = getTickValues(datas[0], configuration).stringArr;
37
- const maxValue = getMaxValueIndex(datas[0].data);
38
-
39
- return (
40
- <Svg width={'100%'} height={300} style>
41
- <G x={-12} y={-12}>
42
- <VictoryAxis
43
- dependentAxis
44
- domain={[0, maxValue.max.y * 1.2]}
45
- offsetX={50}
46
- orientation="left"
47
- standalone={false}
48
- style={styleVerticalAxis}
49
- />
50
- <VictoryAxis
51
- crossAxis
52
- scale="time"
53
- standalone={false}
54
- style={styleHorizontalAxis}
55
- tickValues={chartTick}
56
- />
57
- {datas.map((item, index) => {
58
- const tickValues = getTickValues(item).arr;
59
- const maxValueLine = getMaxValueIndex(item.data);
60
- return (
61
- <G key={index.toString()}>
62
- <VictoryLine
63
- data={item.data}
64
- domain={{
65
- x: [tickValues[0], tickValues[tickValues.length - 1]],
66
- y: [0, maxValueLine.max.y * 1.2],
67
- }}
68
- style={{
69
- data: { stroke: item.color },
70
- }}
71
- interpolation="monotoneX"
72
- scale={{ x: 'time', y: 'linear' }}
73
- standalone={false}
74
- />
75
- </G>
76
- );
77
- })}
78
- {datas.map((item, index) => {
79
- const scatterValues = getTickValues(item).stringDataArr;
80
- const maxValueLine = getMaxValueIndex(item.data);
81
- return (
82
- <G key={index}>
83
- <VictoryScatter
84
- standalone={false}
85
- data={scatterValues}
86
- labels={(datum) => {
87
- if (item.measure === 'pH') {
88
- return `${item.measure} ${datum.y.toString()}`;
89
- }
90
- return `${datum.y.toString()} ${item.measure}`;
91
- }}
92
- labelComponent={
93
- <VictoryTooltip
94
- flyoutComponent={<ValueBalloon />}
95
- renderInPortal={false}
96
- />
97
- }
98
- domain={{ y: [0, maxValueLine.max.y * 1.2] }}
99
- samples={25}
100
- size={5}
101
- style={{ ...styleScatter, data: { fill: item.color } }}
102
- />
103
- </G>
104
- );
105
- })}
106
- </G>
107
- </Svg>
108
- );
109
- }
110
- );
111
-
112
- export default LinearChart;
113
-
114
- const styleVerticalAxis = {
115
- axis: { stroke: Colors.Gray4, strokeWidth: 1 },
116
- ticks: {
117
- size: 5,
118
- stroke: 'black',
119
- strokeWidth: 0,
120
- },
121
- tickLabels: {
122
- fill: Colors.Gray8,
123
- fontFamily: 'SFProDisplay-Regular',
124
- fontSize: 10,
125
- },
126
- grid: {
127
- fill: 'none',
128
- stroke: Colors.Gray4,
129
- strokeDasharray: '5,5',
130
- pointerEvents: 'painted',
131
- },
132
- };
133
-
134
- const styleHorizontalAxis = {
135
- axis: { stroke: 'black', strokeWidth: 0 },
136
- ticks: {
137
- size: 10,
138
- stroke: 'black',
139
- strokeWidth: 0,
140
- },
141
- tickLabels: {
142
- fill: Colors.Gray8,
143
- fontFamily: 'SFProDisplay-Regular',
144
- fontSize: 10,
145
- },
146
- };
147
-
148
- const styleScatter = {
149
- labels: {
150
- fill: Colors.White,
151
- padding: 14,
152
- fontFamily: 'SFProDisplay-Regular',
153
- fontSize: 12,
154
- },
155
- };
@@ -1,289 +0,0 @@
1
- import React from 'react';
2
- import { act, create } from 'react-test-renderer';
3
- import MockAdapter from 'axios-mock-adapter';
4
-
5
- import ConfigHistoryChart from '../';
6
- import api from '../../../../utils/Apis/axios';
7
- import { mockSCStore } from '../../../../context/mockStore';
8
- import { SCProvider } from '../../../../context';
9
- import API from '../../../../configs/API';
10
- import { getPusher } from '../../../../utils/Pusher';
11
- import Highcharts from '../../../Highcharts';
12
-
13
- const mock = new MockAdapter(api.axiosInstance);
14
-
15
- const wrapComponent = (configs = []) => (
16
- <SCProvider initState={mockSCStore({})}>
17
- <ConfigHistoryChart configs={configs} />
18
- </SCProvider>
19
- );
20
-
21
- describe('Test HistoryChart', () => {
22
- let tree;
23
-
24
- beforeAll(() => {
25
- jest.useFakeTimers();
26
- });
27
-
28
- beforeEach(() => {
29
- getPusher().subscribe.mockClear();
30
- });
31
-
32
- const assertChartData = async (data) => {
33
- const chart = tree.root.findByType(Highcharts);
34
- expect(chart.props.options.series[0].data).toEqual(
35
- data.map((i) => [i.x, i.y])
36
- );
37
- };
38
-
39
- it('Test render null', async () => {
40
- await act(async () => {
41
- tree = create(wrapComponent());
42
- });
43
- const instance = tree.root;
44
- const HistoryCharts = instance.findAllByType(Highcharts);
45
- expect(HistoryCharts).toHaveLength(0);
46
- });
47
-
48
- it('Test render chart empty data', async () => {
49
- const response = {
50
- data: {
51
- configs: [
52
- {
53
- id: 1,
54
- head: [],
55
- tail: [],
56
- middle: {
57
- ready: [],
58
- not_ready: [],
59
- channel: '',
60
- },
61
- },
62
- ],
63
- },
64
- };
65
- mock.onGet(API.CONFIG.DISPLAY_HISTORY_V3()).reply(200, response.data);
66
- const configs = [{ id: 1 }];
67
- await act(async () => {
68
- tree = await create(wrapComponent(configs));
69
- jest.runAllTimers();
70
- });
71
- await assertChartData([]);
72
- });
73
-
74
- it('Test render chart empty head data', async () => {
75
- const response = {
76
- data: {
77
- configs: [
78
- {
79
- id: 1,
80
- head: [],
81
- tail: [{ x: 1, y: 2 }],
82
- middle: {
83
- ready: [],
84
- not_ready: [],
85
- channel: '',
86
- },
87
- },
88
- ],
89
- },
90
- };
91
- mock.onGet(API.CONFIG.DISPLAY_HISTORY_V3()).reply(200, response.data);
92
- const configs = [{ id: 1 }];
93
- await act(async () => {
94
- tree = await create(wrapComponent(configs));
95
- jest.runAllTimers();
96
- });
97
- await assertChartData([{ x: 1, y: 2 }]);
98
- });
99
-
100
- it('Test render chart empty tail data', async () => {
101
- const response = {
102
- data: {
103
- configs: [
104
- {
105
- id: 1,
106
- head: [{ x: 1, y: 2 }],
107
- tail: [],
108
- middle: {
109
- ready: [],
110
- not_ready: [],
111
- channel: '',
112
- },
113
- },
114
- ],
115
- },
116
- };
117
- mock.onGet(API.CONFIG.DISPLAY_HISTORY_V3()).reply(200, response.data);
118
- const configs = [{ id: 1 }];
119
- await act(async () => {
120
- tree = await create(wrapComponent(configs));
121
- jest.runAllTimers();
122
- });
123
- await assertChartData([{ x: 1, y: 2 }]);
124
- });
125
-
126
- it('Test render chart merge head and tail data', async () => {
127
- const response = {
128
- data: {
129
- configs: [
130
- {
131
- id: 1,
132
- head: [{ x: 1, y: 2 }],
133
- tail: [{ x: 2, y: 3 }],
134
- middle: {
135
- ready: [],
136
- not_ready: [],
137
- channel: '',
138
- },
139
- },
140
- ],
141
- },
142
- };
143
- mock.onGet(API.CONFIG.DISPLAY_HISTORY_V3()).reply(200, response.data);
144
- const configs = [{ id: 1 }];
145
- await act(async () => {
146
- tree = await create(wrapComponent(configs));
147
- jest.runAllTimers();
148
- });
149
- await assertChartData([
150
- { x: 1, y: 2 },
151
- { x: 2, y: 3 },
152
- ]);
153
- });
154
-
155
- it('Test render chart merge fetch ready data', async () => {
156
- const cacheUrl = 'https://s3.eoh.io/xxx.json';
157
- const response = {
158
- data: {
159
- configs: [
160
- {
161
- id: 1,
162
- head: [{ x: 1, y: 2 }],
163
- tail: [{ x: 2, y: 3 }],
164
- middle: {
165
- ready: [{ date: '2022-03-03', url: cacheUrl }],
166
- not_ready: [],
167
- channel: '',
168
- },
169
- },
170
- ],
171
- },
172
- };
173
- mock.onGet(API.CONFIG.DISPLAY_HISTORY_V3()).reply(200, response.data);
174
- mock.onGet(cacheUrl).reply(200, [{ x: 3, y: 4 }]);
175
- const configs = [{ id: 1 }];
176
- await act(async () => {
177
- tree = await create(wrapComponent(configs));
178
- jest.runAllTimers();
179
- });
180
- await assertChartData([
181
- { x: 1, y: 2 },
182
- { x: 3, y: 4 },
183
- { x: 2, y: 3 },
184
- ]);
185
- });
186
-
187
- it('Test render chart merge fetch not-ready data', async () => {
188
- const cacheUrl = 'https://s3.eoh.io/xxx.json';
189
- const response = {
190
- data: {
191
- configs: [
192
- {
193
- id: 1,
194
- head: [{ x: 1, y: 2 }],
195
- tail: [{ x: 2, y: 3 }],
196
- middle: {
197
- ready: [],
198
- not_ready: [{ date: '2022-03-03', url: cacheUrl }],
199
- channel: 'cache-xxx',
200
- },
201
- },
202
- ],
203
- },
204
- };
205
- mock.onGet(API.CONFIG.DISPLAY_HISTORY_V3()).reply(200, response.data);
206
- mock.onGet(cacheUrl).reply(200, [{ x: 3, y: 4 }]);
207
- const configs = [{ id: 1 }];
208
- await act(async () => {
209
- tree = await create(wrapComponent(configs));
210
- jest.runAllTimers();
211
- });
212
- await assertChartData([
213
- { x: 1, y: 2 },
214
- { x: 2, y: 3 },
215
- ]);
216
- await act(async () => {
217
- await getPusher()
218
- .subscribe('cache-xxx')
219
- .trigger('caching-value-log-process', {
220
- success: true,
221
- });
222
- });
223
- await assertChartData([
224
- { x: 1, y: 2 },
225
- { x: 3, y: 4 },
226
- { x: 2, y: 3 },
227
- ]);
228
- });
229
-
230
- it('Test render chart merge fetch both ready and not-ready data', async () => {
231
- const cacheUrl1 = 'https://s3.eoh.io/xxx1.json';
232
- const cacheUrl2 = 'https://s3.eoh.io/xxx2.json';
233
- const cacheUrl3 = 'https://s3.eoh.io/xxx3.json';
234
- const cacheUrl4 = 'https://s3.eoh.io/xxx4.json';
235
- const response = {
236
- data: {
237
- configs: [
238
- {
239
- id: 1,
240
- head: [{ x: 1, y: 2 }],
241
- tail: [{ x: 2, y: 3 }],
242
- middle: {
243
- ready: [
244
- { date: '2022-03-02', url: cacheUrl1 },
245
- { date: '2022-03-04', url: cacheUrl3 },
246
- ],
247
- not_ready: [
248
- { date: '2022-03-03', url: cacheUrl2 },
249
- { date: '2022-03-05', url: cacheUrl4 },
250
- ],
251
- channel: 'cache-xxx',
252
- },
253
- },
254
- ],
255
- },
256
- };
257
- mock.onGet(API.CONFIG.DISPLAY_HISTORY_V3()).reply(200, response.data);
258
- mock.onGet(cacheUrl1).reply(200, [{ x: 3, y: 4 }]);
259
- mock.onGet(cacheUrl2).reply(200, [{ x: 4, y: 5 }]);
260
- mock.onGet(cacheUrl3).reply(200, [{ x: 5, y: 6 }]);
261
- mock.onGet(cacheUrl4).reply(200, [{ x: 7, y: 8 }]);
262
- const configs = [{ id: 1 }];
263
- await act(async () => {
264
- tree = await create(wrapComponent(configs));
265
- jest.runAllTimers();
266
- });
267
- await assertChartData([
268
- { x: 1, y: 2 },
269
- { x: 3, y: 4 },
270
- { x: 5, y: 6 },
271
- { x: 2, y: 3 },
272
- ]);
273
- await act(async () => {
274
- await getPusher()
275
- .subscribe('cache-xxx')
276
- .trigger('caching-value-log-process', {
277
- success: true,
278
- });
279
- });
280
- await assertChartData([
281
- { x: 1, y: 2 },
282
- { x: 3, y: 4 },
283
- { x: 4, y: 5 },
284
- { x: 5, y: 6 },
285
- { x: 7, y: 8 },
286
- { x: 2, y: 3 },
287
- ]);
288
- });
289
- });