-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathDeviceActionButton.jsx
More file actions
87 lines (75 loc) · 2.14 KB
/
DeviceActionButton.jsx
File metadata and controls
87 lines (75 loc) · 2.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import { Button } from 'react-bootstrap';
import React, { useState } from 'react';
import { useTranslation } from 'react-i18next';
import './DeviceActionButton.scss';
import { useDeviceActionMutation } from '../../features/apiSlice.js';
import RedirectToLogin from '../RedirectToLogin.jsx';
import { sleep } from '../../utils/time.js';
import debounce from 'debounce';
const types = {
open: {
variant: 'success',
icon: 'fa-solid fa-right-to-bracket',
},
open_alternative: {
variant: 'success',
icon: 'fa-solid fa-right-to-bracket',
},
lock: {
variant: 'danger',
icon: 'fa-solid fa-lock',
},
unlock: {
variant: 'info',
icon: 'fa-solid fa-lock-open',
},
turn_on: {
variant: 'success',
icon: 'fa-solid fa-lightbulb',
},
turn_off: {
variant: 'danger',
icon: 'fa-regular fa-lightbulb',
},
};
const DeviceActionButton = ({
deviceId,
action,
isDoorOpen,
}) => {
const [ disabled, setDisabled ] = useState(false);
const [ execute, {
isError,
error,
} ] = useDeviceActionMutation();
const {t} = useTranslation();
const type = types?.[action] || {
variant: '',
icon: '',
};
const openDoor = debounce(execute, 2000);
async function handleClick() {
setDisabled(true);
// await execute({
// deviceId,
// action,
// });
openDoor({deviceId, action});
// await sleep(3000);
setDisabled(false);
}
const variant = isDoorOpen ? 'warning' : type.variant;
const icon = (isDoorOpen ? 'fa-solid fa-door-open' : type.icon);
const label = t(isDoorOpen ? 'views.door.open' : 'views.devices.' + action);
return (<>
<Button variant={variant} className="device-action-button" onClick={handleClick} disabled={disabled}>
<i className={icon} />
<div>{label}</div>
</Button>
{isError && [401, 403].includes(error.status) && <RedirectToLogin />}
</>);
};
DeviceActionButton.defaultProps = {
isDoorOpen: false,
};
export default DeviceActionButton;