Skip to content

Commit e68072e

Browse files
authored
feat(device): show interview state on device page (#2466)
* feat(device): show interview state on device page * fix(pretty): pretty
1 parent 73189f4 commit e68072e

File tree

6 files changed

+38
-39
lines changed

6 files changed

+38
-39
lines changed

src/components/device-image/DeviceImage.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React, { Suspense } from 'react';
22
import genericDevice from '../../images/generic-zigbee-device.png';
3-
import { Device, DeviceState, OTAState } from '../../types';
3+
import { Device, DeviceState, InterviewState, OTAState } from '../../types';
44
import cx from 'classnames';
55
import { useTranslation } from 'react-i18next';
66
import { LazyImage } from './LazyImage';
@@ -33,10 +33,10 @@ export function DeviceImage(props: Readonly<DeviceImageProps>) {
3333
otaState.state === 'updating' ? (
3434
<i title={t('updating_firmware')} className="fa fa-sync fa-spin position-absolute bottom-0 right-0" />
3535
) : null;
36-
const interviewSpinner = device.interviewing ? (
37-
<i title={t('interviewing')} className="fa fa-spinner fa-spin position-absolute bottom-0 right-0" />
38-
) : null;
39-
const unsuccessfulInterview = !device.interviewing && !device.interview_completed;
36+
const interviewSpinner =
37+
device.interview_state === InterviewState.IN_PROGRESS ? (
38+
<i title={t('interviewing')} className="fa fa-spinner fa-spin position-absolute bottom-0 right-0" />
39+
) : null;
4040
const disabledIcon = disabled ? (
4141
<i title={t('device_disabled')} className="fa fa-ban position-absolute bottom-0 right-0" />
4242
) : null;
@@ -51,7 +51,7 @@ export function DeviceImage(props: Readonly<DeviceImageProps>) {
5151
{interviewSpinner}
5252
{otaSpinner}
5353
{disabledIcon}
54-
{unsuccessfulInterview && (
54+
{device.interview_state === InterviewState.FAILED && (
5555
<i
5656
title={t('interview_failed')}
5757
className="fa fa-exclamation-triangle position-absolute top-0 right-0 text-danger"

src/components/device-page/info.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,10 +217,16 @@ export class DeviceInfo extends Component<
217217
),
218218
},
219219
{
220-
translationKey: 'interview_completed',
220+
translationKey: 'interview_state',
221221
render: (device: Device) => (
222222
<dd className="col-12 col-md-7">
223-
<DisplayValue name="interview_completed" value={device.interview_completed} />
223+
<DisplayValue
224+
name="interview_state"
225+
value={device.interview_state
226+
.toLowerCase()
227+
.replace('_', ' ')
228+
.replace(/^./, (match) => match.toUpperCase())}
229+
/>
224230
</dd>
225231
),
226232
},

src/createMockDevice.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Device } from './types';
1+
import { Device, InterviewState } from './types';
22

33
export function createMockDevice(overries: Partial<Device> = {}): Device {
44
return {
@@ -8,8 +8,7 @@ export function createMockDevice(overries: Partial<Device> = {}): Device {
88
power_source: 'Mains (single phase)',
99
model_id: 'LWB010',
1010
manufacturer: 'Philips',
11-
interviewing: false,
12-
interview_completed: true,
11+
interview_state: InterviewState.SUCCESSFUL,
1312
software_build_id: 12345678,
1413
supported: true,
1514
definition: {

src/i18n/locales/en.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2666,6 +2666,7 @@
26662666
"interview_completed": "Interview completed",
26672667
"interview_failed": "Interview failed",
26682668
"interviewing": "Interviewing",
2669+
"interview_state": "Interview state",
26692670
"last_seen": "Last seen",
26702671
"lqi": "LQI",
26712672
"mains_single_phase": "Mains (single phase)",

src/types.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -283,15 +283,21 @@ export interface Group extends WithFriendlyName, WithDescription, WithScenes {
283283
members: GroupAddress[];
284284
}
285285

286+
export enum InterviewState {
287+
PENDING = "PENDING",
288+
IN_PROGRESS = "IN_PROGRESS",
289+
SUCCESSFUL = "SUCCESSFUL",
290+
FAILED = "FAILED",
291+
}
292+
286293
export interface Device extends WithFriendlyName, WithDescription {
287294
ieee_address: IEEEEAddress;
288295
type: DeviceType;
289296
network_address: number;
290297
power_source?: PowerSource;
291298
model_id: string;
292299
manufacturer: string;
293-
interviewing: boolean;
294-
interview_completed: boolean;
300+
interview_state: InterviewState;
295301
software_build_id: number;
296302
supported: boolean;
297303
definition?: DeviceDefinition;

ws-messages/onConnect.json

Lines changed: 13 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1269,8 +1269,7 @@
12691269
},
12701270
"friendly_name": "Coordinator",
12711271
"ieee_address": "0x00124b0022813501",
1272-
"interview_completed": true,
1273-
"interviewing": false,
1272+
"interview_state": "SUCCESSFUL",
12741273
"network_address": 0,
12751274
"supported": false,
12761275
"type": "Coordinator"
@@ -1408,8 +1407,7 @@
14081407
},
14091408
"friendly_name": "0xbc33acfffe17628b",
14101409
"ieee_address": "0xbc33acfffe17628b",
1411-
"interview_completed": false,
1412-
"interviewing": false,
1410+
"interview_state": "FAILED",
14131411
"manufacturer": "IKEA of Sweden",
14141412
"model_id": "TRADFRI on/off switch",
14151413
"network_address": 25249,
@@ -1684,8 +1682,7 @@
16841682
},
16851683
"friendly_name": "hue1",
16861684
"ieee_address": "0x0017880104292f0a",
1687-
"interview_completed": true,
1688-
"interviewing": false,
1685+
"interview_state": "SUCCESSFUL",
16891686
"manufacturer": "Philips",
16901687
"model_id": "LCT016",
16911688
"network_address": 8043,
@@ -1929,8 +1926,7 @@
19291926
},
19301927
"friendly_name": "hue_back_tv",
19311928
"ieee_address": "0x0017880104dfc05e",
1932-
"interview_completed": true,
1933-
"interviewing": false,
1929+
"interview_state": "SUCCESSFUL",
19341930
"manufacturer": "Philips",
19351931
"model_id": "LCT010",
19361932
"network_address": 33891,
@@ -2030,8 +2026,7 @@
20302026
},
20312027
"friendly_name": "0x00158d000224154d",
20322028
"ieee_address": "0x00158d000224154d",
2033-
"interview_completed": true,
2034-
"interviewing": false,
2029+
"interview_state": "SUCCESSFUL",
20352030
"manufacturer": "LUMI",
20362031
"model_id": "lumi.sensor_switch",
20372032
"network_address": 38440,
@@ -2097,8 +2092,7 @@
20972092
},
20982093
"friendly_name": "0x00124b001e73227f1",
20992094
"ieee_address": "0x00124b001e73227f",
2100-
"interview_completed": true,
2101-
"interviewing": false,
2095+
"interview_state": "SUCCESSFUL",
21022096
"manufacturer": "SONOFF",
21032097
"model_id": "BASICZBR3",
21042098
"network_address": 38955,
@@ -2241,8 +2235,7 @@
22412235
},
22422236
"friendly_name": "work/nur/jopa",
22432237
"ieee_address": "0x00158d0002c48958",
2244-
"interview_completed": true,
2245-
"interviewing": false,
2238+
"interview_state": "SUCCESSFUL",
22462239
"manufacturer": "LUMI",
22472240
"model_id": "lumi.vibration.aq1",
22482241
"network_address": 20205,
@@ -2350,8 +2343,7 @@
23502343
},
23512344
"friendly_name": "livingroom/temp_humidity",
23522345
"ieee_address": "0x00158d0001fa4f2f",
2353-
"interview_completed": true,
2354-
"interviewing": false,
2346+
"interview_state": "SUCCESSFUL",
23552347
"manufacturer": "LUMI",
23562348
"model_id": "lumi.sensor_ht",
23572349
"network_address": 19403,
@@ -2419,8 +2411,7 @@
24192411
},
24202412
"friendly_name": "livingroom/window",
24212413
"ieee_address": "0x00158d0001e1a85a",
2422-
"interview_completed": true,
2423-
"interviewing": false,
2414+
"interview_state": "SUCCESSFUL",
24242415
"manufacturer": "LUMI",
24252416
"model_id": "lumi.sensor_magnet",
24262417
"network_address": 35932,
@@ -2488,8 +2479,7 @@
24882479
},
24892480
"friendly_name": "livingroom/ac power",
24902481
"ieee_address": "0x00158d0004261dc7",
2491-
"interview_completed": true,
2492-
"interviewing": false,
2482+
"interview_state": "SUCCESSFUL",
24932483
"manufacturer": "LUMI",
24942484
"model_id": "lumi.sensor_magnet",
24952485
"network_address": 14567,
@@ -2633,8 +2623,7 @@
26332623
},
26342624
"friendly_name": "0x00158d0004866f11",
26352625
"ieee_address": "0x00158d0004866f11",
2636-
"interview_completed": true,
2637-
"interviewing": false,
2626+
"interview_state": "SUCCESSFUL",
26382627
"manufacturer": "LUMI",
26392628
"model_id": "lumi.weather",
26402629
"network_address": 27244,
@@ -2704,8 +2693,7 @@
27042693
},
27052694
"friendly_name": "dining room/ac power",
27062695
"ieee_address": "0x00158d00039fe32c",
2707-
"interview_completed": true,
2708-
"interviewing": false,
2696+
"interview_state": "SUCCESSFUL",
27092697
"manufacturer": "LUMI",
27102698
"model_id": "lumi.sensor_magnet",
27112699
"network_address": 20681,
@@ -2948,8 +2936,7 @@
29482936
},
29492937
"friendly_name": "0x0017880103d55d65",
29502938
"ieee_address": "0x0017880103d55d65",
2951-
"interview_completed": true,
2952-
"interviewing": false,
2939+
"interview_state": "SUCCESSFUL",
29532940
"manufacturer": "Philips",
29542941
"model_id": "LCT016",
29552942
"network_address": 17462,

0 commit comments

Comments
 (0)