Skip to content

Commit a007d76

Browse files
committed
Pass the whole device object to DeviceActionButton, group action types by device type
1 parent 8e0e8cf commit a007d76

2 files changed

Lines changed: 34 additions & 27 deletions

File tree

src/pages/Devices.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ const Devices = ({
4848
className="d-flex flex-column flex-lg-row justify-content-center align-items-center gap-4">
4949
{isUnavailable ? t('views.devices.offline') : <>
5050
{deviceActions.map(action =>
51-
<DeviceActionButton key={action} deviceId={device.id} action={action}
51+
<DeviceActionButton key={action} device={device} action={action}
5252
isDoorOpen={action === 'open' && isOpen} />)}
5353
{deviceActions.length === 0 && <LoadingIcon large />}
5454
</>}

src/widgets/DeviceActionButton/DeviceActionButton.jsx

Lines changed: 33 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -10,33 +10,37 @@ import { sleep } from '../../utils/time.js';
1010
import './DeviceActionButton.scss';
1111

1212
const types = {
13-
open: {
14-
variant: 'success',
15-
icon: 'fa-solid fa-right-to-bracket',
13+
door: {
14+
open: {
15+
variant: 'success',
16+
icon: 'fa-solid fa-right-to-bracket',
17+
},
18+
open_alternative: {
19+
variant: 'success',
20+
icon: 'fa-solid fa-right-to-bracket',
21+
},
22+
lock: {
23+
variant: 'danger',
24+
icon: 'fa-solid fa-lock',
25+
},
26+
unlock: {
27+
variant: 'info',
28+
icon: 'fa-solid fa-lock-open',
29+
},
1630
},
17-
open_alternative: {
18-
variant: 'success',
19-
icon: 'fa-solid fa-right-to-bracket',
20-
},
21-
lock: {
22-
variant: 'danger',
23-
icon: 'fa-solid fa-lock',
24-
},
25-
unlock: {
26-
variant: 'info',
27-
icon: 'fa-solid fa-lock-open',
28-
},
29-
turn_on: {
30-
variant: 'success',
31-
icon: 'fa-solid fa-lightbulb',
32-
},
33-
turn_off: {
34-
variant: 'danger',
35-
icon: 'fa-regular fa-lightbulb',
31+
light: {
32+
turn_on: {
33+
variant: 'success',
34+
icon: 'fa-solid fa-lightbulb',
35+
},
36+
turn_off: {
37+
variant: 'danger',
38+
icon: 'fa-regular fa-lightbulb',
39+
},
3640
},
3741
};
3842
const DeviceActionButton = ({
39-
deviceId,
43+
device,
4044
action,
4145
isDoorOpen = false,
4246
}) => {
@@ -45,10 +49,10 @@ const DeviceActionButton = ({
4549
const {
4650
execute,
4751
error,
48-
} = useDeviceAction(deviceId, action);
52+
} = useDeviceAction(device.id, action);
4953

5054
const {t} = useTranslation();
51-
const type = types?.[action] || {
55+
const type = types?.[device.type]?.[action] || {
5256
variant: '',
5357
icon: '',
5458
};
@@ -74,7 +78,10 @@ const DeviceActionButton = ({
7478
};
7579

7680
DeviceActionButton.propTypes = {
77-
deviceId: PropTypes.string.isRequired,
81+
device: PropTypes.shape({
82+
id: PropTypes.string.isRequired,
83+
type: PropTypes.string.isRequired,
84+
}).isRequired,
7885
action: PropTypes.string.isRequired,
7986
isDoorOpen: PropTypes.bool,
8087
};

0 commit comments

Comments
 (0)