@eohjsc/react-native-smart-city 0.7.3 → 0.7.4

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 (274) hide show
  1. package/assets/images/Automation-fill.svg +85 -0
  2. package/assets/images/Map/LocationPin.svg +10 -0
  3. package/assets/images/Scenario-filled.svg +22 -0
  4. package/assets/images/schedule-fill.svg +48 -0
  5. package/package.json +20 -17
  6. package/src/commons/Action/ItemQuickAction.js +1 -1
  7. package/src/commons/Action/__test__/ItemQuickAction.test.js +6 -6
  8. package/src/commons/ActionGroup/NumberUpDownActionTemplate.js +3 -3
  9. package/src/commons/ActionGroup/OnOffSmartLock/AutoLock/ButtonWrapper.js +3 -3
  10. package/src/commons/ActionGroup/OnOffSmartLock/PasscodeList/__test__/index.test.js +5 -5
  11. package/src/commons/ActionGroup/OnOffSmartLock/PasscodeList/index.js +3 -3
  12. package/src/commons/ActionGroup/OnOffSmartLock/SetupGeneratePasscode/ButtonWrapper.js +2 -2
  13. package/src/commons/ActionGroup/OnOffTemplate/OnOffSimpleTemplate.js +2 -2
  14. package/src/commons/ActionGroup/OptionsDropdownActionTemplate.js +2 -2
  15. package/src/commons/ActionGroup/SliderRangeTemplate.js +7 -7
  16. package/src/commons/ActionGroup/SmartTiviActionTemplate/SmartTiviActionTemplate.js +2 -2
  17. package/src/commons/ActionGroup/SmartTiviActionTemplate/component/CircleButton.js +5 -5
  18. package/src/commons/ActionGroup/SmartTiviActionTemplate/component/ControlPlay.js +5 -5
  19. package/src/commons/ActionGroup/TerminalBoxTemplate.js +2 -2
  20. package/src/commons/ActionGroup/TextBoxTemplate.js +2 -2
  21. package/src/commons/ActionGroup/ThreeButtonTemplate/__test__/ThreeButtonCircle.test.js +2 -2
  22. package/src/commons/ActionGroup/ThreeButtonTemplate/__test__/ThreeButtonDefault.test.js +2 -2
  23. package/src/commons/ActionGroup/TimerActionTemplate.js +6 -3
  24. package/src/commons/ActionGroup/TwoButtonTemplate/index.js +2 -2
  25. package/src/commons/ActionGroup/__test__/ColorPickerTemplate.test.js +9 -10
  26. package/src/commons/ActionGroup/__test__/OnOffSmartLock.test.js +5 -5
  27. package/src/commons/ActionGroup/__test__/OnOffTemplate.test.js +5 -5
  28. package/src/commons/ActionGroup/__test__/OptionsDropdownTemplate.test.js +8 -8
  29. package/src/commons/ActionGroup/__test__/StatesGridActionTemplate.test.js +3 -3
  30. package/src/commons/ActionGroup/__test__/TimerActionTemplate.test.js +6 -6
  31. package/src/commons/ActionGroup/__test__/TwoButtonTemplate.test.js +1 -1
  32. package/src/commons/ActionGroup/__test__/index.test.js +6 -6
  33. package/src/commons/ActionGroup/index.js +2 -2
  34. package/src/commons/ActionTemplate/__test__/index.test.js +4 -4
  35. package/src/commons/Automate/ItemAutomate.js +9 -41
  36. package/src/commons/Automate/ItemConditionScriptDetail.js +109 -0
  37. package/src/commons/Automate/ItemConditionScriptDetailStyles.js +46 -0
  38. package/src/commons/Automate/__test__/ItemAutomate.test.js +0 -21
  39. package/src/commons/BackDefault/index.js +2 -2
  40. package/src/commons/BottomButtonView/index.js +1 -0
  41. package/src/commons/ButtonPopup/index.js +3 -2
  42. package/src/commons/ChartAggregationOption/__test__/FourButtonFilterHistory.test.js +2 -2
  43. package/src/commons/Dashboard/MyPinnedSharedUnit/__test__/MyPinnedSharedUnit.test.js +8 -9
  44. package/src/commons/Dashboard/MyUnit/__test__/MyUnit.test.js +7 -7
  45. package/src/commons/DateTimeRangeChange/DateTimeButton.js +3 -3
  46. package/src/commons/DateTimeRangeChange/index.js +1 -1
  47. package/src/commons/Device/ConnectedViewHeader.js +2 -2
  48. package/src/commons/Device/Emergency/EmergencyDetail.js +3 -3
  49. package/src/commons/Device/Emergency/__test__/EmergencyButton.test.js +1 -1
  50. package/src/commons/Device/FlatListItems.js +20 -19
  51. package/src/commons/Device/Hanet/ItemHanetDevice.js +3 -3
  52. package/src/commons/Device/Hanet/ItemHanetDevice.test.js +3 -3
  53. package/src/commons/Device/HorizontalBarChart.js +54 -34
  54. package/src/commons/Device/ItemAddNew/index.js +2 -2
  55. package/src/commons/Device/ItemDevice.js +5 -21
  56. package/src/commons/Device/SonosSpeaker/index.js +3 -3
  57. package/src/commons/Device/WaterPurifierStatus/AlertStatusMachine.js +2 -2
  58. package/src/commons/Device/WaterQualitySensor/QualityIndicatorsItem.js +6 -2
  59. package/src/commons/DisplayChecking/index.js +2 -2
  60. package/src/commons/EmergencyButton/AlertSendConfirm.js +2 -2
  61. package/src/commons/FieldTemplate/ChooseUserField/index.js +2 -2
  62. package/src/commons/FieldTemplate/PasscodeField/__test__/index.test.js +3 -3
  63. package/src/commons/FieldTemplate/ScheduleField/__test__/index.test.js +6 -6
  64. package/src/commons/FlatListDnD/__test__/index.test.js +4 -4
  65. package/src/commons/FlatListDnD/index.js +12 -9
  66. package/src/commons/Grid/GridItem.js +10 -2
  67. package/src/commons/GroupCheckBox/__test__/GroupCheckBox.test.js +3 -3
  68. package/src/commons/Header/HeaderCustom.js +2 -2
  69. package/src/commons/Header/__test__/HeaderCT.test.js +3 -3
  70. package/src/commons/HeaderAni/index.js +2 -2
  71. package/src/commons/IconComponent/index.js +3 -3
  72. package/src/commons/ImagePicker/__test__/ImagePicker.test.js +5 -5
  73. package/src/commons/MediaPlayerDetail/__test__/MediaPlayerDetail.test.js +6 -4
  74. package/src/commons/MenuActionMore/MenuActionMoreStyles.js +2 -1
  75. package/src/commons/MenuActionMore/index.js +1 -1
  76. package/src/commons/NavBar/NavBarStyles.js +1 -1
  77. package/src/commons/NavBar/index.js +2 -2
  78. package/src/commons/OneTapTemplate/NumberUpDownActionTemplate.js +3 -3
  79. package/src/commons/OneTapTemplate/__test__/StatesGridActionTemplate.test.js +1 -1
  80. package/src/commons/Popover/__test__/index.test.js +3 -3
  81. package/src/commons/Processing/__test__/Connecting.test.js +4 -4
  82. package/src/commons/SearchLocation/index.js +3 -3
  83. package/src/commons/SelectActionCard/index.js +2 -2
  84. package/src/commons/SelectSubUnit/index.js +6 -2
  85. package/src/commons/SelectUnit/__test__/SelectUnit.test.js +5 -5
  86. package/src/commons/Sharing/BtnRemoveMember.js +2 -2
  87. package/src/commons/Sharing/StationDevicePermissions.js +2 -2
  88. package/src/commons/SubUnit/DeviceTemplate/ConfigAndEvaluation/ConfigAndEvaluation.js +2 -2
  89. package/src/commons/SubUnit/DeviceTemplate/ConfigValue/ConfigValue.js +2 -2
  90. package/src/commons/SubUnit/DeviceTemplate/EvaluationOverConfig/EvaluationOverConfig.js +2 -2
  91. package/src/commons/SubUnit/OneTap/ItemOneTap.js +6 -7
  92. package/src/commons/SubUnit/OneTap/__test__/SubUnitAutomate.test.js +0 -2
  93. package/src/commons/SubUnit/OneTap/index.js +9 -8
  94. package/src/commons/SubUnit/__test__/ShortDetail.test.js +8 -8
  95. package/src/commons/Unit/HeaderUnit/index.js +30 -22
  96. package/src/commons/Unit/SharedUnit.js +7 -7
  97. package/src/commons/Widgets/IFrame/__tests__/IFrame.test.js +9 -13
  98. package/src/commons/Widgets/IFrameWithConfig/IFrameWithConfig.js +34 -2
  99. package/src/commons/Widgets/IFrameWithConfig/__tests__/IFrameWithConfig.test.js +88 -8
  100. package/src/commons/WrapParallaxScrollView/index.js +9 -10
  101. package/src/configs/API.js +1 -1
  102. package/src/configs/AccessibilityLabel.js +1 -0
  103. package/src/configs/Constants.js +3 -3
  104. package/src/configs/Theme.js +1 -1
  105. package/src/hooks/Common/__test__/useAndroidTranslucentStatusBar.test.js +5 -5
  106. package/src/hooks/IoT/__test__/useHomeAssistantConnection.test.js +12 -12
  107. package/src/hooks/IoT/__test__/useRemoteControl.test.js +14 -7
  108. package/src/hooks/IoT/__test__/useWatchConfigs.test.js +3 -3
  109. package/src/hooks/IoT/useRemoteControl.js +24 -13
  110. package/src/hooks/useMqtt.js +2 -2
  111. package/src/iot/RemoteControl/Bluetooth.js +19 -22
  112. package/src/iot/RemoteControl/Internet.js +13 -5
  113. package/src/iot/RemoteControl/__test__/Internet.test.js +7 -7
  114. package/src/navigations/EmergencyContactsStack.js +4 -3
  115. package/src/navigations/SharedStack.js +2 -0
  116. package/src/navigations/UnitStack.js +56 -57
  117. package/src/screens/AQIGuide/index.js +0 -2
  118. package/src/screens/ActivityLog/index.js +2 -2
  119. package/src/screens/AddLocationMaps/__test__/index.test.js +12 -12
  120. package/src/screens/AddLocationMaps/index.js +16 -19
  121. package/src/screens/AddLocationMaps/indexStyle.js +1 -0
  122. package/src/screens/AddNewGateway/RenameNewDevices.js +2 -2
  123. package/src/screens/AddNewGateway/SelectDeviceType.js +1 -1
  124. package/src/screens/AddNewGateway/ShareWifiPassword.js +16 -15
  125. package/src/screens/AddNewGateway/__test__/AddNewGateway.test.js +7 -7
  126. package/src/screens/AddNewGateway/__test__/ConnectingWifiDevice.test.js +8 -8
  127. package/src/screens/AddNewGateway/__test__/ConnectingZigbeeDevice.test.js +7 -7
  128. package/src/screens/AddNewGateway/__test__/RenameNewDevices.test.js +8 -8
  129. package/src/screens/AddNewGateway/__test__/ScanGatewayQR.test.js +5 -5
  130. package/src/screens/AddNewGateway/__test__/SelectDeviceUnit.test.js +4 -4
  131. package/src/screens/AddNewGateway/__test__/SelectModbusGateway.test.js +6 -6
  132. package/src/screens/AddNewGateway/__test__/SelectZigbeeGateway.test.js +6 -6
  133. package/src/screens/AddNewGateway/__test__/ShareWifiPassword.test.js +0 -4
  134. package/src/screens/AddNewGateway/hooks/__Tests__/useWifiManage.test.js +2 -2
  135. package/src/screens/AllGateway/DetailConfigActionModbus/__test__/index.test.js +6 -6
  136. package/src/screens/AllGateway/DeviceInternalDetail/__test__/index.test.js +19 -17
  137. package/src/screens/AllGateway/DeviceModbusDetail/__test__/index.test.js +19 -17
  138. package/src/screens/AllGateway/DeviceZigbeeDetail/__test__/index.test.js +18 -16
  139. package/src/screens/AllGateway/GatewayDetail/__test__/index.test.js +43 -35
  140. package/src/screens/AllGateway/GatewayInfo/__test__/index.test.js +38 -22
  141. package/src/screens/AllGateway/__test__/index.test.js +6 -6
  142. package/src/screens/AllGateway/components/Detail/__test__/index.test.js +3 -5
  143. package/src/screens/AllGateway/components/GatewayItem/__test__/index.test.js +3 -3
  144. package/src/screens/AllGateway/components/TabPaneCT/__test__/index.test.js +6 -6
  145. package/src/screens/AllGateway/hooks/__test__/index.test.js +2 -2
  146. package/src/screens/AllGateway/test-utils.js +3 -4
  147. package/src/screens/Automate/AddNewAction/ChooseAction.js +17 -3
  148. package/src/screens/Automate/AddNewAction/ChooseConfig.js +7 -6
  149. package/src/screens/Automate/AddNewAction/NewActionWrapper.js +8 -8
  150. package/src/screens/Automate/AddNewAction/SelectControlDevices.js +30 -20
  151. package/src/screens/Automate/AddNewAction/SelectMonitorDevices.js +17 -10
  152. package/src/screens/Automate/AddNewAction/SetupConfigCondition.js +58 -44
  153. package/src/screens/Automate/AddNewAction/SetupScriptDelay.js +1 -1
  154. package/src/screens/Automate/AddNewAction/SetupScriptNotify.js +3 -3
  155. package/src/screens/Automate/AddNewAction/Styles/SetupSensorStyles.js +20 -4
  156. package/src/screens/Automate/AddNewAction/__test__/ChooseAction.test.js +12 -12
  157. package/src/screens/Automate/AddNewAction/__test__/SelectControlDevices.test.js +14 -8
  158. package/src/screens/Automate/AddNewAction/__test__/SelectMonitorDevices.test.js +13 -7
  159. package/src/screens/Automate/AddNewAction/__test__/SetupConfigCondition.test.js +54 -15
  160. package/src/screens/Automate/AddNewAction/__test__/SetupScriptDelay.test.js +9 -9
  161. package/src/screens/Automate/AddNewAction/__test__/SetupScriptNotify.test.js +39 -10
  162. package/src/screens/Automate/AddNewAutoSmart/AddTypeSmart.js +10 -10
  163. package/src/screens/Automate/AddNewAutoSmart/__test__/AddNewAutoSmart.test.js +13 -8
  164. package/src/screens/Automate/Components/InputName.js +10 -7
  165. package/src/screens/Automate/EditActionsList/__tests__/UpdateActionScript.test.js +8 -8
  166. package/src/screens/Automate/EditActionsList/__tests__/UpdateDelayScript.test.js +6 -6
  167. package/src/screens/Automate/EditActionsList/__tests__/UpdateNotifyScript.test.js +7 -7
  168. package/src/screens/Automate/EditActionsList/index.js +19 -17
  169. package/src/screens/Automate/MultiUnits.js +19 -22
  170. package/src/screens/Automate/OneTap/__test__/AddNewOneTap.test.js +18 -8
  171. package/src/screens/Automate/Scenario/__test__/AddNewOneTap.test.js +15 -7
  172. package/src/screens/Automate/ScriptDetail/Components/AddActionScript.js +14 -6
  173. package/src/screens/Automate/ScriptDetail/Components/RenameScript.js +4 -7
  174. package/src/screens/Automate/ScriptDetail/__test__/index.test.js +42 -17
  175. package/src/screens/Automate/ScriptDetail/__test__/useStarredScript.test.js +6 -6
  176. package/src/screens/Automate/ScriptDetail/index.js +51 -40
  177. package/src/screens/Automate/SetSchedule/__test__/SelectWeekday.test.js +4 -4
  178. package/src/screens/Automate/SetSchedule/__test__/index.test.js +29 -18
  179. package/src/screens/Automate/SetSchedule/components/RowItem.js +5 -5
  180. package/src/screens/Automate/SetSchedule/index.js +8 -7
  181. package/src/screens/Automate/Styles/indexStyles.js +1 -1
  182. package/src/screens/Automate/__test__/MultiUnits.test.js +1 -4
  183. package/src/screens/Automate/__test__/index.test.js +0 -1
  184. package/src/screens/Automate/index.js +36 -34
  185. package/src/screens/ChangePosition/__test__/index.test.js +6 -6
  186. package/src/screens/ChangePosition/index.js +2 -1
  187. package/src/screens/Device/EditDevice/__test__/EditDevice.test.js +13 -13
  188. package/src/screens/Device/EditDevice/index.js +4 -4
  189. package/src/screens/Device/__test__/BluetoothDevice.test.js +300 -0
  190. package/src/screens/Device/__test__/detail.test.js +14 -14
  191. package/src/screens/Device/__test__/mqttDetail.test.js +9 -9
  192. package/src/screens/Device/components/BluetoothDevice.js +135 -0
  193. package/src/screens/Device/components/SensorDisplayItem.js +9 -8
  194. package/src/screens/Device/detail.js +70 -62
  195. package/src/screens/Device/hooks/useEvaluateValue.js +1 -1
  196. package/src/screens/Drawer/Drawer.test.js +2 -2
  197. package/src/screens/Drawer/index.js +3 -3
  198. package/src/screens/EmergencyContacts/EmergencyContactsList.js +8 -4
  199. package/src/screens/EmergencyContacts/EmergencyContactsSelectContacts.js +3 -3
  200. package/src/screens/EmergencyContacts/__test__/EmergencyContactsSelectContacts.test.js +7 -7
  201. package/src/screens/EmergencySetting/components/DropDownItem.js +2 -2
  202. package/src/screens/EnterPassword/__test__/EnterPassword.test.js +8 -8
  203. package/src/screens/GuestInfo/components/RowGuestInfo.js +2 -2
  204. package/src/screens/GuestInfo/components/__test__/AccessScheduleSheet.test.js +3 -3
  205. package/src/screens/GuestInfo/index.js +2 -2
  206. package/src/screens/HanetCamera/ManageAccess.js +3 -3
  207. package/src/screens/HanetCamera/MemberInfo.js +2 -2
  208. package/src/screens/HanetCamera/__test__/Detail.test.js +9 -9
  209. package/src/screens/HanetCamera/__test__/MemberInfo.test.js +10 -10
  210. package/src/screens/HanetCamera/components/RequestFaceIDPopup.js +2 -2
  211. package/src/screens/ManageAccess/index.js +3 -3
  212. package/src/screens/MoveToAnotherSubUnit/__test__/index.test.js +9 -9
  213. package/src/screens/Notification/__test__/Notification.test.js +9 -9
  214. package/src/screens/Notification/components/NotificationItem.js +3 -4
  215. package/src/screens/Notification/index.js +3 -3
  216. package/src/screens/Notification/styles/NotificationItemStyles.js +0 -1
  217. package/src/screens/PlayBackCamera/__test__/index.test.js +1 -1
  218. package/src/screens/ScanChipQR/components/QRScan/__test__/QRScan.test.js +1 -1
  219. package/src/screens/ScanChipQR/components/QRScan/index.js +3 -3
  220. package/src/screens/SelectUnit/__test__/index.test.js +8 -8
  221. package/src/screens/SelectUnit/index.js +4 -4
  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__/UpdateShareDevice.test.js +7 -7
  226. package/src/screens/SideMenuDetail/__test__/index.test.js +8 -8
  227. package/src/screens/SmartAccount/Connecting/index.js +5 -5
  228. package/src/screens/SmartAccount/ListDevice/__test__/ListDevice.test.js +8 -8
  229. package/src/screens/SmartAccount/SuccessfullyConnected/__test__/SuccessfullyConnected.test.js +7 -7
  230. package/src/screens/SmartAccount/SuccessfullyConnected/index.js +2 -2
  231. package/src/screens/SmartAccount/__test__/Connecting.test.js +6 -6
  232. package/src/screens/SmartAccount/__test__/SmartAccount.test.js +10 -10
  233. package/src/screens/SmartIr/__test__/GroupButtonByType.test.js +3 -2
  234. package/src/screens/SmartIr/components/GroupButtonByType/GroupButtonByType.js +2 -2
  235. package/src/screens/SmartIr/components/SelectBrand.js +2 -2
  236. package/src/screens/SubUnit/AddSubUnit.js +28 -26
  237. package/src/screens/SubUnit/AddSubUnitStyles.js +10 -4
  238. package/src/screens/SubUnit/EditSubUnit.js +12 -11
  239. package/src/screens/SubUnit/ManageSubUnit.js +3 -3
  240. package/src/screens/SubUnit/__test__/AddSubUnit.test.js +13 -13
  241. package/src/screens/SubUnit/__test__/EditSubUnit.test.js +3 -3
  242. package/src/screens/Template/EditTemplate.js +6 -4
  243. package/src/screens/Template/__test__/EditTemplate.test.js +7 -7
  244. package/src/screens/Template/__test__/detail.test.js +4 -4
  245. package/src/screens/Template/__test__/index.test.js +1 -1
  246. package/src/screens/UVIndexGuide/index.js +2 -4
  247. package/src/screens/Unit/Detail.js +1 -5
  248. package/src/screens/Unit/MoreMenu.js +6 -5
  249. package/src/screens/Unit/SelectAddToFavorites.js +2 -2
  250. package/src/screens/Unit/SelectAddress.js +16 -12
  251. package/src/screens/Unit/Station/__test__/index.test.js +1 -1
  252. package/src/screens/Unit/__test__/MoreMenu.test.js +5 -1
  253. package/src/screens/Unit/__test__/SelectAddToFavorites.test.js +9 -9
  254. package/src/screens/Unit/__test__/SelectAddress.test.js +11 -17
  255. package/src/screens/Unit/__test__/Summaries.test.js +7 -7
  256. package/src/screens/Unit/components/AutomateScript/index.js +5 -5
  257. package/src/screens/Unit/components/ButtonWrapper/index.js +3 -3
  258. package/src/screens/Unit/components/Header/index.js +2 -2
  259. package/src/screens/Unit/components/SharedUnit/index.js +5 -5
  260. package/src/screens/Unit/components/__test__/AutomateScript.test.js +3 -3
  261. package/src/screens/Unit/components/__test__/SharedUnit.test.js +8 -8
  262. package/src/screens/Unit/hook/__test__/useUnitConnectRemoteDevices.test.js +2 -2
  263. package/src/screens/UnitSummary/components/AirQuality/index.js +6 -11
  264. package/src/screens/UnitSummary/components/WaterQuality/Item/index.js +5 -5
  265. package/src/screens/UnitSummary/index.js +6 -2
  266. package/src/utils/Apis/axios.js +5 -5
  267. package/src/utils/Functions/ShortEmail.js +1 -0
  268. package/src/utils/I18n/translations/en.js +6 -3
  269. package/src/utils/I18n/translations/vi.js +8 -4
  270. package/src/utils/__test__/Utils.test.js +16 -16
  271. package/src/utils/bluetooth.js +3 -0
  272. package/assets/images/OneTap.svg +0 -14
  273. package/assets/images/Schedule.svg +0 -39
  274. package/assets/images/ValueChange.svg +0 -49
