@iobroker/json-config 1.0.0 → 1.0.2
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/build/JsonConfigComponent/DeviceManager/Communication.d.ts +63 -0
- package/build/JsonConfigComponent/DeviceManager/Communication.js +247 -0
- package/build/JsonConfigComponent/DeviceManager/Communication.js.map +1 -0
- package/build/JsonConfigComponent/DeviceManager/DeviceActionButton.d.ts +11 -0
- package/build/JsonConfigComponent/DeviceManager/DeviceActionButton.js +10 -0
- package/build/JsonConfigComponent/DeviceManager/DeviceActionButton.js.map +1 -0
- package/build/JsonConfigComponent/DeviceManager/DeviceCard.d.ts +53 -0
- package/build/JsonConfigComponent/DeviceManager/DeviceCard.js +308 -0
- package/build/JsonConfigComponent/DeviceManager/DeviceCard.js.map +1 -0
- package/build/JsonConfigComponent/DeviceManager/DeviceControl.d.ts +45 -0
- package/build/JsonConfigComponent/DeviceManager/DeviceControl.js +119 -0
- package/build/JsonConfigComponent/DeviceManager/DeviceControl.js.map +1 -0
- package/build/JsonConfigComponent/DeviceManager/DeviceImageUpload.d.ts +12 -0
- package/build/JsonConfigComponent/DeviceManager/DeviceImageUpload.js +65 -0
- package/build/JsonConfigComponent/DeviceManager/DeviceImageUpload.js.map +1 -0
- package/build/JsonConfigComponent/DeviceManager/DeviceList.d.ts +51 -0
- package/build/JsonConfigComponent/DeviceManager/DeviceList.js +235 -0
- package/build/JsonConfigComponent/DeviceManager/DeviceList.js.map +1 -0
- package/build/JsonConfigComponent/DeviceManager/DeviceStatus.d.ts +13 -0
- package/build/JsonConfigComponent/DeviceManager/DeviceStatus.js +106 -0
- package/build/JsonConfigComponent/DeviceManager/DeviceStatus.js.map +1 -0
- package/build/JsonConfigComponent/DeviceManager/InstanceActionButton.d.ts +7 -0
- package/build/JsonConfigComponent/DeviceManager/InstanceActionButton.js +11 -0
- package/build/JsonConfigComponent/DeviceManager/InstanceActionButton.js.map +1 -0
- package/build/JsonConfigComponent/DeviceManager/JsonConfig.d.ts +11 -0
- package/build/JsonConfigComponent/DeviceManager/JsonConfig.js +66 -0
- package/build/JsonConfigComponent/DeviceManager/JsonConfig.js.map +1 -0
- package/build/JsonConfigComponent/DeviceManager/TooltipButton.d.ts +10 -0
- package/build/JsonConfigComponent/DeviceManager/TooltipButton.js +17 -0
- package/build/JsonConfigComponent/DeviceManager/TooltipButton.js.map +1 -0
- package/build/JsonConfigComponent/DeviceManager/Utils.d.ts +12 -0
- package/build/JsonConfigComponent/DeviceManager/Utils.js +150 -0
- package/build/JsonConfigComponent/DeviceManager/Utils.js.map +1 -0
- package/build/JsonConfigComponent/DeviceManager/i18n/de.json +21 -0
- package/build/JsonConfigComponent/DeviceManager/i18n/en.json +21 -0
- package/build/JsonConfigComponent/DeviceManager/i18n/es.json +21 -0
- package/build/JsonConfigComponent/DeviceManager/i18n/fr.json +21 -0
- package/build/JsonConfigComponent/DeviceManager/i18n/it.json +21 -0
- package/build/JsonConfigComponent/DeviceManager/i18n/nl.json +21 -0
- package/build/JsonConfigComponent/DeviceManager/i18n/pl.json +21 -0
- package/build/JsonConfigComponent/DeviceManager/i18n/pt.json +21 -0
- package/build/JsonConfigComponent/DeviceManager/i18n/ru.json +21 -0
- package/build/JsonConfigComponent/DeviceManager/i18n/uk.json +21 -0
- package/build/JsonConfigComponent/DeviceManager/i18n/zh-cn.json +21 -0
- package/build/JsonConfigComponent/DeviceManager/index.d.ts +2 -0
- package/build/JsonConfigComponent/DeviceManager/index.js +3 -0
- package/build/JsonConfigComponent/DeviceManager/index.js.map +1 -0
- package/package.json +1 -1
|
@@ -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 '@/JsonConfigComponent/wrapper/i18n';
|
|
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":["JsonConfigComponent/DeviceManager/DeviceList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface DeviceStatusProps {
|
|
3
|
+
status: any;
|
|
4
|
+
}
|
|
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: DeviceStatusProps): React.JSX.Element | null;
|
|
13
|
+
export {};
|
|
@@ -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":["JsonConfigComponent/DeviceManager/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":["JsonConfigComponent/DeviceManager/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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Connection } from '@iobroker/socket-client';
|
|
3
|
+
interface JsonConfigProps {
|
|
4
|
+
instanceId: string;
|
|
5
|
+
socket: Connection;
|
|
6
|
+
schema: Record<string, any>;
|
|
7
|
+
data: Record<string, any>;
|
|
8
|
+
onChange: (data: Record<string, any>) => void;
|
|
9
|
+
}
|
|
10
|
+
export default function JsonConfig(props: JsonConfigProps): React.JSX.Element | null;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import JsonConfigComponent from '@/JsonConfigComponent';
|
|
3
|
+
export default function JsonConfig(props) {
|
|
4
|
+
const { instanceId, socket, schema, data, onChange, } = props;
|
|
5
|
+
console.log('JsonConfig', props);
|
|
6
|
+
const [error, setError] = useState();
|
|
7
|
+
if (schema === undefined) {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
const [adapterName, instance] = instanceId.split('.', 2);
|
|
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, onChange: _data => onChange(_data), embedded: true }));
|
|
14
|
+
/*
|
|
15
|
+
JSON adapter config:
|
|
16
|
+
className={classes.scroll}
|
|
17
|
+
socket={socket}
|
|
18
|
+
theme={this.props.theme}
|
|
19
|
+
themeName={this.props.themeName}
|
|
20
|
+
themeType={this.props.themeType}
|
|
21
|
+
adapterName={this.props.adapterName}
|
|
22
|
+
instance={this.props.instance}
|
|
23
|
+
isFloatComma={this.props.isFloatComma}
|
|
24
|
+
dateFormat={this.props.dateFormat}
|
|
25
|
+
schema={this.state.schema}
|
|
26
|
+
common={this.state.common}
|
|
27
|
+
data={this.state.data}
|
|
28
|
+
updateData={this.state.updateData}
|
|
29
|
+
onError={(error) => this.setState({ error })}
|
|
30
|
+
onChange={(data, changed) => this.setState({ data, changed })}
|
|
31
|
+
customs={{ configCustomEasyAccess: ConfigCustomEasyAccess }}
|
|
32
|
+
Object custom:
|
|
33
|
+
instanceObj={instanceObj}
|
|
34
|
+
customObj={customObj}
|
|
35
|
+
custom={true}
|
|
36
|
+
className={ '' }
|
|
37
|
+
adapterName={adapter}
|
|
38
|
+
instance={parseInt(instance.split('.').pop(), 10) || 0}
|
|
39
|
+
socket={this.props.socket}
|
|
40
|
+
theme={this.props.theme}
|
|
41
|
+
themeName={this.props.themeName}
|
|
42
|
+
themeType={this.props.themeType}
|
|
43
|
+
multiEdit={this.props.objectIDs.length > 1}
|
|
44
|
+
|
|
45
|
+
schema={this.jsonConfigs[adapter].json}
|
|
46
|
+
data={data}
|
|
47
|
+
onError={error =>
|
|
48
|
+
this.setState({error}, () => this.props.onError && this.props.onError(error))}
|
|
49
|
+
onValueChange={(attr, value) => {
|
|
50
|
+
console.log(attr + ' => ' + value);
|
|
51
|
+
const newValues = JSON.parse(JSON.stringify(this.state.newValues));
|
|
52
|
+
newValues[instance] = newValues[instance] || {};
|
|
53
|
+
if (this.commonConfig[instance][attr] === value) {
|
|
54
|
+
delete newValues[instance][attr];
|
|
55
|
+
if (!Object.keys(newValues[instance]).length) {
|
|
56
|
+
delete newValues[instance];
|
|
57
|
+
}
|
|
58
|
+
} else {
|
|
59
|
+
newValues[instance][attr] = value;
|
|
60
|
+
}
|
|
61
|
+
this.setState({newValues, hasChanges: this.isChanged(newValues)}, () =>
|
|
62
|
+
this.props.onChange && this.props.onChange(this.state.hasChanges));
|
|
63
|
+
}}
|
|
64
|
+
*/
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=JsonConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JsonConfig.js","sourceRoot":"./src/","sources":["JsonConfigComponent/DeviceManager/JsonConfig.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,mBAAmB,MAAM,uBAAuB,CAAC;AAWxD,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;QACtB,OAAO,IAAI,CAAC;KACf;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,EACjB,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAClC,QAAQ,SACV,CACH,CAAC;IAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAkDE;AACN,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface TooltipButtonProps {
|
|
3
|
+
tooltip?: string;
|
|
4
|
+
label?: string;
|
|
5
|
+
disabled?: boolean;
|
|
6
|
+
Icon: React.JSX.Element | null;
|
|
7
|
+
onClick?: () => void;
|
|
8
|
+
}
|
|
9
|
+
export default function TooltipButton(props: TooltipButtonProps): React.JSX.Element;
|
|
10
|
+
export {};
|
|
@@ -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":["JsonConfigComponent/DeviceManager/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;QACT,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;KACd;IAED,OAAO,oBAAC,UAAU,IAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAC,OAAO;QAChE,IAAI;QACJ,IAAI,CACI,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ControlBase } from '@iobroker/dm-utils/build/types/base';
|
|
3
|
+
export declare function renderIcon(action: ControlBase, colors?: {
|
|
4
|
+
primary: string;
|
|
5
|
+
secondary: string;
|
|
6
|
+
}, value?: string | number | boolean | null): React.JSX.Element | null;
|
|
7
|
+
/**
|
|
8
|
+
* Get Translation
|
|
9
|
+
* @param {string | object} text - Text to translate
|
|
10
|
+
* @returns {string}
|
|
11
|
+
*/
|
|
12
|
+
export declare function getTranslation(text: ioBroker.StringOrTranslated): string;
|