@eohjsc/react-native-smart-city 0.2.23 → 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 (191) hide show
  1. package/README.md +1 -1
  2. package/assets/images/OneTap@1x.svg +14 -0
  3. package/index.js +0 -2
  4. package/package.json +11 -3
  5. package/src/Images/Common/arrow-back.png +0 -0
  6. package/src/Images/Common/checked@2x.png +0 -0
  7. package/src/Images/Common/checked@3x.png +0 -0
  8. package/src/Images/Common/file.png +0 -0
  9. package/src/Images/Common/fullscreen.png +0 -0
  10. package/src/Images/Common/refresh.png +0 -0
  11. package/src/commons/ActionGroup/NumberUpDownActionTemplate.js +1 -1
  12. package/src/commons/ActionGroup/OnOffTemplate/index.js +4 -4
  13. package/src/commons/ActionGroup/OptionsDropdownActionTemplate.js +1 -1
  14. package/src/commons/ActionGroup/StatesGridActionTemplate.js +2 -2
  15. package/src/commons/ActionGroup/__test__/OnOffButtonTemplate.test.js +8 -13
  16. package/src/commons/ActionGroup/__test__/OnOffTemplate.test.js +3 -3
  17. package/src/commons/ActionGroup/__test__/OptionsDropdownTemplate.test.js +26 -46
  18. package/src/commons/ActionGroup/__test__/ThreeButtonTemplate.test.js +11 -5
  19. package/src/commons/ActionGroup/__test__/TimerActionTemplate.test.js +14 -8
  20. package/src/commons/ActionGroup/__test__/TimerActionTemplateWithutConfigValue.test.js +17 -23
  21. package/src/commons/ActionGroup/__test__/__snapshots__/ThreeButtonTemplate.test.js.snap +241 -223
  22. package/src/commons/ActionGroup/__test__/index.test.js +39 -107
  23. package/src/commons/ActionTemplate/ActionTemplateStyles.js +14 -0
  24. package/src/commons/ActionTemplate/OnOffButtonAction.js +40 -0
  25. package/src/commons/ActionTemplate/OnOffButtonActionStyles.js +11 -0
  26. package/src/commons/ActionTemplate/OneButtonAction.js +26 -0
  27. package/src/commons/ActionTemplate/OneButtonActionStyles.js +11 -0
  28. package/src/commons/ActionTemplate/ThreeButtonAction.js +55 -0
  29. package/src/commons/ActionTemplate/ThreeButtonActionStyles.js +11 -0
  30. package/src/commons/ActionTemplate/__test__/OnOffButtonAction.test.js +34 -0
  31. package/src/commons/ActionTemplate/__test__/OneButtonAction.test.js +33 -0
  32. package/src/commons/ActionTemplate/__test__/ThreeButtonAction.test.js +35 -0
  33. package/src/commons/ActionTemplate/__test__/index.test.js +71 -0
  34. package/src/commons/ActionTemplate/index.js +69 -0
  35. package/src/commons/Automate/ItemAutomate.js +1 -31
  36. package/src/commons/Automate/ItemAutomateStyles.js +10 -7
  37. package/src/commons/Automate/ItemScriptAction.js +9 -5
  38. package/src/commons/Automate/ItemScriptActionStyles.js +4 -0
  39. package/src/commons/ChartLoading/__test__/ChartLoading.test.js +9 -7
  40. package/src/commons/Device/DeviceAlertStatus.js +3 -1
  41. package/src/commons/Device/Emergency/__test__/EmergencyButton.test.js +14 -6
  42. package/src/commons/Device/Emergency/__test__/EmergencyDetail.test.js +10 -2
  43. package/src/commons/Device/FlatListItems.js +1 -1
  44. package/src/commons/Device/ItemAddNew/index.js +6 -1
  45. package/src/commons/Device/WindDirection/Compass/Compass.test.js +19 -11
  46. package/src/commons/Device/WindSpeed/LinearChart/__test__/LinearChart.test.js +9 -3
  47. package/src/commons/Device/WindSpeed/LinearChart/__test__/__snapshots__/LinearChart.test.js.snap +0 -81
  48. package/src/commons/Device/__test__/ConnectedViewHeader.test.js +16 -8
  49. package/src/commons/Device/__test__/DeviceAlertStatus.test.js +13 -6
  50. package/src/commons/Device/__test__/DisconnectedView.test.js +13 -5
  51. package/src/commons/Device/__test__/FlatListItems.test.js +9 -1
  52. package/src/commons/Device/__test__/FooterInfo.test.js +13 -4
  53. package/src/commons/Device/__test__/SensorConnectedStatus.test.js +9 -1
  54. package/src/commons/Device/__test__/__snapshots__/DisconnectedView.test.js.snap +20 -20
  55. package/src/commons/DisplayChecking/__test__/DisplayChecking.test.js +28 -0
  56. package/src/commons/Explore/SearchBox/__test__/SearchBox.test.js +9 -2
  57. package/src/commons/Explore/__test__/CityItem.test.js +13 -15
  58. package/src/commons/Explore/__test__/HeaderLabel.test.js +15 -9
  59. package/src/commons/Header/HeaderCustom.js +7 -1
  60. package/src/commons/Header/__test__/HeaderCT.test.js +12 -4
  61. package/src/commons/ImagePicker/__test__/ImagePicker.test.js +19 -13
  62. package/src/commons/MediaPlayerDetail/__test__/MediaPlayerDetail.test.js +14 -8
  63. package/src/commons/MediaPlayerDetail/index.js +2 -0
  64. package/src/commons/MenuActionAddnew/__test__/MenuActionAddNew.test.js +11 -20
  65. package/src/commons/Modal/ModalBottom.js +51 -0
  66. package/src/commons/Modal/Styles/ModalBottomStyles.js +35 -0
  67. package/src/commons/Modal/index.js +2 -1
  68. package/src/commons/SelectActionCard/SelectActionStyles.js +16 -0
  69. package/src/commons/SelectActionCard/index.js +30 -0
  70. package/src/commons/Sharing/__test__/DevicePermissionsCheckbox.test.js +15 -9
  71. package/src/commons/Sharing/__test__/MemberList.test.js +17 -25
  72. package/src/commons/Sharing/__test__/StationDevicePermission.test.js +17 -12
  73. package/src/commons/Sharing/__test__/WrapHeaderScrollable.test.js +0 -9
  74. package/src/commons/SubUnit/OneTap/ItemOneTap.js +20 -9
  75. package/src/commons/SubUnit/OneTap/__test__/SubUnitAutomate.test.js +149 -0
  76. package/src/commons/SubUnit/OneTap/index.js +16 -6
  77. package/src/commons/SubUnit/ShortDetail.js +9 -5
  78. package/src/commons/SubUnit/__test__/ShortDetail.test.js +14 -6
  79. package/src/commons/Today/__test__/Today.test.js +9 -1
  80. package/src/commons/Today/__test__/__snapshots__/Today.test.js.snap +1 -1
  81. package/src/commons/UnitSummary/AirQuality/__test__/index.test.js +16 -17
  82. package/src/commons/UnitSummary/__test__/TotalPowerConsumption.test.js +15 -9
  83. package/src/configs/API.js +6 -1
  84. package/src/configs/Constants.js +42 -0
  85. package/src/context/SCContext.tsx +2 -26
  86. package/src/context/actionType.ts +11 -0
  87. package/src/context/mockStore.ts +49 -0
  88. package/src/context/reducer.ts +21 -0
  89. package/src/hooks/Common/__test__/useTranslations.test.js +23 -0
  90. package/src/hooks/Common/index.js +2 -0
  91. package/src/hooks/Common/useGetIdUser.js +9 -0
  92. package/src/iot/RemoteControl/__test__/Bluetooth.test.js +3 -6
  93. package/src/iot/RemoteControl/__test__/GoogleHome.test.js +3 -4
  94. package/src/iot/RemoteControl/__test__/Internet.test.js +1 -9
  95. package/src/iot/RemoteControl/__test__/LgThinq.test.js +7 -10
  96. package/src/navigations/UnitStack.js +14 -0
  97. package/src/screens/AQIGuide/__test__/AQIGuide.test.js +9 -1
  98. package/src/screens/AQIGuide/index.js +1 -1
  99. package/src/screens/ActivityLog/__test__/index.test.js +14 -39
  100. package/src/screens/AddCommon/SelectSubUnit.js +2 -2
  101. package/src/screens/AddCommon/__test__/SelectSubUnit.test.js +61 -0
  102. package/src/screens/AddCommon/__test__/SelectUnit.test.js +18 -10
  103. package/src/screens/AddNewAction/Device/__test__/index.test.js +42 -0
  104. package/src/screens/AddNewAction/SelectAction.js +152 -0
  105. package/src/screens/AddNewAction/SelectDevice.js +25 -11
  106. package/src/screens/AddNewAction/Styles/SelectActionStyles.js +24 -0
  107. package/src/screens/AddNewAction/__test__/SelectAction.test.js +172 -0
  108. package/src/screens/AddNewAction/__test__/SelectDevice.test.js +191 -0
  109. package/src/screens/AddNewAutoSmart/__test__/AddNewAutoSmart.test.js +55 -0
  110. package/src/screens/AddNewAutoSmart/index.js +85 -0
  111. package/src/screens/AddNewAutoSmart/styles/AddNewAutoSmartStyles.js +36 -0
  112. package/src/screens/AddNewDevice/__test__/AddNewDevice.test.js +29 -14
  113. package/src/screens/AddNewDevice/__test__/ConnectDevices.test.js +19 -8
  114. package/src/screens/AddNewDevice/__test__/ConnectingDevices.test.js +16 -7
  115. package/src/screens/AddNewGateway/__test__/AddNewGateway.test.js +35 -73
  116. package/src/screens/AddNewGateway/__test__/ConnectedGateway.test.js +14 -5
  117. package/src/screens/AddNewGateway/__test__/ConnectingGateway.test.js +20 -11
  118. package/src/screens/AddNewOneTap/__test__/AddNewOneTap.test.js +129 -0
  119. package/src/screens/AddNewOneTap/index.js +20 -7
  120. package/src/screens/AddNewScriptAction/AddNewScriptActionStyles.js +1 -0
  121. package/src/screens/AddNewScriptAction/index.js +21 -13
  122. package/src/screens/Device/__test__/detail.test.js +26 -19
  123. package/src/screens/Device/detail.js +5 -4
  124. package/src/screens/Device/hooks/useCountUp.js +4 -0
  125. package/src/screens/Device/styles.js +5 -1
  126. package/src/screens/DeviceInfo/__test__/index.test.js +12 -3
  127. package/src/screens/EditActionsList/Styles/indexStyles.js +11 -0
  128. package/src/screens/EditActionsList/index.js +83 -19
  129. package/src/screens/EmergencyContacts/__test__/EmergencyContactAddNew.test.js +15 -19
  130. package/src/screens/EmergencyContacts/__test__/EmergencyContactList.test.js +19 -24
  131. package/src/screens/EmergencyContacts/__test__/EmergencyContactsSelectContacts.test.js +10 -25
  132. package/src/screens/ManageAccess/__test__/ManageAccess.test.js +13 -1
  133. package/src/screens/ScanChipQR/__test__/ScanChipQR.test.js +2 -11
  134. package/src/screens/ScriptDetail/Styles/indexStyles.js +4 -1
  135. package/src/screens/ScriptDetail/index.js +30 -28
  136. package/src/screens/SharedUnit/__test__/TabHeader.test.js +40 -0
  137. package/src/screens/Sharing/__test__/MemberList.test.js +17 -14
  138. package/src/screens/Sharing/__test__/SelectPermission.test.js +16 -8
  139. package/src/screens/Sharing/__test__/SelectUser.test.js +33 -16
  140. package/src/screens/SubUnit/Detail.js +3 -3
  141. package/src/screens/SubUnit/ManageSubUnit.js +8 -8
  142. package/src/screens/SubUnit/__test__/AddSubUnit.test.js +17 -12
  143. package/src/screens/SubUnit/__test__/Detail.test.js +11 -31
  144. package/src/screens/SubUnit/__test__/ManageSubUnit.test.js +42 -32
  145. package/src/screens/TDSGuide/__test__/TDSGuide.test.js +9 -1
  146. package/src/screens/UVIndexGuide/__test__/UVIndexGuide.test.js +9 -1
  147. package/src/screens/Unit/Detail.js +33 -11
  148. package/src/screens/Unit/ManageUnit.js +1 -1
  149. package/src/screens/Unit/__test__/AddMenu.test.js +15 -15
  150. package/src/screens/Unit/__test__/CheckSendEmail.test.js +19 -10
  151. package/src/screens/Unit/__test__/Detail.test.js +92 -33
  152. package/src/screens/Unit/__test__/ManageUnit.test.js +16 -23
  153. package/src/screens/Unit/components/__test__/SharedUnit.test.js +11 -2
  154. package/src/screens/UnitSummary/__test__/index.test.js +12 -4
  155. package/src/screens/UnitSummary/components/3PPowerConsumption/__test__/3PPowerConsumption.test.js +13 -3
  156. package/src/screens/UnitSummary/components/PowerConsumption/__test__/PowerConsumption.test.js +16 -12
  157. package/src/screens/UnitSummary/components/RunningDevices/__test__/index.test.js +2 -2
  158. package/src/screens/UnitSummary/components/UvIndex/__test__/__snapshots__/index.test.js.snap +37 -37
  159. package/src/screens/UnitSummary/components/UvIndex/__test__/index.test.js +14 -6
  160. package/src/screens/UnitSummary/components/WaterQuality/__test__/index.test.js +11 -5
  161. package/src/screens/UnitSummary/components/__test__/TotalPowerConsumption.test.js +13 -7
  162. package/src/screens/WaterQualityGuide/__test__/index.test.js +12 -12
  163. package/src/utils/I18n/translations/en.json +9 -2
  164. package/src/utils/I18n/translations/vi.json +10 -3
  165. package/src/utils/Route/index.js +3 -2
  166. package/assets/images/Event.svg +0 -9
  167. package/src/commons/ChartLoading/__test__/__snapshots__/ChartLoading.test.js.snap +0 -66
  168. package/src/commons/Device/HistoryChart/__test__/HistoryChart.test.js +0 -57
  169. package/src/commons/Device/HistoryChart/__test__/__snapshots__/HistoryChart.test.js.snap +0 -593
  170. package/src/commons/Explore/SearchBox/__test__/__snapshots__/SearchBox.test.js.snap +0 -59
  171. package/src/commons/Explore/__test__/HeaderExplore.test.js +0 -21
  172. package/src/commons/Header/__test__/Header.test.js +0 -24
  173. package/src/commons/MenuActionAddnew/__test__/__snapshots__/MenuActionAddNew.test.js.snap +0 -788
  174. package/src/commons/Sharing/__test__/__snapshots__/WrapHeaderScrollable.test.js.snap +0 -174
  175. package/src/commons/UnitSummary/AirQuality/__test__/__snapshots__/index.test.js.snap +0 -26679
  176. package/src/iot/RemoteControl/__test__/index.test.js +0 -102
  177. package/src/iot/__test__/Monitor.test.js +0 -119
  178. package/src/navigations/AddNewActionStack.js +0 -23
  179. package/src/screens/EmergencyContacts/__test__/__snapshots__/EmergencyContactAddNew.test.js.snap +0 -1706
  180. package/src/screens/EmergencyContacts/__test__/__snapshots__/EmergencyContactList.test.js.snap +0 -4276
  181. package/src/screens/EmergencyContacts/__test__/__snapshots__/EmergencyContactsSelectContacts.test.js.snap +0 -2240
  182. package/src/screens/SyncLGDevice/__test__/AddLGDevice.test.js +0 -359
  183. package/src/screens/Unit/MyAllUnit/__test__/__snapshots__/index.test.js.snap +0 -1001
  184. package/src/screens/Unit/MyAllUnit/__test__/index.test.js +0 -48
  185. package/src/screens/Unit/components/MyAllUnit/__test__/__snapshots__/index.test.js.snap +0 -1001
  186. package/src/screens/Unit/components/MyAllUnit/__test__/index.test.js +0 -48
  187. package/src/screens/Unit/components/__test__/MyUnit.test.js +0 -85
  188. package/src/screens/UnitSummary/components/WaterQuality/__test__/__snapshots__/index.test.js.snap +0 -1574
  189. package/src/screens/WaterQualityGuide/__test__/__snapshots__/index.test.js.snap +0 -3375
  190. package/src/utils/Converter/__test__/time.test.js +0 -128
  191. package/src/utils/I18n/index.test.js +0 -7