@@ -5,35 +5,35 @@ import React, {
5
5
  useRef,
6
6
  useState,
7
7
  } from 'react';
8
- import { Image, Platform, TouchableOpacity, View, Switch } from 'react-native';
8
+ import { Image, Platform, Switch, TouchableOpacity, View } from 'react-native';
9
9
  import { PopoverMode } from 'react-native-popover-view';
10
- import AntDesign from 'react-native-vector-icons/AntDesign';
10
+ import { IconFill, IconOutline } from '@ant-design/icons-react-native';
11
11
  import MaterialIcons from 'react-native-vector-icons/MaterialIcons';
12
12
 
13
- import { useTranslations } from '../../../hooks/Common/useTranslations';
14
- import styles from './Styles/indexStyles';
15
- import Text from '../../../commons/Text';
16
- import WrapHeaderScrollable from '../../../commons/Sharing/WrapHeaderScrollable';
17
- import { API, Colors } from '../../../configs';
18
- import { usePopover } from '../../../hooks/Common';
19
- import { useStarredScript } from './hooks/useStarredScript';
20
- import MenuActionMore from '../../../commons/MenuActionMore';
13
+ import { useIsFocused, useNavigation } from '@react-navigation/native';
21
14
  import Add from '../../../../assets/images/Add.svg';
