@eohjsc/react-native-smart-city 0.3.90 → 0.3.91

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 (164) hide show
  1. package/package.json +1 -1
  2. package/src/commons/ActionGroup/__test__/NumberUpDownTemplate.test.js +1 -1
  3. package/src/commons/ActionTemplate/CurtainAction.js +2 -2
  4. package/src/commons/ActionTemplate/OnOffButtonAction.js +2 -2
  5. package/src/commons/ActionTemplate/OnOffSimpleAction.js +2 -2
  6. package/src/commons/ActionTemplate/OnOffSmartLockAction.js +2 -2
  7. package/src/commons/ActionTemplate/OneButtonAction.js +2 -2
  8. package/src/commons/ActionTemplate/ThreeButtonAction.js +2 -2
  9. package/src/commons/ActionTemplate/__test__/CurtainAction.test.js +1 -1
  10. package/src/commons/ActionTemplate/__test__/OnOffButtonAction.test.js +1 -1
  11. package/src/commons/ActionTemplate/__test__/OnOffSimpleAction.test.js +1 -1
  12. package/src/commons/ActionTemplate/__test__/OnOffSmartLockAction.test.js +1 -1
  13. package/src/commons/ActionTemplate/__test__/OneButtonAction.test.js +1 -1
  14. package/src/commons/ActionTemplate/__test__/ThreeButtonAction.test.js +1 -1
  15. package/src/commons/ActionTemplate/__test__/index.test.js +21 -70
  16. package/src/commons/ActionTemplate/index.js +19 -55
  17. package/src/commons/Alert/__test__/Alert.test.js +1 -1
  18. package/src/commons/Auth/__test__/OtpInputList.test.js +4 -2
  19. package/src/commons/Auth/__test__/SocialButton.test.js +4 -2
  20. package/src/commons/BackDefault/__test__/BackDefault.test.js +1 -1
  21. package/src/commons/Button/__test__/Button.test.js +1 -1
  22. package/src/commons/ButtonPopup/__test__/ButtonPopup.test.js +1 -1
  23. package/src/commons/Calendar/__test__/Calendar.test.js +1 -1
  24. package/src/commons/ChartLoading/__test__/ChartLoading.test.js +1 -1
  25. package/src/commons/CircleButton/__test__/CircleButton.test.js +1 -1
  26. package/src/commons/CircleView/__test__/CircleView.test.js +1 -1
  27. package/src/commons/DateTimeRangeChange/__test__/DateTimeButton.test.js +4 -2
  28. package/src/commons/DateTimeRangeChange/index.js +31 -48
  29. package/src/commons/Device/Emergency/__test__/EmergencyButton.test.js +2 -2
  30. package/src/commons/Device/Emergency/__test__/EmergencyDetail.test.js +1 -1
  31. package/src/commons/Device/FlatListItems.js +1 -1
  32. package/src/commons/Device/Hanet/ItemHanetDevice.test.js +2 -2
  33. package/src/commons/Device/HistoryChart.js +6 -49
  34. package/src/commons/Device/LinearChart/LinearChart.test.js +1 -1
  35. package/src/commons/Device/ProgressBar/__test__/ProgressBar.test.js +1 -1
  36. package/src/commons/Device/RainningSensor/__test__/CurrentRainSensor.test.js +5 -5
  37. package/src/commons/Device/SonosSpeaker/__test__/SonosSpeaker.test.js +3 -3
  38. package/src/commons/Device/WindDirection/Compass/Compass.test.js +2 -2
  39. package/src/commons/Device/WindSpeed/LinearChart/index.js +1 -1
  40. package/src/commons/Device/__test__/DeviceAlertStatus.test.js +3 -3
  41. package/src/commons/Device/__test__/DisconnectedView.test.js +2 -2
  42. package/src/commons/Device/__test__/FlatListItems.test.js +1 -1
  43. package/src/commons/Device/__test__/SensorConnectedStatus.test.js +1 -1
  44. package/src/commons/DisplayChecking/__test__/DisplayChecking.test.js +1 -1
  45. package/src/commons/Form/__test__/CurrencyInput.test.js +2 -2
  46. package/src/commons/Form/__test__/TextInput.test.js +2 -2
  47. package/src/commons/Form/__test__/TextInputPassword.test.js +2 -2
  48. package/src/commons/FullLoading/__test__/index.test.js +2 -2
  49. package/src/commons/ImageButton/__test__/ImageButton.test.js +1 -1
  50. package/src/commons/OneTapTemplate/NumberUpDownActionTemplate.js +2 -2
  51. package/src/commons/OneTapTemplate/OptionsDropdownActionTemplate.js +4 -4
  52. package/src/commons/OneTapTemplate/StatesGridActionTemplate.js +4 -4
  53. package/src/commons/OneTapTemplate/__test__/NumberUpDownActionTemplate.test.js +2 -2
  54. package/src/commons/OneTapTemplate/__test__/OptionsDropdownActionTemplate.test.js +1 -1
  55. package/src/commons/OneTapTemplate/__test__/StatesGridActionTemplate.test.js +2 -2
  56. package/src/commons/RowItem/__test__/RowItem.test.js +1 -1
  57. package/src/commons/RowUser/__test__/RowUser.test.js +1 -1
  58. package/src/commons/Section/Section.test.js +2 -2
  59. package/src/commons/SelectSubUnit/__test__/SelectSubUnit.test.js +1 -1
  60. package/src/commons/SelectUnit/__test__/SelectUnit.test.js +3 -3
  61. package/src/commons/Sharing/__test__/ButtonRemoveMember.test.js +1 -1
  62. package/src/commons/Sharing/__test__/DevicePermissionsCheckbox.test.js +1 -1
  63. package/src/commons/Sharing/__test__/MemberList.test.js +6 -4
  64. package/src/commons/Sharing/__test__/RowMember.test.js +2 -2
  65. package/src/commons/Sharing/__test__/StationDevicePermission.test.js +3 -3
  66. package/src/commons/Sharing/__test__/WrapHeaderScrollable.test.js +4 -2
  67. package/src/commons/SubUnit/OneTap/__test__/SubUnitAutomate.test.js +2 -10
  68. package/src/commons/SubUnit/OneTap/index.js +3 -1
  69. package/src/commons/TextButton/__test__/TextButton.test.js +2 -2
  70. package/src/commons/Today/__test__/Today.test.js +1 -1
  71. package/src/commons/TouchableScale/__test__/TouchableScale.test.js +1 -1
  72. package/src/commons/UnitSummary/AirQuality/index.js +2 -2
  73. package/src/commons/UnitSummary/ConfigHistoryChart/index.js +0 -6
  74. package/src/commons/UnitSummary/__test__/TotalPowerBox.test.js +1 -1
  75. package/src/commons/UnitSummary/__test__/TotalPowerConsumption.test.js +1 -1
  76. package/src/commons/ViewButtonBottom/__test__/ViewButtonBottom.test.js +1 -1
  77. package/src/configs/API.js +9 -32
  78. package/src/configs/Constants.js +2 -30
  79. package/src/context/reducer.ts +3 -1
  80. package/src/hoc/__test__/withRemoteControl.test.js +1 -1
  81. package/src/navigations/UnitStack.js +23 -13
  82. package/src/screens/ActivityLog/FilterPopup.js +4 -4
  83. package/src/screens/ActivityLog/__test__/FilterPopup.test.js +2 -2
  84. package/src/screens/ActivityLog/__test__/index.test.js +2 -2
  85. package/src/screens/AddCommon/__test__/SelectSubUnit.test.js +3 -3
  86. package/src/screens/AddCommon/__test__/SelectUnit.test.js +5 -5
  87. package/src/screens/AddNewAction/ChooseAction.js +180 -0
  88. package/src/screens/AddNewAction/ChooseConfig.js +207 -0
  89. package/src/screens/AddNewAction/Components/SelectDevices.js +75 -0
  90. package/src/screens/AddNewAction/Device/__test__/index.test.js +1 -1
  91. package/src/screens/AddNewAction/NewActionWrapper.js +55 -0
  92. package/src/screens/AddNewAction/SelectControlDevices.js +107 -0
  93. package/src/screens/AddNewAction/SelectMonitorDevices.js +142 -0
  94. package/src/screens/AddNewAction/SetupConfigCondition.js +245 -0
  95. package/src/screens/AddNewAction/Styles/SetupSensorStyles.js +1 -1
  96. package/src/screens/AddNewAction/__test__/{SelectAction.test.js → ChooseAction.test.js} +94 -114
  97. package/src/screens/AddNewAction/__test__/ChooseConfig.test.js +211 -0
  98. package/src/screens/AddNewAction/__test__/{SelectSensorDevices.test.js → SelectControlDevices.test.js} +32 -83
  99. package/src/screens/AddNewAction/__test__/SelectMonitorDevices.test.js +92 -0
  100. package/src/screens/AddNewAction/__test__/SetupSensor.test.js +9 -22
  101. package/src/screens/AddNewAutoSmart/__test__/AddNewAutoSmart.test.js +2 -3
  102. package/src/screens/AddNewAutoSmart/index.js +13 -33
  103. package/src/screens/AddNewGateway/PlugAndPlay/__test__/ConnectRouterGuide.test.js +1 -1
  104. package/src/screens/AddNewGateway/PlugAndPlay/__test__/FirstWarning.test.js +1 -1
  105. package/src/screens/AddNewGateway/PlugAndPlay/__test__/ZigbeeDeviceConnectGuide.test.js +1 -1
  106. package/src/screens/AddNewGateway/__test__/ConnectingWifiGuide.test.js +1 -1
  107. package/src/screens/AddNewGateway/__test__/ScanGatewayQR.test.js +2 -2
  108. package/src/screens/AddNewGateway/__test__/ScanModbusQR.test.js +3 -3
  109. package/src/screens/AddNewGateway/__test__/ScanWifiDeviceQR.test.js +2 -2
  110. package/src/screens/AddNewGateway/__test__/SelectDeviceSubUnit.test.js +3 -3
  111. package/src/screens/AddNewGateway/__test__/SelectDeviceUnit.test.js +1 -1
  112. package/src/screens/AddNewGateway/__test__/ShareWifiPassword.test.js +1 -1
  113. package/src/screens/AddNewOneTap/index.js +16 -7
  114. package/src/screens/AllCamera/__test__/index.test.js +18 -57
  115. package/src/screens/AllCamera/index.js +98 -30
  116. package/src/screens/Automate/MultiUnits.js +2 -2
  117. package/src/screens/Automate/__test__/MultiUnits.test.js +2 -2
  118. package/src/screens/Automate/__test__/index.test.js +19 -38
  119. package/src/screens/Automate/index.js +8 -3
  120. package/src/screens/Device/__test__/DetailHistoryChart.test.js +2 -2
  121. package/src/screens/Device/__test__/EmergencyCountdown.test.js +4 -2
  122. package/src/screens/Device/__test__/sensorDisplayItem.test.js +10 -10
  123. package/src/screens/Device/components/ChartWrapper.js +3 -3
  124. package/src/screens/Device/components/VisualChart.js +1 -1
  125. package/src/screens/Device/components/__test__/VisualChart.test.js +1 -1
  126. package/src/screens/Device/hooks/useEvaluateValue.js +8 -0
  127. package/src/screens/DeviceInfo/__test__/index.test.js +16 -18
  128. package/src/screens/DeviceInfo/index.js +6 -5
  129. package/src/screens/EditActionsList/__tests__/index.test.js +14 -6
  130. package/src/screens/Notification/__test__/Notification.test.js +65 -74
  131. package/src/screens/Notification/index.js +14 -14
  132. package/src/screens/ScriptDetail/__test__/index.test.js +2 -8
  133. package/src/screens/ScriptDetail/index.js +9 -88
  134. package/src/screens/ScriptDetail/utils.js +112 -0
  135. package/src/screens/SelectUnit/__test__/index.test.js +0 -5
  136. package/src/screens/SelectUnit/index.js +1 -2
  137. package/src/screens/Sharing/Components/TitleCheckBox.js +2 -2
  138. package/src/screens/SmartAccount/SuccessfullyConnected/__test__/SuccessfullyConnected.test.js +3 -3
  139. package/src/screens/SmartAccount/__test__/Connecting.test.js +1 -1
  140. package/src/screens/SmartAccount/__test__/SmartAccount.test.js +3 -3
  141. package/src/screens/SmartIr/__test__/ButtonsBottom.test.js +1 -1
  142. package/src/screens/SmartIr/__test__/GroupButtonByType.test.js +5 -5
  143. package/src/screens/SmartIr/__test__/SelectBrand.test.js +2 -2
  144. package/src/screens/SmartIr/__test__/SelectDeviceType.test.js +2 -2
  145. package/src/screens/SmartIr/__test__/SmartIr.test.js +2 -2
  146. package/src/screens/Template/__test__/detail.test.js +10 -2
  147. package/src/screens/Unit/__test__/Detail.test.js +7 -13
  148. package/src/screens/Unit/components/__test__/Header.test.js +4 -4
  149. package/src/screens/UnitSummary/components/3PPowerConsumption/__test__/3PPowerConsumption.test.js +1 -1
  150. package/src/screens/UnitSummary/components/3PPowerConsumption/index.js +14 -6
  151. package/src/screens/UnitSummary/components/PowerConsumption/__test__/PowerConsumption.test.js +1 -1
  152. package/src/screens/UnitSummary/components/Temperature/index.js +2 -2
  153. package/src/screens/UnitSummary/components/UvIndex/index.js +2 -2
  154. package/src/screens/UnitSummary/components/WaterQuality/index.js +2 -2
  155. package/src/screens/UnitSummary/components/__test__/TotalPowerBox.test.js +1 -1
  156. package/src/screens/UnitSummary/components/__test__/TotalPowerConsumption.test.js +1 -1
  157. package/src/screens/UnitSummary/components/__test__/index.test.js +2 -2
  158. package/src/utils/Apis/axios.js +3 -0
  159. package/src/utils/I18n/translations/en.json +1 -0
  160. package/src/utils/I18n/translations/vi.json +1 -0
  161. package/src/utils/Route/index.js +6 -3
  162. package/src/screens/AddNewAction/SelectAction.js +0 -570
  163. package/src/screens/AddNewAction/SelectSensorDevices.js +0 -236
  164. package/src/screens/AddNewAction/SetupSensor.js +0 -263
