@eohjsc/react-native-smart-city 0.3.89 → 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 (166) 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 +3 -4
  36. package/src/commons/Device/ProgressBar/index.js +6 -4
  37. package/src/commons/Device/ProgressBar/styles.js +9 -6
  38. package/src/commons/Device/RainningSensor/__test__/CurrentRainSensor.test.js +5 -5
  39. package/src/commons/Device/SonosSpeaker/__test__/SonosSpeaker.test.js +3 -3
  40. package/src/commons/Device/WindDirection/Compass/Compass.test.js +2 -2
  41. package/src/commons/Device/WindSpeed/LinearChart/index.js +1 -1
  42. package/src/commons/Device/__test__/DeviceAlertStatus.test.js +3 -3
  43. package/src/commons/Device/__test__/DisconnectedView.test.js +2 -2
  44. package/src/commons/Device/__test__/FlatListItems.test.js +1 -1
  45. package/src/commons/Device/__test__/SensorConnectedStatus.test.js +1 -1
  46. package/src/commons/DisplayChecking/__test__/DisplayChecking.test.js +1 -1
  47. package/src/commons/Form/__test__/CurrencyInput.test.js +2 -2
  48. package/src/commons/Form/__test__/TextInput.test.js +2 -2
  49. package/src/commons/Form/__test__/TextInputPassword.test.js +2 -2
  50. package/src/commons/FullLoading/__test__/index.test.js +2 -2
  51. package/src/commons/ImageButton/__test__/ImageButton.test.js +1 -1
  52. package/src/commons/OneTapTemplate/NumberUpDownActionTemplate.js +2 -2
  53. package/src/commons/OneTapTemplate/OptionsDropdownActionTemplate.js +4 -4
  54. package/src/commons/OneTapTemplate/StatesGridActionTemplate.js +4 -4
  55. package/src/commons/OneTapTemplate/__test__/NumberUpDownActionTemplate.test.js +2 -2
  56. package/src/commons/OneTapTemplate/__test__/OptionsDropdownActionTemplate.test.js +1 -1
  57. package/src/commons/OneTapTemplate/__test__/StatesGridActionTemplate.test.js +2 -2
  58. package/src/commons/RowItem/__test__/RowItem.test.js +1 -1
  59. package/src/commons/RowUser/__test__/RowUser.test.js +1 -1
  60. package/src/commons/Section/Section.test.js +2 -2
  61. package/src/commons/SelectSubUnit/__test__/SelectSubUnit.test.js +1 -1
  62. package/src/commons/SelectUnit/__test__/SelectUnit.test.js +3 -3
  63. package/src/commons/Sharing/__test__/ButtonRemoveMember.test.js +1 -1
  64. package/src/commons/Sharing/__test__/DevicePermissionsCheckbox.test.js +1 -1
  65. package/src/commons/Sharing/__test__/MemberList.test.js +6 -4
  66. package/src/commons/Sharing/__test__/RowMember.test.js +2 -2
  67. package/src/commons/Sharing/__test__/StationDevicePermission.test.js +3 -3
  68. package/src/commons/Sharing/__test__/WrapHeaderScrollable.test.js +4 -2
  69. package/src/commons/SubUnit/OneTap/__test__/SubUnitAutomate.test.js +2 -10
  70. package/src/commons/SubUnit/OneTap/index.js +3 -1
  71. package/src/commons/TextButton/__test__/TextButton.test.js +2 -2
  72. package/src/commons/Today/__test__/Today.test.js +1 -1
  73. package/src/commons/TouchableScale/__test__/TouchableScale.test.js +1 -1
  74. package/src/commons/UnitSummary/AirQuality/index.js +2 -2
  75. package/src/commons/UnitSummary/ConfigHistoryChart/index.js +0 -6
  76. package/src/commons/UnitSummary/__test__/TotalPowerBox.test.js +1 -1
  77. package/src/commons/UnitSummary/__test__/TotalPowerConsumption.test.js +1 -1
  78. package/src/commons/ViewButtonBottom/__test__/ViewButtonBottom.test.js +1 -1
  79. package/src/configs/API.js +9 -32
  80. package/src/configs/Constants.js +2 -30
  81. package/src/context/reducer.ts +3 -1
  82. package/src/hoc/__test__/withRemoteControl.test.js +1 -1
  83. package/src/navigations/UnitStack.js +23 -13
  84. package/src/screens/ActivityLog/FilterPopup.js +4 -4
  85. package/src/screens/ActivityLog/__test__/FilterPopup.test.js +2 -2
  86. package/src/screens/ActivityLog/__test__/index.test.js +2 -2
  87. package/src/screens/AddCommon/__test__/SelectSubUnit.test.js +3 -3
  88. package/src/screens/AddCommon/__test__/SelectUnit.test.js +5 -5
  89. package/src/screens/AddNewAction/ChooseAction.js +180 -0
  90. package/src/screens/AddNewAction/ChooseConfig.js +207 -0
  91. package/src/screens/AddNewAction/Components/SelectDevices.js +75 -0
  92. package/src/screens/AddNewAction/Device/__test__/index.test.js +1 -1
  93. package/src/screens/AddNewAction/NewActionWrapper.js +55 -0
  94. package/src/screens/AddNewAction/SelectControlDevices.js +107 -0
  95. package/src/screens/AddNewAction/SelectMonitorDevices.js +142 -0
  96. package/src/screens/AddNewAction/SetupConfigCondition.js +245 -0
  97. package/src/screens/AddNewAction/Styles/SetupSensorStyles.js +1 -1
  98. package/src/screens/AddNewAction/__test__/{SelectAction.test.js → ChooseAction.test.js} +94 -114
  99. package/src/screens/AddNewAction/__test__/ChooseConfig.test.js +211 -0
  100. package/src/screens/AddNewAction/__test__/{SelectSensorDevices.test.js → SelectControlDevices.test.js} +32 -83
  101. package/src/screens/AddNewAction/__test__/SelectMonitorDevices.test.js +92 -0
  102. package/src/screens/AddNewAction/__test__/SetupSensor.test.js +9 -22
  103. package/src/screens/AddNewAutoSmart/__test__/AddNewAutoSmart.test.js +2 -3
  104. package/src/screens/AddNewAutoSmart/index.js +13 -33
  105. package/src/screens/AddNewGateway/PlugAndPlay/__test__/ConnectRouterGuide.test.js +1 -1
  106. package/src/screens/AddNewGateway/PlugAndPlay/__test__/FirstWarning.test.js +1 -1
  107. package/src/screens/AddNewGateway/PlugAndPlay/__test__/ZigbeeDeviceConnectGuide.test.js +1 -1
  108. package/src/screens/AddNewGateway/__test__/ConnectingWifiGuide.test.js +1 -1
  109. package/src/screens/AddNewGateway/__test__/ScanGatewayQR.test.js +2 -2
  110. package/src/screens/AddNewGateway/__test__/ScanModbusQR.test.js +3 -3
  111. package/src/screens/AddNewGateway/__test__/ScanWifiDeviceQR.test.js +2 -2
  112. package/src/screens/AddNewGateway/__test__/SelectDeviceSubUnit.test.js +3 -3
  113. package/src/screens/AddNewGateway/__test__/SelectDeviceUnit.test.js +1 -1
  114. package/src/screens/AddNewGateway/__test__/ShareWifiPassword.test.js +1 -1
  115. package/src/screens/AddNewOneTap/index.js +16 -7
  116. package/src/screens/AllCamera/__test__/index.test.js +18 -57
  117. package/src/screens/AllCamera/index.js +98 -30
  118. package/src/screens/Automate/MultiUnits.js +2 -2
  119. package/src/screens/Automate/__test__/MultiUnits.test.js +2 -2
  120. package/src/screens/Automate/__test__/index.test.js +19 -38
  121. package/src/screens/Automate/index.js +8 -3
  122. package/src/screens/Device/__test__/DetailHistoryChart.test.js +2 -2
  123. package/src/screens/Device/__test__/EmergencyCountdown.test.js +4 -2
  124. package/src/screens/Device/__test__/sensorDisplayItem.test.js +10 -10
  125. package/src/screens/Device/components/ChartWrapper.js +3 -3
  126. package/src/screens/Device/components/VisualChart.js +1 -1
  127. package/src/screens/Device/components/__test__/VisualChart.test.js +1 -1
  128. package/src/screens/Device/hooks/useEvaluateValue.js +8 -0
  129. package/src/screens/DeviceInfo/__test__/index.test.js +16 -18
  130. package/src/screens/DeviceInfo/index.js +6 -5
  131. package/src/screens/EditActionsList/__tests__/index.test.js +14 -6
  132. package/src/screens/Notification/__test__/Notification.test.js +65 -74
  133. package/src/screens/Notification/index.js +14 -14
  134. package/src/screens/ScriptDetail/__test__/index.test.js +2 -8
  135. package/src/screens/ScriptDetail/index.js +9 -88
  136. package/src/screens/ScriptDetail/utils.js +112 -0
  137. package/src/screens/SelectUnit/__test__/index.test.js +0 -5
  138. package/src/screens/SelectUnit/index.js +1 -2
  139. package/src/screens/Sharing/Components/TitleCheckBox.js +2 -2
  140. package/src/screens/SmartAccount/SuccessfullyConnected/__test__/SuccessfullyConnected.test.js +3 -3
  141. package/src/screens/SmartAccount/__test__/Connecting.test.js +1 -1
  142. package/src/screens/SmartAccount/__test__/SmartAccount.test.js +3 -3
  143. package/src/screens/SmartIr/__test__/ButtonsBottom.test.js +1 -1
  144. package/src/screens/SmartIr/__test__/GroupButtonByType.test.js +5 -5
  145. package/src/screens/SmartIr/__test__/SelectBrand.test.js +2 -2
  146. package/src/screens/SmartIr/__test__/SelectDeviceType.test.js +2 -2
  147. package/src/screens/SmartIr/__test__/SmartIr.test.js +2 -2
  148. package/src/screens/Template/__test__/detail.test.js +10 -2
  149. package/src/screens/Unit/__test__/Detail.test.js +7 -13
  150. package/src/screens/Unit/components/__test__/Header.test.js +4 -4
  151. package/src/screens/UnitSummary/components/3PPowerConsumption/__test__/3PPowerConsumption.test.js +1 -1
  152. package/src/screens/UnitSummary/components/3PPowerConsumption/index.js +14 -6
  153. package/src/screens/UnitSummary/components/PowerConsumption/__test__/PowerConsumption.test.js +1 -1
  154. package/src/screens/UnitSummary/components/Temperature/index.js +2 -2
  155. package/src/screens/UnitSummary/components/UvIndex/index.js +2 -2
  156. package/src/screens/UnitSummary/components/WaterQuality/index.js +2 -2
  157. package/src/screens/UnitSummary/components/__test__/TotalPowerBox.test.js +1 -1
  158. package/src/screens/UnitSummary/components/__test__/TotalPowerConsumption.test.js +1 -1
  159. package/src/screens/UnitSummary/components/__test__/index.test.js +2 -2
  160. package/src/utils/Apis/axios.js +3 -0
  161. package/src/utils/I18n/translations/en.json +1 -0
  162. package/src/utils/I18n/translations/vi.json +1 -0
  163. package/src/utils/Route/index.js +6 -3
  164. package/src/screens/AddNewAction/SelectAction.js +0 -570
  165. package/src/screens/AddNewAction/SelectSensorDevices.js +0 -236
  166. package/src/screens/AddNewAction/SetupSensor.js +0 -263