22
- import Notify from '../../../../assets/images/Notify.svg';
23
15
  import Delay from '../../../../assets/images/Delay.svg';
24
- import { useIsFocused, useNavigation } from '@react-navigation/native';
25
- import { axiosGet, axiosPost } from '../../../utils/Apis/axios';
26
- import Routes from '../../../utils/Route';
27
- import { ToastBottomHelper } from '../../../utils/Utils';
28
- import ItemAutomate from '../../../commons/Automate/ItemAutomate';
16
+ import Notify from '../../../../assets/images/Notify.svg';
17
+ import IconComponent from '../../../commons/IconComponent';
18
+ import MenuActionMore from '../../../commons/MenuActionMore';
19
+ import WrapHeaderScrollable from '../../../commons/Sharing/WrapHeaderScrollable';
20
+ import Text from '../../../commons/Text';
29
21
  import withPreventDoubleClick from '../../../commons/WithPreventDoubleClick';
22
+ import { API, Colors } from '../../../configs';
30
23
  import { AccessibilityLabel, AUTOMATE_TYPE } from '../../../configs/Constants';
31
- import RenameScript from './Components/RenameScript';
32
- import DeleteScript from './Components/DeleteScript';
33
24
  import Images from '../../../configs/Images';
25
+ import { usePopover } from '../../../hooks/Common';
26
+ import { useTranslations } from '../../../hooks/Common/useTranslations';
27
+ import { axiosGet, axiosPost } from '../../../utils/Apis/axios';
34
28
  import { useBackendPermission } from '../../../utils/Permission/backend';
