@eohjsc/react-native-smart-city 0.2.82 → 0.2.85
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.
- package/assets/images/Event.svg +9 -0
- package/assets/images/brightness.svg +12 -0
- package/package.json +4 -2
- package/src/Images/Common/SuccessfullyConnected.svg +4 -0
- package/src/Images/Common/eye-closed.png +0 -0
- package/src/Images/Common/eye-closed@2x.png +0 -0
- package/src/Images/Common/eye-closed@3x.png +0 -0
- package/src/Images/Common/eye.png +0 -0
- package/src/Images/Common/eye@2x.png +0 -0
- package/src/Images/Common/eye@3x.png +0 -0
- package/src/commons/ActionGroup/CurtainButtonTemplate.js +32 -21
- package/src/commons/ActionGroup/LightActionTemplate.js +103 -0
- package/src/commons/ActionGroup/LightActionTemplateStyles.js +57 -0
- package/src/commons/ActionGroup/NumberUpDownActionTemplate.js +8 -6
- package/src/commons/ActionGroup/OnOffTemplate/OnOffButtonTemplate.js +33 -31
- package/src/commons/ActionGroup/OnOffTemplate/index.js +11 -3
- package/src/commons/ActionGroup/OneBigButtonTemplate.js +10 -7
- package/src/commons/ActionGroup/OptionsDropdownActionTemplate.js +5 -2
- package/src/commons/ActionGroup/StatesGridActionTemplate.js +7 -3
- package/src/commons/ActionGroup/ThreeButtonTemplate.js +33 -24
- package/src/commons/ActionGroup/__test__/LightActionTemplate.test.js +59 -0
- package/src/commons/ActionGroup/__test__/OnOffTemplate.test.js +18 -6
- package/src/commons/ActionGroup/__test__/OneBigButtonTemplate.test.js +9 -1
- package/src/commons/ActionGroup/__test__/OptionsDropdownTemplate.test.js +25 -13
- package/src/commons/ActionGroup/__test__/index.test.js +48 -14
- package/src/commons/ActionGroup/index.js +3 -0
- package/src/commons/Automate/ItemAutomate.js +1 -1
- package/src/commons/Automate/ItemAutomateStyles.js +5 -1
- package/src/commons/CardShadow/index.js +5 -2
- package/src/commons/CardShadow/styles.js +2 -3
- package/src/commons/ConnectingProcess/DeviceItem/DeviceItem.js +16 -0
- package/src/commons/ConnectingProcess/DeviceItem/DeviceItemStyles.js +42 -0
- package/src/commons/ConnectingProcess/__test__/Connecting.test.js +27 -0
- package/src/commons/ConnectingProcess/__test__/DeviceItem.test.js +18 -0
- package/src/commons/ConnectingProcess/index.js +202 -0
- package/src/commons/ConnectingProcess/styles.js +69 -0
- package/src/commons/Device/HorizontalBarChart.js +7 -1
- package/src/commons/Device/ItemDevice.js +8 -5
- package/src/commons/Device/LinearChart.js +1 -0
- package/src/commons/Device/WaterQualitySensor/ListQualityIndicator.js +1 -1
- package/src/commons/Device/WaterQualitySensor/QualityIndicatorsItem.js +1 -1
- package/src/commons/EmergencyButton/AlertSendConfirm.js +2 -2
- package/src/commons/EmergencyButton/AlertSent.js +2 -2
- package/src/commons/Form/TextInputPassword.js +1 -1
- package/src/commons/FullLoading/index.js +35 -0
- package/src/commons/SubUnit/Favorites/index.js +2 -0
- package/src/commons/SubUnit/OneTap/ItemOneTap.js +3 -0
- package/src/commons/SubUnit/ShortDetail.js +7 -1
- package/src/commons/index.js +2 -0
- package/src/configs/API.js +6 -4
- package/src/configs/Constants.js +25 -0
- package/src/configs/Images.js +2 -0
- package/src/context/actionType.ts +2 -0
- package/src/context/reducer.ts +10 -0
- package/src/hooks/Common/useBlockBackAndroid.js +3 -1
- package/src/iot/RemoteControl/Internet.js +8 -1
- package/src/iot/RemoteControl/index.js +4 -2
- package/src/navigations/AddDeviceStack.js +10 -0
- package/src/screens/AddCommon/SelectSubUnit.js +29 -6
- package/src/screens/AddCommon/SelectUnit.js +24 -2
- package/src/screens/AddCommon/__test__/SelectSubUnit.test.js +120 -1
- package/src/screens/AddCommon/__test__/SelectUnit.test.js +16 -1
- package/src/screens/AddNewAction/SelectAction.js +46 -28
- package/src/screens/AddNewAutoSmart/__test__/AddNewAutoSmart.test.js +3 -3
- package/src/screens/AddNewAutoSmart/index.js +18 -1
- package/src/screens/AddNewGateway/PlugAndPlay/ConnectWifiWarning.js +55 -16
- package/src/screens/AddNewGateway/PlugAndPlay/GatewayWifiList.js +52 -23
- package/src/screens/AddNewGateway/SelectGateway.js +132 -0
- package/src/screens/AddNewGateway/SelectGatewayStyles.js +55 -0
- package/src/screens/AddNewGateway/__test__/SetupGateway.test.js +0 -52
- package/src/screens/Device/EditDevice/__test__/EditDevice.test.js +2 -2
- package/src/screens/Device/EditDevice/index.js +2 -2
- package/src/screens/Device/__test__/detail.test.js +18 -11
- package/src/screens/Device/components/SensorConnectStatusViewHeader.js +2 -2
- package/src/screens/Device/components/SensorDisplayItem.js +2 -2
- package/src/screens/Device/detail.js +64 -26
- package/src/screens/Device/styles.js +2 -0
- package/src/screens/Notification/__test__/NotificationItem.test.js +197 -15
- package/src/screens/Notification/components/NotificationItem.js +188 -14
- package/src/screens/Notification/styles/NotificationItemStyles.js +3 -3
- package/src/screens/ScanChipQR/__test__/ScanChipQR.test.js +10 -7
- package/src/screens/ScanChipQR/hooks/index.js +48 -40
- package/src/screens/SubUnit/AddSubUnit.js +4 -1
- package/src/screens/SubUnit/__test__/AddSubUnit.test.js +148 -0
- package/src/screens/Unit/Detail.js +33 -1
- package/src/screens/Unit/ManageUnit.js +1 -1
- package/src/screens/Unit/ManageUnitStyles.js +0 -6
- package/src/screens/Unit/SmartAccount.js +5 -1
- package/src/screens/Unit/Summaries.js +2 -2
- package/src/screens/Unit/__test__/CheckSendEmail.test.js +10 -0
- package/src/screens/Unit/__test__/Detail.test.js +10 -0
- package/src/screens/Unit/components/__test__/SharedUnit.test.js +21 -2
- package/src/screens/UnitSummary/__test__/index.test.js +3 -3
- package/src/screens/UnitSummary/components/RunningDevices/__test__/index.test.js +2 -2
- package/src/screens/UnitSummary/index.js +52 -9
- package/src/utils/Apis/axios.js +1 -1
- package/src/utils/I18n/translations/en.json +16 -0
- package/src/utils/I18n/translations/vi.json +16 -1
- package/src/utils/Route/index.js +2 -0
|
@@ -58,11 +58,6 @@ const DeviceDetail = ({ route }) => {
|
|
|
58
58
|
const [controlOptions, setControlOptions] = useState({
|
|
59
59
|
internet: {},
|
|
60
60
|
});
|
|
61
|
-
// eslint-disable-next-line no-unused-vars
|
|
62
|
-
const [loading, setLoading] = useState({
|
|
63
|
-
isConnected: true,
|
|
64
|
-
displayTemplate: true,
|
|
65
|
-
});
|
|
66
61
|
const [isConnected, setConnected] = useState(false);
|
|
67
62
|
const [lastUpdated, setLastUpdated] = useState(null);
|
|
68
63
|
const [lastEvent, setLastEvent] = useState({ id: 0, reportedAt: 0 });
|
|
@@ -70,12 +65,20 @@ const DeviceDetail = ({ route }) => {
|
|
|
70
65
|
// eslint-disable-next-line no-unused-vars
|
|
71
66
|
const [configValues, setConfigValues] = useConfigGlobalState('configValues');
|
|
72
67
|
|
|
73
|
-
const {
|
|
74
|
-
|
|
75
|
-
const
|
|
68
|
+
const { unitData, unitId, sensorData, sensorId, isGGHomeConnected } =
|
|
69
|
+
route.params;
|
|
70
|
+
const [unit, setUnit] = useState(unitData || { id: unitId });
|
|
71
|
+
const [sensor, setSensor] = useState(sensorData || { id: sensorId });
|
|
72
|
+
const [station, setStation] = useState(sensor?.station);
|
|
73
|
+
const [isFavourite, setIsFavourite] = useState(sensor?.is_favourite);
|
|
74
|
+
const { isOwner } = useIsOwnerOfUnit(unit?.user_id);
|
|
76
75
|
const [sensorName, setSensorName] = useState(sensor?.name);
|
|
77
76
|
const [lockShowing, acquireLockShowing, releaseLockShowing] = useBoolean();
|
|
78
77
|
const [showWindDirection, setShowWindDirection] = useState(false);
|
|
78
|
+
const [loading, setLoading] = useState({
|
|
79
|
+
isConnected: true,
|
|
80
|
+
displayTemplate: true,
|
|
81
|
+
});
|
|
79
82
|
|
|
80
83
|
const isDeviceConnectedViaBle = useMemo(
|
|
81
84
|
() => isDeviceConnected(sensor?.remote_control_options?.bluetooth?.address),
|
|
@@ -108,7 +111,7 @@ const DeviceDetail = ({ route }) => {
|
|
|
108
111
|
|
|
109
112
|
const addToFavorites = useCallback(async () => {
|
|
110
113
|
const { success } = await axiosPost(
|
|
111
|
-
API.SENSOR.ADD_TO_FAVOURITES(unit
|
|
114
|
+
API.SENSOR.ADD_TO_FAVOURITES(unit?.id, sensor?.station?.id, sensor?.id)
|
|
112
115
|
);
|
|
113
116
|
if (success) {
|
|
114
117
|
setIsFavourite(true);
|
|
@@ -117,7 +120,11 @@ const DeviceDetail = ({ route }) => {
|
|
|
117
120
|
|
|
118
121
|
const removeFromFavorites = useCallback(async () => {
|
|
119
122
|
const { success } = await axiosPost(
|
|
120
|
-
API.SENSOR.REMOVE_FROM_FAVOURITES(
|
|
123
|
+
API.SENSOR.REMOVE_FROM_FAVOURITES(
|
|
124
|
+
unit?.id,
|
|
125
|
+
sensor?.station.id,
|
|
126
|
+
sensor?.id
|
|
127
|
+
)
|
|
121
128
|
);
|
|
122
129
|
if (success) {
|
|
123
130
|
setIsFavourite(false);
|
|
@@ -129,9 +136,39 @@ const DeviceDetail = ({ route }) => {
|
|
|
129
136
|
);
|
|
130
137
|
|
|
131
138
|
const canManageSubUnit = useMemo(() => {
|
|
132
|
-
return currentUserId === unit
|
|
139
|
+
return currentUserId === unit?.user_id;
|
|
133
140
|
}, [currentUserId, unit]);
|
|
134
141
|
|
|
142
|
+
const fetchUnitDetail = useCallback(async () => {
|
|
143
|
+
const { success, data } = await axiosGet(API.UNIT.UNIT_DETAIL(unit?.id));
|
|
144
|
+
if (success) {
|
|
145
|
+
setUnit(data);
|
|
146
|
+
}
|
|
147
|
+
}, [unit?.id]);
|
|
148
|
+
|
|
149
|
+
useEffect(() => {
|
|
150
|
+
if (!unitData && unitId) {
|
|
151
|
+
fetchUnitDetail();
|
|
152
|
+
}
|
|
153
|
+
}, [fetchUnitDetail, unitData, unitId]);
|
|
154
|
+
|
|
155
|
+
const fetchSensorDetail = useCallback(async () => {
|
|
156
|
+
const { success, data } = await axiosGet(
|
|
157
|
+
API.SENSOR.SENSOR_DETAIL(sensor?.id)
|
|
158
|
+
);
|
|
159
|
+
if (success) {
|
|
160
|
+
setSensor(data);
|
|
161
|
+
setSensorName(data.name);
|
|
162
|
+
setStation(data.station);
|
|
163
|
+
}
|
|
164
|
+
}, [sensor?.id]);
|
|
165
|
+
|
|
166
|
+
useEffect(() => {
|
|
167
|
+
if (!sensorData && sensorId) {
|
|
168
|
+
fetchSensorDetail();
|
|
169
|
+
}
|
|
170
|
+
}, [fetchSensorDetail, sensorData, sensorId]);
|
|
171
|
+
|
|
135
172
|
const fetchDataDeviceDetail = useCallback(async () => {
|
|
136
173
|
if (!token) {
|
|
137
174
|
return;
|
|
@@ -141,7 +178,7 @@ const DeviceDetail = ({ route }) => {
|
|
|
141
178
|
}
|
|
142
179
|
|
|
143
180
|
const displayResult = await axiosGet(
|
|
144
|
-
API.SENSOR.DISPLAY(sensor
|
|
181
|
+
API.SENSOR.DISPLAY(sensor?.id),
|
|
145
182
|
{},
|
|
146
183
|
true
|
|
147
184
|
);
|
|
@@ -168,7 +205,7 @@ const DeviceDetail = ({ route }) => {
|
|
|
168
205
|
setLoading((preState) => ({ ...preState, displayTemplate: false }));
|
|
169
206
|
|
|
170
207
|
const controlResult = await axiosGet(
|
|
171
|
-
API.SENSOR.REMOTE_CONTROL_OPTIONS(sensor
|
|
208
|
+
API.SENSOR.REMOTE_CONTROL_OPTIONS(sensor?.id),
|
|
172
209
|
{},
|
|
173
210
|
true
|
|
174
211
|
);
|
|
@@ -212,12 +249,12 @@ const DeviceDetail = ({ route }) => {
|
|
|
212
249
|
menuItems.push({
|
|
213
250
|
route: Routes.ActivityLog,
|
|
214
251
|
data: {
|
|
215
|
-
id: sensor
|
|
252
|
+
id: sensor?.id,
|
|
216
253
|
type: 'action',
|
|
217
254
|
share: unit,
|
|
218
255
|
filterEnabled: {
|
|
219
256
|
date: true,
|
|
220
|
-
user: Boolean(unit
|
|
257
|
+
user: Boolean(unit?.id),
|
|
221
258
|
},
|
|
222
259
|
},
|
|
223
260
|
text: t('activity_log'),
|
|
@@ -352,7 +389,7 @@ const DeviceDetail = ({ route }) => {
|
|
|
352
389
|
|
|
353
390
|
const fetchValues = async () => {
|
|
354
391
|
const { success, data } = await axiosGet(
|
|
355
|
-
API.SENSOR.DISPLAY_VALUES_V2(sensor
|
|
392
|
+
API.SENSOR.DISPLAY_VALUES_V2(sensor?.id),
|
|
356
393
|
{
|
|
357
394
|
params: params,
|
|
358
395
|
}
|
|
@@ -365,12 +402,13 @@ const DeviceDetail = ({ route }) => {
|
|
|
365
402
|
}
|
|
366
403
|
setLoading((preState) => ({ ...preState, isConnected: false }));
|
|
367
404
|
};
|
|
368
|
-
if (sensor
|
|
405
|
+
if (sensor?.is_managed_by_backend && !sensor?.is_other_device) {
|
|
369
406
|
const updateInterval = setInterval(() => fetchValues(), 5000);
|
|
370
407
|
fetchValues();
|
|
371
408
|
return () => clearInterval(updateInterval);
|
|
372
409
|
} else {
|
|
373
|
-
|
|
410
|
+
Object.keys(sensor).length > 1 &&
|
|
411
|
+
setLoading((preState) => ({ ...preState, isConnected: false }));
|
|
374
412
|
}
|
|
375
413
|
}, [sensor, display]);
|
|
376
414
|
|
|
@@ -405,12 +443,12 @@ const DeviceDetail = ({ route }) => {
|
|
|
405
443
|
).length > 0;
|
|
406
444
|
|
|
407
445
|
const onSetupContacts = useCallback(() => {
|
|
408
|
-
const group = unit
|
|
446
|
+
const group = unit?.group;
|
|
409
447
|
navigation.navigate(Routes.EmergencyContactsStack, {
|
|
410
448
|
screen: Routes.EmergencyContactsList,
|
|
411
|
-
params: { unitId: unit
|
|
449
|
+
params: { unitId: unit?.id, group },
|
|
412
450
|
});
|
|
413
|
-
}, [navigation, unit
|
|
451
|
+
}, [navigation, unit?.group, unit?.id]);
|
|
414
452
|
|
|
415
453
|
// replace isConnected=True to see template
|
|
416
454
|
const renderSensorConnected = () => {
|
|
@@ -448,12 +486,12 @@ const DeviceDetail = ({ route }) => {
|
|
|
448
486
|
|
|
449
487
|
const getDataFromLocal = async () => {
|
|
450
488
|
const displayData = await getLocalData(
|
|
451
|
-
`@CACHE_REQUEST_${API.SENSOR.DISPLAY(sensor
|
|
489
|
+
`@CACHE_REQUEST_${API.SENSOR.DISPLAY(sensor?.id)}`
|
|
452
490
|
);
|
|
453
491
|
displayData && setDisplay(JSON.parse(displayData));
|
|
454
492
|
|
|
455
493
|
const controlOptionData = await getLocalData(
|
|
456
|
-
`@CACHE_REQUEST_${API.SENSOR.REMOTE_CONTROL_OPTIONS(sensor
|
|
494
|
+
`@CACHE_REQUEST_${API.SENSOR.REMOTE_CONTROL_OPTIONS(sensor?.id)}`
|
|
457
495
|
);
|
|
458
496
|
controlOptionData && setControlOptions(JSON.parse(controlOptionData));
|
|
459
497
|
setLoading((preState) => ({ ...preState, displayTemplate: false }));
|
|
@@ -557,7 +595,7 @@ const DeviceDetail = ({ route }) => {
|
|
|
557
595
|
onSendNowAlert={onSendNowAlert}
|
|
558
596
|
onHide={releaseLockShowing}
|
|
559
597
|
unit={unit}
|
|
560
|
-
station={sensor
|
|
598
|
+
station={sensor?.station}
|
|
561
599
|
/>
|
|
562
600
|
|
|
563
601
|
<AlertSent
|
|
@@ -566,7 +604,7 @@ const DeviceDetail = ({ route }) => {
|
|
|
566
604
|
onPressMain={onViewDetails}
|
|
567
605
|
onHide={releaseLockShowing}
|
|
568
606
|
unit={unit}
|
|
569
|
-
station={sensor
|
|
607
|
+
station={sensor?.station}
|
|
570
608
|
/>
|
|
571
609
|
</WrapHeaderScrollable>
|
|
572
610
|
{isShowEmergencyResolve && (
|
|
@@ -605,7 +643,7 @@ const DeviceDetail = ({ route }) => {
|
|
|
605
643
|
type="H4"
|
|
606
644
|
style={styles.textName}
|
|
607
645
|
>
|
|
608
|
-
{unit
|
|
646
|
+
{unit?.name} - {sensor?.station?.name}
|
|
609
647
|
</Text>
|
|
610
648
|
<IconFill
|
|
611
649
|
testID={TESTID.BUTTON_POPUP_RESOLVED_ICON}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { act, create } from 'react-test-renderer';
|
|
3
3
|
import { TouchableOpacity } from 'react-native';
|
|
4
|
+
import axios from 'axios';
|
|
4
5
|
|
|
5
6
|
import { SCProvider } from '../../../context';
|
|
6
7
|
import { mockSCStore } from '../../../context/mockStore';
|
|
7
8
|
import NotificationItem from '../components/NotificationItem';
|
|
8
9
|
import { NOTIFICATION_TYPES } from '../../../configs/Constants';
|
|
9
10
|
import Routes from '../../../utils/Route';
|
|
11
|
+
import { API } from '../../../configs';
|
|
10
12
|
|
|
11
13
|
const wrapComponent = (item) => (
|
|
12
14
|
<SCProvider initState={mockSCStore({})}>
|
|
@@ -14,6 +16,8 @@ const wrapComponent = (item) => (
|
|
|
14
16
|
</SCProvider>
|
|
15
17
|
);
|
|
16
18
|
|
|
19
|
+
jest.mock('axios');
|
|
20
|
+
|
|
17
21
|
const mockNavigate = jest.fn();
|
|
18
22
|
jest.mock('@react-navigation/native', () => {
|
|
19
23
|
return {
|
|
@@ -27,11 +31,12 @@ jest.mock('@react-navigation/native', () => {
|
|
|
27
31
|
describe('test NotificationItem', () => {
|
|
28
32
|
let item = {};
|
|
29
33
|
beforeEach(() => {
|
|
34
|
+
mockNavigate.mockClear();
|
|
30
35
|
item = {
|
|
31
36
|
id: 1,
|
|
32
37
|
content_code: '',
|
|
33
38
|
is_read: true,
|
|
34
|
-
params: JSON.stringify({ booking_id: 1 }),
|
|
39
|
+
params: JSON.stringify({ booking_id: 1, booking_id_new: 1 }),
|
|
35
40
|
created_at: '',
|
|
36
41
|
icon: '',
|
|
37
42
|
};
|
|
@@ -41,19 +46,94 @@ describe('test NotificationItem', () => {
|
|
|
41
46
|
});
|
|
42
47
|
let tree;
|
|
43
48
|
const listCase = [
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
49
|
+
{
|
|
50
|
+
content_code: NOTIFICATION_TYPES.REMIND_TO_MAKE_PAYMENT,
|
|
51
|
+
screen: Routes.SmartParkingBookingDetails,
|
|
52
|
+
params: { id: 1 },
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
content_code: NOTIFICATION_TYPES.EXPIRE_PARKING_SESSION,
|
|
56
|
+
screen: Routes.SmartParkingBookingDetails,
|
|
57
|
+
params: { id: 1 },
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
content_code: NOTIFICATION_TYPES.REMIND_TO_SCAN_QR_CODE,
|
|
61
|
+
screen: Routes.SmartParkingBookingDetails,
|
|
62
|
+
params: { id: 1 },
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
content_code: NOTIFICATION_TYPES.USER_CANCEL,
|
|
66
|
+
screen: Routes.MyBookingList,
|
|
67
|
+
params: { tab: 1 },
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
content_code: NOTIFICATION_TYPES.SYSTEM_CANCEL_NO_PAYMENT,
|
|
71
|
+
screen: Routes.MyBookingList,
|
|
72
|
+
params: { tab: 1 },
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
content_code: NOTIFICATION_TYPES.BOOKING_SUCCESSFULLY,
|
|
76
|
+
screen: Routes.SmartParkingBookingDetails,
|
|
77
|
+
params: { id: 1 },
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
content_code: NOTIFICATION_TYPES.PARKING_COMPLETED,
|
|
81
|
+
screen: Routes.MyBookingList,
|
|
82
|
+
params: { tab: 1 },
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
content_code: NOTIFICATION_TYPES.BOOKING_EXPIRED_AND_VIOLATION_CREATED,
|
|
86
|
+
screen: Routes.SmartParkingBookingDetails,
|
|
87
|
+
params: { id: 1 },
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
content_code: NOTIFICATION_TYPES.MOVE_CAR_WITHOUT_PAY_VIOLATION,
|
|
91
|
+
screen: Routes.SmartParkingBookingDetails,
|
|
92
|
+
params: { id: 1 },
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
content_code: NOTIFICATION_TYPES.PAY_FINE_SUCCESSFULLY,
|
|
96
|
+
screen: Routes.SmartParkingBookingDetails,
|
|
97
|
+
params: { id: 1 },
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
content_code: NOTIFICATION_TYPES.STOP_VIOLATION_FREE_PARKING_ZONE,
|
|
101
|
+
screen: Routes.SmartParkingBookingDetails,
|
|
102
|
+
params: { id: 1 },
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
content_code: NOTIFICATION_TYPES.PAY_FINE_AND_EXTEND_SUCCESSFULLY,
|
|
106
|
+
screen: Routes.SmartParkingBookingDetails,
|
|
107
|
+
params: { id: 1 },
|
|
108
|
+
},
|
|
54
109
|
];
|
|
55
110
|
|
|
56
|
-
for (const
|
|
111
|
+
for (const notify of listCase) {
|
|
112
|
+
test(`create ItemNotification ${notify.content_code}`, () => {
|
|
113
|
+
item.content_code = notify.content_code;
|
|
114
|
+
act(() => {
|
|
115
|
+
tree = create(wrapComponent(item));
|
|
116
|
+
});
|
|
117
|
+
const instance = tree.root;
|
|
118
|
+
const button = instance.findByType(TouchableOpacity);
|
|
119
|
+
act(() => {
|
|
120
|
+
button.props.onPress();
|
|
121
|
+
});
|
|
122
|
+
expect(mockNavigate).toHaveBeenCalledWith(Routes.SmartParkingStack, {
|
|
123
|
+
screen: notify.screen,
|
|
124
|
+
params: notify.params,
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const listCase2 = [
|
|
130
|
+
NOTIFICATION_TYPES.NOTIFY_REMOVE_UNIT,
|
|
131
|
+
NOTIFICATION_TYPES.NOTIFY_REMOVE_MEMBER,
|
|
132
|
+
NOTIFICATION_TYPES.NOTIFY_MEMBER_LEAVE_UNIT,
|
|
133
|
+
'default case',
|
|
134
|
+
];
|
|
135
|
+
|
|
136
|
+
for (const content_code of listCase2) {
|
|
57
137
|
test(`create ItemNotification ${content_code}`, () => {
|
|
58
138
|
item.content_code = content_code;
|
|
59
139
|
act(() => {
|
|
@@ -64,12 +144,114 @@ describe('test NotificationItem', () => {
|
|
|
64
144
|
act(() => {
|
|
65
145
|
button.props.onPress();
|
|
66
146
|
});
|
|
67
|
-
expect(mockNavigate).
|
|
68
|
-
|
|
147
|
+
expect(mockNavigate).not.toHaveBeenCalled();
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const listSensorType = ['air_quality', 'turbidity', 'ph', 'clo', 'uv'];
|
|
152
|
+
for (const sensorType of listSensorType) {
|
|
153
|
+
test(`create ItemNotification NOTIFY_INDICATOR sensor_type ${sensorType}`, () => {
|
|
154
|
+
item.content_code = NOTIFICATION_TYPES.NOTIFY_INDICATOR;
|
|
155
|
+
item.params = JSON.stringify({
|
|
156
|
+
unit_name: 'EoH Office',
|
|
157
|
+
status: 'Very Poor',
|
|
158
|
+
sensor_type: sensorType,
|
|
159
|
+
unit_id: 5,
|
|
160
|
+
summary_id: 11,
|
|
161
|
+
sensor_id: '',
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
act(() => {
|
|
165
|
+
tree = create(wrapComponent(item));
|
|
166
|
+
});
|
|
167
|
+
const instance = tree.root;
|
|
168
|
+
const button = instance.findByType(TouchableOpacity);
|
|
169
|
+
act(() => {
|
|
170
|
+
button.props.onPress();
|
|
171
|
+
});
|
|
172
|
+
expect(mockNavigate).toHaveBeenCalledWith(Routes.UnitStack, {
|
|
173
|
+
screen: Routes.UnitSummary,
|
|
174
|
+
params: {
|
|
175
|
+
summaryId: 11,
|
|
176
|
+
unitId: 5,
|
|
177
|
+
},
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
const listSensorType2 = ['smoke', 'fire'];
|
|
183
|
+
for (const sensorType of listSensorType2) {
|
|
184
|
+
test(`create ItemNotification NOTIFY_INDICATOR sensor_type ${sensorType}`, () => {
|
|
185
|
+
item.content_code = NOTIFICATION_TYPES.NOTIFY_INDICATOR;
|
|
186
|
+
item.params = JSON.stringify({
|
|
187
|
+
unit_name: 'Lavida Smart Home',
|
|
188
|
+
status: '',
|
|
189
|
+
sensor_type: sensorType,
|
|
190
|
+
unit_id: 70,
|
|
191
|
+
summary_id: '',
|
|
192
|
+
sensor_id: 394,
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
act(() => {
|
|
196
|
+
tree = create(wrapComponent(item));
|
|
197
|
+
});
|
|
198
|
+
const instance = tree.root;
|
|
199
|
+
const button = instance.findByType(TouchableOpacity);
|
|
200
|
+
act(() => {
|
|
201
|
+
button.props.onPress();
|
|
202
|
+
});
|
|
203
|
+
expect(mockNavigate).toHaveBeenCalledWith(Routes.UnitStack, {
|
|
204
|
+
screen: Routes.DeviceDetail,
|
|
69
205
|
params: {
|
|
70
|
-
|
|
206
|
+
unitId: 70,
|
|
207
|
+
sensorId: 394,
|
|
71
208
|
},
|
|
72
209
|
});
|
|
73
210
|
});
|
|
74
211
|
}
|
|
212
|
+
|
|
213
|
+
test('test onClick Item Notify', () => {
|
|
214
|
+
item.content_code = NOTIFICATION_TYPES.NOTIFY_INDICATOR;
|
|
215
|
+
item.params = JSON.stringify({
|
|
216
|
+
unit_name: 'EoH Office',
|
|
217
|
+
status: 'Very Poor',
|
|
218
|
+
sensor_type: 'air_quality',
|
|
219
|
+
unit_id: 5,
|
|
220
|
+
summary_id: 11,
|
|
221
|
+
sensor_id: '',
|
|
222
|
+
});
|
|
223
|
+
item.is_read = false;
|
|
224
|
+
act(() => {
|
|
225
|
+
tree = create(wrapComponent(item));
|
|
226
|
+
});
|
|
227
|
+
const instance = tree.root;
|
|
228
|
+
const button = instance.findByType(TouchableOpacity);
|
|
229
|
+
act(() => {
|
|
230
|
+
button.props.onPress();
|
|
231
|
+
});
|
|
232
|
+
expect(axios.post).toHaveBeenCalledWith(API.NOTIFICATION.SET_READ(1));
|
|
233
|
+
expect(mockNavigate).toHaveBeenCalledWith(Routes.UnitStack, {
|
|
234
|
+
screen: Routes.UnitSummary,
|
|
235
|
+
params: {
|
|
236
|
+
summaryId: 11,
|
|
237
|
+
unitId: 5,
|
|
238
|
+
},
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
test('test render Notify not in any case', () => {
|
|
243
|
+
item.content_code = 'NEW CASE';
|
|
244
|
+
item.params = JSON.stringify({
|
|
245
|
+
unit_id: 1,
|
|
246
|
+
});
|
|
247
|
+
act(() => {
|
|
248
|
+
tree = create(wrapComponent(item));
|
|
249
|
+
});
|
|
250
|
+
const instance = tree.root;
|
|
251
|
+
const button = instance.findByType(TouchableOpacity);
|
|
252
|
+
act(() => {
|
|
253
|
+
button.props.onPress();
|
|
254
|
+
});
|
|
255
|
+
expect(mockNavigate).not.toHaveBeenCalledWith();
|
|
256
|
+
});
|
|
75
257
|
});
|