@@ -1,12 +1,13 @@
1
- import React, { memo, useCallback, useState } from 'react';
2
- import { useTranslations } from '../../hooks/Common/useTranslations';
1
+ import React, { memo, useCallback, useEffect, useState } from 'react';
3
2
  import { StyleSheet, View } from 'react-native';
3
+ import moment from 'moment/moment';
4
+ import DateTimePickerModal from 'react-native-modal-datetime-picker';
4
5
 
5
- import { Colors } from '../../configs';
6
6
  import Text from '../Text';
7
+ import { Colors } from '../../configs';
7
8
  import DateTimeButton from './DateTimeButton';
8
- import DateTimePickerModal from 'react-native-modal-datetime-picker';
9
- import moment from 'moment/moment';
9
+ import { useTranslations } from '../../hooks/Common/useTranslations';
10
+ import { DATE_TIME_FORMAT } from '../../configs/Constants';
10
11
 
11
12
  const DateTimeRangeChange = memo(
12
13
  ({
@@ -18,11 +19,12 @@ const DateTimeRangeChange = memo(
18
19
  selectEnd,
19
20
  inline = true,
20
21
  }) => {
21
- const format = showTime ? 'YYYY-MM-DD HH:mm' : 'YYYY-MM-DD';
22
+ const format = showTime ? DATE_TIME_FORMAT.DMY_HM : DATE_TIME_FORMAT.DMY;
22
23
  const mode = showTime ? 'datetime' : 'date';
23
24
  const t = useTranslations();
24
- const ensureDateStart = moment(startTime);
25
- const ensureDateEnd = moment(endTime);
25
+
26
+ const [startDate, setStartDate] = useState(moment(startTime));
27
+ const [endDate, setEndDate] = useState(moment(endTime));
26
28
 
27
29
  const [eventPicker, setEventPicker] = useState({
28
30
  showModalEnd: false,
@@ -30,34 +32,18 @@ const DateTimeRangeChange = memo(
30
32
  });
31
33
 
32
34
  const onStart = useCallback(() => {
33
- setEventPicker((state) => ({
34
- ...state,
35
- showModalStart: true,
36
- showModalEnd: false,
37
- }));
35
+ setEventPicker({ showModalStart: true });
38
36
  }, []);
37
+
39
38
  const onEnd = useCallback(() => {
40
- setEventPicker((state) => ({
41
- ...state,
42
- showModalStart: false,
43
- showModalEnd: true,
44
- }));
39
+ setEventPicker({ showModalEnd: true });
45
40
  }, []);
41
+
46
42
  const onConfirmStart = useCallback(
47
43
  (date) => {
48
44
  const selectedDate = date ? moment(date) : moment().valueOf();
49
- setEventPicker((state) => {
50
- if (typeof date === 'number') {
51
- onCancel();
52
- return state;
53
- }
54
- return {
55
- ...state,
56
- showModalStart: false,
57
- showModalEnd: true,
58
- };
59
- });
60
45
  selectStart(selectedDate);
46
+ onCancel();
61
47
  },
62
48
  [onCancel, selectStart]
63
49
  );
@@ -65,30 +51,27 @@ const DateTimeRangeChange = memo(
65
51
  const onConfirmEnd = useCallback(
66
52
  (date) => {
67
53
  const selectedDate = date ? moment(date) : moment().valueOf();
68
- setEventPicker((state) => {
69
- if (typeof date === 'number') {
70
- onCancel();
71
- return state;
72
- }
73
-
74
- return {
75
- ...state,
76
- showModalEnd: false,
77
- };
78
- });
79
54
  selectEnd(selectedDate);
55
+ onCancel();
80
56
  },
81
57
  [onCancel, selectEnd]
82
58
  );
83
59
 
84
60
  const onCancel = useCallback(() => {
85
- setEventPicker((state) => ({
86
- ...state,
61
+ setEventPicker({
87
62
  showModalEnd: false,
88
63
  showModalStart: false,
89
- }));
64
+ });
90
65
  }, []);
91
66
 
67
+ useEffect(() => {
68
+ setStartDate(moment(startTime));
69
+ }, [startTime]);
70
+
71
+ useEffect(() => {
72
+ setEndDate(moment(endTime));
73
+ }, [endTime]);
74
+
92
75
  return (
93
76
  <View
94
77
  style={[styles.dateTimeView, !inline && styles.spaceBetween, style]}
@@ -99,7 +82,7 @@ const DateTimeRangeChange = memo(
99
82
  </Text>
100
83
  <DateTimeButton onPress={onStart} style={!inline && styles.button}>
101
84
  <Text type={'Label'} color={Colors.Gray8} style={styles.txtTime}>
102
- {ensureDateStart.format(format)}
85
+ {startDate.format(format)}
103
86
  </Text>
104
87
  </DateTimeButton>
105
88
  </View>
@@ -109,13 +92,13 @@ const DateTimeRangeChange = memo(
109
92
  </Text>
110
93
  <DateTimeButton onPress={onEnd} style={!inline && styles.button}>
111
94
  <Text type={'Label'} color={Colors.Gray8} style={styles.txtTime}>
112
- {ensureDateEnd.format(format)}
95
+ {endDate.format(format)}
113
96
  </Text>
114
97
  </DateTimeButton>
115
98
  </View>
116
99
  <DateTimePickerModal
117
100
  isVisible={eventPicker.showModalStart}
118
- date={ensureDateStart._d}
101
+ date={startDate.valueOf()}
119
102
  mode={mode}
120
103
  onConfirm={onConfirmStart}
121
104
  onCancel={onCancel}
@@ -128,7 +111,7 @@ const DateTimeRangeChange = memo(
128
111
  />
129
112
  <DateTimePickerModal
130
113
  isVisible={eventPicker.showModalEnd}
131
- date={ensureDateEnd._d}
114
+ date={endDate.valueOf()}
132
115
  mode={mode}
133
116
  onConfirm={onConfirmEnd}
134
117
  onCancel={onCancel}
@@ -138,7 +121,7 @@ const DateTimeRangeChange = memo(
138
121
  cancelTextIOS={t('cancel')}
139
122
  confirmTextIOS={t('confirm')}
140
123
  maximumDate={new Date()}
141
- minimumDate={ensureDateStart._d}
124
+ minimumDate={startDate.valueOf()}
142
125
  />
143
126
  </View>
144
127
  );
@@ -18,7 +18,7 @@ describe('Test EmergencyButton', () => {
18
18
  let tree;
19
19
  it('create EmergencyButton', async () => {
20
20
  await act(async () => {
21
- tree = renderer.create(wrapComponent());
21
+ tree = await renderer.create(wrapComponent());
22
22
  });
23
23
 
24
24
  const instance = tree.root;
@@ -29,7 +29,7 @@ describe('Test EmergencyButton', () => {
29
29
  it('long press EmergencyButton', async () => {
30
30
  const mockFunction = jest.fn();
31
31
  await act(async () => {
32
- tree = renderer.create(wrapComponent(mockFunction));
32
+ tree = await renderer.create(wrapComponent(mockFunction));
33
33
  });
34
34
 
35
35
  const instance = tree.root;
@@ -39,7 +39,7 @@ describe('Test EmergencyDetail', () => {
39
39
  };
40
40
  useIsFocused.mockImplementation(() => true);
41
41
  await act(async () => {
42
- tree = renderer.create(wrapComponent(item));
42
+ tree = await renderer.create(wrapComponent(item));
43
43
  });
44
44
  const instance = tree.root;
45
45
  const button = instance.findAllByType(VLCPlayer);
@@ -177,7 +177,7 @@ const styles = StyleSheet.create({
177
177
  paddingHorizontal: 10,
178
178
  },
179
179
  viewMore: {
180
- top: 20,
180
+ top: 10,
181
181
  paddingVertical: 5,
182
182
  borderColor: Colors.Gray5,
183
183
  borderWidth: 1,
@@ -36,7 +36,7 @@ describe('Test ItemHanetDevice', () => {
36
36
 
37
37
  it('render ItemHanetDevice', async () => {
38
38
  await act(async () => {
39
- tree = renderer.create(wrapComponent(props));
39
+ tree = await renderer.create(wrapComponent(props));
40
40
  });
41
41
  const instance = tree.root;
42
42
  const touches = instance.findAllByType(TouchableWithoutFeedback);
@@ -49,7 +49,7 @@ describe('Test ItemHanetDevice', () => {
49
49
  it('render ItemHanetDevice sensor has icon', async () => {
50
50
  props.sensor.icon_kit = 'icon';
51
51
  await act(async () => {
52
- tree = renderer.create(wrapComponent(props));
52
+ tree = await renderer.create(wrapComponent(props));
53
53
  });
54
54
  const instance = tree.root;
55
55
  const touches = instance.findAllByType(TouchableWithoutFeedback);
@@ -9,17 +9,10 @@ import Button from '../../commons/Button';
9
9
  import CurrencyInput from '../../commons/Form/CurrencyInput';
10
10
  import DateTimeRangeChange from '../DateTimeRangeChange';
11
11
  import HorizontalBarChart from './HorizontalBarChart';
12
- import DateTimePickerModal from 'react-native-modal-datetime-picker';
13
12
  import LinearChart from './LinearChart';
14
13
  import ChartAggregationOption from '../ChartAggregationOption';
15
14
  import { formatMoney } from '../../utils/Utils';
16
15
 
17
- export const dateTimeType = {
18
- date: 'date',
19
- time: 'time',
20
- dateTime: 'datetime',
21
- };
22
-
23
16
  const { width } = Dimensions.get('window');
24
17
 
25
18
  const HistoryChart = memo(
@@ -50,25 +43,10 @@ const HistoryChart = memo(
50
43
  });
51
44
  const [price, setPrice] = useState(null);
52
45
 
53
- const onStart = useCallback(() => {
54
- setEventPicker((state) => ({
55
- ...state,
56
- showModalStart: true,
57
- showModalEnd: false,
58
- }));
59
- }, []);
60
- const onEnd = useCallback(() => {
61
- setEventPicker((state) => ({
62
- ...state,
63
- showModalStart: false,
64
- showModalEnd: true,
65
- }));
66
- }, []);
67
- const onConfirmStart = useCallback(
46
+ const selectStart = useCallback(
68
47
  (date) => {
69
48
  setEventPicker((state) => {
70
49
  if (typeof date === 'number') {
71
- onCancel();
72
50
  return state;
73
51
  }
74
52
  if (moment(date) < state.endTime) {
@@ -89,15 +67,15 @@ const HistoryChart = memo(
89
67
  };
90
68
  }
91
69
  });
70
+ onCancel();
92
71
  },
93
72
  [onCancel, setStartDate, setEndDate]
94
73
  );
95
74
 
96
- const onConfirmEnd = useCallback(
75
+ const selectEnd = useCallback(
97
76
  (date) => {
98
77
  setEventPicker((state) => {
99
78
  if (typeof date === 'number') {
100
- onCancel();
101
79
  return state;
102
80
  }
103
81
  if (moment(date).add(1, 'day') > state.startTime) {
@@ -120,6 +98,7 @@ const HistoryChart = memo(
120
98
  };
121
99
  }
122
100
  });
101
+ onCancel();
123
102
  },
124
103
  [onCancel, setStartDate, setEndDate]
125
104
  );
@@ -197,8 +176,8 @@ const HistoryChart = memo(
197
176
  ) && (
198
177
  <DateTimeRangeChange
199
178
  startTime={eventPicker.startTime}
200
- onStart={onStart}
201
- onEnd={onEnd}
179
+ selectStart={selectStart}
180
+ selectEnd={selectEnd}
202
181
  endTime={eventPicker.endTime}
203
182
  formatType={formatType}
204
183
  />
@@ -234,28 +213,6 @@ const HistoryChart = memo(
234
213
  {t('total_power_price')} <Text bold>{formatMoney(totalPrice)}</Text>
235
214
  </Text>
236
215
  )}
237
- <DateTimePickerModal
238
- isVisible={eventPicker.showModalStart}
239
- date={eventPicker.startTime?._d}
240
- mode={formatType || 'datetime'}
241
- onConfirm={onConfirmStart}
242
- onCancel={onCancel}
243
- display="spinner"
244
- headerTextIOS={t('pick_a_date')}
245
- cancelTextIOS={t('cancel')}
246
- confirmTextIOS={t('confirm')}
247
- />
248
- <DateTimePickerModal
249
- isVisible={eventPicker.showModalEnd}
250
- date={eventPicker.endTime?._d}
251
- mode={formatType || 'datetime'}
252
- onConfirm={onConfirmEnd}
253
- onCancel={onCancel}
254
- display="spinner"
255
- headerTextIOS={t('pick_a_date')}
256
- cancelTextIOS={t('cancel')}
257
- confirmTextIOS={t('confirm')}
258
- />
259
216
  </View>
260
217
  );
261
218
  }
@@ -18,7 +18,7 @@ describe('Test LinearChart', () => {
18
18
  },
19
19
  ];
20
20
  await act(async () => {
21
- tree = renderer.create(<LinearChart datas={data} />);
21
+ tree = await renderer.create(<LinearChart datas={data} />);
22
22
  });
23
23
  const instance = tree.root;
24
24
  const views = instance.findAllByType(View);
@@ -36,14 +36,13 @@ describe('Test ProgressBar', () => {
36
36
  configuration: { max_value: 100 },
37
37
  value: 8,
38
38
  };
39
- const data = [{ value: 10 }];
39
+ const data = [{ value: 10, unit: 'oC' }];
40
40
  await act(async () => {
41
- tree = renderer.create(wrapComponent(item, data));
41
+ tree = await renderer.create(wrapComponent(item, data));
42
42
  });
43
43
  const instance = tree.root;
44
44
  const texts = instance.findAllByType(Text);
45
45
  expect(texts[0].props.children).toBe('Value bar');
46
- expect(texts[1].props.children).toEqual(['Max value', ': ', 100]);
47
- expect(texts[2].props.children).toEqual([10, ' ', undefined]);
46
+ expect(texts[1].props.children).toEqual('Max value: 100 oC');
48
47
  });
49
48
  });
@@ -23,7 +23,7 @@ const ProgressBar = memo(({ data = [], item }) => {
23
23
  </Text>
24
24
 
25
25
  <Text size={16} style={styles.textMaxValue}>
26
- {t('max_value')}: {maxValue}
26
+ {`${t('max_value')}: ${maxValue} ${unit || measure}`}
27
27
  </Text>
28
28
 
29
29
  <View style={styles.wrapProgressBar}>
@@ -36,9 +36,11 @@ const ProgressBar = memo(({ data = [], item }) => {
36
36
  borderWidth={0}
37
37
  borderRadius={10}
38
38
  />
39
- <Text style={styles.textValue}>
40
- {value} {unit || measure}
41
- </Text>
39
+ <View>
40
+ <Text numberOfLines={1} style={styles.textValue}>
41
+ {value}
42
+ </Text>
43
+ </View>
42
44
  </View>
43
45
  </View>
44
46
  );
@@ -6,29 +6,32 @@ export default StyleSheet.create({
6
6
  container: {
7
7
  flex: 1,
8
8
  flexDirection: 'column', //column direction
9
- marginRight: 60,
10
- marginLeft: 60,
9
+ marginHorizontal: 30,
11
10
  borderWidth: 1,
12
- padding: 12,
11
+ padding: 16,
13
12
  borderRadius: 8,
14
13
  borderColor: Colors.Gray4,
15
14
  marginBottom: 12,
16
15
  },
17
16
  textLabel: {
18
- paddingHorizontal: 16,
17
+ paddingHorizontal: 15,
19
18
  paddingTop: 8,
20
19
  },
21
20
  textMaxValue: {
22
- textAlign: 'right',
21
+ marginTop: 20,
22
+ marginLeft: 14,
23
+ textAlign: 'left',
24
+ fontWeight: 'bold',
25
+ textTransform: 'uppercase',
23
26
  },
24
27
  wrapProgressBar: {
25
28
  flex: 1,
26
29
  flexDirection: 'row',
27
30
  justifyContent: 'center',
28
31
  alignItems: 'center',
29
- padding: 8,
30
32
  },
31
33
  textValue: {
32
34
  marginLeft: 8,
35
+ width: 45,
33
36
  },
34
37
  });
@@ -19,7 +19,7 @@ describe('Test CurrentRainSensor', () => {
19
19
  },
20
20
  ];
21
21
  await act(async () => {
22
- tree = renderer.create(<CurrentRainSensor data={data} />);
22
+ tree = await renderer.create(<CurrentRainSensor data={data} />);
23
23
  });
24
24
  const instance = tree.root;
25
25
  const Views = instance.findAllByType(View);
@@ -38,7 +38,7 @@ describe('Test CurrentRainSensor', () => {
38
38
  },
39
39
  ];
40
40
  await act(async () => {
41
- tree = renderer.create(<CurrentRainSensor data={data} />);
41
+ tree = await renderer.create(<CurrentRainSensor data={data} />);
42
42
  });
43
43
  const instance = tree.root;
44
44
  const Views = instance.findAllByType(View);
@@ -47,7 +47,7 @@ describe('Test CurrentRainSensor', () => {
47
47
 
48
48
  it('render CurrentRainSensor data empty', async () => {
49
49
  await act(async () => {
50
- tree = renderer.create(<CurrentRainSensor data={[]} />);
50
+ tree = await renderer.create(<CurrentRainSensor data={[]} />);
51
51
  });
52
52
  const instance = tree.root;
53
53
  const Views = instance.findAllByType(View);
@@ -66,7 +66,7 @@ describe('Test CurrentRainSensor', () => {
66
66
  },
67
67
  ];
68
68
  await act(async () => {
69
- tree = renderer.create(<CurrentRainSensor data={data} />);
69
+ tree = await renderer.create(<CurrentRainSensor data={data} />);
70
70
  });
71
71
  const instance = tree.root;
72
72
  const fimage = instance.findAllByType(FImage);
@@ -85,7 +85,7 @@ describe('Test CurrentRainSensor', () => {
85
85
  },
86
86
  ];
87
87
  await act(async () => {
88
- tree = renderer.create(<CurrentRainSensor data={data} />);
88
+ tree = await renderer.create(<CurrentRainSensor data={data} />);
89
89
  });
90
90
  const instance = tree.root;
91
91
  const iconComponent = instance.findAllByType(IconComponent);
@@ -18,7 +18,7 @@ describe('Test SonosSpeaker', () => {
18
18
  let tree;
19
19
  it('create SonosSpeaker', async () => {
20
20
  await act(async () => {
21
- tree = renderer.create(wrapComponent());
21
+ tree = await renderer.create(wrapComponent());
22
22
  });
23
23
 
24
24
  const instance = tree.root;
@@ -28,7 +28,7 @@ describe('Test SonosSpeaker', () => {
28
28
 
29
29
  it('Test handleClickButton', async () => {
30
30
  await act(async () => {
31
- tree = renderer.create(wrapComponent());
31
+ tree = await renderer.create(wrapComponent());
32
32
  });
33
33
 
34
34
  const instance = tree.root;
@@ -43,7 +43,7 @@ describe('Test SonosSpeaker', () => {
43
43
 
44
44
  it('Test onValueChange', async () => {
45
45
  await act(async () => {
46
- tree = renderer.create(wrapComponent());
46
+ tree = await renderer.create(wrapComponent());
47
47
  });
48
48
 
49
49
  const instance = tree.root;
@@ -20,7 +20,7 @@ describe('Test Compass', () => {
20
20
  },
21
21
  ];
22
22
  await act(async () => {
23
- tree = renderer.create(wrapComponent(data));
23
+ tree = await renderer.create(wrapComponent(data));
24
24
  });
25
25
  const instance = tree.root;
26
26
  const textInputs = instance.findAllByType(Text);
@@ -29,7 +29,7 @@ describe('Test Compass', () => {
29
29
 
30
30
  it('create Compass data null', async () => {
31
31
  await act(async () => {
32
- tree = renderer.create(wrapComponent([]));
32
+ tree = await renderer.create(wrapComponent([]));
33
33
  });
34
34
  const instance = tree.root;
35
35
  const textInputs = instance.findAllByType(Text);
@@ -80,7 +80,7 @@ const LinearChart = memo(
80
80
  const scatterValues = getTickValues(item).stringDataArr;
81
81
  const maxValueLine = getMaxValueIndex(item.data);
82
82
  return (
83
- <G>
83
+ <G key={index}>
84
84
  <VictoryScatter
85
85
  standalone={false}
86
86
  data={scatterValues}
@@ -30,7 +30,7 @@ describe('Test Device Alert Status', () => {
30
30
  },
31
31
  ];
32
32
  await act(async () => {
33
- tree = renderer.create(wrapComponent(data));
33
+ tree = await renderer.create(wrapComponent(data));
34
34
  });
35
35
  const instance = tree.root;
36
36
  const item = instance.find(
@@ -49,7 +49,7 @@ describe('Test Device Alert Status', () => {
49
49
  },
50
50
  ];
51
51
  await act(async () => {
52
- tree = renderer.create(wrapComponent(data));
52
+ tree = await renderer.create(wrapComponent(data));
53
53
  });
54
54
  const instance = tree.root;
55
55
  const item = instance.findAll(
@@ -65,7 +65,7 @@ describe('Test Device Alert Status', () => {
65
65
  },
66
66
  ];
67
67
  await act(async () => {
68
- tree = renderer.create(wrapComponent(data));
68
+ tree = await renderer.create(wrapComponent(data));
69
69
  });
70
70
  const instance = tree.root;
71
71
  const item = instance.findAll(
@@ -18,7 +18,7 @@ describe('Test DisconnectedView', () => {
18
18
  it('render DisconnectedView icon test', async () => {
19
19
  const sensor = { icon: 'test' };
20
20
  await act(async () => {
21
- tree = renderer.create(wrapComponent(sensor));
21
+ tree = await renderer.create(wrapComponent(sensor));
22
22
  });
23
23
  const instance = tree.root;
24
24
  const suggestion = instance.findByProps({ testID: 'suggestions' });
@@ -30,7 +30,7 @@ describe('Test DisconnectedView', () => {
30
30
  const isDeviceHasBle = true;
31
31
  const sensor = { icon: 'test' };
32
32
  await act(async () => {
33
- tree = renderer.create(wrapComponent(sensor, isDeviceHasBle));
33
+ tree = await renderer.create(wrapComponent(sensor, isDeviceHasBle));
34
34
  });
35
35
  const instance = tree.root;
36
36
  const suggestion = instance.findByProps({ testID: 'suggestions' });
@@ -27,7 +27,7 @@ describe('Test FlatListItems', () => {
27
27
  },
28
28
  ];
29
29
  await act(async () => {
30
- tree = renderer.create(wrapComponent(data));
30
+ tree = await renderer.create(wrapComponent(data));
31
31
  });
32
32
  const instance = tree.root;
33
33
  const touch = instance.find(
@@ -16,7 +16,7 @@ describe('Test Sensor Connected Status', () => {
16
16
 
17
17
  it('render Sensor Connected Status', async () => {
18
18
  await act(async () => {
19
- tree = renderer.create(wrapComponent());
19
+ tree = await renderer.create(wrapComponent());
20
20
  });
21
21
  const instance = tree.root;
22
22
  const item = instance.find(
@@ -19,7 +19,7 @@ describe('Test DisplayChecking', () => {
19
19
 
20
20
  it('create LoadingMessage', async () => {
21
21
  await act(async () => {
22
- tree = renderer.create(wrapComponent(visible, onClose, message));
22
+ tree = await renderer.create(wrapComponent(visible, onClose, message));
23
23
  });
24
24
  const instance = tree.root;
25
25
  const textInputs = instance.findAllByType(TouchableOpacity);
@@ -9,7 +9,7 @@ describe('Test CurrencyInput', () => {
9
9
  const testCurrencyInputWithValue = (value) => {
10
10
  it('test CurrencyInput with value', async () => {
11
11
  await act(async () => {
12
- tree = renderer.create(
12
+ tree = await renderer.create(
13
13
  <CurrencyInput value={value} minValue={0} maxValue={100000} />
14
14
  );
15
15
  });
@@ -27,7 +27,7 @@ describe('Test CurrencyInput', () => {
27
27
  it('test CurrencyInput change text', async () => {
28
28
  const mockOnChange = jest.fn();
29
29
  await act(async () => {
30
- tree = renderer.create(
30
+ tree = await renderer.create(
31
31
  <CurrencyInput
32
32
  value={20}
33
33
  minValue={-10}
@@ -8,7 +8,7 @@ describe('Test _TextInput', () => {
8
8
  it('render _TextInput', async () => {
9
9
  const mockFunc = jest.fn();
10
10
  await act(async () => {
11
- tree = renderer.create(
11
+ tree = await renderer.create(
12
12
  <_TextInput
13
13
  label={1234}
14
14
  defaultValue={'station.name'}
@@ -28,7 +28,7 @@ describe('Test _TextInput', () => {
28
28
  it('render _TextInput lable null', async () => {
29
29
  const mockFunc = jest.fn();
30
30
  await act(async () => {
31
- tree = renderer.create(
31
+ tree = await renderer.create(
32
32
  <_TextInput
33
33
  label={true}
34
34
  defaultValue={'station.name'}
@@ -9,7 +9,7 @@ describe('Test _TextInputPassword', () => {
9
9
  it('render _TextInputPassword', async () => {
10
10
  const mockFunc = jest.fn();
11
11
  await act(async () => {
12
- tree = renderer.create(
12
+ tree = await renderer.create(
13
13
  <_TextInputPassword
14
14
  secureTextEntry
15
15
  label={'1234'}
@@ -35,7 +35,7 @@ describe('Test _TextInputPassword', () => {
35
35
  it('render _TextInputPassword lable null', async () => {
36
36
  const mockFunc = jest.fn();
37
37
  await act(async () => {
38
- tree = renderer.create(
38
+ tree = await renderer.create(
39
39
  <_TextInputPassword
40
40
  label={false}
41
41
  secureTextEntry
@@ -24,7 +24,7 @@ describe('Test FullLoading', () => {
24
24
  };
25
25
  it('render FullLoading no custom', async () => {
26
26
  await act(async () => {
27
- tree = renderer.create(wrapComponent(props));
27
+ tree = await renderer.create(wrapComponent(props));
28
28
  });
29
29
  const instance = tree.root;
30
30
  const activityIndicator = instance.findAllByType(ActivityIndicator);
@@ -32,7 +32,7 @@ describe('Test FullLoading', () => {
32
32
  });
33
33
  it('render FullLoading custom', async () => {
34
34
  await act(async () => {
35
- tree = renderer.create(
35
+ tree = await renderer.create(
36
36
  wrapComponent({ ...props, customIcon: <Image /> })
37
37
  );
38
38
  });