35
- import IconComponent from '../../../commons/IconComponent';
29
+ import Routes from '../../../utils/Route';
30
+ import { ToastBottomHelper } from '../../../utils/Utils';
36
31
  import AddActionScript from './Components/AddActionScript';
32
+ import DeleteScript from './Components/DeleteScript';
33
+ import RenameScript from './Components/RenameScript';
34
+ import { useStarredScript } from './hooks/useStarredScript';
35
+ import styles from './Styles/indexStyles';
36
+ import ItemConditionScriptDetail from '../../../commons/Automate/ItemConditionScriptDetail';
37
37
 
38
38
  const PreventDoubleTouch = withPreventDoubleClick(TouchableOpacity);
39
39
 
@@ -45,11 +45,10 @@ const ScriptDetail = ({ route }) => {
45
45
  usePopover();
46
46
  const t = useTranslations();
47
47
  const {
48
- id,
49
48
  saveAt,
50
49
  preAutomate = {}, // pre-loaded automate data
51
- newAutomate, // updated automate data
52
50
  newActionsList, // updated actions list
51
+ closeScreen,
53
52
  } = params;
54
53
  const [automate, setAutomate] = useState(preAutomate);
55
54
  const isFocused = useIsFocused();
@@ -63,7 +62,7 @@ const ScriptDetail = ({ route }) => {
63
62
  const [enableScript, setEnableScript] = useState(enable);
64
63
  const onShowActivityLog = useCallback(() => {
65
64
  navigate(Routes.ActivityLog, {
66
- id: id,
65
+ id: automateId,
67
66
  type:
68
67
  type === AUTOMATE_TYPE.ONE_TAP
69
68
  ? `automate.${AUTOMATE_TYPE.ONE_TAP}`
@@ -74,7 +73,7 @@ const ScriptDetail = ({ route }) => {
74
73
  user: Boolean(unit),
75
74
  },
76
75
  });
77
- }, [navigate, id, type, unit]);
76
+ }, [navigate, automateId, type, unit]);
78
77
 
