@eohjsc/react-native-smart-city 0.4.86 → 0.4.87

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@eohjsc/react-native-smart-city",
3
3
  "title": "React Native Smart Home",
4
- "version": "0.4.86",
4
+ "version": "0.4.87",
5
5
  "description": "TODO",
6
6
  "main": "index.js",
7
7
  "files": [
@@ -1,144 +1,125 @@
1
1
  import React, { memo, useCallback, useEffect, useState } from 'react';
2
- import { TouchableOpacity, View } from 'react-native';
2
+ import { Platform, TouchableOpacity, View } from 'react-native';
3
3
  import { AccessibilityLabel } from '../../configs/Constants';
4
4
  import { useSCContextSelector } from '../../context';
5
5
  import { useRemoteControl } from '../../hooks/IoT';
6
6
  import { useConfigGlobalState } from '../../iot/states';
7
7
  import IconComponent from '../IconComponent';
8
- import { Colors } from '../../configs';
9
8
 
10
- const ItemQuickAction = memo(
11
- ({ sensor, wrapperStyle, setStatus, iconSize = 30 }) => {
12
- const { quick_action } = sensor || {};
13
- const {
14
- config_id,
15
- off_action,
16
- on_status,
17
- on_action,
18
- off_status,
19
- interval,
20
- will_auto_update_status,
21
- on_state_values,
22
- } = quick_action || {};
23
- const [action, setAction] = useState(sensor?.action);
24
- // eslint-disable-next-line no-unused-vars
25
- const [configValues, _] = useConfigGlobalState('configValues');
26
- const currentValue = configValues[config_id]?.value || 0;
27
- const isFault = currentValue === 2; // phukhaco fault value
28
- const [isOn, setIsOn] = useState(currentValue);
9
+ const ItemQuickAction = memo(({ sensor, wrapperStyle, setStatus }) => {
10
+ const { quick_action } = sensor || {};
11
+ const {
12
+ config_id,
13
+ off_action,
14
+ on_status,
15
+ on_action,
16
+ off_status,
17
+ interval,
18
+ will_auto_update_status,
19
+ on_state_values,
20
+ } = quick_action || {};
21
+ const [action, setAction] = useState(sensor?.action);
22
+ // eslint-disable-next-line no-unused-vars
23
+ const [configValues, _] = useConfigGlobalState('configValues');
24
+ const currentValue = configValues[config_id]?.value || 0;
25
+ const [isOn, setIsOn] = useState(currentValue);
29
26
 
30
- const sendRemoteCommand = useRemoteControl();
31
- const [processing, setProcessing] = useState(false);
27
+ const sendRemoteCommand = useRemoteControl();
28
+ const [processing, setProcessing] = useState(false);
32
29
 
33
- const getIsOnValue = useCallback(() => {
34
- if (on_state_values && on_state_values.length > 0) {
35
- return on_state_values.includes(currentValue);
36
- }
37
- return !!currentValue;
38
- }, [currentValue, on_state_values]);
39
-
40
- useEffect(() => {
41
- setIsOn(getIsOnValue());
42
- }, [getIsOnValue]);
30
+ const getIsOnValue = useCallback(() => {
31
+ if (on_state_values && on_state_values.length > 0) {
32
+ return on_state_values.includes(currentValue);
33
+ }
34
+ return !!currentValue;
35
+ }, [currentValue, on_state_values]);
43
36
 
44
- useEffect(() => {
45
- if (!quick_action) {
46
- return;
47
- }
37
+ useEffect(() => {
38
+ setIsOn(getIsOnValue());
39
+ }, [getIsOnValue]);
48
40
 
49
- if (isOn) {
50
- setAction(off_action);
51
- setStatus && setStatus(on_status);
52
- } else {
53
- setAction(on_action);
54
- setStatus && setStatus(off_status);
55
- }
56
- }, [
57
- isOn,
58
- setStatus,
59
- quick_action,
60
- off_action,
61
- on_status,
62
- on_action,
63
- off_status,
64
- ]);
41
+ useEffect(() => {
42
+ if (!quick_action) {
43
+ return;
44
+ }
65
45
 
66
- const userId = useSCContextSelector((state) => state?.auth.account.user.id);
67
- const onActionPress = useCallback(async () => {
68
- if (isFault) {
69
- /* istanbul ignore next */
70
- return;
71
- }
72
- if (processing || !action) {
73
- /* istanbul ignore next */
74
- return;
75
- }
76
- setProcessing(true);
77
- let data = null;
78
- if (action?.allow_config_store_value_id === config_id) {
79
- if (action?.name?.toLowerCase().includes('off')) {
80
- data = {
81
- config_id: action?.allow_config_store_value_id,
82
- config_value: 0,
83
- };
84
- } else {
85
- data = {
86
- config_id: action?.allow_config_store_value_id,
87
- config_value: 1,
88
- };
89
- }
90
- data = JSON.stringify(data);
91
- }
92
- await sendRemoteCommand(sensor, action, data, userId);
46
+ if (isOn) {
47
+ setAction(off_action);
48
+ setStatus && setStatus(on_status);
49
+ } else {
50
+ setAction(on_action);
51
+ setStatus && setStatus(off_status);
52
+ }
53
+ }, [
54
+ isOn,
55
+ setStatus,
56
+ quick_action,
57
+ off_action,
58
+ on_status,
59
+ on_action,
60
+ off_status,
61
+ ]);
93
62
 
94
- if (!will_auto_update_status) {
95
- setTimeout(() => {
96
- setIsOn(action.id === on_action.id);
97
- }, interval);
63
+ const userId = useSCContextSelector((state) => state?.auth.account.user.id);
64
+ const onActionPress = useCallback(async () => {
65
+ if (processing || !action) {
66
+ /* istanbul ignore next */
67
+ return;
68
+ }
69
+ setProcessing(true);
70
+ let data = null;
71
+ if (action?.allow_config_store_value_id === config_id) {
72
+ if (action?.name?.toLowerCase().includes('off')) {
73
+ data = {
74
+ config_id: action?.allow_config_store_value_id,
75
+ config_value: 0,
76
+ };
77
+ } else {
78
+ data = {
79
+ config_id: action?.allow_config_store_value_id,
80
+ config_value: 1,
81
+ };
98
82
  }
99
- setProcessing(false);
100
- }, [
101
- isFault,
102
- processing,
103
- action,
104
- config_id,
105
- sendRemoteCommand,
106
- sensor,
107
- userId,
108
- will_auto_update_status,
109
- interval,
110
- on_action?.id,
111
- ]);
83
+ data = JSON.stringify(data);
84
+ }
85
+ await sendRemoteCommand(sensor, action, data, userId);
112
86
 
113
- if (!config_id) {
114
- return <View />;
87
+ if (!will_auto_update_status) {
88
+ setTimeout(() => {
89
+ setIsOn(action.id === on_action.id);
90
+ }, interval);
115
91
  }
92
+ setProcessing(false);
93
+ }, [
94
+ processing,
95
+ action,
96
+ config_id,
97
+ sendRemoteCommand,
98
+ sensor,
99
+ userId,
100
+ will_auto_update_status,
101
+ interval,
102
+ on_action?.id,
103
+ ]);
116
104
 
117
- return (
118
- <TouchableOpacity
119
- accessibilityLabel={`${AccessibilityLabel.ITEM_QUICK_ACTION_PRESS}-${sensor?.id}`}
120
- onPress={onActionPress}
121
- >
122
- <View style={wrapperStyle}>
123
- {isFault ? (
124
- <IconComponent
125
- icon={'WarningOutlined'}
126
- color={Colors.Red}
127
- iconSize={iconSize}
128
- size={iconSize}
129
- />
130
- ) : (
131
- <IconComponent
132
- icon={action?.icon_kit || action?.icon || 'PoweroffOutlined'}
133
- isOn={isOn}
134
- iconSize={iconSize}
135
- size={iconSize}
136
- />
137
- )}
138
- </View>
139
- </TouchableOpacity>
140
- );
105
+ if (!config_id) {
106
+ return <View />;
141
107
  }
142
- );
108
+
109
+ return (
110
+ <TouchableOpacity
111
+ accessibilityLabel={`${AccessibilityLabel.ITEM_QUICK_ACTION_PRESS}-${sensor?.id}`}
112
+ onPress={onActionPress}
113
+ >
114
+ <View style={wrapperStyle}>
115
+ <IconComponent
116
+ icon={action?.icon_kit || action?.icon || 'PoweroffOutlined'}
117
+ isOn={isOn}
118
+ size={Platform.OS === 'ios' ? 20 : 30}
119
+ />
120
+ </View>
121
+ </TouchableOpacity>
122
+ );
123
+ });
143
124
 
144
125
  export default ItemQuickAction;
@@ -35,7 +35,7 @@ const OnOffButtonTemplate = memo(
35
35
  <View style={styles.smallCircle}>
36
36
  <IconComponent
37
37
  icon={icon}
38
- iconSize={30}
38
+ size={30}
39
39
  isOn={isOn}
40
40
  colorInActive={Colors.Gray6}
41
41
  color={Colors.Green7}
@@ -118,7 +118,6 @@ const OptionsDropdownActionTemplate = ({
118
118
  {!checkIcon && (
119
119
  <IconComponent
120
120
  icon={iconKit || icon}
121
- iconSize={27}
122
121
  size={27}
123
122
  style={styles.marginRight}
124
123
  />
@@ -22,7 +22,7 @@ const ThreeButtonDefault = memo(
22
22
  return icon2 === 'stop' ? (
23
23
  <View style={styles.squareStop} />
24
24
  ) : (
25
- <IconComponent icon={icon2} iconSize={30} />
25
+ <IconComponent icon={icon2} size={30} />
26
26
  );
27
27
  };
28
28
 
@@ -87,7 +87,7 @@ const ThreeButtonDefault = memo(
87
87
  {item?.id === 2 ? (
88
88
  <Icon2CT />
89
89
  ) : (
90
- <IconComponent icon={item?.icon} iconSize={30} />
90
+ <IconComponent icon={item?.icon} size={30} />
91
91
  )}
92
92
  </View>
93
93
  <Text style={styles.text}>{item?.text}</Text>
@@ -60,7 +60,7 @@ const ThreeButtonTemplate = memo(({ item, doAction, isWidgetOrder }) => {
60
60
  <View style={styles.lockDoor}>
61
61
  <IconComponent
62
62
  icon={icon}
63
- iconSize={15}
63
+ size={15}
64
64
  color={color}
65
65
  style={styles.iconLock}
66
66
  />
@@ -41,11 +41,7 @@ const CurrentRainSensor = memo(
41
41
  end={{ x: 1, y: 1 }}
42
42
  />
43
43
  {icon_kit_data?.icon || icon ? (
44
- <IconComponent
45
- size={iconSize}
46
- iconSize={iconSize}
47
- icon={icon_kit_data?.icon || icon}
48
- />
44
+ <IconComponent size={iconSize} icon={icon_kit_data?.icon || icon} />
49
45
  ) : (
50
46
  <FImage
51
47
  source={images.activeCurrentSensor}
@@ -10,7 +10,6 @@ const IconComponent = memo(
10
10
  icon,
11
11
  isOn = false,
12
12
  size = 30,
13
- iconSize = 30,
14
13
  style,
15
14
  antIconStyle,
16
15
  color,
@@ -66,7 +65,7 @@ const IconComponent = memo(
66
65
  <IconFill
67
66
  name={displayIcon}
68
67
  color={colorIcon}
69
- size={iconSize}
68
+ size={size}
70
69
  style={[extraStyle, antIconStyle || style]}
71
70
  />
72
71
  );
@@ -80,7 +79,7 @@ const IconComponent = memo(
80
79
  <IconOutline
81
80
  name={iconCT}
82
81
  color={colorIcon}
83
- size={iconSize}
82
+ size={size}
84
83
  style={[extraStyle, antIconStyle || style]}
85
84
  />
86
85
  );
@@ -233,6 +233,7 @@ export const NOTIFICATION_TYPES = {
233
233
  LOW_BATTERY: 'LOW_BATTERY',
234
234
  BROADCAST_NOTIFICATION: 'BROADCAST_NOTIFICATION',
235
235
  SUBSCRIBE_SUCCESS: 'SUBSCRIBE_SUCCESS',
236
+ TRIGGER_SCRIPT_NOTIFY: 'TRIGGER_SCRIPT_NOTIFY',
236
237
  };
237
238
 
238
239
  export const ACTIVITY_LOG_TYPES = {
@@ -22,12 +22,14 @@ export const generateAutomationDataConditionText = (
22
22
  };
23
23
 
24
24
  export const getAutomationData = (automate) => {
25
- if ([AUTOMATE_TYPE.VALUE_CHANGE].includes(automate?.type)) {
26
- return automate?.value_change || automate?.event_sensor;
27
- } else if (automate?.type === AUTOMATE_TYPE.SCHEDULE) {
28
- return automate?.schedule;
29
- } else if ([AUTOMATE_TYPE.EVENT].includes(automate?.type)) {
30
- return automate?.event || automate?.event_action || automate?.event_sensor;
25
+ const { type, event_sensor, event_action, schedule, event, value_change } =
26
+ automate;
27
+ if ([AUTOMATE_TYPE.VALUE_CHANGE].includes(type)) {
28
+ return value_change || event_sensor;
29
+ } else if (type === AUTOMATE_TYPE.SCHEDULE) {
30
+ return schedule;
31
+ } else if ([AUTOMATE_TYPE.EVENT].includes(type)) {
32
+ return event || event_action || event_sensor;
31
33
  }
32
34
  return null;
33
35
  };
@@ -58,8 +60,7 @@ const generateAutomationConditionValueEvaluation = (
58
60
  }
59
61
  let textEvent = '';
60
62
  if (config_name) {
61
- const stateConditionData = null;
62
- textEvent = `${config_name} - ${t(stateConditionData?.stateValue[value])}`;
63
+ textEvent = config_name;
63
64
  } else {
64
65
  textEvent = `${end_device_name} - ${action}`;
65
66
  }
@@ -75,8 +76,8 @@ export const generateAutomationConditionText = (
75
76
  if (!automateData) {
76
77
  return;
77
78
  }
78
-
79
- if ([AUTOMATE_TYPE.VALUE_CHANGE].includes(automate?.type)) {
79
+ const { type } = automate;
80
+ if ([AUTOMATE_TYPE.VALUE_CHANGE].includes(type)) {
80
81
  const { condition, config_name, value } = automateData;
81
82
  if (condition === 'value_evaluation') {
82
83
  return generateAutomationConditionValueEvaluation(
@@ -95,7 +96,7 @@ export const generateAutomationConditionText = (
95
96
  text = 'equal';
96
97
  }
97
98
  return `${config_name} ${t(text)} ${value}`;
98
- } else if (automate?.type === AUTOMATE_TYPE.SCHEDULE) {
99
+ } else if (type === AUTOMATE_TYPE.SCHEDULE) {
99
100
  const { repeat, time_repeat, date_repeat, weekday_repeat } = automateData;
100
101
  const time =
101
102
  time_repeat?.length >= 8
@@ -13,6 +13,7 @@ import api from '../../../utils/Apis/axios';
13
13
  import { WrapHeaderScrollable } from '../../../commons';
14
14
 
15
15
  import { getPusher } from '../../../utils/Pusher';
16
+ import { NOTIFICATION_TYPES } from '../../../configs/Constants';
16
17
 
17
18
  const wrapComponent = () => (
18
19
  <SCProvider initState={mockSCStore({})}>
@@ -164,4 +165,28 @@ describe('test Notification', () => {
164
165
  });
165
166
  expect(getPusher().unsubscribe).toBeCalledWith('private-user-1');
166
167
  });
168
+ it('test render trigger script notification', async () => {
169
+ const response = {
170
+ results: [
171
+ {
172
+ content_code: NOTIFICATION_TYPES.TRIGGER_SCRIPT_NOTIFY,
173
+ created_at: '2021-10-07T08:57:09.370286Z',
174
+ id: 12905,
175
+ is_read: true,
176
+ params: "{'unit_id': 1, 'content': 'EoH Office'}",
177
+ type: 'NEWS',
178
+ },
179
+ ],
180
+ };
181
+ mock
182
+ .onGet(API.NOTIFICATION.LIST_EOH_NOTIFICATIONS(1, ''))
183
+ .reply(200, response);
184
+ await act(async () => {
185
+ tree = await create(wrapComponent());
186
+ });
187
+ const instance = tree.root;
188
+ const notificationItem = instance.findAllByType(NotificationItem);
189
+
190
+ expect(notificationItem).toHaveLength(1);
191
+ });
167
192
  });
@@ -44,8 +44,15 @@ const NotificationItem = memo(({ item }) => {
44
44
  const logo = SCConfig.appLogo;
45
45
 
46
46
  const renderItem = useCallback(() => {
47
- const unitId = params?.unit_id;
48
- const sensorId = params?.sensor_id;
47
+ const {
48
+ unit_id,
49
+ sensor_id,
50
+ summary_id,
51
+ unit_owner_name,
52
+ sub_unit_id,
53
+ type,
54
+ content,
55
+ } = params;
49
56
  switch (content_code) {
50
57
  case NOTIFICATION_TYPES.NOTIFY_INVITE_MEMBER:
51
58
  return {
@@ -56,7 +63,7 @@ const NotificationItem = memo(({ item }) => {
56
63
  navigation.navigate(Routes.UnitStack, {
57
64
  screen: Routes.UnitDetail,
58
65
  params: {
59
- unitId,
66
+ unitId: unit_id,
60
67
  },
61
68
  });
62
69
  },
@@ -77,8 +84,8 @@ const NotificationItem = memo(({ item }) => {
77
84
  navigation.navigate(Routes.UnitStack, {
78
85
  screen: Routes.UnitSummary,
79
86
  params: {
80
- summaryId: params?.summary_id,
81
- unitId,
87
+ summaryId: summary_id,
88
+ unitId: unit_id,
82
89
  },
83
90
  }),
84
91
  iconContent: <Image source={logo} style={styles.logo} />,
@@ -92,8 +99,8 @@ const NotificationItem = memo(({ item }) => {
92
99
  navigation.navigate(Routes.UnitStack, {
93
100
  screen: Routes.UnitSummary,
94
101
  params: {
95
- summaryId: params?.summary_id,
96
- unitId,
102
+ summaryId: summary_id,
103
+ unitId: unit_id,
97
104
  },
98
105
  }),
99
106
  iconContent: <Image source={logo} style={styles.logo} />,
@@ -107,8 +114,8 @@ const NotificationItem = memo(({ item }) => {
107
114
  navigation.navigate(Routes.UnitStack, {
108
115
  screen: Routes.UnitSummary,
109
116
  params: {
110
- summaryId: params?.summary_id,
111
- unitId,
117
+ summaryId: summary_id,
118
+ unitId: unit_id,
112
119
  },
113
120
  }),
114
121
  iconContent: <Image source={logo} style={styles.logo} />,
@@ -120,8 +127,8 @@ const NotificationItem = memo(({ item }) => {
120
127
  navigation.navigate(Routes.UnitStack, {
121
128
  screen: Routes.UnitSummary,
122
129
  params: {
123
- summaryId: params?.summary_id,
124
- unitId,
130
+ summaryId: summary_id,
131
+ unitId: unit_id,
125
132
  },
126
133
  }),
127
134
  iconContent: <Image source={logo} style={styles.logo} />,
@@ -135,8 +142,8 @@ const NotificationItem = memo(({ item }) => {
135
142
  navigation.navigate(Routes.UnitStack, {
136
143
  screen: Routes.UnitSummary,
137
144
  params: {
138
- summaryId: params?.summary_id,
139
- unitId,
145
+ summaryId: summary_id,
146
+ unitId: unit_id,
140
147
  },
141
148
  }),
142
149
  iconContent: <Image source={logo} style={styles.logo} />,
@@ -148,8 +155,8 @@ const NotificationItem = memo(({ item }) => {
148
155
  navigation.navigate(Routes.UnitStack, {
149
156
  screen: Routes.DeviceDetail,
150
157
  params: {
151
- unitId,
152
- sensorId,
158
+ unitId: unit_id,
159
+ sensorId: sensor_id,
153
160
  },
154
161
  }),
155
162
  iconContent: <Image source={logo} style={styles.logo} />,
@@ -161,8 +168,8 @@ const NotificationItem = memo(({ item }) => {
161
168
  navigation.navigate(Routes.UnitStack, {
162
169
  screen: Routes.DeviceDetail,
163
170
  params: {
164
- unitId,
165
- sensorId,
171
+ unitId: unit_id,
172
+ sensorId: sensor_id,
166
173
  },
167
174
  }),
168
175
  iconContent: <Image source={logo} style={styles.logo} />,
@@ -174,8 +181,8 @@ const NotificationItem = memo(({ item }) => {
174
181
  navigation.navigate(Routes.UnitStack, {
175
182
  screen: Routes.DeviceDetail,
176
183
  params: {
177
- unitId,
178
- sensorId,
184
+ unitId: unit_id,
185
+ sensorId: sensor_id,
179
186
  },
180
187
  }),
181
188
  iconContent: <Image source={logo} style={styles.logo} />,
@@ -189,8 +196,8 @@ const NotificationItem = memo(({ item }) => {
189
196
  navigation.navigate(Routes.UnitStack, {
190
197
  screen: Routes.DeviceDetail,
191
198
  params: {
192
- unitId,
193
- sensorId,
199
+ unitId: unit_id,
200
+ sensorId: sensor_id,
194
201
  },
195
202
  }),
196
203
  iconContent: <Image source={logo} style={styles.logo} />,
@@ -202,8 +209,8 @@ const NotificationItem = memo(({ item }) => {
202
209
  navigation.navigate(Routes.UnitStack, {
203
210
  screen: Routes.DeviceDetail,
204
211
  params: {
205
- unitId,
206
- sensorId,
212
+ unitId: unit_id,
213
+ sensorId: sensor_id,
207
214
  },
208
215
  }),
209
216
  iconContent: (
@@ -213,7 +220,7 @@ const NotificationItem = memo(({ item }) => {
213
220
  case NOTIFICATION_TYPES.NOTIFY_REMOVE_UNIT:
214
221
  return {
215
222
  content: customColorText(
216
- params?.unit_owner_name
223
+ unit_owner_name
217
224
  ? t('text_notification_content_remove_unit_to_member')
218
225
  : t('text_notification_content_remove_unit_to_owner')
219
226
  ),
@@ -249,7 +256,7 @@ const NotificationItem = memo(({ item }) => {
249
256
  navigation.navigate(Routes.UnitStack, {
250
257
  screen: Routes.UnitDetail,
251
258
  params: {
252
- unitId,
259
+ unitId: unit_id,
253
260
  },
254
261
  });
255
262
  },
@@ -266,8 +273,8 @@ const NotificationItem = memo(({ item }) => {
266
273
  navigation.navigate(Routes.UnitStack, {
267
274
  screen: Routes.DeviceDetail,
268
275
  params: {
269
- unitId,
270
- sensorId,
276
+ unitId: unit_id,
277
+ sensorId: sensor_id,
271
278
  },
272
279
  });
273
280
  },
@@ -281,7 +288,7 @@ const NotificationItem = memo(({ item }) => {
281
288
  navigation.navigate(Routes.UnitStack, {
282
289
  screen: Routes.UnitDetail,
283
290
  params: {
284
- unitId,
291
+ unitId: unit_id,
285
292
  },
286
293
  });
287
294
  },
@@ -298,8 +305,8 @@ const NotificationItem = memo(({ item }) => {
298
305
  navigation.navigate(Routes.UnitStack, {
299
306
  screen: Routes.UnitDetail,
300
307
  params: {
301
- unitId,
302
- stationId: params?.sub_unit_id,
308
+ unitId: unit_id,
309
+ stationId: sub_unit_id,
303
310
  },
304
311
  });
305
312
  },
@@ -336,7 +343,7 @@ const NotificationItem = memo(({ item }) => {
336
343
  ),
337
344
  };
338
345
  case NOTIFICATION_TYPES.NOTIFY_EMERGENCY:
339
- switch (params?.type) {
346
+ switch (type) {
340
347
  case EMERGENCY_TYPE.CREATED:
341
348
  return {
342
349
  content: customColorText(
@@ -346,8 +353,8 @@ const NotificationItem = memo(({ item }) => {
346
353
  navigation.navigate(Routes.UnitStack, {
347
354
  screen: Routes.DeviceDetail,
348
355
  params: {
349
- unitId,
350
- sensorId,
356
+ unitId: unit_id,
357
+ sensorId: sensor_id,
351
358
  },
352
359
  }),
353
360
  iconContent: <Image source={logo} style={styles.logo} />,
@@ -361,8 +368,8 @@ const NotificationItem = memo(({ item }) => {
361
368
  navigation.navigate(Routes.UnitStack, {
362
369
  screen: Routes.DeviceDetail,
363
370
  params: {
364
- unitId,
365
- sensorId,
371
+ unitId: unit_id,
372
+ sensorId: sensor_id,
366
373
  },
367
374
  }),
368
375
  iconContent: <Image source={logo} style={styles.logo} />,
@@ -387,7 +394,7 @@ const NotificationItem = memo(({ item }) => {
387
394
  navigation.navigate(Routes.UnitStack, {
388
395
  screen: Routes.UnitDetail,
389
396
  params: {
390
- unitId,
397
+ unitId: unit_id,
391
398
  },
392
399
  });
393
400
  },
@@ -421,6 +428,21 @@ const NotificationItem = memo(({ item }) => {
421
428
  redirect: () => null,
422
429
  iconContent: <Image source={logo} style={styles.logo} />,
423
430
  };
431
+ case NOTIFICATION_TYPES.TRIGGER_SCRIPT_NOTIFY:
432
+ return {
433
+ content: content,
434
+ redirect: () => {
435
+ navigation.navigate(Routes.UnitStack, {
436
+ screen: Routes.UnitDetail,
437
+ params: {
438
+ unitId: unit_id,
439
+ },
440
+ });
441
+ },
442
+ iconContent: (
443
+ <IconComponent icon={'home'} style={styles.backgroundSummer} />
444
+ ),
445
+ };
424
446
  default:
425
447
  return null;
426
448
  }