@eohjsc/react-native-smart-city 0.7.42 → 0.7.44

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 (51) hide show
  1. package/package.json +1 -1
  2. package/src/commons/Dashboard/MyDashboardDevice/index.js +1 -0
  3. package/src/commons/Dashboard/MyUnit/index.js +1 -0
  4. package/src/commons/Device/PowerConsumptionChart.js +63 -31
  5. package/src/configs/AccessibilityLabel.js +1 -0
  6. package/src/iot/mqtt.js +4 -2
  7. package/src/navigations/UnitStack.js +2 -2
  8. package/src/screens/ActivityLog/ItemLog.js +69 -16
  9. package/src/screens/ActivityLog/__test__/ItemLog.test.js +169 -2
  10. package/src/screens/ActivityLog/index.js +2 -2
  11. package/src/screens/ActivityLog/styles/itemLogStyles.js +35 -0
  12. package/src/screens/AddNewGateway/RenameNewDevices.js +1 -1
  13. package/src/screens/AddNewGateway/__test__/RenameNewDevices.test.js +1 -1
  14. package/src/screens/Automate/AddNewAction/NewActionWrapper.js +24 -4
  15. package/src/screens/Automate/AddNewAction/__test__/SelectControlDevices.test.js +75 -11
  16. package/src/screens/Automate/AddNewAction/__test__/SelectMonitorDevices.test.js +5 -1
  17. package/src/screens/Automate/AddNewAutoSmart/AddTypeSmart.js +3 -2
  18. package/src/screens/Automate/EditActionsList/__tests__/index.test.js +20 -1
  19. package/src/screens/Automate/EditActionsList/index.js +18 -9
  20. package/src/screens/Automate/MultiUnits.js +2 -0
  21. package/src/screens/Automate/OneTap/__test__/AddNewOneTap.test.js +5 -0
  22. package/src/screens/Automate/Scenario/__test__/AddNewOneTap.test.js +5 -0
  23. package/src/screens/Automate/ScriptDetail/Styles/indexStyles.js +3 -0
  24. package/src/screens/Automate/ScriptDetail/__test__/index.test.js +41 -12
  25. package/src/screens/Automate/ScriptDetail/index.js +3 -3
  26. package/src/screens/Automate/SetSchedule/__test__/AddEditConditionSchedule.test.js +4 -0
  27. package/src/screens/Automate/SetSchedule/__test__/index.test.js +4 -0
  28. package/src/screens/Automate/__test__/MultiUnits.test.js +6 -4
  29. package/src/screens/Automate/__test__/index.test.js +1 -0
  30. package/src/screens/Automate/index.js +1 -0
  31. package/src/screens/ConfirmUnitDeletion/__test__/ConfirmUnitDeletion.test.js +1 -1
  32. package/src/screens/ConfirmUnitDeletion/index.js +1 -1
  33. package/src/screens/CreatePassword/__test__/index.test.js +11 -2
  34. package/src/screens/CreatePassword/index.js +12 -1
  35. package/src/screens/Device/components/SensorDisplayItem.js +1 -0
  36. package/src/screens/Device/styles.js +1 -1
  37. package/src/screens/EnterPassword/index.js +1 -1
  38. package/src/screens/Notification/components/NotificationItem.js +1 -4
  39. package/src/screens/Sharing/__test__/UnitMemberList.test.js +1 -1
  40. package/src/screens/Sharing/hooks/__test__/index.test.js +2 -2
  41. package/src/screens/Sharing/hooks/index.js +1 -1
  42. package/src/screens/SmartAccount/ListDevice/index.js +1 -1
  43. package/src/screens/SubUnit/AddSubUnit.js +2 -2
  44. package/src/screens/SubUnit/__test__/AddSubUnit.test.js +1 -1
  45. package/src/screens/SyncLGDevice/AddLGDevice.js +3 -3
  46. package/src/screens/SyncLGDevice/__test__/AddLGDevice.test.js +5 -5
  47. package/src/screens/Unit/Detail.js +1 -3
  48. package/src/screens/Unit/__test__/Detail.test.js +4 -4
  49. package/src/screens/UnitSummary/components/PowerConsumption/__test__/PowerConsumption.test.js +32 -0
  50. package/src/utils/I18n/translations/en.js +1 -0
  51. package/src/utils/I18n/translations/vi.js +1 -0