79
78
  const listMenuItem = useMemo(
80
79
  () => [
@@ -107,39 +106,41 @@ const ScriptDetail = ({ route }) => {
107
106
 
108
107
  const fetchAutomateActions = useCallback(async () => {
109
108
  const { success, data: automateData } = await axiosGet(
110
- API.AUTOMATE.SCRIPT_ITEMS(id)
109
+ API.AUTOMATE.SCRIPT_ITEMS(automateId)
111
110
  );
112
111
  if (success) {
113
112
  setData(automateData.script_items || []);
114
113
  }
115
- }, [id]);
114
+ }, [automateId]);
116
115
 
117
116
  const fetchAutomate = useCallback(async () => {
118
117
  const { success, data: automateData } = await axiosGet(
119
- API.AUTOMATE.FETCH_AUTOMATE(id)
118
+ API.AUTOMATE.FETCH_AUTOMATE(automateId)
120
119
  );
121
120
  if (success) {
122
121
  setAutomate(automateData);
123
122
  setEnableScript(automateData.script.enable);
124
123
  }
125
- }, [id]);
124
+ }, [automateId]);
126
125
 
127
126
  const onPressEdit = useCallback(() => {
128
127
  navigate(Routes.EditActionsList, {
129
128
  data,
130
- id,
129
+ id: automateId,
131
130
  unitId: automate.unit,
132
131
  });
133
- }, [navigate, data, id, automate.unit]);
132
+ }, [navigate, data, automateId, automate.unit]);
134
133
 
135
134
  const handleScriptAction = useCallback(async () => {
136
- const { success } = await axiosPost(API.AUTOMATE.ACTION_ONE_TAP(id));
135
+ const { success } = await axiosPost(
136
+ API.AUTOMATE.ACTION_ONE_TAP(automateId)
137
+ );
137
138
  if (success) {
138
139
  ToastBottomHelper.success(t('activated_successfully'));
139
140
  } else {
140
141
  ToastBottomHelper.error(t('activation_failed'));
141
142
  }
142
- }, [id, t]);
143
+ }, [automateId, t]);
143
144
 
144
145
  const handleUpdateAutomate = useCallback(async () => {
145
146
  if (!can_edit) {
@@ -158,6 +159,19 @@ const ScriptDetail = ({ route }) => {
158
159
  });
159
160
  }, [automate, can_edit, enableScript, navigate, route.name, t]);
160
161
 
