@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.
Files changed (48) hide show
  1. package/build/JsonConfigComponent/DeviceManager/Communication.d.ts +63 -0
  2. package/build/JsonConfigComponent/DeviceManager/Communication.js +247 -0
  3. package/build/JsonConfigComponent/DeviceManager/Communication.js.map +1 -0
  4. package/build/JsonConfigComponent/DeviceManager/DeviceActionButton.d.ts +11 -0
  5. package/build/JsonConfigComponent/DeviceManager/DeviceActionButton.js +10 -0
  6. package/build/JsonConfigComponent/DeviceManager/DeviceActionButton.js.map +1 -0
  7. package/build/JsonConfigComponent/DeviceManager/DeviceCard.d.ts +53 -0
  8. package/build/JsonConfigComponent/DeviceManager/DeviceCard.js +308 -0
  9. package/build/JsonConfigComponent/DeviceManager/DeviceCard.js.map +1 -0
  10. package/build/JsonConfigComponent/DeviceManager/DeviceControl.d.ts +45 -0
  11. package/build/JsonConfigComponent/DeviceManager/DeviceControl.js +119 -0
  12. package/build/JsonConfigComponent/DeviceManager/DeviceControl.js.map +1 -0
  13. package/build/JsonConfigComponent/DeviceManager/DeviceImageUpload.d.ts +12 -0
  14. package/build/JsonConfigComponent/DeviceManager/DeviceImageUpload.js +65 -0
  15. package/build/JsonConfigComponent/DeviceManager/DeviceImageUpload.js.map +1 -0
  16. package/build/JsonConfigComponent/DeviceManager/DeviceList.d.ts +51 -0
  17. package/build/JsonConfigComponent/DeviceManager/DeviceList.js +235 -0
  18. package/build/JsonConfigComponent/DeviceManager/DeviceList.js.map +1 -0
  19. package/build/JsonConfigComponent/DeviceManager/DeviceStatus.d.ts +13 -0
  20. package/build/JsonConfigComponent/DeviceManager/DeviceStatus.js +106 -0
  21. package/build/JsonConfigComponent/DeviceManager/DeviceStatus.js.map +1 -0
  22. package/build/JsonConfigComponent/DeviceManager/InstanceActionButton.d.ts +7 -0
  23. package/build/JsonConfigComponent/DeviceManager/InstanceActionButton.js +11 -0
  24. package/build/JsonConfigComponent/DeviceManager/InstanceActionButton.js.map +1 -0
  25. package/build/JsonConfigComponent/DeviceManager/JsonConfig.d.ts +11 -0
  26. package/build/JsonConfigComponent/DeviceManager/JsonConfig.js +66 -0
  27. package/build/JsonConfigComponent/DeviceManager/JsonConfig.js.map +1 -0
  28. package/build/JsonConfigComponent/DeviceManager/TooltipButton.d.ts +10 -0
  29. package/build/JsonConfigComponent/DeviceManager/TooltipButton.js +17 -0
  30. package/build/JsonConfigComponent/DeviceManager/TooltipButton.js.map +1 -0
  31. package/build/JsonConfigComponent/DeviceManager/Utils.d.ts +12 -0
  32. package/build/JsonConfigComponent/DeviceManager/Utils.js +150 -0
  33. package/build/JsonConfigComponent/DeviceManager/Utils.js.map +1 -0
  34. package/build/JsonConfigComponent/DeviceManager/i18n/de.json +21 -0
  35. package/build/JsonConfigComponent/DeviceManager/i18n/en.json +21 -0
  36. package/build/JsonConfigComponent/DeviceManager/i18n/es.json +21 -0
  37. package/build/JsonConfigComponent/DeviceManager/i18n/fr.json +21 -0
  38. package/build/JsonConfigComponent/DeviceManager/i18n/it.json +21 -0
  39. package/build/JsonConfigComponent/DeviceManager/i18n/nl.json +21 -0
  40. package/build/JsonConfigComponent/DeviceManager/i18n/pl.json +21 -0
  41. package/build/JsonConfigComponent/DeviceManager/i18n/pt.json +21 -0
  42. package/build/JsonConfigComponent/DeviceManager/i18n/ru.json +21 -0
  43. package/build/JsonConfigComponent/DeviceManager/i18n/uk.json +21 -0
  44. package/build/JsonConfigComponent/DeviceManager/i18n/zh-cn.json +21 -0
  45. package/build/JsonConfigComponent/DeviceManager/index.d.ts +2 -0
  46. package/build/JsonConfigComponent/DeviceManager/index.js +3 -0
  47. package/build/JsonConfigComponent/DeviceManager/index.js.map +1 -0
  48. 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,7 @@
1
+ import React from 'react';
2
+ interface InstanceActionButtonProps {
3
+ action: any;
4
+ instanceHandler: (action: any) => () => void;
5
+ }
6
+ export default function InstanceActionButton(params: InstanceActionButtonProps): React.JSX.Element | null;
7
+ export {};
@@ -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;