@@ -34,7 +34,7 @@ describe('Test useDataMember', () => {
34
34
  await act(async () => {
35
35
  result.current.leaveUnit(1);
36
36
  });
37
- expect(global.mockedNavigate).toBeCalledWith(Routes.Dashboard);
37
+ expect(global.mockedNavigate).toHaveBeenCalledWith(Routes.Main);
38
38
  });
39
39
 
40
40
  it('render useDataMember loadMembers', async () => {
@@ -65,6 +65,6 @@ describe('Test useDataMember', () => {
65
65
  await act(async () => {
66
66
  result.current.removeMember(1, 'json');
67
67
  });
68
- expect(global.mockedGoBack).toBeCalled();
68
+ expect(global.mockedGoBack).toHaveBeenCalled();
69
69
  });
70
70
  });
@@ -67,7 +67,7 @@ const useDataMember = (unitId, userUnitId = undefined) => {
67
67
  await axiosDelete(API.SHARE.UNITS_MEMBER_DETAIL(unitId, 'me'));
68
68
  ToastBottomHelper.success(t('sharing_you_left', { name: unitName }));
69
69
  setDataMembers([]);
70
- navigate(Routes.Dashboard);
70
+ navigate(Routes.Main);
71
71
  },
72
72
  [navigate, t, unitId]
73
73
  );
@@ -123,7 +123,7 @@ const ListDeviceSmartAccount = ({ route }) => {
123
123
  return (
124
124
  <View style={styles.wrap}>
125
125
  <WrapHeaderScrollable
126
- onLeft={() => (device_data ? navigate(Routes.Dashboard) : goBack())}
126
+ onLeft={() => (device_data ? navigate(Routes.Main) : goBack())}
127
127
  title={t('devices')}
128
128
  headerAniStyle={styles.headerAniStyle}
129
129
  >
@@ -85,7 +85,7 @@ const AddSubUnit = ({ route }) => {
85
85
  screen: Routes.UnitDetail,
86
86
  params: {
87
87
  unitId: data?.id,
88
- routeName: Routes.DashboardStack,
88
+ routeName: Routes.Main,
89
89
  },
90
90
  })
91
91
  );
@@ -123,7 +123,7 @@ const AddSubUnit = ({ route }) => {
123
123
  unitData: unit,
124
124
  stationId: data.id,
125
125
  isAddSubUnit: true,
126
- routeName: Routes.DashboardStack,
126
+ routeName: Routes.Main,
127
127
  };