@@ -88,7 +88,7 @@ exports[`Test DisconnectedView render DisconnectedView icon barrier 1`] = `
88
88
  ]
89
89
  }
90
90
  >
91
- Ngắt kết nối
91
+ Disconnected
92
92
  </Text>
93
93
  </View>
94
94
  <View
@@ -143,7 +143,7 @@ exports[`Test DisconnectedView render DisconnectedView icon barrier 1`] = `
143
143
  ]
144
144
  }
145
145
  >
146
- Gợi ý
146
+ Suggestions
147
147
  :
148
148
  </Text>
149
149
  </View>
@@ -191,7 +191,7 @@ exports[`Test DisconnectedView render DisconnectedView icon barrier 1`] = `
191
191
  ]
192
192
  }
193
193
  >
194
- Kiểm tra lại nguồn điện của thiết bị.
194
+ Check the power on your device.
195
195
  </Text>
196
196
  </View>
197
197
  <View
@@ -238,7 +238,7 @@ exports[`Test DisconnectedView render DisconnectedView icon barrier 1`] = `
238
238
  ]
239
239
  }
240
240
  >
241
- Kiểm tra lại Wi-Fi/tín hiệu di động hoặc thử khởi động lại.
241
+ Check the Wi-Fi/Cellular signal or try to reset it.
242
242
  </Text>