162
+ const handleGoBack = useCallback(async () => {
163
+ if (closeScreen === Routes.UnitDetail) {
164
+ navigate(closeScreen, { unitId: unit });
165
+ } else if (
166
+ closeScreen === Routes.MultiUnits ||
167
+ closeScreen === Routes.Automate
168
+ ) {
169
+ navigate(closeScreen, {});
170
+ } else {
171
+ goBack();
172
+ }
173
+ }, [closeScreen, goBack, navigate, unit]);
174
+
161
175
  const onChangeSwitch = useCallback(
162
176
  async (checked) => {
163
177
  setEnableScript(checked);
@@ -210,17 +224,13 @@ const ScriptDetail = ({ route }) => {
210
224
  saveAt && fetchAutomateActions();
211
225
  }, [saveAt, fetchAutomateActions]);
212
226
 
213
- useEffect(() => {
214
- newAutomate && setAutomate(newAutomate);
215
- }, [newAutomate]);
216
-
217
227
  return (
218
228
  <View style={styles.wrap}>
219
229
  <WrapHeaderScrollable
220
230
  title={name}
221
231
  headerAniStyle={styles.headerAniStyle}
222
232
  rightComponent={rightComponent}
223
- onGoBack={goBack}
233
+ onGoBack={handleGoBack}
224
234
  >
225
235
  <View style={styles.wrapContent}>
226
236
  {!!can_edit && (
@@ -228,13 +238,13 @@ const ScriptDetail = ({ route }) => {
228
238
  <Text type="H3" semibold>
229
239
  {t('enable_this_script')}
230
240
  </Text>
231
- <Switch checked={enableScript} onChange={onChangeSwitch} />
241
+ <Switch value={enableScript} onValueChange={onChangeSwitch} />
232
242
  </View>
233
243
  )}
234
244
  <Text type="H3" semibold>
235
245
  {t('how_to_start')}
236
246
  </Text>
237
- <ItemAutomate
247
+ <ItemConditionScriptDetail
238
248
  automate={automate}
239
249
  enableScript={enableScript}
240
250
  onPress={handleUpdateAutomate}
@@ -296,6 +306,7 @@ const ScriptDetail = ({ route }) => {
296
306
  mode={
297
307
  Platform.OS === 'ios' ? PopoverMode.JS_MODAL : PopoverMode.RN_MODAL
298
308
  }
309
+ accessibilityLabel={AccessibilityLabel.MENU_POPPER_MORE}
299
310
  />
300
311
  <AddActionScript
301
312
  automate={automate}
@@ -479,9 +490,9 @@ const ButtonStar = ({ automate }) => {
479
490
  accessibilityLabel={AccessibilityLabel.HEADER_SCRIPT_DETAIL_BUTTON_STAR}
480
491
  >
481
492
  {isStarred ? (
482
- <AntDesign name="star" size={25} color={Colors.Yellow6} />
493
+ <IconFill name="star" size={25} color={Colors.Yellow6} />
483
494
  ) : (
484
- <AntDesign name="staro" size={25} />
495
+ <IconOutline name="star" size={25} />
485
496
  )}
486
497
  </PreventDoubleTouch>
487
498
  );
@@ -1,8 +1,8 @@
1
1
  import React from 'react';
2
- import { create, act } from 'react-test-renderer';
2
+ import { TouchableOpacity } from 'react-native';
3
+ import { act, create } from 'react-test-renderer';
3
4
  import { SCProvider } from '../../../../context';
4
5
  import { mockSCStore } from '../../../../context/mockStore';
5
- import { TouchableOpacity } from 'react-native';
6
6
  import SelectWeekday from '../components/SelectWeekday';
7
7
 
8
8
  const wrapComponent = (props) => (
@@ -28,7 +28,7 @@ it('test select', async () => {
28
28
  await act(async () => {
29
29
  await items[0].props.onPress();
30
30
  });
31
- expect(mockSetWeekday).toBeCalledWith(['1']);
31
+ expect(mockSetWeekday).toHaveBeenCalledWith(['1']);
32
32
 
33
33
  mockSetWeekday.mockClear();
34
34
  props = {
@@ -44,5 +44,5 @@ it('test select', async () => {
44
44
  await act(async () => {
45
45
  await items[0].props.onPress();
46
46
  });
47
- expect(mockSetWeekday).toBeCalledWith(['0', '1']);
47
+ expect(mockSetWeekday).toHaveBeenCalledWith(['0', '1']);
48
48
  });
@@ -1,34 +1,37 @@
1
+ import { useNavigation, useRoute } from '@react-navigation/native';
2
+ import moment from 'moment';
1
3
  import React from 'react';
2
4
  import { act, create } from 'react-test-renderer';
5
+ import BottomButtonView from '../../../../commons/BottomButtonView';
6
+ import Calendar from '../../../../commons/Calendar';
7
+ import WheelDateTimePicker from '../../../../commons/WheelDateTimePicker';
8
+ import AccessibilityLabel from '../../../../configs/AccessibilityLabel';
3
9
  import { SCProvider } from '../../../../context';
4
10
  import { mockSCStore } from '../../../../context/mockStore';
5
- import SetSchedule from '../index';
6
- import RowItem from '../components/RowItem';
7
- import WheelDateTimePicker from '../../../../commons/WheelDateTimePicker';
11
+ import Routes from '../../../../utils/Route';
8
12
  import RepeatOptionsPopup, {
9
13
  REPEAT_OPTIONS,
10
14
  } from '../components/RepeatOptionsPopup';
11
- import Calendar from '../../../../commons/Calendar';
12
- import BottomButtonView from '../../../../commons/BottomButtonView';
13
- import Routes from '../../../../utils/Route';
15
+ import RowItem from '../components/RowItem';
14
16
  import SelectWeekday from '../components/SelectWeekday';
15
- import moment from 'moment';
16
- import { useNavigation } from '@react-navigation/native';
17
- import AccessibilityLabel from '../../../../configs/AccessibilityLabel';
17
+ import SetSchedule from '../index';
18
18
 
19
- const wrapComponent = (route) => (
20
- <SCProvider initState={mockSCStore({})}>
21
- <SetSchedule route={route} />
22
- </SCProvider>
23
- );
19
+ const wrapComponent = (route) => {
20
+ useRoute.mockReturnValue(route);
21
+ return (
22
+ <SCProvider initState={mockSCStore({})}>
23
+ <SetSchedule route={route} />
24
+ </SCProvider>
25
+ );
26
+ };
24
27
 
25
28
  describe('Test SetSchedule', () => {
26
29
  let tree;
27
30
  let route = {
28
31
  params: {
29
- type: 'schedule',
30
- unit: { id: 1 },
31
- isAutomateTab: true,
32
+ automate: { type: 'schedule', unit: 1 },
33
+ unitId: 1,
34
+ closeScreen: 'UnitDetail',
32
35
  },
33
36
  };
34
37
 
@@ -70,7 +73,11 @@ describe('Test SetSchedule', () => {
70
73
  await act(async () => {
71
74
  await header.props.onPress();
72
75
  });
73
- expect(global.mockedNavigate).toBeCalledWith(undefined);
76
+ expect(global.mockedNavigate).toHaveBeenCalledWith('UnitDetail', {
77
+ automate: { type: 'schedule', unit: 1 },
78
+ closeScreen: 'UnitDetail',
79
+ unitId: 1,
80
+ });
74
81
  });
75
82
 
76
83
  it('test repeat options popup', async () => {
@@ -137,7 +144,11 @@ describe('Test SetSchedule', () => {
137
144
  repeat: 'once',
138
145
  time_repeat: '12:00:00',
139
146
  weekday_repeat: [],
147
+ type: 'schedule',
148
+ unit: 1,
140
149
  },
150
+ closeScreen: 'UnitDetail',
151
+ unitId: 1,
141
152
  });
142
153
  });
143
154
  });
@@ -1,9 +1,9 @@
1
+ import { IconOutline } from '@ant-design/icons-react-native';
1
2
  import React from 'react';
2
- import { View, TouchableOpacity } from 'react-native';
3
- import AntDesign from 'react-native-vector-icons/AntDesign';
3
+ import { TouchableOpacity, View } from 'react-native';
4
4
  import Text from '../../../../commons/Text';
5
- import styles from '../styles/RowItemStyles';
6
5
  import { Colors } from '../../../../configs';
6
+ import styles from '../styles/RowItemStyles';
7
7
 
8
8
  const RowItem = ({ title, value, icon = null, arrow = false, onPress }) => {
9
9
  return (
@@ -17,8 +17,8 @@ const RowItem = ({ title, value, icon = null, arrow = false, onPress }) => {
17
17
  </Text>
18
18
  </View>
19
19
  <View style={[styles.itemRight, arrow && styles.center]}>
20
- {arrow && <AntDesign name="right" color={Colors.Gray7} />}
21
- {icon && <AntDesign name={icon} size={17} color={Colors.Black} />}
20
+ {arrow && <IconOutline name="right" color={Colors.Gray7} />}
21
+ {icon && <IconOutline name={icon} size={17} color={Colors.Black} />}
22
22
  </View>
23
23
  </TouchableOpacity>
24
24
  );
@@ -1,19 +1,19 @@
1
- import React, { memo, useCallback, useState } from 'react';
2
- import { ScrollView } from 'react-native';
3
1
  import { useNavigation } from '@react-navigation/native';
4
2
  import moment from 'moment';
5
- import WheelDateTimePicker from '../../../commons/WheelDateTimePicker';
3
+ import React, { memo, useCallback, useState } from 'react';
4
+ import { ScrollView } from 'react-native';
6
5
  import Calendar from '../../../commons/Calendar';
6
+ import WheelDateTimePicker from '../../../commons/WheelDateTimePicker';
7
+ import { useBoolean } from '../../../hooks/Common';
8
+ import { useTranslations } from '../../../hooks/Common/useTranslations';
9
+ import Routes from '../../../utils/Route';
10
+ import NewActionWrapper from '../AddNewAction/NewActionWrapper';
7
11
  import RepeatOptionsPopup, {
8
12
  REPEAT_OPTIONS,
9
13
  } from './components/RepeatOptionsPopup';
10
14
  import RowItem from './components/RowItem';
11
15
  import SelectWeekday from './components/SelectWeekday';
12
- import { useBoolean } from '../../../hooks/Common';
13
- import { useTranslations } from '../../../hooks/Common/useTranslations';
14
16
  import styles from './styles/indexStyles';
15
- import Routes from '../../../utils/Route';
16
- import NewActionWrapper from '../AddNewAction/NewActionWrapper';
17
17
 
18
18
  const SetSchedule = ({ route }) => {
19
19
  const t = useTranslations();
@@ -54,6 +54,7 @@ const SetSchedule = ({ route }) => {
54
54
  date_repeat: date.format('YYYY-MM-DD'),
55
55
  weekday_repeat: weekday,
56
56
  },
57
+ unitId: automate.unit,
57
58
  });
58
59
  }, [navigate, closeScreen, automate, repeat, time, date, weekday]);
59
60
 
@@ -65,9 +65,9 @@ export default StyleSheet.create({
65
65
  width: (Constants.width - 40) / 2,
66
66
  },
67
67
  automatesRow: {
68
+ display: 'flex',
68
69
  flexDirection: 'row',
69
70
  marginTop: 8,
70
71
  overflow: 'hidden',
71
- alignSelf: 'center',
72
72
  },
73
73
  });
@@ -76,7 +76,6 @@ describe('Test MultiUnits', () => {
76
76
  params: {
77
77
  isMultiUnits: true,
78
78
  unitName: null,
79
- unit: null,
80
79
  },
81
80
  });
82
81
  await act(async () => {
@@ -111,7 +110,6 @@ describe('Test MultiUnits', () => {
111
110
  expect(global.mockedNavigate).toBeCalledWith(Routes.UnitStack, {
112
111
  screen: Routes.ScriptDetail,
113
112
  params: {
114
- id: response[1].id,
115
113
  preAutomate: response[1],
116
114
  },
117
115
  });
@@ -120,7 +118,7 @@ describe('Test MultiUnits', () => {
120
118
  ItemAddNews[0].props.onAddNew();
121
119
  });
122
120
  expect(global.mockedNavigate).toBeCalledWith(Routes.UnitStack, {
123
- screen: Routes.AddUnknownTypeSmart,
121
+ screen: Routes.AddAutomationTypeSmart,
124
122
  params: {
125
123
  automate: { unit: undefined },
126
124
  closeScreen: undefined,
@@ -264,7 +262,6 @@ describe('Test MultiUnits', () => {
264
262
  params: {
265
263
  isMultiUnits: true,
266
264
  unitName: null,
267
- unit: null,
268
265
  },
269
266
  });
270
267
  await act(async () => {
@@ -173,7 +173,6 @@ describe('Test Automate', () => {
173
173
  params: {
174
174
  preAutomate: response.data[0].automates[0],
175
175
  closeScreen: undefined,
176
- id: 1,
177
176
  },
178
177
  });
179
178
  });
@@ -1,3 +1,9 @@
1
+ import { IconFill } from '@ant-design/icons-react-native';
2
+ import {
3
+ useIsFocused,
4
+ useNavigation,
5
+ useRoute,
6
+ } from '@react-navigation/native';
1
7
  import React, {
2
8
  useCallback,
3
9
  useEffect,
@@ -6,27 +12,21 @@ import React, {
6
12
  useState,
7
13
  } from 'react';
8
14
  import { FlatList, Image, TouchableOpacity, View } from 'react-native';
9
- import AntDesign from 'react-native-vector-icons/AntDesign';
10
- import {
11
- useIsFocused,
12
- useNavigation,
13
- useRoute,
14
- } from '@react-navigation/native';
15
15
  import { useSCContextSelector } from '../../context';
16
16
 
17
- import styles from './Styles/indexStyles';
17
+ import ItemAddNew from '../../commons/Device/ItemAddNew';
18
+ import ItemOneTap from '../../commons/SubUnit/OneTap/ItemOneTap';
19
+ import Text from '../../commons/Text';
18
20
  import { API, Colors, Images } from '../../configs';
21
+ import { AccessibilityLabel, UNIT_TYPES } from '../../configs/Constants';
22
+ import { useGetIdUser } from '../../hooks/Common';
23
+ import { useTranslations } from '../../hooks/Common/useTranslations';
19
24
  import { axiosGet } from '../../utils/Apis/axios';
20
- import Text from '../../commons/Text';
21
- import ItemOneTap from '../../commons/SubUnit/OneTap/ItemOneTap';
25
+ import { useBackendPermission } from '../../utils/Permission/backend';
22
26
  import Routes from '../../utils/Route';
23
- import Loading from './Components/Loading';
24
- import ItemAddNew from '../../commons/Device/ItemAddNew';
25
- import { useTranslations } from '../../hooks/Common/useTranslations';
26
- import { useGetIdUser } from '../../hooks/Common';
27
- import { AccessibilityLabel, UNIT_TYPES } from '../../configs/Constants';
28
27
  import { keyExtractor, ToastBottomHelper } from '../../utils/Utils';
29
- import { useBackendPermission } from '../../utils/Permission/backend';
28
+ import Loading from './Components/Loading';
29
+ import styles from './Styles/indexStyles';
30
30
 
31
31
  const Automate = () => {
32
32
  const t = useTranslations();
@@ -75,7 +75,6 @@ const Automate = () => {
75
75
  navigate(Routes.UnitStack, {
76
76
  screen: Routes.ScriptDetail,
77
77
  params: {
78
- id: item?.id,
79
78
  closeScreen: currentRouteName,
80
79
  preAutomate: item, // pre-loaded automate data
81
80
  },
@@ -164,29 +163,32 @@ const Automate = () => {
164
163
  <Image source={Images.arrowBack} style={styles.arrowRight} />
165
164
  </TouchableOpacity>
166
165
  </View>
167
- {!!automates?.length && (
168
- <View style={styles.automatesRow}>
169
- <ItemOneTap
170
- isOwner={isOwner}
171
- automate={automates[0]}
172
- wrapSyles={styles.wrapAutomateItem}
173
- onPressItem={() =>
174
- onPressItem(automates[0], unit_id, type, isOwner)
175
- }
176
- />
177
- {!!automates[1] && (
166
+ <View style={styles.automatesRow}>
167
+ {!!automates?.length && (
168
+ <>
178
169
  <ItemOneTap
179
170
  isOwner={isOwner}
180
- automate={automates[1]}
171
+ automate={automates[0]}
181
172
  wrapSyles={styles.wrapAutomateItem}
182
173
  onPressItem={() =>
183
- onPressItem(automates[1], unit_id, type, isOwner)
174
+ onPressItem(automates[0], unit_id, type, isOwner)
184
175
  }
185
176
  />
186
- )}
187
- </View>
188
- )}
189
- {!automates?.length && renderListFooterComponent(unit_id, automates)}
177
+ {!!automates[1] && (
178
+ <ItemOneTap
179
+ isOwner={isOwner}
180
+ automate={automates[1]}
181
+ wrapSyles={styles.wrapAutomateItem}
182
+ onPressItem={() =>
183
+ onPressItem(automates[1], unit_id, type, isOwner)
184
+ }
185
+ />
186
+ )}
187
+ </>
188
+ )}
189
+ {(!automates?.length || automates.length === 1) &&
190
+ renderListFooterComponent(unit_id, automates)}
191
+ </View>
190
192
  </View>
191
193
  );
192
194
  },
@@ -210,7 +212,7 @@ const Automate = () => {
210
212
  /* istanbul ignore next */
211
213
  headerRight: () => (
212
214
  <TouchableOpacity style={styles.buttonAdd}>
213
- <AntDesign name={'pluscircle'} size={28} color={Colors.Orange} />
215
+ <IconFill name={'plus-circle'} size={28} color={Colors.Orange} />
214
216
  </TouchableOpacity>
215
217
  ),
216
218
  });
@@ -1,16 +1,16 @@
1
- import React from 'react';
2
- import { act, create } from 'react-test-renderer';
3
- import MockAdapter from 'axios-mock-adapter';
4
1
  import { useRoute } from '@react-navigation/native';
2
+ import MockAdapter from 'axios-mock-adapter';
3
+ import React from 'react';
5
4
  import DraggableFlatList from 'react-native-draggable-flatlist';
5
+ import { act, create } from 'react-test-renderer';
6
6
 
7
7
  import ChangePosition from '../';
8
+ import BottomButtonView from '../../../commons/BottomButtonView';
9
+ import { API } from '../../../configs';
8
10
  import { SCProvider } from '../../../context';
9
11
  import { mockSCStore } from '../../../context/mockStore';
10
12
  import api from '../../../utils/Apis/axios';
11
- import { API } from '../../../configs';
12
13
  import { ToastBottomHelper } from '../../../utils/Utils';
13
- import BottomButtonView from '../../../commons/BottomButtonView';
14
14
 
15
15
  const mock = new MockAdapter(api.axiosInstance);
16
16
  const mockSetDisplay = jest.fn();
@@ -60,6 +60,6 @@ describe('Test ChangePosition', () => {
60
60
  expect(global.mockedGoBack).toHaveBeenCalled();
61
61
  expect(mockFetchData).toHaveBeenCalled();
62
62
  expect(mockSetDisplay).toHaveBeenCalled();
63
- expect(spyToastSuccess).toBeCalledWith('Updated widget successfully');
63
+ expect(spyToastSuccess).toHaveBeenCalledWith('Updated widget successfully');
64
64
  });
65
65
  });
@@ -49,7 +49,8 @@ const ChangePosition = () => {
49
49
  }
50
50
  };
51
51
 
52
- const renderItem = ({ item, index, drag, isActive }) => {
52
+ const renderItem = ({ item, getIndex, drag, isActive }) => {
53
+ const index = getIndex();
53
54
  return (
54
55
  <View style={styles.widgetItem}>
55
56
  <View style={[styles.itemOrder, isActive ? styles.isDragging : {}]}>
@@ -1,18 +1,18 @@
1
+ import MockAdapter from 'axios-mock-adapter';
1
2
  import React from 'react';
2
3
  import { TouchableOpacity } from 'react-native';
3
- import { create, act } from 'react-test-renderer';
4
- import MockAdapter from 'axios-mock-adapter';
4
+ import { act, create } from 'react-test-renderer';
5
5
 
6
- import { SCProvider } from '../../../../context';
7
- import { mockSCStore } from '../../../../context/mockStore';
6
+ import { useRoute } from '@react-navigation/native';
7
+ import Toast from 'react-native-toast-message';
8
8
  import EditDevice from '..';
9
9
  import AlertAction from '../../../../commons/AlertAction';
10
10
  import _TextInput from '../../../../commons/Form/TextInput';
11
- import { AccessibilityLabel } from '../../../../configs/Constants';
12
11
  import { API } from '../../../../configs';
13
- import { useRoute } from '@react-navigation/native';
12
+ import { AccessibilityLabel } from '../../../../configs/Constants';
13
+ import { SCProvider } from '../../../../context';
14
+ import { mockSCStore } from '../../../../context/mockStore';
14
15
  import api from '../../../../utils/Apis/axios';
15
- import Toast from 'react-native-toast-message';
16
16
  import { getTranslate } from '../../../../utils/I18n';
17
17
 
18
18
  const wrapComponent = (route) => (
@@ -63,7 +63,7 @@ describe('Test EditDevice', () => {
63
63
  await act(async () => {
64
64
  textInput.props.onChange('new_name');
65
65
  });
66
- mock.onPatch(API.DEVICE.SENSOR_DETAIL(1)).reply(200, { name: 'new_name' });
66
+ mock.onPatch(API.DEVICE.DEVICE_DETAIL(1)).reply(200, { name: 'new_name' });
67
67
  await act(async () => {
68
68
  await alertAction.props.rightButtonClick();
69
69
  });
@@ -92,11 +92,11 @@ describe('Test EditDevice', () => {
92
92
  await act(async () => {
93
93
  textInput.props.onChange('new_name');
94
94
  });
95
- mock.onPatch(API.DEVICE.SENSOR_DETAIL(1)).reply(400);
95
+ mock.onPatch(API.DEVICE.DEVICE_DETAIL(1)).reply(400);
96
96
  await act(async () => {
97
97
  await alertAction.props.rightButtonClick();
98
98
  });
99
- expect(Toast.show).toBeCalledWith({
99
+ expect(Toast.show).toHaveBeenCalledWith({
100
100
  type: 'error',
101
101
  position: 'bottom',
102
102
  text1: getTranslate('en', 'rename_failed'),
@@ -120,7 +120,7 @@ describe('Test EditDevice', () => {
120
120
  await buttonDelete[0].props.onPress();
121
121
  });
122
122
  expect(alertAction.props.visible).toBeTruthy();
123
- mock.onDelete(API.DEVICE.SENSOR_DETAIL(1)).reply(204);
123
+ mock.onDelete(API.DEVICE.DEVICE_DETAIL(1)).reply(204);
124
124
  await act(async () => {
125
125
  await alertAction.props.rightButtonClick();
126
126
  });
@@ -144,11 +144,11 @@ describe('Test EditDevice', () => {
144
144
  await buttonDelete[0].props.onPress();
145
145
  });
146
146
  expect(alertAction.props.visible).toBeTruthy();
147
- mock.onDelete(API.DEVICE.SENSOR_DETAIL(1)).reply(400);
147
+ mock.onDelete(API.DEVICE.DEVICE_DETAIL(1)).reply(400);
148
148
  await act(async () => {
149
149
  await alertAction.props.rightButtonClick();
150
150
  });
151
- expect(Toast.show).toBeCalledWith({
151
+ expect(Toast.show).toHaveBeenCalledWith({
152
152
  type: 'error',
153
153
  position: 'bottom',
154
154
  text1: getTranslate('en', 'remove_failed'),