128
128
  if (isInsideUnit) {
129
129
  navigate(Routes.UnitDetail, commonPrams);
@@ -247,7 +247,7 @@ describe('Test AddSubUnit', () => {
247
247
  });
248
248
  expect(global.mockedNavigate).toHaveBeenCalledWith('UnitDetail', {
249
249
  isAddSubUnit: true,
250
- routeName: 'DashboardStack',
250
+ routeName: 'Main',
251
251
  stationId: undefined,
252
252
  unitData: {
253
253
  id: 1,
@@ -47,7 +47,7 @@ const AddLGDevice = memo(({ route }) => {
47
47
  );
48
48
  if (!success || !data.access_token) {
49
49
  ToastBottomHelper.error(t('lg_sync_failed'));
50
- navigate(Routes.Dashboard);
50
+ navigate(Routes.Main);
51
51
  return;
52
52
  }
53
53
 
@@ -63,12 +63,12 @@ const AddLGDevice = memo(({ route }) => {
63
63
  );
64
64
  if (!successSync) {
65
65
  ToastBottomHelper.error(t('lg_sync_failed'));
66
- navigate(Routes.Dashboard);
66
+ navigate(Routes.Main);
67
67
  return;
68
68
  }
69
69
 
70
70
  ToastBottomHelper.success(t('lg_sync_success'));
71
- navigate(Routes.Dashboard);
71
+ navigate(Routes.Main);
72
72
  }, [backend_url, code, navigate, stationId, t]);
73
73
 
74
74
  const stations =
@@ -188,7 +188,7 @@ describe('Test Add LG Device', () => {
188
188
  text1: getTranslate('en', 'lg_sync_success'),
189
189
  visibilityTime: 1000,
190
190
  });
191
- expect(global.mockedNavigate).toHaveBeenCalledWith(Routes.Dashboard);
191
+ expect(global.mockedNavigate).toHaveBeenCalledWith(Routes.Main);
192
192
  });
193
193
 
194
194
  it('ViewButtonBottom onRightClick with case sync device fail', async () => {
@@ -240,7 +240,7 @@ describe('Test Add LG Device', () => {
240
240
  text1: getTranslate('en', 'lg_sync_failed'),
241
241
  visibilityTime: 1000,
242
242
  });
243
- expect(global.mockedNavigate).toHaveBeenCalledWith(Routes.Dashboard);
243
+ expect(global.mockedNavigate).toHaveBeenCalledWith(Routes.Main);
244
244
  });
245
245
 
246
246
  it('ViewButtonBottom onRightClick with stationId but sync failed', async () => {
@@ -286,7 +286,7 @@ describe('Test Add LG Device', () => {
286
286
  text1: getTranslate('en', 'lg_sync_failed'),
287
287
  visibilityTime: 1000,
288
288
  });
289
- expect(global.mockedNavigate).toHaveBeenCalledWith(Routes.Dashboard);
289
+ expect(global.mockedNavigate).toHaveBeenCalledWith(Routes.Main);
290
290
  });
291
291
 
292
292
  it('ViewButtonBottom onRightClick with stationId but get token failed, wrong data', async () => {
@@ -329,7 +329,7 @@ describe('Test Add LG Device', () => {
329
329
 
330
330
  expect(spyToastSuccess).not.toBeCalled();
331
331
  expect(spyToastError).toBeCalled();
332
- expect(global.mockedNavigate).toHaveBeenCalledWith(Routes.Dashboard);
332
+ expect(global.mockedNavigate).toHaveBeenCalledWith(Routes.Main);
333
333
 
334
334
  spyToastSuccess.mockReset();
335
335
  spyToastSuccess.mockRestore();
@@ -365,7 +365,7 @@ describe('Test Add LG Device', () => {
365
365
 
366
366
  expect(spyToastSuccess).not.toBeCalled();
367
367
  expect(spyToastError).toBeCalled();
368
- expect(global.mockedNavigate).toHaveBeenCalledWith(Routes.Dashboard);
368
+ expect(global.mockedNavigate).toHaveBeenCalledWith(Routes.Main);
369
369
 
370
370
  spyToastSuccess.mockReset();
371
371
  spyToastSuccess.mockRestore();
@@ -205,9 +205,7 @@ const UnitDetail = ({ route }) => {
205
205
  [navigate]
206
206
  );
207
207
 
208
- useBlockBack(
209
- isSuccessfullyConnected ? RouterHardware(Routes.Dashboard) : goBack
210
- );
208
+ useBlockBack(isSuccessfullyConnected ? RouterHardware(Routes.Main) : goBack);
211
209
  const user = useSCContextSelector((state) => state?.auth?.account?.user);
212
210
  const { isFirstOpenCamera, appState } = useSCContextSelector(
213
211
  (state) => state.app
@@ -497,7 +497,7 @@ describe('Test UnitDetail', () => {
497
497
 
498
498
  it('test get automate onPress goBack', async () => {
499
499
  Platform.OS = 'ios';
500
- route.params.routeName = Routes.Dashboard;
500
+ route.params.routeName = Routes.Main;
501
501
  jest.useFakeTimers();
502
502
 
503
503
  mock.onGet(getAutomates).reply(200, [{}]);
@@ -515,11 +515,11 @@ describe('Test UnitDetail', () => {
515
515
  await act(async () => {
516
516
  await touchableOpacities[0].props.onPress();
517
517
  });
518
- expect(global.mockedGoBack).toBeCalled();
518
+ expect(global.mockedGoBack).toHaveBeenCalled();
519
519
  });
520
520
 
521
521
  it('test onPress goBack with routeName', async () => {
522
- useRoute.mockReturnValue({ params: { routeName: Routes.Dashboard } });
522
+ useRoute.mockReturnValue({ params: { routeName: Routes.Main } });
523
523
  await act(async () => {
524
524
  tree = await renderer.create(wrapComponent(route, account));
525
525
  });
@@ -528,6 +528,6 @@ describe('Test UnitDetail', () => {
528
528
  await act(async () => {
529
529
  await touchableOpacities[0].props.onPress();
530
530
  });
531
- expect(global.mockedNavigate).toBeCalled();
531
+ expect(global.mockedNavigate).toHaveBeenCalledWith(Routes.Main);
532
532
  });
533
533
  });
@@ -2,6 +2,7 @@ import MockAdapter from 'axios-mock-adapter';
2
2
  import renderer, { act, create } from 'react-test-renderer';
3
3
 
4
4
  import moment from 'moment';
5
+ import { ActivityIndicator } from 'react-native';
5
6
  import { Today } from '../../../../../commons';
6
7
  import DateTimeRangeChange from '../../../../../commons/DateTimeRangeChange';
7
8
  import PowerConsumptionChart from '../../../../../commons/Device/PowerConsumptionChart';
@@ -308,4 +309,35 @@ describe('Test PowerConsumption', () => {
308
309
  powerConsumptionChart.findByType(DateTimeRangeChange).props.endTime
309
310
  ).toEqual(newEndDate);
310
311
  });
312
+
313
+ it('should show ActivityIndicator when isFetching is true', async () => {
314
+ const summaryDetail = {
315
+ listConfigs: {
316
+ total_power: 207,
317
+ },
318
+ };
319
+
320
+ let resolvePromise;
321
+ const pendingPromise = new Promise((resolve) => {
322
+ resolvePromise = resolve;
323
+ });
324
+
325
+ mock.onGet(API.VALUE_CONSUME.DISPLAY_HISTORY()).reply(async () => {
326
+ await pendingPromise;
327
+ return [200, []];
328
+ });
329
+
330
+ await act(async () => {
331
+ tree = await create(wrapComponent(summaryDetail));
332
+ });
333
+
334
+ const instance = tree.root;
335
+ const activityIndicator = instance.findByType(ActivityIndicator);
336
+ expect(activityIndicator).toBeDefined();
337
+ expect(activityIndicator.props.size).toEqual('large');
338
+
339
+ await act(async () => {
340
+ resolvePromise();
341
+ });
342
+ });
311
343
  });
@@ -1348,6 +1348,7 @@ export default {
1348
1348
  not_activated: 'Not activated',
1349
1349
  open: 'Open',
1350
1350
  close: 'Close',
1351
+ detail: 'Detail',
1351
1352
  create_contact_success: 'Create contact success!',
1352
1353
  can_not_login_to_current_ssid: "Can't login to current SSID",
1353
1354
  confirm_password_not_match: 'Confirm password does not match',
@@ -1346,6 +1346,7 @@ export default {
1346
1346
  not_activated: 'Không kích hoạt',
1347
1347
  open: 'Mở',
1348
1348
  close: 'Đóng',
1349
+ detail: 'Chi tiết',
1349
1350
  create_contact_success: 'Tạo liên hệ thành công!',
1350
1351
  can_not_login_to_current_ssid: 'Không thể đăng nhập vào SSID hiện tại',
1351
1352
  confirm_password_not_match: 'Mật khẩu xác nhận không trùng khớp',