243
243
  </View>
244
244
  </View>
@@ -333,7 +333,7 @@ exports[`Test DisconnectedView render DisconnectedView icon dooor 1`] = `
333
333
  ]
334
334
  }
335
335
  >
336
- Ngắt kết nối
336
+ Disconnected
337
337
  </Text>
338
338
  </View>
339
339
  <View
@@ -388,7 +388,7 @@ exports[`Test DisconnectedView render DisconnectedView icon dooor 1`] = `
388
388
  ]
389
389
  }
390
390
  >
391
- Gợi ý
391
+ Suggestions
392
392
  :
393
393
  </Text>
394
394
  </View>
@@ -436,7 +436,7 @@ exports[`Test DisconnectedView render DisconnectedView icon dooor 1`] = `
436
436
  ]
437
437
  }
438
438
  >
439
- Kiểm tra lại nguồn điện của thiết bị.
439
+ Check the power on your device.
440
440
  </Text>
441
441
  </View>
442
442
  <View
@@ -483,7 +483,7 @@ exports[`Test DisconnectedView render DisconnectedView icon dooor 1`] = `
483
483
  ]
484
484
  }
485
485
  >
486
- Kiểm tra lại Wi-Fi/tín hiệu di động hoặc thử khởi động lại.
486
+ Check the Wi-Fi/Cellular signal or try to reset it.
487
487
  </Text>
