@iobroker/dm-gui-components 0.1.0 → 6.13.7
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/README.md +1 -1
- package/build/Communication.js +247 -0
- package/build/Communication.js.map +1 -0
- package/build/DeviceActionButton.js +10 -0
- package/build/DeviceActionButton.js.map +1 -0
- package/build/DeviceCard.js +307 -0
- package/build/DeviceCard.js.map +1 -0
- package/build/DeviceControl.js +119 -0
- package/build/DeviceControl.js.map +1 -0
- package/{DeviceImageUpload.js → build/DeviceImageUpload.js} +5 -9
- package/build/DeviceImageUpload.js.map +1 -0
- package/build/DeviceList.js +235 -0
- package/build/DeviceList.js.map +1 -0
- package/build/DeviceStatus.js +106 -0
- package/build/DeviceStatus.js.map +1 -0
- package/build/InstanceActionButton.js +11 -0
- package/build/InstanceActionButton.js.map +1 -0
- package/{JsonConfig.js → build/JsonConfig.js} +10 -33
- package/build/JsonConfig.js.map +1 -0
- package/build/TooltipButton.js +17 -0
- package/build/TooltipButton.js.map +1 -0
- package/build/Utils.js +149 -0
- package/build/Utils.js.map +1 -0
- package/build/index.js +3 -0
- package/build/index.js.map +1 -0
- package/package.json +14 -16
- package/Communication.js +0 -268
- package/DeviceActionButton.js +0 -15
- package/DeviceCard.js +0 -338
- package/DeviceControl.js +0 -146
- package/DeviceList.js +0 -226
- package/DeviceStatus.js +0 -111
- package/InstanceActionButton.js +0 -16
- package/TooltipButton.js +0 -22
- package/Utils.js +0 -157
- package/index.js +0 -7
- package/{Communication.d.ts → build/Communication.d.ts} +0 -0
- package/{DeviceActionButton.d.ts → build/DeviceActionButton.d.ts} +0 -0
- package/{DeviceCard.d.ts → build/DeviceCard.d.ts} +0 -0
- package/{DeviceControl.d.ts → build/DeviceControl.d.ts} +0 -0
- package/{DeviceImageUpload.d.ts → build/DeviceImageUpload.d.ts} +0 -0
- package/{DeviceList.d.ts → build/DeviceList.d.ts} +0 -0
- package/{DeviceStatus.d.ts → build/DeviceStatus.d.ts} +0 -0
- package/{InstanceActionButton.d.ts → build/InstanceActionButton.d.ts} +0 -0
- package/{JsonConfig.d.ts → build/JsonConfig.d.ts} +0 -0
- package/{TooltipButton.d.ts → build/TooltipButton.d.ts} +0 -0
- package/{Utils.d.ts → build/Utils.d.ts} +0 -0
- package/{i18n → build/i18n}/de.json +0 -0
- package/{i18n → build/i18n}/en.json +0 -0
- package/{i18n → build/i18n}/es.json +0 -0
- package/{i18n → build/i18n}/fr.json +0 -0
- package/{i18n → build/i18n}/it.json +0 -0
- package/{i18n → build/i18n}/nl.json +0 -0
- package/{i18n → build/i18n}/pl.json +0 -0
- package/{i18n → build/i18n}/pt.json +0 -0
- package/{i18n → build/i18n}/ru.json +0 -0
- package/{i18n → build/i18n}/uk.json +0 -0
- package/{i18n → build/i18n}/zh-cn.json +0 -0
- package/{index.d.ts → build/index.d.ts} +1 -1
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import React, { Component } from 'react';
|
|
2
|
+
import { Button, Fab, Switch, } from '@mui/material';
|
|
3
|
+
import { renderIcon, getTranslation } from './Utils';
|
|
4
|
+
/**
|
|
5
|
+
* Device Control component
|
|
6
|
+
* @param {object} props - Parameters
|
|
7
|
+
* @param {object} props.control - Control object
|
|
8
|
+
* @param {object} props.socket - Socket object
|
|
9
|
+
* @param {object} props.controlHandler - Control handler to set the state
|
|
10
|
+
* @param {object} props.controlStateHandler - Control handler to read the state
|
|
11
|
+
* @returns {React.JSX.Element|null}
|
|
12
|
+
* @constructor
|
|
13
|
+
*/
|
|
14
|
+
export default class DeviceControl extends Component {
|
|
15
|
+
constructor(props) {
|
|
16
|
+
super(props);
|
|
17
|
+
this.state = {
|
|
18
|
+
value: props.control.state?.val,
|
|
19
|
+
ts: props.control.state?.ts,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
componentDidMount() {
|
|
23
|
+
if (this.props.control.stateId) {
|
|
24
|
+
this.props.socket.subscribeState(this.props.control.stateId, this.stateHandler);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
stateHandler = async (id, state) => {
|
|
28
|
+
if (id === this.props.control.stateId && state) {
|
|
29
|
+
// request new state
|
|
30
|
+
const newState = await (this.props.controlStateHandler(this.props.deviceId, this.props.control)());
|
|
31
|
+
if (newState?.ts && (!this.state.ts || newState.ts > this.state.ts)) {
|
|
32
|
+
this.setState({
|
|
33
|
+
value: newState.val,
|
|
34
|
+
ts: newState.ts,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
componentWillUnmount() {
|
|
40
|
+
if (this.props.control.stateId) {
|
|
41
|
+
this.props.socket.unsubscribeState(this.props.control.stateId, this.stateHandler);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
static getDerivedStateFromProps(props, state) {
|
|
45
|
+
if (props.control.state?.ts && (!state.ts || props.control.state?.ts > state.ts)) {
|
|
46
|
+
return {
|
|
47
|
+
value: props.control.state.val,
|
|
48
|
+
ts: props.control.state.ts,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
async sendControl(deviceId, control, value) {
|
|
54
|
+
const result = await (this.props.controlHandler(deviceId, control, value)());
|
|
55
|
+
if (result?.ts && (!this.state.ts || result?.ts > this.state.ts)) {
|
|
56
|
+
this.setState({
|
|
57
|
+
value: result.val,
|
|
58
|
+
ts: result.ts,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
renderButton() {
|
|
63
|
+
const tooltip = getTranslation(this.props.control.description);
|
|
64
|
+
const icon = renderIcon(this.props.control, this.props.colors, this.state.value);
|
|
65
|
+
if (!this.props.control.label) {
|
|
66
|
+
return React.createElement(Fab, { disabled: this.props.disabled, title: tooltip, onClick: () => this.sendControl(this.props.deviceId, this.props.control, true) }, icon);
|
|
67
|
+
}
|
|
68
|
+
return React.createElement(Button, { disabled: this.props.disabled, title: tooltip, onClick: () => this.sendControl(this.props.deviceId, this.props.control, true), startIcon: icon }, this.props.control.label);
|
|
69
|
+
}
|
|
70
|
+
renderSwitch() {
|
|
71
|
+
const tooltip = getTranslation(this.props.control.description);
|
|
72
|
+
// const icon = renderIcon(this.props.control, this.props.colors, this.state.value);
|
|
73
|
+
return React.createElement(Switch, { disabled: this.props.disabled, title: tooltip, checked: this.state.value, onChange: e => this.sendControl(this.props.deviceId, this.props.control, e.target.checked) });
|
|
74
|
+
}
|
|
75
|
+
getColor() {
|
|
76
|
+
let color;
|
|
77
|
+
if (this.state.value) {
|
|
78
|
+
color = this.props.control.colorOn || 'primary';
|
|
79
|
+
}
|
|
80
|
+
else if (this.props.control.type === 'switch') {
|
|
81
|
+
color = this.props.control.color;
|
|
82
|
+
}
|
|
83
|
+
if (color === 'primary') {
|
|
84
|
+
return this.props.colors.primary;
|
|
85
|
+
}
|
|
86
|
+
if (color === 'secondary') {
|
|
87
|
+
return this.props.colors.secondary;
|
|
88
|
+
}
|
|
89
|
+
return color;
|
|
90
|
+
}
|
|
91
|
+
renderSelect() {
|
|
92
|
+
}
|
|
93
|
+
renderSlider() {
|
|
94
|
+
}
|
|
95
|
+
renderColor() {
|
|
96
|
+
}
|
|
97
|
+
renderIcon() {
|
|
98
|
+
const tooltip = getTranslation(this.props.control.description);
|
|
99
|
+
const icon = renderIcon(this.props.control, this.props.colors, this.state.value);
|
|
100
|
+
const color = this.getColor();
|
|
101
|
+
if (!this.props.control.label) {
|
|
102
|
+
return React.createElement(Fab, { disabled: this.props.disabled, size: "small", title: tooltip, color: color === this.props.colors.primary ? 'primary' : (color === this.props.colors.secondary ? 'secondary' : undefined), style: color === this.props.colors.primary || color === this.props.colors.secondary ? undefined : { color }, onClick: () => this.sendControl(this.props.deviceId, this.props.control, !this.state.value) }, icon);
|
|
103
|
+
}
|
|
104
|
+
return React.createElement(Button, { disabled: this.props.disabled, title: tooltip, color: color === this.props.colors.primary ? 'primary' : (color === this.props.colors.secondary ? 'secondary' : undefined), style: color === this.props.colors.primary || color === this.props.colors.secondary ? undefined : { color }, onClick: () => this.sendControl(this.props.deviceId, this.props.control, !this.state.value), startIcon: icon }, this.props.control.label);
|
|
105
|
+
}
|
|
106
|
+
render() {
|
|
107
|
+
if (this.props.control.type === 'button') {
|
|
108
|
+
return this.renderButton();
|
|
109
|
+
}
|
|
110
|
+
if (this.props.control.type === 'icon') {
|
|
111
|
+
return this.renderIcon();
|
|
112
|
+
}
|
|
113
|
+
if (this.props.control.type === 'switch') {
|
|
114
|
+
return this.renderSwitch();
|
|
115
|
+
}
|
|
116
|
+
return React.createElement("div", { style: { color: 'red' } }, this.props.control.type);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=DeviceControl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeviceControl.js","sourceRoot":"./src/","sources":["DeviceControl.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const react_1 = __importDefault(require("react"));
|
|
1
|
+
import React from 'react';
|
|
7
2
|
function DeviceImageUpload(params) {
|
|
8
3
|
const { socket, manufacturer, model, deviceId, onImageSelect, uploadImagesToInstance, } = params;
|
|
9
4
|
const handleImageUpload = async (event) => {
|
|
@@ -63,7 +58,8 @@ function DeviceImageUpload(params) {
|
|
|
63
58
|
height: '45px',
|
|
64
59
|
zIndex: 3,
|
|
65
60
|
};
|
|
66
|
-
return
|
|
67
|
-
|
|
61
|
+
return React.createElement("div", null,
|
|
62
|
+
React.createElement("input", { style: imageUploadButtonStyle, type: "file", accept: "image/*", onChange: handleImageUpload }));
|
|
68
63
|
}
|
|
69
|
-
|
|
64
|
+
export default DeviceImageUpload;
|
|
65
|
+
//# sourceMappingURL=DeviceImageUpload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeviceImageUpload.js","sourceRoot":"./src/","sources":["DeviceImageUpload.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { IconButton, InputAdornment, TextField, Toolbar, Tooltip, LinearProgress, } from '@mui/material';
|
|
3
|
+
import { Clear, Refresh } from '@mui/icons-material';
|
|
4
|
+
import { I18n } from '@iobroker/adapter-react-v5';
|
|
5
|
+
import DeviceCard from './DeviceCard';
|
|
6
|
+
import { getTranslation } from './Utils';
|
|
7
|
+
import Communication from './Communication';
|
|
8
|
+
import InstanceActionButton from './InstanceActionButton';
|
|
9
|
+
import de from './i18n/de.json';
|
|
10
|
+
import en from './i18n/en.json';
|
|
11
|
+
import ru from './i18n/ru.json';
|
|
12
|
+
import pt from './i18n/pt.json';
|
|
13
|
+
import nl from './i18n/nl.json';
|
|
14
|
+
import fr from './i18n/fr.json';
|
|
15
|
+
import it from './i18n/it.json';
|
|
16
|
+
import es from './i18n/es.json';
|
|
17
|
+
import pl from './i18n/pl.json';
|
|
18
|
+
import uk from './i18n/uk.json';
|
|
19
|
+
import zhCn from './i18n/zh-cn.json';
|
|
20
|
+
/**
|
|
21
|
+
* Device List Component
|
|
22
|
+
* @param {object} params - Component parameters
|
|
23
|
+
* @param {object} params.socket - socket object
|
|
24
|
+
* @param {string} params.selectedInstance - Selected instance
|
|
25
|
+
* @param {string} params.uploadImagesToInstance - Instance to upload images to
|
|
26
|
+
* @param {string} params.filter - Filter
|
|
27
|
+
* @param {string} params.empbedded - true if this list used with multiple instances and false if only with one
|
|
28
|
+
* @param {string} params.title - Title in appbar (only in non-embedded mode)
|
|
29
|
+
* @param {string} params.style - Style of devices list
|
|
30
|
+
* @returns {*[]} - Array of device cards
|
|
31
|
+
*/
|
|
32
|
+
export default class DeviceList extends Communication {
|
|
33
|
+
static i18nInitialized = false;
|
|
34
|
+
lastPropsFilter;
|
|
35
|
+
lastInstance;
|
|
36
|
+
filterTimeout;
|
|
37
|
+
language;
|
|
38
|
+
constructor(props) {
|
|
39
|
+
super(props);
|
|
40
|
+
if (!DeviceList.i18nInitialized) {
|
|
41
|
+
DeviceList.i18nInitialized = true;
|
|
42
|
+
// @ts-expect-error
|
|
43
|
+
I18n.extendTranslations({
|
|
44
|
+
en,
|
|
45
|
+
de,
|
|
46
|
+
ru,
|
|
47
|
+
pt,
|
|
48
|
+
nl,
|
|
49
|
+
fr,
|
|
50
|
+
it,
|
|
51
|
+
es,
|
|
52
|
+
pl,
|
|
53
|
+
uk,
|
|
54
|
+
'zh-cn': zhCn,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
Object.assign(this.state, {
|
|
58
|
+
devices: [],
|
|
59
|
+
filteredDevices: [],
|
|
60
|
+
filter: '',
|
|
61
|
+
instanceInfo: null,
|
|
62
|
+
loading: null,
|
|
63
|
+
alive: null,
|
|
64
|
+
});
|
|
65
|
+
this.lastPropsFilter = this.props.filter;
|
|
66
|
+
this.lastInstance = this.props.selectedInstance;
|
|
67
|
+
this.filterTimeout = null;
|
|
68
|
+
this.language = I18n.getLanguage();
|
|
69
|
+
}
|
|
70
|
+
async componentDidMount() {
|
|
71
|
+
let alive = false;
|
|
72
|
+
if (this.state.alive === null) {
|
|
73
|
+
try {
|
|
74
|
+
// check if instance is alive
|
|
75
|
+
const stateAlive = await this.props.socket.getState(`system.adapter.${this.props.selectedInstance}.alive`);
|
|
76
|
+
if (stateAlive?.val) {
|
|
77
|
+
alive = true;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
console.error(error);
|
|
82
|
+
}
|
|
83
|
+
this.setState({ alive }, () => this.props.socket.subscribeState(`system.adapter.${this.props.selectedInstance}.alive`, this.aliveHandler));
|
|
84
|
+
if (!alive) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
alive = this.state.alive;
|
|
90
|
+
}
|
|
91
|
+
if (!this.props.embedded && alive) {
|
|
92
|
+
try {
|
|
93
|
+
const instanceInfo = await this.loadInstanceInfos();
|
|
94
|
+
this.setState({ instanceInfo });
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
console.error(error);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (alive) {
|
|
101
|
+
this.loadData();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
componentWillUnmount() {
|
|
105
|
+
this.props.socket.unsubscribeState(`system.adapter.${this.props.selectedInstance}.alive`, this.aliveHandler);
|
|
106
|
+
}
|
|
107
|
+
aliveHandler = (id, state) => {
|
|
108
|
+
if (id === `system.adapter.${this.props.selectedInstance}.alive`) {
|
|
109
|
+
const alive = !!state?.val;
|
|
110
|
+
if (alive !== this.state.alive) {
|
|
111
|
+
this.setState({ alive }, () => {
|
|
112
|
+
if (alive) {
|
|
113
|
+
this.componentDidMount().catch(console.error);
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* Load devices
|
|
121
|
+
*/
|
|
122
|
+
loadData() {
|
|
123
|
+
this.setState({ loading: true }, async () => {
|
|
124
|
+
console.log(`Loading devices for ${this.props.selectedInstance}...`);
|
|
125
|
+
let devices;
|
|
126
|
+
try {
|
|
127
|
+
devices = await this.loadDevices();
|
|
128
|
+
if (!devices || !Array.isArray(devices)) {
|
|
129
|
+
console.error(`Message returned from sendTo() doesn't look like one from DeviceManagement, did you accidentally handle the message in your adapter? ${JSON.stringify(devices)}`);
|
|
130
|
+
devices = [];
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
console.error(error);
|
|
135
|
+
devices = [];
|
|
136
|
+
}
|
|
137
|
+
this.setState({ devices, loading: false }, () => this.applyFilter());
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
getText(text) {
|
|
141
|
+
if (typeof text === 'object') {
|
|
142
|
+
return text[this.language] || text.en;
|
|
143
|
+
}
|
|
144
|
+
return text;
|
|
145
|
+
}
|
|
146
|
+
applyFilter() {
|
|
147
|
+
const filter = this.props.embedded ? this.props.filter : this.state.filter;
|
|
148
|
+
// filter devices name
|
|
149
|
+
if (filter) {
|
|
150
|
+
const filteredDevices = this.state.devices.filter(device => this.getText(device.name).toLowerCase().includes(filter.toLowerCase()));
|
|
151
|
+
this.setState({ filteredDevices });
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
this.setState({ filteredDevices: this.state.devices });
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
handleFilterChange(filter) {
|
|
158
|
+
this.setState({ filter }, () => {
|
|
159
|
+
this.filterTimeout && clearTimeout(this.filterTimeout);
|
|
160
|
+
this.filterTimeout = setTimeout(() => {
|
|
161
|
+
this.filterTimeout = null;
|
|
162
|
+
this.applyFilter();
|
|
163
|
+
}, 250);
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
renderContent() {
|
|
167
|
+
/** @type {object} */
|
|
168
|
+
const emptyStyle = {
|
|
169
|
+
padding: 25,
|
|
170
|
+
};
|
|
171
|
+
if (this.props.embedded && this.lastPropsFilter !== this.props.filter) {
|
|
172
|
+
this.lastPropsFilter = this.props.filter;
|
|
173
|
+
setTimeout(() => this.applyFilter(), 50);
|
|
174
|
+
}
|
|
175
|
+
if (this.props.embedded && this.lastInstance !== this.props.selectedInstance) {
|
|
176
|
+
this.lastInstance = this.props.selectedInstance;
|
|
177
|
+
setTimeout(() => this.loadData(), 50);
|
|
178
|
+
}
|
|
179
|
+
let list;
|
|
180
|
+
if (!this.props.embedded && !this.state.alive) {
|
|
181
|
+
list = React.createElement("div", { style: emptyStyle },
|
|
182
|
+
React.createElement("span", null, getTranslation('instanceNotAlive')));
|
|
183
|
+
}
|
|
184
|
+
else if (!this.state.devices.length && this.props.selectedInstance) {
|
|
185
|
+
list = React.createElement("div", { style: emptyStyle },
|
|
186
|
+
React.createElement("span", null, getTranslation('noDevicesFoundText')));
|
|
187
|
+
}
|
|
188
|
+
else if (this.state.devices.length && !this.state.filteredDevices.length) {
|
|
189
|
+
list = React.createElement("div", { style: emptyStyle },
|
|
190
|
+
React.createElement("span", null, getTranslation('allDevicesFilteredOut')));
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
list = this.state.filteredDevices.map(device => React.createElement(DeviceCard, { alive: !!this.state.alive, key: device.id, id: device.id, title: this.getText(device.name), device: device, instanceId: this.props.selectedInstance, uploadImagesToInstance: this.props.uploadImagesToInstance, deviceHandler: this.deviceHandler, controlHandler: this.controlHandler, controlStateHandler: this.controlStateHandler, socket: this.props.socket }));
|
|
194
|
+
}
|
|
195
|
+
if (this.props.embedded) {
|
|
196
|
+
return React.createElement(React.Fragment, null,
|
|
197
|
+
this.state.loading ? React.createElement(LinearProgress, { style: { width: '100%' } }) : null,
|
|
198
|
+
list);
|
|
199
|
+
}
|
|
200
|
+
return React.createElement("div", { style: { width: '100%', height: '100%', overflow: 'hidden' } },
|
|
201
|
+
React.createElement(Toolbar, { variant: "dense", style: { backgroundColor: '#777', display: 'flex' } },
|
|
202
|
+
this.props.title,
|
|
203
|
+
this.props.selectedInstance ? React.createElement(Tooltip, { title: getTranslation('refreshTooltip') },
|
|
204
|
+
React.createElement("span", null,
|
|
205
|
+
React.createElement(IconButton, { onClick: () => this.loadData(), disabled: !this.state.alive, size: "small" },
|
|
206
|
+
React.createElement(Refresh, null)))) : null,
|
|
207
|
+
this.state.alive && this.state.instanceInfo?.actions?.length ? React.createElement("div", { style: { marginLeft: 20 } }, this.state.instanceInfo.actions.map(action => React.createElement(InstanceActionButton, { key: action.id, action: action, instanceHandler: this.instanceHandler }))) : null,
|
|
208
|
+
React.createElement("div", { style: { flexGrow: 1 } }),
|
|
209
|
+
this.state.alive ? React.createElement(TextField, { variant: "standard", style: { width: 200 }, size: "small", label: getTranslation('filterLabelText'), onChange: e => this.handleFilterChange(e.target.value), value: this.state.filter, autoComplete: "off", inputProps: {
|
|
210
|
+
autoComplete: 'new-password',
|
|
211
|
+
form: { autoComplete: 'off' },
|
|
212
|
+
},
|
|
213
|
+
// eslint-disable-next-line react/jsx-no-duplicate-props
|
|
214
|
+
InputProps: {
|
|
215
|
+
endAdornment: this.state.filter ? React.createElement(InputAdornment, { position: "end" },
|
|
216
|
+
React.createElement(IconButton, { onClick: () => this.handleFilterChange(''), edge: "end" },
|
|
217
|
+
React.createElement(Clear, null))) : null,
|
|
218
|
+
} }) : null),
|
|
219
|
+
React.createElement("div", { style: {
|
|
220
|
+
width: '100%',
|
|
221
|
+
height: 'calc(100% - 56px)',
|
|
222
|
+
marginTop: 8,
|
|
223
|
+
overflow: 'auto',
|
|
224
|
+
// justifyContent: 'center',
|
|
225
|
+
// alignItems: 'stretch',
|
|
226
|
+
// display: 'grid',
|
|
227
|
+
// columnGap: 8,
|
|
228
|
+
// rowGap: 8,
|
|
229
|
+
...this.props.style,
|
|
230
|
+
} },
|
|
231
|
+
this.state.loading ? React.createElement(LinearProgress, { style: { width: '100%' } }) : null,
|
|
232
|
+
list));
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=DeviceList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeviceList.js","sourceRoot":"./src/","sources":["DeviceList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Tooltip } from '@mui/material';
|
|
3
|
+
import { Link as LinkIcon, LinkOff as LinkOffIcon, NetworkCheck as NetworkCheckIcon, Battery20 as Battery20Icon, Battery30 as Battery30Icon, Battery50 as Battery50Icon, Battery60 as Battery60Icon, Battery80 as Battery80Icon, Battery90 as Battery90Icon, BatteryFull as BatteryFullIcon, BatteryAlert as BatteryAlertIcon, Warning as WarningIcon, BatteryCharging50 as BatteryCharging50Icon, } from '@mui/icons-material';
|
|
4
|
+
import { getTranslation } from './Utils';
|
|
5
|
+
/**
|
|
6
|
+
* Device Status component
|
|
7
|
+
* @param {object} params - Parameters
|
|
8
|
+
* @param {object} params.status - Status object, e.g. { connection: 'connected', battery: 100, rssi: -50 }
|
|
9
|
+
* @returns {React.JSX.Element|null}
|
|
10
|
+
* @constructor
|
|
11
|
+
*/
|
|
12
|
+
export default function DeviceStatus(params) {
|
|
13
|
+
if (!params.status) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
let status;
|
|
17
|
+
if (typeof params.status === 'string') {
|
|
18
|
+
status = {
|
|
19
|
+
connection: params.status,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
status = params.status;
|
|
24
|
+
}
|
|
25
|
+
/** @type {object} */
|
|
26
|
+
const iconStyleOK = {
|
|
27
|
+
fill: '#00ac00',
|
|
28
|
+
};
|
|
29
|
+
/** @type {object} */
|
|
30
|
+
const iconStyleNotOK = {
|
|
31
|
+
fill: '#ff0000',
|
|
32
|
+
};
|
|
33
|
+
/** @type {object} */
|
|
34
|
+
const iconStyleWarning = {
|
|
35
|
+
fill: '#ff9900',
|
|
36
|
+
};
|
|
37
|
+
/** @type {object} */
|
|
38
|
+
let batteryIconTooltip;
|
|
39
|
+
if (typeof status.battery === 'number') {
|
|
40
|
+
if (status.battery >= 96 && status.battery <= 100) {
|
|
41
|
+
batteryIconTooltip = React.createElement(BatteryFullIcon, { style: iconStyleOK });
|
|
42
|
+
}
|
|
43
|
+
else if (status.battery >= 90 && status.battery <= 95) {
|
|
44
|
+
batteryIconTooltip = React.createElement(Battery90Icon, { style: iconStyleOK });
|
|
45
|
+
}
|
|
46
|
+
else if (status.battery >= 80 && status.battery <= 89) {
|
|
47
|
+
batteryIconTooltip = React.createElement(Battery80Icon, { style: iconStyleOK });
|
|
48
|
+
}
|
|
49
|
+
else if (status.battery >= 60 && status.battery <= 79) {
|
|
50
|
+
batteryIconTooltip = React.createElement(Battery60Icon, { style: iconStyleOK });
|
|
51
|
+
}
|
|
52
|
+
else if (status.battery >= 50 && status.battery <= 59) {
|
|
53
|
+
batteryIconTooltip = React.createElement(Battery50Icon, { style: iconStyleOK });
|
|
54
|
+
}
|
|
55
|
+
else if (status.battery >= 30 && status.battery <= 49) {
|
|
56
|
+
batteryIconTooltip = React.createElement(Battery30Icon, { style: iconStyleOK });
|
|
57
|
+
}
|
|
58
|
+
else if (status.battery >= 20 && status.battery <= 29) {
|
|
59
|
+
batteryIconTooltip = React.createElement(Battery20Icon, { style: iconStyleNotOK });
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
batteryIconTooltip = React.createElement(BatteryAlertIcon, { style: iconStyleNotOK });
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return React.createElement("div", { style: { display: 'flex', alignItems: 'center' } },
|
|
66
|
+
status.connection === 'connected' && React.createElement("div", { style: { display: 'flex', alignItems: 'center' } },
|
|
67
|
+
React.createElement(Tooltip, { title: getTranslation('connectedIconTooltip') },
|
|
68
|
+
React.createElement("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'center' } },
|
|
69
|
+
React.createElement(LinkIcon, { style: iconStyleOK })))),
|
|
70
|
+
status.connection === 'disconnected' && React.createElement("div", { style: { display: 'flex', alignItems: 'center' } },
|
|
71
|
+
React.createElement(Tooltip, { title: getTranslation('disconnectedIconTooltip') },
|
|
72
|
+
React.createElement("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'center' } },
|
|
73
|
+
React.createElement(LinkOffIcon, { style: iconStyleNotOK })))),
|
|
74
|
+
status.rssi && React.createElement("div", { style: { display: 'flex', alignItems: 'center' } },
|
|
75
|
+
React.createElement(Tooltip, { title: "RSSI" },
|
|
76
|
+
React.createElement("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'center' } },
|
|
77
|
+
React.createElement(NetworkCheckIcon, null),
|
|
78
|
+
React.createElement("p", { style: { fontSize: 'small', margin: 0 } }, status.rssi)))),
|
|
79
|
+
typeof status.battery === 'number' && React.createElement("div", { style: { display: 'flex', alignItems: 'center' } },
|
|
80
|
+
React.createElement(Tooltip, { title: getTranslation('batteryTooltip') },
|
|
81
|
+
React.createElement("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'center' } },
|
|
82
|
+
batteryIconTooltip,
|
|
83
|
+
React.createElement("p", { style: { fontSize: 'small', margin: 0 } },
|
|
84
|
+
status.battery,
|
|
85
|
+
"%")))),
|
|
86
|
+
typeof status.battery === 'string' && React.createElement("div", { style: { display: 'flex', alignItems: 'center' } },
|
|
87
|
+
React.createElement(Tooltip, { title: getTranslation('batteryTooltip') },
|
|
88
|
+
React.createElement("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'center' } },
|
|
89
|
+
status.battery === 'charging' ? React.createElement(BatteryCharging50Icon, null) : React.createElement(BatteryFullIcon, null),
|
|
90
|
+
status.battery !== 'charging' ? (status.battery.includes('V') || status.battery.includes('mV') ?
|
|
91
|
+
React.createElement("p", { style: { fontSize: 'small', margin: 0 } }, status.battery) :
|
|
92
|
+
React.createElement("p", { style: { fontSize: 'small', margin: 0 } },
|
|
93
|
+
React.createElement("span", { style: { marginRight: 4 } }, status.battery),
|
|
94
|
+
"mV")) : null))),
|
|
95
|
+
typeof status.battery === 'boolean' && React.createElement("div", { style: { display: 'flex', alignItems: 'center' } },
|
|
96
|
+
React.createElement(Tooltip, { title: getTranslation('batteryTooltip') },
|
|
97
|
+
React.createElement("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'center' } }, status.battery ? React.createElement(BatteryFullIcon, { style: iconStyleOK }) :
|
|
98
|
+
React.createElement(BatteryAlertIcon, { style: iconStyleNotOK })))),
|
|
99
|
+
status.warning && React.createElement("div", { style: { display: 'flex', alignItems: 'center' } }, typeof status.warning === 'string' || typeof status.warning === 'object' ?
|
|
100
|
+
React.createElement(Tooltip, { title: getTranslation(status.warning) },
|
|
101
|
+
React.createElement("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'center' } },
|
|
102
|
+
React.createElement(WarningIcon, { style: iconStyleWarning }))) :
|
|
103
|
+
React.createElement("div", { style: { display: 'flex', flexDirection: 'column', alignItems: 'center' } },
|
|
104
|
+
React.createElement(WarningIcon, { style: iconStyleWarning }))));
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=DeviceStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeviceStatus.js","sourceRoot":"./src/","sources":["DeviceStatus.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import TooltipButton from './TooltipButton';
|
|
3
|
+
import { renderIcon, getTranslation } from './Utils';
|
|
4
|
+
export default function InstanceActionButton(params) {
|
|
5
|
+
const { action, instanceHandler } = params;
|
|
6
|
+
const tooltip = getTranslation(action?.description ? action.description : '');
|
|
7
|
+
const title = getTranslation(action?.title ? action.title : '');
|
|
8
|
+
const icon = renderIcon(action);
|
|
9
|
+
return React.createElement(TooltipButton, { tooltip: tooltip, label: title, disabled: action.disabled, Icon: icon, onClick: instanceHandler(action) });
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=InstanceActionButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InstanceActionButton.js","sourceRoot":"./src/","sources":["InstanceActionButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAOrD,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,MAAiC;IAC1E,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC;IAE3C,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9E,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAEhE,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAEhC,OAAO,oBAAC,aAAa,IACjB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,eAAe,CAAC,MAAM,CAAC,GAClC,CAAC;AACP,CAAC"}
|
|
@@ -1,41 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
const react_1 = __importStar(require("react"));
|
|
27
|
-
const adapter_react_v5_1 = require("@iobroker/adapter-react-v5");
|
|
28
|
-
function JsonConfig(props) {
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { JsonConfigComponent } from '@iobroker/adapter-react-v5';
|
|
3
|
+
export default function JsonConfig(props) {
|
|
29
4
|
const { instanceId, socket, schema, data, onChange, } = props;
|
|
30
5
|
console.log('JsonConfig', props);
|
|
31
|
-
const [error, setError] =
|
|
6
|
+
const [error, setError] = useState();
|
|
32
7
|
if (schema === undefined) {
|
|
33
8
|
return null;
|
|
34
9
|
}
|
|
35
10
|
const [adapterName, instance] = instanceId.split('.', 2);
|
|
36
|
-
return
|
|
37
|
-
error &&
|
|
38
|
-
|
|
11
|
+
return React.createElement(React.Fragment, null,
|
|
12
|
+
error && React.createElement("div", null, error),
|
|
13
|
+
React.createElement(JsonConfigComponent, { socket: socket, adapterName: adapterName, instance: parseInt(instance), schema: schema, data: data, onError: setError,
|
|
14
|
+
// @ts-expect-error types needed
|
|
15
|
+
onChange: _data => onChange(_data), embedded: true }));
|
|
39
16
|
/*
|
|
40
17
|
JSON adapter config:
|
|
41
18
|
className={classes.scroll}
|
|
@@ -88,4 +65,4 @@ function JsonConfig(props) {
|
|
|
88
65
|
}}
|
|
89
66
|
*/
|
|
90
67
|
}
|
|
91
|
-
|
|
68
|
+
//# sourceMappingURL=JsonConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JsonConfig.js","sourceRoot":"./src/","sources":["JsonConfig.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAc,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAU7E,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,KAAsB;IACrD,MAAM,EACF,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAC7C,GAAG,KAAK,CAAC;IACV,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IACjC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,EAAE,CAAC;IAErC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAEzD,OAAO;QACF,KAAK,IAAI,iCAAM,KAAK,CAAO;QAC5B,oBAAC,mBAAmB,IAChB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAC5B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,QAAQ;YACjB,gCAAgC;YAChC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAClC,QAAQ,SACV,CACH,CAAC;IAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAkDE;AACN,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { IconButton, Tooltip, Typography } from '@mui/material';
|
|
3
|
+
export default function TooltipButton(props) {
|
|
4
|
+
const { tooltip, label, disabled, Icon, onClick } = props;
|
|
5
|
+
const text = !!label && React.createElement(Typography, { variant: "button", style: { marginLeft: 4 } }, label);
|
|
6
|
+
if (tooltip) {
|
|
7
|
+
return React.createElement(Tooltip, { title: tooltip },
|
|
8
|
+
React.createElement("span", null,
|
|
9
|
+
React.createElement(IconButton, { onClick: onClick, disabled: disabled, size: "small" },
|
|
10
|
+
Icon,
|
|
11
|
+
text)));
|
|
12
|
+
}
|
|
13
|
+
return React.createElement(IconButton, { onClick: onClick, disabled: disabled, size: "small" },
|
|
14
|
+
Icon,
|
|
15
|
+
text);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=TooltipButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TooltipButton.js","sourceRoot":"./src/","sources":["TooltipButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAUhE,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,KAAyB;IAC3D,MAAM,EACF,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAC1C,GAAG,KAAK,CAAC;IAEV,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,oBAAC,UAAU,IAAC,OAAO,EAAC,QAAQ,EAAC,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,IAAG,KAAK,CAAc,CAAC;IAEpG,IAAI,OAAO,EAAE,CAAC;QACV,OAAO,oBAAC,OAAO,IAAC,KAAK,EAAE,OAAO;YAC1B;gBACI,oBAAC,UAAU,IAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAC,OAAO;oBACzD,IAAI;oBACJ,IAAI,CACI,CACV,CACD,CAAC;IACf,CAAC;IAED,OAAO,oBAAC,UAAU,IAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAC,OAAO;QAChE,IAAI;QACJ,IAAI,CACI,CAAC;AAClB,CAAC"}
|