@@ -19,6 +19,37 @@ import { Constants, normalize } from '../../configs/Constants';
19
19
  import styles from './Styles/index';
20
20
  import Routes from '../../utils/Route';
21
21
 
22
+ export const CameraItem = ({
23
+ item,
24
+ width,
25
+ height,
26
+ thumbnail,
27
+ amount,
28
+ handleFullScreen,
29
+ goToPlayBack,
30
+ }) => {
31
+ return (
32
+ <View style={styles.wrap}>
33
+ {!!item && (
34
+ <MediaPlayerDetail
35
+ id={item?.id}
36
+ uri={item?.configuration?.uri}
37
+ thumbnail={thumbnail}
38
+ key={`camera-device-${item?.id}`}
39
+ style={styles.camera}
40
+ wrapStyles={styles.wrapStyles}
41
+ resizeMode={'cover'}
42
+ cameraName={amount !== 1 && item?.configuration?.name}
43
+ amount={amount}
44
+ handleFullScreen={handleFullScreen}
45
+ goToPlayBack={goToPlayBack(item, thumbnail)}
46
+ width={width}
47
+ height={height}
48
+ />
49
+ )}
50
+ </View>
51
+ );
52
+ };
22
53
  const AllCamera = () => {
23
54
  const t = useTranslations();
24
55
  const carouselRef = useRef();
@@ -73,35 +104,18 @@ const AllCamera = () => {
73
104
  [navigate]
74
105
  );
75
106
 
76
- const CameraItem = ({ item, width, height }) => {
107
+ const renderItem = ({ item }) => {
77
108
  return (
78
- <View style={styles.wrap}>
79
- {!!item && (
80
- <MediaPlayerDetail
81
- id={item?.id}
82
- uri={item?.configuration?.uri}
109
+ <View style={styles.wrapItem}>
110
+ {amount === 1 ? (
111
+ <CameraItem
112
+ key={item?.id}
113
+ item={item}
83
114
  thumbnail={thumbnail}
84
- key={`camera-device-${item?.id}`}
85
- style={styles.camera}
86
- wrapStyles={styles.wrapStyles}
87
- resizeMode={'cover'}
88
- cameraName={amount !== 1 && item?.configuration?.name}
89
115
  amount={amount}
90
116
  handleFullScreen={handleFullScreen}
91
- goToPlayBack={goToPlayBack(item, thumbnail)}
92
- width={width}
93
- height={height}
117
+ goToPlayBack={goToPlayBack}
94
118
  />
95
- )}
96
- </View>
97
- );
98
- };
99
-
100
- const renderItem = ({ item }) => {
101
- return (
102
- <View style={styles.wrapItem}>
103
- {amount === 1 ? (
104
- <CameraItem key={item?.id} item={item} />
105
119
  ) : amount === 4 ? (
106
120
  <>
107
121
  <View style={styles.row}>
@@ -110,12 +124,20 @@ const AllCamera = () => {
110
124
  item={item[0]}
111
125
  width={Constants.width / 2}
112
126
  height={112}
127
+ thumbnail={thumbnail}
128
+ amount={amount}
129
+ handleFullScreen={handleFullScreen}
130
+ goToPlayBack={goToPlayBack}
113
131
  />
114
132
  <CameraItem
115
133
  key={item?.id}
116
134
  item={item[1]}
117
135
  width={Constants.width / 2}
118
136
  height={112}
137
+ thumbnail={thumbnail}
138
+ amount={amount}
139
+ handleFullScreen={handleFullScreen}
140
+ goToPlayBack={goToPlayBack}
119
141
  />
120
142
  </View>
121
143
  <View style={styles.row}>
@@ -130,20 +152,66 @@ const AllCamera = () => {
130
152
  item={item[3]}
131
153
  width={Constants.width / 2}
132
154
  height={112}
155
+ thumbnail={thumbnail}
156
+ amount={amount}
157
+ handleFullScreen={handleFullScreen}
158
+ goToPlayBack={goToPlayBack}
133
159
  />
134
160
  </View>
135
161
  </>
136
162
  ) : (
137
163
  <>
138
164
  <View style={styles.row}>
139
- <CameraItem key={item?.id} item={item[0]} />
140
- <CameraItem key={item?.id} item={item[1]} />
141
- <CameraItem key={item?.id} item={item[2]} />
165
+ <CameraItem
166
+ key={item?.id}
167
+ item={item[0]}
168
+ thumbnail={thumbnail}
169
+ amount={amount}
170
+ handleFullScreen={handleFullScreen}
171
+ goToPlayBack={goToPlayBack}
172
+ />
173
+ <CameraItem
174
+ key={item?.id}
175
+ item={item[1]}
176
+ thumbnail={thumbnail}
177
+ amount={amount}
178
+ handleFullScreen={handleFullScreen}
179
+ goToPlayBack={goToPlayBack}
180
+ />
181
+ <CameraItem
182
+ key={item?.id}
183
+ item={item[2]}
184
+ thumbnail={thumbnail}
185
+ amount={amount}
186
+ handleFullScreen={handleFullScreen}
187
+ goToPlayBack={goToPlayBack}
188
+ />
142
189
  </View>
143
190
  <View style={styles.row}>
144
- <CameraItem key={item?.id} item={item[3]} />
145
- <CameraItem key={item?.id} item={item[4]} />
146
- <CameraItem key={item?.id} item={item[5]} />
191
+ <CameraItem
192
+ key={item?.id}
193
+ item={item[3]}
194
+ thumbnail={thumbnail}
195
+ amount={amount}
196
+ handleFullScreen={handleFullScreen}
197
+ goToPlayBack={goToPlayBack}
198
+ />
199
+ <CameraItem
200
+ key={item?.id}
201
+ item={item[4]}
202
+ thumbnail={thumbnail}
203
+ amount={amount}
204
+ handleFullScreen={handleFullScreen}
205
+ goToPlayBack={goToPlayBack}
206
+ />
207
+ <CameraItem
208
+ key={item?.id}
209
+ item={item[5]}
210
+ thumbnail={thumbnail}
211
+ amount={amount}
212
+ handleFullScreen={handleFullScreen}
213
+ goToPlayBack={goToPlayBack}
214
+ />
147
215
  </View>
148
216
  </>
149
217
  )}
@@ -24,7 +24,7 @@ const MultiUnits = () => {
24
24
  const isFocused = useIsFocused();
25
25
  const idUser = useGetIdUser();
26
26
  const { navigate } = useNavigation();
27
- const { params = {} } = useRoute();
27
+ const { params = {}, name: currentRouteName } = useRoute();
28
28
  const { isMultiUnits = false, unitName = '', unit, isOwner } = params;
29
29
  const [data, setData] = useState([]);
30
30
  const tabName = useMemo(
@@ -84,7 +84,7 @@ const MultiUnits = () => {
84
84
  ? AUTOMATE_TYPE.ONE_TAP_ONLY
85
85
  : AUTOMATE_TYPE.VALUE_CHANGE,
86
86
  unit: { id: unit?.id },
87
- isAutomateTab: true,
87
+ closeScreen: currentRouteName,
88
88
  isMultiUnits,
89
89
  },
90
90
  });
@@ -144,7 +144,7 @@ describe('Test MultiUnits', () => {
144
144
  screen: Routes.AddNewAutoSmart,
145
145
  params: {
146
146
  type: AUTOMATE_TYPE.VALUE_CHANGE,
147
- isAutomateTab: true,
147
+ closeScreen: undefined,
148
148
  isMultiUnits: true,
149
149
  unit: { id: undefined },
150
150
  },
@@ -217,7 +217,7 @@ describe('Test MultiUnits', () => {
217
217
  screen: Routes.AddNewAutoSmart,
218
218
  params: {
219
219
  type: AUTOMATE_TYPE.ONE_TAP_ONLY,
220
- isAutomateTab: true,
220
+ closeScreen: undefined,
221
221
  isMultiUnits: true,
222
222
  unit: { id: undefined },
223
223
  },
@@ -1,4 +1,4 @@
1
- import React, { useState } from 'react';
1
+ import React from 'react';
2
2
  import { FlatList, TouchableOpacity } from 'react-native';
3
3
  import { act, create } from 'react-test-renderer';
4
4
  import MockAdapter from 'axios-mock-adapter';
@@ -12,31 +12,9 @@ import Routes from '../../../utils/Route';
12
12
  import { AccessibilityLabel } from '../../../configs/Constants';
13
13
  import api from '../../../utils/Apis/axios';
14
14
  import { API } from '../../../configs';
15
+ import { useNavigation } from '@react-navigation/native';
15
16
 
16
17
  const mock = new MockAdapter(api.axiosInstance);
17
- const mockedNavigate = jest.fn();
18
- const mockSetState = jest.fn();
19
-
20
- jest.mock('@react-navigation/native', () => {
21
- return {
22
- ...jest.requireActual('@react-navigation/native'),
23
- useNavigation: () => ({
24
- navigate: mockedNavigate,
25
- setOptions: () => ({
26
- headerRight: jest.fn(),
27
- }),
28
- }),
29
- useIsFocused: jest.fn(),
30
- };
31
- });
32
-
33
- jest.mock('react', () => {
34
- return {
35
- ...jest.requireActual('react'),
36
- memo: (x) => x,
37
- useState: jest.fn((init) => [init, mockSetState]),
38
- };
39
- });
40
18
 
41
19
  const wrapComponent = () => (
42
20
  <SCProvider initState={mockSCStore({})}>
@@ -46,10 +24,21 @@ const wrapComponent = () => (
46
24
 
47
25
  describe('Test Automate', () => {
48
26
  let tree;
27
+ const navigation = useNavigation();
28
+ const mockedNavigate = useNavigation().navigate;
29
+ beforeAll(() => {
30
+ useNavigation.mockImplementation(() => ({
31
+ ...navigation,
32
+ setOptions: jest.fn(),
33
+ }));
34
+ });
35
+
36
+ afterAll(() => {
37
+ useNavigation.mockImplementation(() => navigation);
38
+ });
49
39
 
50
40
  beforeEach(() => {
51
41
  mockedNavigate.mockClear();
52
- mockSetState.mockClear();
53
42
  });
54
43
 
55
44
  it('Test success get Automate onPress onAddNew', async () => {
@@ -89,13 +78,10 @@ describe('Test Automate', () => {
89
78
  };
90
79
  mock.onGet(API.AUTOMATE.GET_SMART()).reply(200, response.data);
91
80
 
92
- useState.mockImplementation(() => [false, mockSetState]);
93
- useState.mockImplementation(() => [response.data, mockSetState]);
94
-
95
81
  await act(async () => {
96
82
  tree = await create(wrapComponent());
97
83
  });
98
- expect(mockSetState).toBeCalledWith(true);
84
+
99
85
  const instance = tree.root;
100
86
  const FlatLists = instance.findAllByType(FlatList);
101
87
  expect(FlatLists).toHaveLength(2);
@@ -108,7 +94,7 @@ describe('Test Automate', () => {
108
94
  expect(mockedNavigate).toBeCalledWith(Routes.UnitStack, {
109
95
  screen: Routes.AddNewAutoSmart,
110
96
  params: {
111
- isAutomateTab: true,
97
+ closeScreen: undefined,
112
98
  isMultiUnits: true,
113
99
  type: 'automate',
114
100
  unit: { id: undefined },
@@ -142,13 +128,10 @@ describe('Test Automate', () => {
142
128
  };
143
129
  mock.onGet(API.AUTOMATE.GET_SMART()).reply(200, response.data);
144
130
 
145
- useState.mockImplementation(() => [false, mockSetState]);
146
- useState.mockImplementation(() => [response.data, mockSetState]);
147
-
148
131
  await act(async () => {
149
132
  tree = await create(wrapComponent());
150
133
  });
151
- expect(mockSetState).toBeCalledWith(true);
134
+
152
135
  const instance = tree.root;
153
136
  const FlatLists = instance.findAllByType(FlatList);
154
137
  expect(FlatLists).toHaveLength(3);
@@ -162,7 +145,7 @@ describe('Test Automate', () => {
162
145
  screen: Routes.ScriptDetail,
163
146
  params: {
164
147
  automate: response.data[0].automates[0],
165
- isAutomateTab: true,
148
+ closeScreen: undefined,
166
149
  isMultiUnits: true,
167
150
  name: 'script',
168
151
  type: 'one_tap',
@@ -172,6 +155,7 @@ describe('Test Automate', () => {
172
155
  },
173
156
  });
174
157
  });
158
+
175
159
  it('Test success get Automate onPressArrowRight to ScriptDetail', async () => {
176
160
  const response = {
177
161
  status: 200,
@@ -198,9 +182,6 @@ describe('Test Automate', () => {
198
182
  };
199
183
  mock.onGet(API.AUTOMATE.GET_SMART()).reply(200, response.data);
200
184
 
201
- useState.mockImplementation(() => [false, mockSetState]);
202
- useState.mockImplementation(() => [response.data, mockSetState]);
203
-
204
185
  await act(async () => {
205
186
  tree = await create(wrapComponent());
206
187
  });
@@ -7,7 +7,11 @@ import React, {
7
7
  } from 'react';
8
8
  import { View, TouchableOpacity, FlatList, Image } from 'react-native';
9
9
  import { IconFill } from '@ant-design/icons-react-native/es';
10
- import { useNavigation, useIsFocused } from '@react-navigation/native';
10
+ import {
11
+ useNavigation,
12
+ useIsFocused,
13
+ useRoute,
14
+ } from '@react-navigation/native';
11
15
  import { useSCContextSelector } from '../../context';
12
16
 
13
17
  import styles from './Styles/indexStyles';
@@ -34,6 +38,7 @@ const Automate = () => {
34
38
  const { setOptions, navigate } = useNavigation();
35
39
  const [automatesData, setAutomatesData] = useState([]);
36
40
  const [isLoading, setIsLoading] = useState(false);
41
+ const { name: currentRouteName } = useRoute();
37
42
  const starredScriptIds = useSCContextSelector(
38
43
  (state) => state.automate.starredScriptIds
39
44
  );
@@ -72,7 +77,7 @@ const Automate = () => {
72
77
  type: item?.type,
73
78
  havePermission: isOwner || idUser === item?.user,
74
79
  unit: { id },
75
- isAutomateTab: true,
80
+ closeScreen: currentRouteName,
76
81
  automate: item,
77
82
  isMultiUnits: type === UNIT_TYPES.MULTI,
78
83
  },
@@ -85,7 +90,7 @@ const Automate = () => {
85
90
  params: {
86
91
  unit: { id },
87
92
  type: AUTOMATE_TYPE.AUTOMATE,
88
- isAutomateTab: true,
93
+ closeScreen: currentRouteName,
89
94
  isMultiUnits: unitType === UNIT_TYPES.MULTI,
90
95
  },
91
96
  });
@@ -46,7 +46,7 @@ describe('Test DetailHistoryChart', () => {
46
46
  .reply(200, [{ data: [1, 2, 3] }]);
47
47
 
48
48
  await act(async () => {
49
- tree = renderer.create(wrapComponent(item, sensor));
49
+ tree = await renderer.create(wrapComponent(item, sensor));
50
50
  });
51
51
  const instance = tree.root;
52
52
  const historyChart = instance.findAllByType(HistoryChart);
@@ -60,7 +60,7 @@ describe('Test DetailHistoryChart', () => {
60
60
  configuration: { ...item?.configuration, type: 'line_chart' },
61
61
  };
62
62
  await act(async () => {
63
- tree = renderer.create(wrapComponent(item, sensor));
63
+ tree = await renderer.create(wrapComponent(item, sensor));
64
64
  });
65
65
  const instance = tree.root;
66
66
  const historyChart = instance.findAllByType(HistoryChart);
@@ -15,7 +15,9 @@ describe('Test EmergencyCountdown', () => {
15
15
  let tree;
16
16
  it(' EmergencyCountdown resolved_emergency', async () => {
17
17
  await act(async () => {
18
- tree = renderer.create(wrapComponent('stopCount', 'resolved_emergency'));
18
+ tree = await renderer.create(
19
+ wrapComponent('stopCount', 'resolved_emergency')
20
+ );
19
21
  });
20
22
  const instance = tree.root;
21
23
  const texts = instance.findAllByType(Text);
@@ -23,7 +25,7 @@ describe('Test EmergencyCountdown', () => {
23
25
  });
24
26
  it(' EmergencyCountdown not resolved_emergency', async () => {
25
27
  await act(async () => {
26
- tree = renderer.create(
28
+ tree = await renderer.create(
27
29
  wrapComponent('stopCount', 'not_resolve_emergency')
28
30
  );
29
31
  });
@@ -48,7 +48,7 @@ describe('Test SensorDisplayItem', () => {
48
48
  };
49
49
 
50
50
  await act(async () => {
51
- tree = renderer.create(wrapComponent({ item, sensor }));
51
+ tree = await renderer.create(wrapComponent({ item, sensor }));
52
52
  });
53
53
  const instance = tree.root;
54
54
  const detailHistoryChart = instance.findAllByType(VisualChart);
@@ -80,7 +80,7 @@ describe('Test SensorDisplayItem', () => {
80
80
  };
81
81
 
82
82
  await act(async () => {
83
- tree = renderer.create(wrapComponent({ item, sensor }));
83
+ tree = await renderer.create(wrapComponent({ item, sensor }));
84
84
  });
85
85
  const instance = tree.root;
86
86
  const actionGroup = instance.findAllByType(ActionGroup);
@@ -110,7 +110,7 @@ describe('Test SensorDisplayItem', () => {
110
110
  };
111
111
 
112
112
  await act(async () => {
113
- tree = renderer.create(wrapComponent({ item, sensor }));
113
+ tree = await renderer.create(wrapComponent({ item, sensor }));
114
114
  });
115
115
  const instance = tree.root;
116
116
  const mediaPlayerDetail = instance.findAllByType(MediaPlayerDetail);
@@ -142,7 +142,7 @@ describe('Test SensorDisplayItem', () => {
142
142
  };
143
143
 
144
144
  await act(async () => {
145
- tree = renderer.create(wrapComponent({ item, sensor }));
145
+ tree = await renderer.create(wrapComponent({ item, sensor }));
146
146
  });
147
147
  const instance = tree.root;
148
148
  const flatListItems = instance.findAllByType(FlatListItems);
@@ -164,7 +164,7 @@ describe('Test SensorDisplayItem', () => {
164
164
  };
165
165
 
166
166
  await act(async () => {
167
- tree = renderer.create(wrapComponent({ item, sensor }));
167
+ tree = await renderer.create(wrapComponent({ item, sensor }));
168
168
  });
169
169
  const instance = tree.root;
170
170
  const flatListItems = instance.findAllByType(SmartIr);
@@ -186,7 +186,7 @@ describe('Test SensorDisplayItem', () => {
186
186
  };
187
187
 
188
188
  await act(async () => {
189
- tree = renderer.create(wrapComponent({ item, sensor }));
189
+ tree = await renderer.create(wrapComponent({ item, sensor }));
190
190
  });
191
191
  const instance = tree.root;
192
192
  const flatListItems = instance.findAllByType(FooterInfo);
@@ -210,7 +210,7 @@ describe('Test SensorDisplayItem', () => {
210
210
  };
211
211
 
212
212
  await act(async () => {
213
- tree = renderer.create(wrapComponent({ item, sensor }));
213
+ tree = await renderer.create(wrapComponent({ item, sensor }));
214
214
  });
215
215
  const instance = tree.root;
216
216
  const flatListItems = instance.findAllByType(Anemometer);
@@ -234,7 +234,7 @@ describe('Test SensorDisplayItem', () => {
234
234
  };
235
235
 
236
236
  await act(async () => {
237
- tree = renderer.create(wrapComponent({ item, sensor }));
237
+ tree = await renderer.create(wrapComponent({ item, sensor }));
238
238
  });
239
239
  const instance = tree.root;
240
240
  const flatListItems = instance.findAllByType(ProgressBar);
@@ -258,7 +258,7 @@ describe('Test SensorDisplayItem', () => {
258
258
  };
259
259
 
260
260
  await act(async () => {
261
- tree = renderer.create(wrapComponent({ item, sensor }));
261
+ tree = await renderer.create(wrapComponent({ item, sensor }));
262
262
  });
263
263
  const instance = tree.root;
264
264
  const flatListItems = instance.findAllByType(Compass);
@@ -282,7 +282,7 @@ describe('Test SensorDisplayItem', () => {
282
282
  };
283
283
 
284
284
  await act(async () => {
285
- tree = renderer.create(wrapComponent({ item, sensor }));
285
+ tree = await renderer.create(wrapComponent({ item, sensor }));
286
286
  });
287
287
  const instance = tree.root;
288
288
  const flatListItems = instance.findAllByType(DeviceAlertStatus);
@@ -1,10 +1,10 @@
1
- import React, { useEffect, useState } from 'react';
1
+ import React, { memo, useEffect, useState } from 'react';
2
2
  import { styles } from './ChartWrapperStyles';
3
3
  import { View } from 'react-native';
4
4
  import DateTimeRangeChange from '../../../commons/DateTimeRangeChange';
5
5
  import moment from 'moment';
6
6
 
7
- const ChartWrapper = ({ children, onChangeDate, showTime }) => {
7
+ const ChartWrapper = memo(({ children, onChangeDate, showTime }) => {
8
8
  const [value, setValue] = useState([moment().subtract(6, 'days'), moment()]);
9
9
 
10
10
  useEffect(() => {
@@ -34,6 +34,6 @@ const ChartWrapper = ({ children, onChangeDate, showTime }) => {
34
34
  {children}
35
35
  </View>
36
36
  );
37
- };
37
+ });
38
38
 
39
39
  export default ChartWrapper;
@@ -32,7 +32,7 @@ export const convertLineChartData = (data = [], valueType = 'raw', groupBy) => {
32
32
  arr.push([moment(data[i].x), data[i].y]);
33
33
  }
34
34
  if (valueType === 'raw') {
35
- return arr;
35
+ return arr.map((i) => [i[0].valueOf(), i[1]]);
36
36
  }
37
37
  if (groupBy) {
38
38
  arr = _.groupBy(arr, groupByFunc[groupBy]);
@@ -203,7 +203,7 @@ describe('Test LinearChartWidget', () => {
203
203
  assertChartData(chart.props.options.series[0].data, [['1970-01', 200]]);
204
204
  });
205
205
 
206
- it('Test render aggregation sum', async () => {
206
+ it('Test render aggregation sum by day', async () => {
207
207
  mockAxios.onGet(API.CONFIG.DISPLAY_HISTORY_V3()).reply(200, {
208
208
  configs: [
209
209
  {
@@ -93,3 +93,11 @@ export const useEvaluateValue = () => {
93
93
 
94
94
  return evaluateValue;
95
95
  };
96
+
97
+ export const useGetEvaluateValue = (configId) => {
98
+ const valueEvaluations = useSCContextSelector((state) => {
99
+ return state.valueEvaluations;
100
+ });
101
+
102
+ return valueEvaluations[configId];
103
+ };
@@ -6,11 +6,19 @@ import DeviceInfo from '../';
6
6
  import { View } from 'react-native';
7
7
  import { SCProvider } from '../../../context';
8
8
  import { mockSCStore } from '../../../context/mockStore';
9
+ import { useRoute } from '@react-navigation/native';
9
10
 
10
- jest.mock('@react-navigation/core', () => {
11
- return {
12
- ...jest.requireActual('@react-navigation/core'),
13
- useRoute: jest.fn().mockReturnValue({
11
+ const wrapComponent = () => (
12
+ <SCProvider initState={mockSCStore({})}>
13
+ <DeviceInfo />
14
+ </SCProvider>
15
+ );
16
+
17
+ describe('Test DeviceInfo', () => {
18
+ let tree;
19
+
20
+ beforeEach(() => {
21
+ useRoute.mockReturnValue({
14
22
  params: {
15
23
  deviceInfo: [
16
24
  {
@@ -29,30 +37,20 @@ jest.mock('@react-navigation/core', () => {
29
37
  },
30
38
  ],
31
39
  },
32
- }),
33
- };
34
- });
35
-
36
- const wrapComponent = () => (
37
- <SCProvider initState={mockSCStore({})}>
38
- <DeviceInfo />
39
- </SCProvider>
40
- );
41
-
42
- describe('Test DeviceInfo', () => {
43
- let tree;
40
+ });
41
+ });
44
42
 
45
43
  it('render DeviceInfo', async () => {
46
44
  await act(async () => {
47
45
  tree = await create(wrapComponent());
48
46
  });
49
47
  const instance = tree.root;
50
- const battety = instance.findAll(
48
+ const battery = instance.findAll(
51
49
  (el) =>
52
50
  el.props.accessibilityLabel ===
53
51
  AccessibilityLabel.DEVICE_INFO_BATTERY && el.type === View
54
52
  );
55
- expect(battety.length).toEqual(1);
53
+ expect(battery.length).toEqual(1);
56
54
 
57
55
  const rssiNode = instance.findAll(
58
56
  (el) =>
@@ -13,15 +13,15 @@ const DeviceInfo = () => {
13
13
  const { deviceInfo } = params;
14
14
  const configuration = deviceInfo[0] ? deviceInfo[0].configuration : {};
15
15
 
16
- const renderRow = (accessibilityLabel, textLeft, textRight) => {
16
+ const renderRow = (accessibilityLabel, textLeft, textRight, index) => {
17
17
  return (
18
- <>
18
+ <React.Fragment key={index}>
19
19
  <View style={styles.row} accessibilityLabel={accessibilityLabel}>
20
20
  <Text style={styles.textLeft}>{t(textLeft)}</Text>
21
21
  <Text style={styles.textRight}>{textRight}</Text>
22
22
  </View>
23
23
  <View style={styles.separator} />
24
- </>
24
+ </React.Fragment>
25
25
  );
26
26
  };
27
27
 
@@ -44,11 +44,12 @@ const DeviceInfo = () => {
44
44
  )}
45
45
 
46
46
  {configuration.chip_info &&
47
- Object.entries(configuration.chip_info).map((item) => {
47
+ Object.entries(configuration.chip_info).map((item, index) => {
48
48
  return renderRow(
49
49
  AccessibilityLabel.DEVICE_INFO_CHIP_INFO,
50
50
  item[0],
51
- item[1]
51
+ item[1],
52
+ index
52
53
  );
53
54
  })}
54
55
  </View>