488
488
  </View>
489
489
  </View>
@@ -578,7 +578,7 @@ exports[`Test DisconnectedView render DisconnectedView icon sensor 1`] = `
578
578
  ]
579
579
  }
580
580
  >
581
- Ngắt kết nối
581
+ Disconnected
582
582
  </Text>
583
583
  </View>
584
584
  <View
@@ -633,7 +633,7 @@ exports[`Test DisconnectedView render DisconnectedView icon sensor 1`] = `
633
633
  ]
634
634
  }
635
635
  >
636
- Gợi ý
636
+ Suggestions
637
637
  :
638
638
  </Text>
639
639
  </View>
@@ -681,7 +681,7 @@ exports[`Test DisconnectedView render DisconnectedView icon sensor 1`] = `
681
681
  ]
682
682
  }
683
683
  >
684
- Kiểm tra lại nguồn điện của thiết bị.
684
+ Check the power on your device.
685
685
  </Text>
686
686
  </View>
687
687
  <View
@@ -728,7 +728,7 @@ exports[`Test DisconnectedView render DisconnectedView icon sensor 1`] = `
728
728
  ]
729
729
  }
730
730
  >
731
- Kiểm tra lại Wi-Fi/tín hiệu di động hoặc thử khởi động lại.
731
+ Check the Wi-Fi/Cellular signal or try to reset it.
732
732
  </Text>
733
733
  </View>
734
734
  </View>
@@ -823,7 +823,7 @@ exports[`Test DisconnectedView render DisconnectedView icon test 1`] = `
823
823
  ]
824
824
  }
825
825
  >
826
- Ngắt kết nối
826
+ Disconnected
827
827
  </Text>
828
828
  </View>
829
829
  <View
@@ -878,7 +878,7 @@ exports[`Test DisconnectedView render DisconnectedView icon test 1`] = `
878
878
  ]
879
879
  }
880
880
  >
881
- Gợi ý
881
+ Suggestions
882
882
  :
883
883
  </Text>
884
884
  </View>
@@ -926,7 +926,7 @@ exports[`Test DisconnectedView render DisconnectedView icon test 1`] = `
926
926
  ]
927
927
  }
928
928
  >
929
- Kiểm tra lại nguồn điện của thiết bị.
929
+ Check the power on your device.
930
930
  </Text>
931
931
  </View>
932
932
  <View
@@ -973,7 +973,7 @@ exports[`Test DisconnectedView render DisconnectedView icon test 1`] = `
973
973
  ]
974
974
  }
975
975
  >
976
- Kiểm tra lại Wi-Fi/tín hiệu di động hoặc thử khởi động lại.
976
+ Check the Wi-Fi/Cellular signal or try to reset it.
977
977
  </Text>
978
978
  </View>
979
979
  </View>
@@ -1068,7 +1068,7 @@ exports[`Test DisconnectedView render DisconnectedView icon wind 1`] = `
1068
1068
  ]
1069
1069
  }
1070
1070
  >
1071
- Ngắt kết nối
1071
+ Disconnected
1072
1072
  </Text>
1073
1073
  </View>
1074
1074
  <View
@@ -1123,7 +1123,7 @@ exports[`Test DisconnectedView render DisconnectedView icon wind 1`] = `
1123
1123
  ]
1124
1124
  }
1125
1125
  >
1126
- Gợi ý
1126
+ Suggestions
1127
1127
  :
1128
1128
  </Text>
1129
1129
  </View>
@@ -1171,7 +1171,7 @@ exports[`Test DisconnectedView render DisconnectedView icon wind 1`] = `
1171
1171
  ]
1172
1172
  }
1173
1173
  >
1174
- Kiểm tra lại nguồn điện của thiết bị.
1174
+ Check the power on your device.
1175
1175
  </Text>
1176
1176
  </View>
1177
1177
  <View
@@ -1218,7 +1218,7 @@ exports[`Test DisconnectedView render DisconnectedView icon wind 1`] = `
1218
1218
  ]
1219
1219
  }
1220
1220
  >
1221
- Kiểm tra lại Wi-Fi/tín hiệu di động hoặc thử khởi động lại.
1221
+ Check the Wi-Fi/Cellular signal or try to reset it.
1222
1222
  </Text>
1223
1223
  </View>
1224
1224
  </View>
@@ -0,0 +1,28 @@
1
+ import React from 'react';
2
+ import renderer, { act } from 'react-test-renderer';
3
+ import { TouchableOpacity } from 'react-native';
4
+ import LoadingMessage from '../index';
5
+ import { SCProvider } from '../../../context';
6
+ import { mockSCStore } from '../../../context/mockStore';
7
+
8
+ const wrapComponent = (visible, onClose, message) => (
9
+ <SCProvider initState={mockSCStore({})}>
10
+ <LoadingMessage visible={visible} onClose={onClose} message={message} />
11
+ </SCProvider>
12
+ );
13
+
14
+ describe('Test DisplayChecking', () => {
15
+ let tree;
16
+ let visible = true;
17
+ let message = '';
18
+ let onClose = () => {};
19
+
20
+ test('create LoadingMessage', () => {
21
+ act(() => {
22
+ tree = renderer.create(wrapComponent(visible, message, onClose));
23
+ });
24
+ const instance = tree.root;
25
+ const textInputs = instance.findAllByType(TouchableOpacity);
26
+ expect(textInputs.length).toBe(1);
27
+ });
28
+ });
@@ -2,9 +2,17 @@ import SearchBox from '../index';
2
2
  import React from 'react';
3
3
  import { TouchableOpacity } from 'react-native';
4
4
  import renderer, { act } from 'react-test-renderer';
5
+ import { SCProvider } from '../../../../context';
6
+ import { mockSCStore } from '../../../../context/mockStore';
5
7
 
6
8
  const mockedNavigate = jest.fn();
7
9
 
10
+ const wrapComponent = () => (
11
+ <SCProvider initState={mockSCStore({})}>
12
+ <SearchBox isBack={true} />
13
+ </SCProvider>
14
+ );
15
+
8
16
  jest.mock('@react-navigation/native', () => {
9
17
  return {
10
18
  ...jest.requireActual('@react-navigation/native'),
@@ -18,7 +26,7 @@ describe('Test SearchBox', () => {
18
26
  let wrapper;
19
27
  test('SearchBox render', () => {
20
28
  act(() => {
21
- wrapper = renderer.create(<SearchBox isBack={true} />);
29
+ wrapper = renderer.create(wrapComponent());
22
30
  });
23
31
  const instance = wrapper.root;
24
32
  const button = instance.findByType(TouchableOpacity);
@@ -26,7 +34,6 @@ describe('Test SearchBox', () => {
26
34
  act(() => {
27
35
  button.props.onPress();
28
36
  });
29
- expect(wrapper.toJSON()).toMatchSnapshot();
30
37
  expect(mockedNavigate.mock.calls.length).toBe(1);
31
38
  });
32
39
  });
@@ -6,9 +6,17 @@ import axios from 'axios';
6
6
  import { API } from '../../../configs';
7
7
  import Pin from '../../../../assets/images/Explore/Pin.svg';
8
8
  import PinOutline from '../../../../assets/images/Explore/PinOutline.svg';
9
+ import { SCProvider } from '../../../context';
10
+ import { mockSCStore } from '../../../context/mockStore';
9
11
 
10
12
  const mockedDispatch = jest.fn();
11
13
 
14
+ const wrapComponent = (item, mockeSelect) => (
15
+ <SCProvider initState={mockSCStore({})}>
16
+ <CityItem item={item} onSelect={mockeSelect} />
17
+ </SCProvider>
18
+ );
19
+
12
20
  jest.mock('axios');
13
21
  jest.mock('react-redux', () => ({
14
22
  ...jest.requireActual('react-redux'),
@@ -38,9 +46,7 @@ describe('Test CityItem', () => {
38
46
  return response;
39
47
  });
40
48
  await act(async () => {
41
- tree = await renderer.create(
42
- <CityItem item={item} onSelect={mockeSelect} />
43
- );
49
+ tree = await renderer.create(wrapComponent(item, mockeSelect));
44
50
  });
45
51
  const instance = tree.root;
46
52
  const buttons = instance.findAllByType(TouchableOpacity);
@@ -82,9 +88,7 @@ describe('Test CityItem', () => {
82
88
  return response;
83
89
  });
84
90
  await act(async () => {
85
- tree = await renderer.create(
86
- <CityItem item={item} onSelect={mockeSelect} />
87
- );
91
+ tree = await renderer.create(wrapComponent(item, mockeSelect));
88
92
  });
89
93
  const instance = tree.root;
90
94
 
@@ -111,9 +115,7 @@ describe('Test CityItem', () => {
111
115
  return response;
112
116
  });
113
117
  await act(async () => {
114
- tree = await renderer.create(
115
- <CityItem item={item} onSelect={mockeSelect} />
116
- );
118
+ tree = await renderer.create(wrapComponent(item, mockeSelect));
117
119
  });
118
120
  const instance = tree.root;
119
121
 
@@ -140,9 +142,7 @@ describe('Test CityItem', () => {
140
142
  return response;
141
143
  });
142
144
  await act(async () => {
143
- tree = await renderer.create(
144
- <CityItem item={item} onSelect={mockeSelect} />
145
- );
145
+ tree = await renderer.create(wrapComponent(item, mockeSelect));
146
146
  });
147
147
  const instance = tree.root;
148
148
  const pin = instance.findAllByType(Pin);
@@ -164,9 +164,7 @@ describe('Test CityItem', () => {
164
164
  const mockeSelect = jest.fn();
165
165
 
166
166
  await act(async () => {
167
- tree = await renderer.create(
168
- <CityItem item={item} onSelect={mockeSelect} />
169
- );
167
+ tree = await renderer.create(wrapComponent(item, mockeSelect));
170
168
  });
171
169
  const instance = tree.root;
172
170
  const buttons = instance.findAllByType(TouchableOpacity);
@@ -2,19 +2,25 @@ import React from 'react';
2
2
  import renderer, { act } from 'react-test-renderer';
3
3
  import { TouchableOpacity } from 'react-native';
4
4
  import HeaderLabel from '../HeaderLabel';
5
+ import { SCProvider } from '../../../context';
6
+ import { mockSCStore } from '../../../context/mockStore';
7
+
8
+ const wrapComponent = (mockFunc) => (
9
+ <SCProvider initState={mockSCStore({})}>
10
+ <HeaderLabel
11
+ seeMore={true}
12
+ title={'popular_locations'}
13
+ onPress={mockFunc}
14
+ />
15
+ </SCProvider>
16
+ );
5
17
 
6
18
  let tree;
7
19
  describe('Test HeaderLabel', () => {
8
- test('render HeaderLabel', () => {
20
+ test('render HeaderLabel', async () => {
9
21
  const mockFunc = jest.fn();
10
- act(() => {
11
- tree = renderer.create(
12
- <HeaderLabel
13
- seeMore={true}
14
- title={'popular_locations'}
15
- onPress={mockFunc}
16
- />
17
- );
22
+ await act(() => {
23
+ tree = renderer.create(wrapComponent(mockFunc));
18
24
  });
19
25
  const instance = tree.root;
20
26
  const button = instance.findAllByType(TouchableOpacity);
@@ -17,6 +17,7 @@ const HeaderCustom = ({
17
17
  isDisableRefresh = false,
18
18
  titleStyles,
19
19
  isShowClose = false,
20
+ onGoBack,
20
21
  }) => {
21
22
  const t = useTranslations();
22
23
  const { goBack } = useNavigation();
@@ -26,9 +27,14 @@ const HeaderCustom = ({
26
27
  // eslint-disable-next-line no-alert
27
28
  const handleClose = () => alert(t('feature_under_development'));
28
29
  const handleShowMenuAction = () => showPopoverWithRef(refMenuAction);
30
+ const handleGoback = () => {
31
+ onGoBack && onGoBack();
32
+ goBack();
33
+ };
34
+
29
35
  return (
30
36
  <View style={[styles.wrap, isShowSeparator && styles.separator]}>
31
- <TouchableOpacity style={styles.buttonBack} onPress={goBack}>
37
+ <TouchableOpacity style={styles.buttonBack} onPress={handleGoback}>
32
38
  <Image source={Images.arrowBack} style={styles.iconBack} />
33
39
  </TouchableOpacity>
34
40
  <View style={styles.wrapTitle}>
@@ -3,10 +3,18 @@ import { TouchableOpacity } from 'react-native';
3
3
  import { act } from '@testing-library/react-hooks';
4
4
  import { create } from 'react-test-renderer';
5
5
  import { HeaderCustom } from '..';
6
+ import { SCProvider } from '../../../context';
7
+ import { mockSCStore } from '../../../context/mockStore';
6
8
 
7
9
  const mockOnRefresh = jest.fn();
8
10
  const mockShowPopoverWithRef = jest.fn();
9
11
 
12
+ const wrapComponent = (defaultProps) => (
13
+ <SCProvider initState={mockSCStore({})}>
14
+ <HeaderCustom {...defaultProps} />
15
+ </SCProvider>
16
+ );
17
+
10
18
  describe('Test HeaderCustom', () => {
11
19
  let tree;
12
20
  let defaultProps = {
@@ -18,7 +26,7 @@ describe('Test HeaderCustom', () => {
18
26
 
19
27
  it('Test not render right', () => {
20
28
  act(() => {
21
- tree = create(<HeaderCustom {...defaultProps} />);
29
+ tree = create(wrapComponent(defaultProps));
22
30
  });
23
31
  const instance = tree.root;
24
32
  const TouchableOpacityElement = instance.findAllByType(TouchableOpacity);
@@ -28,7 +36,7 @@ describe('Test HeaderCustom', () => {
28
36
  it('Test render right', () => {
29
37
  defaultProps = { ...defaultProps, isShowRight: true };
30
38
  act(() => {
31
- tree = create(<HeaderCustom {...defaultProps} />);
39
+ tree = create(wrapComponent(defaultProps));
32
40
  });
33
41
  const instance = tree.root;
34
42
  const TouchableOpacityElement = instance.findAllByType(TouchableOpacity);
@@ -45,10 +53,10 @@ describe('Test HeaderCustom', () => {
45
53
 
46
54
  it('Test render without props', () => {
47
55
  act(() => {
48
- tree = create(<HeaderCustom />);
56
+ tree = create(wrapComponent(defaultProps));
49
57
  });
50
58
  const instance = tree.root;
51
59
  const TouchableOpacityElement = instance.findAllByType(TouchableOpacity);
52
- expect(TouchableOpacityElement).toHaveLength(1);
60
+ expect(TouchableOpacityElement).toHaveLength(3);
53
61
  });
54
62
  });
@@ -3,6 +3,23 @@ import renderer, { act } from 'react-test-renderer';
3
3
 
4
4
  import ImagePicker from '../index';
5
5
  import ButtonPopup from '../../ButtonPopup';
6
+ import { SCProvider } from '../../../context';
7
+ import { mockSCStore } from '../../../context/mockStore';
8
+
9
+ const wrapComponent = (options) => (
10
+ <SCProvider initState={mockSCStore({})}>
11
+ <ImagePicker
12
+ showImagePicker={true}
13
+ setShowImagePicker={''}
14
+ setImageUrl={'setImageUrl'}
15
+ optionsCapture={options}
16
+ optionsSelect={{
17
+ mediaType: 'photo',
18
+ quality: 1,
19
+ }}
20
+ />
21
+ </SCProvider>
22
+ );
6
23
 
7
24
  describe('Test ImagePicker', () => {
8
25
  let tree;
@@ -13,7 +30,7 @@ describe('Test ImagePicker', () => {
13
30
  test('create ImagePicker', () => {
14
31
  Platform.OS = 'android';
15
32
  act(() => {
16
- tree = renderer.create(<ImagePicker />);
33
+ tree = renderer.create(wrapComponent());
17
34
  });
18
35
  const instance = tree.root;
19
36
  const textInputs = instance.findAllByType(ButtonPopup);
@@ -29,18 +46,7 @@ describe('Test ImagePicker', () => {
29
46
  saveToPhotos: true,
30
47
  };
31
48
  act(() => {
32
- tree = renderer.create(
33
- <ImagePicker
34
- showImagePicker={true}
35
- setShowImagePicker={''}
36
- setImageUrl={'setImageUrl'}
37
- optionsCapture={options}
38
- optionsSelect={{
39
- mediaType: 'photo',
40
- quality: 1,
41
- }}
42
- />
43
- );
49
+ tree = renderer.create(wrapComponent(options));
44
50
  });
45
51
  const instance = tree.root;
46
52
  const textInputs = instance.findAllByType(ButtonPopup);
@@ -3,20 +3,26 @@ import { act, create } from 'react-test-renderer';
3
3
  import { TouchableOpacity, Text } from 'react-native';
4
4
  import MediaPlayerDetail from '../index';
5
5
  import PauseIcon from '../../../assets/images/Common/Pause.svg';
6
+ import { SCProvider } from '../../../context';
7
+ import { mockSCStore } from '../../../context/mockStore';
8
+
9
+ const wrapComponent = () => (
10
+ <SCProvider initState={mockSCStore({})}>
11
+ <MediaPlayerDetail
12
+ uri={'rtsp://admin:hd111111:1111111/Streaming/Channels/101/'}
13
+ key={'camera-1'}
14
+ thumbnail={{ uri: 'https://abc.com/image.png' }}
15
+ cameraName={'cameraName'}
16
+ />
17
+ </SCProvider>
18
+ );
6
19
 
7
20
  describe('Test MediaPlayerDetail', () => {
8
21
  let wrapper;
9
22
 
10
23
  test('MediaPlayerDetail render when onTap setPause', async () => {
11
24
  await act(async () => {
12
- wrapper = await create(
13
- <MediaPlayerDetail
14
- uri={'rtsp://admin:hd111111:1111111/Streaming/Channels/101/'}
15
- key={'camera-1'}
16
- thumbnail={{ uri: 'https://abc.com/image.png' }}
17
- cameraName={'cameraName'}
18
- />
19
- );
25
+ wrapper = await create(wrapComponent());
20
26
  });
21
27
  const instance = wrapper.root;
22
28
  const buttons = instance.findAllByType(TouchableOpacity);
@@ -9,6 +9,7 @@ import { Colors, Constants, Images } from '../../configs';
9
9
  import { colorOpacity } from '../../utils/Converter/color';
10
10
  import styles from './MediaPlayerDetailStyles';
11
11
  import FImage from '../../commons/FImage';
12
+ import { TESTID } from '../../configs/Constants';
12
13
 
13
14
  const MediaPlayerDetail = memo(
14
15
  ({
@@ -151,6 +152,7 @@ const MediaPlayerDetail = memo(
151
152
  <TouchableOpacity
152
153
  onPress={onFullScreen}
153
154
  style={styles.iconFullScreen}
155
+ testID={TESTID.SUB_UNIT_FULL_CAMERA}
154
156
  >
155
157
  <Image source={Images.fullscreen} />
156
158
  </TouchableOpacity>
@@ -1,41 +1,32 @@
1
1
  import React from 'react';
2
2
  import { create, act } from 'react-test-renderer';
3
+ import { SCProvider } from '../../../context';
4
+ import { mockSCStore } from '../../../context/mockStore';
3
5
  import { ImageButton, MenuActionAddnew } from '../../index';
4
6
 
7
+ const wrapComponent = (dataActions) => (
8
+ <SCProvider initState={mockSCStore({})}>
9
+ <MenuActionAddnew dataActions={dataActions} />
10
+ </SCProvider>
11
+ );
12
+
5
13
  const item = (id) => ({ id, image: '', text: '' });
6
14
 
7
15
  describe('Test MenuActionAddNew', () => {
8
16
  const dataActions = [item(1), item(2)];
9
17
  let wrapper;
10
18
 
11
- test('create MenuActionAddNew', () => {
12
- act(() => {
13
- wrapper = create(<MenuActionAddnew dataActions={dataActions} />);
14
- });
15
- expect(wrapper.toJSON()).toMatchSnapshot();
16
- });
17
-
18
- test('create MenuActionAddNew list data > 3', () => {
19
- dataActions.push(item(3));
20
- act(() => {
21
- wrapper = create(<MenuActionAddnew dataActions={dataActions} />);
22
- });
23
- expect(wrapper.toJSON()).toMatchSnapshot();
24
- });
25
-
26
19
  test('onItemClick MenuActionAddNew', () => {
27
20
  const mockFunc = jest.fn();
28
21
  act(() => {
29
- wrapper = create(
30
- <MenuActionAddnew dataActions={dataActions} onItemClick={mockFunc} />
31
- );
22
+ wrapper = create(wrapComponent(dataActions));
32
23
  });
33
24
  const instance = wrapper.root;
34
25
  const imageButtons = instance.findAllByType(ImageButton);
35
26
  act(() => {
36
27
  imageButtons[0].props.onPress();
37
28
  });
38
- expect(imageButtons.length).toEqual(3);
39
- expect(mockFunc.mock.calls.length).toBe(1);
29
+ expect(imageButtons.length).toEqual(2);
30
+ expect(mockFunc.mock.calls.length).toBe(0);
40
31
  });
41
32
  });
@@ -0,0 +1,51 @@
1
+ import React, { useEffect } from 'react';
2
+ import { View } from 'react-native';
3
+ import { ModalCustom } from '.';
4
+ import styles from './Styles/ModalBottomStyles';
5
+ import Text from '../Text';
6
+ import { useTranslations } from '../../hooks/Common/useTranslations';
7
+ import { Colors } from '../../configs';
8
+ import { useStatusBarPreview } from '../../hooks/Common/useStatusBar';
9
+
10
+ const ModalBottom = ({
11
+ isVisible,
12
+ title = '',
13
+ modalStyle,
14
+ wrapStyle,
15
+ children,
16
+ cancelColor = Colors.Primary,
17
+ removeColor = Colors.Primary,
18
+ onClose,
19
+ onRemove,
20
+ }) => {
21
+ const t = useTranslations();
22
+
23
+ useEffect(() => {
24
+ // eslint-disable-next-line react-hooks/rules-of-hooks
25
+ useStatusBarPreview(
26
+ isVisible ? Colors.BlackTransparent5 : Colors.TextTransparent
27
+ );
28
+ }, [isVisible]);
29
+
30
+ return (
31
+ <ModalCustom isVisible={isVisible} style={[styles.modal, modalStyle]}>
32
+ <View style={[styles.wrap, wrapStyle]}>
33
+ <Text type="H4" semibold color={Colors.Gray9} style={styles.padding16}>
34
+ {title}
35
+ </Text>
36
+ <View style={styles.viewSeparated} />
37
+ {children}
38
+ <View style={styles.viewBottom}>
39
+ <Text onPress={onClose} type="H4" semibold color={cancelColor}>
40
+ {t('cancel')}
41
+ </Text>
42
+ <Text onPress={onRemove} type="H4" semibold color={removeColor}>
43
+ {t('remove')}
44
+ </Text>
45
+ </View>
46
+ </View>
47
+ </ModalCustom>
48
+ );
49
+ };
50
+
51
+ export default ModalBottom;
@@ -0,0 +1,35 @@
1
+ import { StyleSheet } from 'react-native';
2
+ import { Colors } from '../../../configs';
3
+
4
+ export default StyleSheet.create({
5
+ modal: {
6
+ margin: 0,
7
+ padding: 0,
8
+ },
9
+ wrap: {
10
+ position: 'absolute',
11
+ bottom: 0,
12
+ left: 0,
13
+ right: 0,
14
+ paddingBottom: 24,
15
+ borderTopLeftRadius: 10,
16
+ borderTopRightRadius: 10,
17
+ paddingTop: 24,
18
+ backgroundColor: Colors.White,
19
+ },
20
+ padding16: {
21
+ paddingHorizontal: 16,
22
+ },
23
+ viewSeparated: {
24
+ height: 1,
25
+ backgroundColor: Colors.Gray4,
26
+ marginTop: 16,
27
+ },
28
+ viewBottom: {
29
+ flexDirection: 'row',
30
+ justifyContent: 'space-between',
31
+ alignItems: 'center',
32
+ paddingHorizontal: 67,
33
+ marginTop: 8,
34
+ },
35
+ });
@@ -1,4 +1,5 @@
1
1
  import ModalCustom from './ModalCustom';
2
2
  import ModalFullVideo from './ModalFullVideo';
3
+ import ModalBottom from './ModalBottom';
3
4
 
4
- export { ModalCustom, ModalFullVideo };
5
+ export { ModalCustom, ModalFullVideo, ModalBottom };