@iobroker/adapter-react-v5 7.6.8 → 7.6.10
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/Components/DeviceType/DeviceTypeIcon.d.ts +29 -0
- package/build/Components/DeviceType/DeviceTypeIcon.js +127 -0
- package/build/Components/DeviceType/DeviceTypeIcon.js.map +1 -0
- package/build/Components/DeviceType/DeviceTypeOptions.d.ts +2 -0
- package/build/Components/DeviceType/DeviceTypeOptions.js +69 -0
- package/build/Components/DeviceType/DeviceTypeOptions.js.map +1 -0
- package/build/Components/DeviceType/DeviceTypeSelector.d.ts +20 -0
- package/build/Components/DeviceType/DeviceTypeSelector.js +102 -0
- package/build/Components/DeviceType/DeviceTypeSelector.js.map +1 -0
- package/build/Components/DeviceType/i18n/de.json +45 -0
- package/build/Components/DeviceType/i18n/en.json +45 -0
- package/build/Components/DeviceType/i18n/fr.json +45 -0
- package/build/Components/DeviceType/i18n/it.json +45 -0
- package/build/Components/DeviceType/i18n/nl.json +45 -0
- package/build/Components/DeviceType/i18n/pl.json +45 -0
- package/build/Components/DeviceType/i18n/pt.json +45 -0
- package/build/Components/DeviceType/i18n/ru.json +45 -0
- package/build/Components/DeviceType/i18n/uk.json +45 -0
- package/build/Components/DeviceType/i18n/zh-cn.json +45 -0
- package/build/Components/DeviceType/icons/Cleaner.d.ts +3 -0
- package/build/Components/DeviceType/icons/Cleaner.js +14 -0
- package/build/Components/DeviceType/icons/Cleaner.js.map +1 -0
- package/build/Components/DeviceType/icons/DoorClosed.d.ts +3 -0
- package/build/Components/DeviceType/icons/DoorClosed.js +7 -0
- package/build/Components/DeviceType/icons/DoorClosed.js.map +1 -0
- package/build/Components/DeviceType/icons/DoorOpened.d.ts +3 -0
- package/build/Components/DeviceType/icons/DoorOpened.js +7 -0
- package/build/Components/DeviceType/icons/DoorOpened.js.map +1 -0
- package/build/Components/DeviceType/icons/FireOff.d.ts +3 -0
- package/build/Components/DeviceType/icons/FireOff.js +8 -0
- package/build/Components/DeviceType/icons/FireOff.js.map +1 -0
- package/build/Components/DeviceType/icons/FireOn.d.ts +3 -0
- package/build/Components/DeviceType/icons/FireOn.js +14 -0
- package/build/Components/DeviceType/icons/FireOn.js.map +1 -0
- package/build/Components/DeviceType/icons/FloodOff.d.ts +3 -0
- package/build/Components/DeviceType/icons/FloodOff.js +11 -0
- package/build/Components/DeviceType/icons/FloodOff.js.map +1 -0
- package/build/Components/DeviceType/icons/FloodOn.d.ts +3 -0
- package/build/Components/DeviceType/icons/FloodOn.js +18 -0
- package/build/Components/DeviceType/icons/FloodOn.js.map +1 -0
- package/build/Components/DeviceType/icons/Gate.d.ts +3 -0
- package/build/Components/DeviceType/icons/Gate.js +8 -0
- package/build/Components/DeviceType/icons/Gate.js.map +1 -0
- package/build/Components/DeviceType/icons/HeatValve.d.ts +3 -0
- package/build/Components/DeviceType/icons/HeatValve.js +6 -0
- package/build/Components/DeviceType/icons/HeatValve.js.map +1 -0
- package/build/Components/DeviceType/icons/Home.d.ts +3 -0
- package/build/Components/DeviceType/icons/Home.js +6 -0
- package/build/Components/DeviceType/icons/Home.js.map +1 -0
- package/build/Components/DeviceType/icons/Humidity.d.ts +3 -0
- package/build/Components/DeviceType/icons/Humidity.js +8 -0
- package/build/Components/DeviceType/icons/Humidity.js.map +1 -0
- package/build/Components/DeviceType/icons/IconHome.d.ts +5 -0
- package/build/Components/DeviceType/icons/IconHome.js +21 -0
- package/build/Components/DeviceType/icons/IconHome.js.map +1 -0
- package/build/Components/DeviceType/icons/Jalousie.d.ts +3 -0
- package/build/Components/DeviceType/icons/Jalousie.js +7 -0
- package/build/Components/DeviceType/icons/Jalousie.js.map +1 -0
- package/build/Components/DeviceType/icons/Material.d.ts +3 -0
- package/build/Components/DeviceType/icons/Material.js +8 -0
- package/build/Components/DeviceType/icons/Material.js.map +1 -0
- package/build/Components/DeviceType/icons/MotionOff.d.ts +3 -0
- package/build/Components/DeviceType/icons/MotionOff.js +11 -0
- package/build/Components/DeviceType/icons/MotionOff.js.map +1 -0
- package/build/Components/DeviceType/icons/MotionOn.d.ts +3 -0
- package/build/Components/DeviceType/icons/MotionOn.js +7 -0
- package/build/Components/DeviceType/icons/MotionOn.js.map +1 -0
- package/build/Components/DeviceType/icons/PushButton.d.ts +3 -0
- package/build/Components/DeviceType/icons/PushButton.js +9 -0
- package/build/Components/DeviceType/icons/PushButton.js.map +1 -0
- package/build/Components/DeviceType/icons/RGB.d.ts +3 -0
- package/build/Components/DeviceType/icons/RGB.js +43 -0
- package/build/Components/DeviceType/icons/RGB.js.map +1 -0
- package/build/Components/DeviceType/icons/RepairExpert.d.ts +3 -0
- package/build/Components/DeviceType/icons/RepairExpert.js +6 -0
- package/build/Components/DeviceType/icons/RepairExpert.js.map +1 -0
- package/build/Components/DeviceType/icons/Socket.d.ts +3 -0
- package/build/Components/DeviceType/icons/Socket.js +8 -0
- package/build/Components/DeviceType/icons/Socket.js.map +1 -0
- package/build/Components/DeviceType/icons/Thermometer.d.ts +3 -0
- package/build/Components/DeviceType/icons/Thermometer.js +7 -0
- package/build/Components/DeviceType/icons/Thermometer.js.map +1 -0
- package/build/Components/DeviceType/icons/ThermometerSimple.d.ts +3 -0
- package/build/Components/DeviceType/icons/ThermometerSimple.js +8 -0
- package/build/Components/DeviceType/icons/ThermometerSimple.js.map +1 -0
- package/build/Components/DeviceType/icons/Thermostat.d.ts +3 -0
- package/build/Components/DeviceType/icons/Thermostat.js +9 -0
- package/build/Components/DeviceType/icons/Thermostat.js.map +1 -0
- package/build/Components/DeviceType/icons/Valve.d.ts +3 -0
- package/build/Components/DeviceType/icons/Valve.js +7 -0
- package/build/Components/DeviceType/icons/Valve.js.map +1 -0
- package/build/Components/DeviceType/icons/WindowClosed.d.ts +3 -0
- package/build/Components/DeviceType/icons/WindowClosed.js +8 -0
- package/build/Components/DeviceType/icons/WindowClosed.js.map +1 -0
- package/build/Components/DeviceType/icons/WindowOpened.d.ts +3 -0
- package/build/Components/DeviceType/icons/WindowOpened.js +9 -0
- package/build/Components/DeviceType/icons/WindowOpened.js.map +1 -0
- package/build/Components/DeviceType/icons/WindowTilted.d.ts +3 -0
- package/build/Components/DeviceType/icons/WindowTilted.js +8 -0
- package/build/Components/DeviceType/icons/WindowTilted.js.map +1 -0
- package/build/Components/DeviceType/icons/index.d.ts +28 -0
- package/build/Components/DeviceType/icons/index.js +28 -0
- package/build/Components/DeviceType/icons/index.js.map +1 -0
- package/build/Components/InfoBox.d.ts +1 -1
- package/build/Components/InfoBox.js +1 -1
- package/build/Components/InfoBox.js.map +1 -1
- package/build/Components/SelectWithIcon.d.ts +0 -1
- package/build/Components/SelectWithIcon.js +3 -3
- package/build/Components/SelectWithIcon.js.map +1 -1
- package/build/Components/TextWithIcon.d.ts +0 -1
- package/build/Components/TextWithIcon.js +3 -3
- package/build/Components/TextWithIcon.js.map +1 -1
- package/build/Dialogs/TextInput.d.ts +1 -1
- package/build/icons/IconAdapter.d.ts +2 -2
- package/build/icons/IconAdapter.js +4 -2
- package/build/icons/IconAdapter.js.map +1 -1
- package/build/icons/IconAlias.d.ts +2 -2
- package/build/icons/IconAlias.js +4 -2
- package/build/icons/IconAlias.js.map +1 -1
- package/build/icons/IconButtonImage.d.ts +2 -2
- package/build/icons/IconButtonImage.js +6 -4
- package/build/icons/IconButtonImage.js.map +1 -1
- package/build/icons/IconChannel.d.ts +2 -2
- package/build/icons/IconChannel.js +8 -6
- package/build/icons/IconChannel.js.map +1 -1
- package/build/icons/IconClearFilter.d.ts +2 -2
- package/build/icons/IconClearFilter.js +4 -2
- package/build/icons/IconClearFilter.js.map +1 -1
- package/build/icons/IconClosed.d.ts +2 -2
- package/build/icons/IconClosed.js +4 -2
- package/build/icons/IconClosed.js.map +1 -1
- package/build/icons/IconCopy.d.ts +2 -2
- package/build/icons/IconCopy.js +4 -2
- package/build/icons/IconCopy.js.map +1 -1
- package/build/icons/IconDevice.d.ts +2 -2
- package/build/icons/IconDevice.js +14 -12
- package/build/icons/IconDevice.js.map +1 -1
- package/build/icons/IconDocument.d.ts +2 -2
- package/build/icons/IconDocument.js +4 -2
- package/build/icons/IconDocument.js.map +1 -1
- package/build/icons/IconDocumentReadOnly.d.ts +2 -2
- package/build/icons/IconDocumentReadOnly.js +5 -3
- package/build/icons/IconDocumentReadOnly.js.map +1 -1
- package/build/icons/IconExpert.d.ts +2 -2
- package/build/icons/IconExpert.js +5 -3
- package/build/icons/IconExpert.js.map +1 -1
- package/build/icons/IconFx.d.ts +2 -2
- package/build/icons/IconFx.js +4 -2
- package/build/icons/IconFx.js.map +1 -1
- package/build/icons/IconInstance.d.ts +2 -2
- package/build/icons/IconInstance.js +4 -2
- package/build/icons/IconInstance.js.map +1 -1
- package/build/icons/IconLogout.d.ts +2 -2
- package/build/icons/IconLogout.js +5 -3
- package/build/icons/IconLogout.js.map +1 -1
- package/build/icons/IconNoIcon.d.ts +2 -2
- package/build/icons/IconNoIcon.js +4 -2
- package/build/icons/IconNoIcon.js.map +1 -1
- package/build/icons/IconOpen.d.ts +2 -2
- package/build/icons/IconOpen.js +4 -2
- package/build/icons/IconOpen.js.map +1 -1
- package/build/icons/IconState.d.ts +2 -2
- package/build/icons/IconState.js +5 -3
- package/build/icons/IconState.js.map +1 -1
- package/build/icons/IconVacuum.d.ts +2 -2
- package/build/icons/IconVacuum.js +10 -8
- package/build/icons/IconVacuum.js.map +1 -1
- package/build/index.d.ts +6 -2
- package/build/index.js +4 -1
- package/build/index.js.map +1 -1
- package/package.json +8 -6
- package/build/Components/IconDeviceType.d.ts +0 -8
- package/build/Components/IconDeviceType.js +0 -212
- package/build/Components/IconDeviceType.js.map +0 -1
- package/build/icons/IconProps.d.ts +0 -15
- package/build/icons/IconProps.js +0 -2
- package/build/icons/IconProps.js.map +0 -1
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Types } from '@iobroker/type-detector';
|
|
3
|
+
export type TypesExtended = Types | 'invalid' | 'hub3' | 'node' | 'hub5' | 'controller';
|
|
4
|
+
export interface IconProps {
|
|
5
|
+
/** URL, UTF-8 character, or svg code (data:image/svg...) */
|
|
6
|
+
src?: string | React.JSX.Element | null | undefined;
|
|
7
|
+
/** Class name */
|
|
8
|
+
className?: string;
|
|
9
|
+
/** Style for image */
|
|
10
|
+
style?: React.CSSProperties;
|
|
11
|
+
/** Styles for mui */
|
|
12
|
+
sx?: Record<string, any>;
|
|
13
|
+
/** Tooltip */
|
|
14
|
+
title?: string | true;
|
|
15
|
+
/** Styles for utf-8 characters */
|
|
16
|
+
styleUTF8?: React.CSSProperties;
|
|
17
|
+
/** On error handler */
|
|
18
|
+
onError?: React.ReactEventHandler<HTMLImageElement>;
|
|
19
|
+
/** Reference to image */
|
|
20
|
+
ref?: React.RefObject<HTMLImageElement>;
|
|
21
|
+
/** Alternative text for image */
|
|
22
|
+
alt?: string;
|
|
23
|
+
/** On click handler */
|
|
24
|
+
onClick?: React.MouseEventHandler<any>;
|
|
25
|
+
}
|
|
26
|
+
export type TypeIconProps = IconProps & {
|
|
27
|
+
type?: TypesExtended;
|
|
28
|
+
};
|
|
29
|
+
export declare function DeviceTypeIcon(props: TypeIconProps): React.JSX.Element | null;
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import React, { useEffect } from 'react';
|
|
2
|
+
import { Box, Tooltip } from '@mui/material';
|
|
3
|
+
import { AiOutlineLineChart as TypeIconChart } from 'react-icons/ai';
|
|
4
|
+
import { GoDeviceCameraVideo as TypeIconCamera } from 'react-icons/go';
|
|
5
|
+
import {
|
|
6
|
+
// FaExternalLinkSquareAlt as TypeIconURL,
|
|
7
|
+
FaImage as TypeIconImage, FaRegLightbulb as TypeIconDimmer, FaInfoCircle as TypeIconInfo, FaLightbulb as TypeIconLight, FaLock as TypeIconLock, FaStreetView as TypeIconLocation, FaStepForward as TypeIconMedia, FaSlidersH as TypeIconSlider, FaVolumeDown as TypeIconVolume, FaVolumeUp as TypeIconVolumeGroup, FaFan as TypeIconAC, FaWrench as TypeIconInstance, } from 'react-icons/fa';
|
|
8
|
+
import { MdFormatColorFill as TypeIconHUE, MdFormatColorFill as TypeIconCT, MdWarning as TypeIconWarning, MdQuestionMark as TypeIconUnknown, MdOutlineMyLocation as TypeIconLocationOne, MdDeviceHub as TypeIconHub3, MdPolyline as TypeIconNode, MdHub as TypeIconHub5, MdControlCamera as TypeIconController, } from 'react-icons/md';
|
|
9
|
+
import { WiCloudy as TypeIconWeather } from 'react-icons/wi';
|
|
10
|
+
import { IoIosRadioButtonOn as TypeIconButtonSensor } from 'react-icons/io';
|
|
11
|
+
import { TbSunElectricity as TypeIconIlluminance } from 'react-icons/tb';
|
|
12
|
+
import { PiPaletteDuotone as TypeIconRGBWSingle } from 'react-icons/pi';
|
|
13
|
+
import { Types } from '@iobroker/type-detector';
|
|
14
|
+
import { I18n } from '../../i18n';
|
|
15
|
+
import { Icon } from '../Icon';
|
|
16
|
+
import { Cleaner as TypeIconVacuumCleaner, Humidity as TypeIconHumidity, Jalousie as TypeIconBlinds, PushButton as TypeIconButton, DoorOpened as TypeIconDoor, FireOn as TypeIconFireAlarm, FloodOn as TypeIconFloodAlarm, Gate as TypeIconGate, MotionOn as TypeIconMotion, RGB as TypeIconRGB, Socket as TypeIconSocket, Thermometer as TypeIconTemperature, Thermostat as TypeIconThermostat,
|
|
17
|
+
// HeatValve as TypeIconValve,
|
|
18
|
+
WindowOpened as TypeIconWindow, WindowTilted as TypeIconWindowTilt, } from './icons';
|
|
19
|
+
const TYPE_ICONS = {
|
|
20
|
+
[Types.airCondition]: TypeIconAC,
|
|
21
|
+
[Types.blind]: TypeIconBlinds,
|
|
22
|
+
[Types.blindButtons]: TypeIconBlinds,
|
|
23
|
+
[Types.button]: TypeIconButton,
|
|
24
|
+
[Types.buttonSensor]: TypeIconButtonSensor,
|
|
25
|
+
[Types.camera]: TypeIconCamera,
|
|
26
|
+
[Types.chart]: TypeIconChart,
|
|
27
|
+
// [Types.url]: TypeIconURL,
|
|
28
|
+
[Types.image]: TypeIconImage,
|
|
29
|
+
[Types.dimmer]: TypeIconDimmer,
|
|
30
|
+
[Types.door]: TypeIconDoor,
|
|
31
|
+
[Types.fireAlarm]: TypeIconFireAlarm,
|
|
32
|
+
// @ts-expect-error special case
|
|
33
|
+
'sensor.alarm.fire': TypeIconFireAlarm,
|
|
34
|
+
[Types.floodAlarm]: TypeIconFloodAlarm,
|
|
35
|
+
'sensor.alarm.flood': TypeIconFloodAlarm,
|
|
36
|
+
[Types.gate]: TypeIconGate,
|
|
37
|
+
[Types.humidity]: TypeIconHumidity,
|
|
38
|
+
[Types.illuminance]: TypeIconIlluminance,
|
|
39
|
+
[Types.info]: TypeIconInfo,
|
|
40
|
+
[Types.light]: TypeIconLight,
|
|
41
|
+
[Types.lock]: TypeIconLock,
|
|
42
|
+
[Types.location]: TypeIconLocation,
|
|
43
|
+
[Types.location_one]: TypeIconLocationOne,
|
|
44
|
+
[Types.media]: TypeIconMedia,
|
|
45
|
+
[Types.motion]: TypeIconMotion,
|
|
46
|
+
[Types.ct]: TypeIconCT,
|
|
47
|
+
[Types.rgb]: TypeIconRGB,
|
|
48
|
+
[Types.rgbSingle]: TypeIconRGB,
|
|
49
|
+
[Types.rgbwSingle]: TypeIconRGBWSingle,
|
|
50
|
+
[Types.hue]: TypeIconHUE,
|
|
51
|
+
[Types.cie]: TypeIconRGB,
|
|
52
|
+
[Types.slider]: TypeIconSlider,
|
|
53
|
+
[Types.socket]: TypeIconSocket,
|
|
54
|
+
[Types.temperature]: TypeIconTemperature,
|
|
55
|
+
[Types.thermostat]: TypeIconThermostat,
|
|
56
|
+
// [Types.valve]: TypeIconValve,
|
|
57
|
+
[Types.vacuumCleaner]: TypeIconVacuumCleaner,
|
|
58
|
+
[Types.volume]: TypeIconVolume,
|
|
59
|
+
[Types.volumeGroup]: TypeIconVolumeGroup,
|
|
60
|
+
[Types.window]: TypeIconWindow,
|
|
61
|
+
[Types.windowTilt]: TypeIconWindowTilt,
|
|
62
|
+
[Types.weatherCurrent]: TypeIconWeather,
|
|
63
|
+
[Types.weatherForecast]: TypeIconWeather,
|
|
64
|
+
[Types.warning]: TypeIconWarning,
|
|
65
|
+
[Types.unknown]: TypeIconUnknown,
|
|
66
|
+
[Types.instance]: TypeIconInstance,
|
|
67
|
+
// Special matter types
|
|
68
|
+
invalid: TypeIconWarning,
|
|
69
|
+
hub3: TypeIconHub3,
|
|
70
|
+
node: TypeIconNode,
|
|
71
|
+
hub5: TypeIconHub5,
|
|
72
|
+
controller: TypeIconController,
|
|
73
|
+
};
|
|
74
|
+
import enLang from './i18n/en.json';
|
|
75
|
+
import deLang from './i18n/de.json';
|
|
76
|
+
import ruLang from './i18n/ru.json';
|
|
77
|
+
import ptLang from './i18n/pt.json';
|
|
78
|
+
import plLang from './i18n/pl.json';
|
|
79
|
+
import frLang from './i18n/fr.json';
|
|
80
|
+
import itLang from './i18n/it.json';
|
|
81
|
+
import nlLang from './i18n/nl.json';
|
|
82
|
+
import ukLang from './i18n/uk.json';
|
|
83
|
+
import zhLang from './i18n/zh-cn.json';
|
|
84
|
+
const defaultStyle = {
|
|
85
|
+
width: 32,
|
|
86
|
+
height: 32,
|
|
87
|
+
};
|
|
88
|
+
export function DeviceTypeIcon(props) {
|
|
89
|
+
const [loaded, setLoaded] = React.useState(false);
|
|
90
|
+
useEffect(() => {
|
|
91
|
+
if (props.title && !loaded) {
|
|
92
|
+
I18n.extendTranslations({
|
|
93
|
+
en: enLang,
|
|
94
|
+
de: deLang,
|
|
95
|
+
ru: ruLang,
|
|
96
|
+
pt: ptLang,
|
|
97
|
+
pl: plLang,
|
|
98
|
+
fr: frLang,
|
|
99
|
+
it: itLang,
|
|
100
|
+
nl: nlLang,
|
|
101
|
+
uk: ukLang,
|
|
102
|
+
'zh-cn': zhLang,
|
|
103
|
+
});
|
|
104
|
+
setLoaded(true);
|
|
105
|
+
}
|
|
106
|
+
}, [props.title]);
|
|
107
|
+
if (!loaded && props.title) {
|
|
108
|
+
return (React.createElement(Box, { style: { ...defaultStyle, ...(props.style || undefined) }, className: props.className, sx: props.sx }));
|
|
109
|
+
}
|
|
110
|
+
// src could contain a device type too, so detect if it is a type
|
|
111
|
+
const type = props.type || (props.src ? Object.keys(TYPE_ICONS).find(type => props.src === type) : undefined);
|
|
112
|
+
if (!type && props.src) {
|
|
113
|
+
return (React.createElement(Icon, { style: defaultStyle, ...props, title: props.title === true ? undefined : props.title, src: props.src }));
|
|
114
|
+
}
|
|
115
|
+
const TypeIcon = type && TYPE_ICONS[type];
|
|
116
|
+
if (!TypeIcon) {
|
|
117
|
+
// Show the first letter of a type
|
|
118
|
+
return type ? (React.createElement("span", { style: { ...defaultStyle, ...(props.style || undefined) } }, type[0].toUpperCase())) : null;
|
|
119
|
+
}
|
|
120
|
+
const icon = (React.createElement(TypeIcon, { style: { ...defaultStyle, ...(props.style || undefined) }, onClick: props.onClick, className: props.className, sx: props.sx }));
|
|
121
|
+
if (props.title) {
|
|
122
|
+
return (React.createElement(Tooltip, { slotProps: { popper: { sx: { pointerEvents: 'none' } } }, title: props.title === true ? I18n.t(`type-${type}`) : props.title },
|
|
123
|
+
React.createElement("div", { style: { display: 'flex' } }, icon)));
|
|
124
|
+
}
|
|
125
|
+
return icon;
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=DeviceTypeIcon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeviceTypeIcon.js","sourceRoot":"./src/","sources":["Components/DeviceType/DeviceTypeIcon.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect } from 'react';\n\nimport { Box, Tooltip } from '@mui/material';\n\nimport { AiOutlineLineChart as TypeIconChart } from 'react-icons/ai';\nimport { GoDeviceCameraVideo as TypeIconCamera } from 'react-icons/go';\n\nimport {\n // FaExternalLinkSquareAlt as TypeIconURL,\n FaImage as TypeIconImage,\n FaRegLightbulb as TypeIconDimmer,\n FaInfoCircle as TypeIconInfo,\n FaLightbulb as TypeIconLight,\n FaLock as TypeIconLock,\n FaStreetView as TypeIconLocation,\n FaStepForward as TypeIconMedia,\n FaSlidersH as TypeIconSlider,\n FaVolumeDown as TypeIconVolume,\n FaVolumeUp as TypeIconVolumeGroup,\n FaFan as TypeIconAC,\n FaWrench as TypeIconInstance,\n} from 'react-icons/fa';\n\nimport {\n MdFormatColorFill as TypeIconHUE,\n MdFormatColorFill as TypeIconCT,\n MdWarning as TypeIconWarning,\n MdQuestionMark as TypeIconUnknown,\n MdOutlineMyLocation as TypeIconLocationOne,\n MdDeviceHub as TypeIconHub3,\n MdPolyline as TypeIconNode,\n MdHub as TypeIconHub5,\n MdControlCamera as TypeIconController,\n} from 'react-icons/md';\nimport { WiCloudy as TypeIconWeather } from 'react-icons/wi';\nimport { IoIosRadioButtonOn as TypeIconButtonSensor } from 'react-icons/io';\nimport { TbSunElectricity as TypeIconIlluminance } from 'react-icons/tb';\nimport { PiPaletteDuotone as TypeIconRGBWSingle } from 'react-icons/pi';\n\nimport { Types } from '@iobroker/type-detector';\n\nimport { I18n } from '../../i18n';\nimport { Icon } from '../Icon';\n\nimport {\n Cleaner as TypeIconVacuumCleaner,\n Humidity as TypeIconHumidity,\n Jalousie as TypeIconBlinds,\n PushButton as TypeIconButton,\n DoorOpened as TypeIconDoor,\n FireOn as TypeIconFireAlarm,\n FloodOn as TypeIconFloodAlarm,\n Gate as TypeIconGate,\n MotionOn as TypeIconMotion,\n RGB as TypeIconRGB,\n Socket as TypeIconSocket,\n Thermometer as TypeIconTemperature,\n Thermostat as TypeIconThermostat,\n // HeatValve as TypeIconValve,\n WindowOpened as TypeIconWindow,\n WindowTilted as TypeIconWindowTilt,\n type IconPropsSVG,\n} from './icons';\n\nexport type TypesExtended = Types | 'invalid' | 'hub3' | 'node' | 'hub5' | 'controller';\n\nconst TYPE_ICONS: Record<TypesExtended, React.FC<IconPropsSVG>> = {\n [Types.airCondition]: TypeIconAC,\n [Types.blind]: TypeIconBlinds,\n [Types.blindButtons]: TypeIconBlinds,\n [Types.button]: TypeIconButton,\n [Types.buttonSensor]: TypeIconButtonSensor,\n [Types.camera]: TypeIconCamera,\n [Types.chart]: TypeIconChart,\n // [Types.url]: TypeIconURL,\n [Types.image]: TypeIconImage,\n [Types.dimmer]: TypeIconDimmer,\n [Types.door]: TypeIconDoor,\n [Types.fireAlarm]: TypeIconFireAlarm,\n // @ts-expect-error special case\n 'sensor.alarm.fire': TypeIconFireAlarm,\n [Types.floodAlarm]: TypeIconFloodAlarm,\n 'sensor.alarm.flood': TypeIconFloodAlarm,\n [Types.gate]: TypeIconGate,\n [Types.humidity]: TypeIconHumidity,\n [Types.illuminance]: TypeIconIlluminance,\n [Types.info]: TypeIconInfo,\n [Types.light]: TypeIconLight,\n [Types.lock]: TypeIconLock,\n [Types.location]: TypeIconLocation,\n [Types.location_one]: TypeIconLocationOne,\n [Types.media]: TypeIconMedia,\n [Types.motion]: TypeIconMotion,\n [Types.ct]: TypeIconCT,\n [Types.rgb]: TypeIconRGB,\n [Types.rgbSingle]: TypeIconRGB,\n [Types.rgbwSingle]: TypeIconRGBWSingle,\n [Types.hue]: TypeIconHUE,\n [Types.cie]: TypeIconRGB,\n [Types.slider]: TypeIconSlider,\n [Types.socket]: TypeIconSocket,\n [Types.temperature]: TypeIconTemperature,\n [Types.thermostat]: TypeIconThermostat,\n // [Types.valve]: TypeIconValve,\n [Types.vacuumCleaner]: TypeIconVacuumCleaner,\n [Types.volume]: TypeIconVolume,\n [Types.volumeGroup]: TypeIconVolumeGroup,\n [Types.window]: TypeIconWindow,\n [Types.windowTilt]: TypeIconWindowTilt,\n [Types.weatherCurrent]: TypeIconWeather,\n [Types.weatherForecast]: TypeIconWeather,\n [Types.warning]: TypeIconWarning,\n\n [Types.unknown]: TypeIconUnknown,\n [Types.instance]: TypeIconInstance,\n\n // Special matter types\n invalid: TypeIconWarning,\n hub3: TypeIconHub3,\n node: TypeIconNode,\n hub5: TypeIconHub5,\n controller: TypeIconController,\n};\n\nimport enLang from './i18n/en.json';\nimport deLang from './i18n/de.json';\nimport ruLang from './i18n/ru.json';\nimport ptLang from './i18n/pt.json';\nimport plLang from './i18n/pl.json';\nimport frLang from './i18n/fr.json';\nimport itLang from './i18n/it.json';\nimport nlLang from './i18n/nl.json';\nimport ukLang from './i18n/uk.json';\nimport zhLang from './i18n/zh-cn.json';\n\nconst defaultStyle: React.CSSProperties = {\n width: 32,\n height: 32,\n};\n\nexport interface IconProps {\n /** URL, UTF-8 character, or svg code (data:image/svg...) */\n src?: string | React.JSX.Element | null | undefined;\n /** Class name */\n className?: string;\n /** Style for image */\n style?: React.CSSProperties;\n /** Styles for mui */\n sx?: Record<string, any>;\n /** Tooltip */\n title?: string | true;\n /** Styles for utf-8 characters */\n styleUTF8?: React.CSSProperties;\n /** On error handler */\n onError?: React.ReactEventHandler<HTMLImageElement>;\n /** Reference to image */\n ref?: React.RefObject<HTMLImageElement>;\n /** Alternative text for image */\n alt?: string;\n /** On click handler */\n onClick?: React.MouseEventHandler<any>;\n}\n\nexport type TypeIconProps = IconProps & { type?: TypesExtended };\n\nexport function DeviceTypeIcon(props: TypeIconProps): React.JSX.Element | null {\n const [loaded, setLoaded] = React.useState(false);\n\n useEffect(() => {\n if (props.title && !loaded) {\n I18n.extendTranslations({\n en: enLang,\n de: deLang,\n ru: ruLang,\n pt: ptLang,\n pl: plLang,\n fr: frLang,\n it: itLang,\n nl: nlLang,\n uk: ukLang,\n 'zh-cn': zhLang,\n });\n setLoaded(true);\n }\n }, [props.title]);\n\n if (!loaded && props.title) {\n return (\n <Box\n style={{ ...defaultStyle, ...(props.style || undefined) }}\n className={props.className}\n sx={props.sx}\n />\n );\n }\n // src could contain a device type too, so detect if it is a type\n const type: TypesExtended | undefined =\n props.type || (props.src ? (Object.keys(TYPE_ICONS).find(type => props.src === type) as TypesExtended) : undefined);\n\n if (!type && props.src) {\n return (\n <Icon\n style={defaultStyle}\n {...props}\n title={props.title === true ? undefined : props.title}\n src={props.src}\n />\n );\n }\n\n const TypeIcon = type && TYPE_ICONS[type];\n if (!TypeIcon) {\n // Show the first letter of a type\n return type ? (\n <span style={{ ...defaultStyle, ...(props.style || undefined) }}>{type[0].toUpperCase()}</span>\n ) : null;\n }\n\n const icon = (\n <TypeIcon\n style={{ ...defaultStyle, ...(props.style || undefined) }}\n onClick={props.onClick}\n className={props.className}\n sx={props.sx}\n />\n );\n\n if (props.title) {\n return (\n <Tooltip\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n title={props.title === true ? I18n.t(`type-${type}`) : props.title}\n >\n <div style={{ display: 'flex' }}>{icon}</div>\n </Tooltip>\n );\n }\n\n return icon;\n}\n"]}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { FcElectricalSensor } from 'react-icons/fc';
|
|
2
|
+
import { SiBoost } from 'react-icons/si';
|
|
3
|
+
import { TiCogOutline as IconWorking } from 'react-icons/ti';
|
|
4
|
+
import { MdPermScanWifi as IconUnreach, MdPriorityHigh as IconMaintain, MdBatteryAlert as IconLowbat, MdError as IconError, MdDirections, MdGpsFixed, MdWork, MdDeveloperMode, } from 'react-icons/md';
|
|
5
|
+
import { AiOutlineAppstoreAdd, AiOutlineRadiusBottomleft, AiOutlineColumnHeight, AiOutlineColumnWidth, AiOutlineSwap, AiFillPauseCircle, AiOutlinePoweroff, } from 'react-icons/ai';
|
|
6
|
+
import { BiLastPage } from 'react-icons/bi';
|
|
7
|
+
import { FaCompressArrowsAlt, FaRunning, FaSun, FaCompress, FaVolumeMute, FaToggleOn, FaDoorOpen, } from 'react-icons/fa';
|
|
8
|
+
import { GiElectricalResistance, GiLaserPrecision, GiStopSign, GiNuclearWaste, GiMatterStates, GiTreeSwing, GiSpeedometer, GiElectric, GiLightningFrequency, } from 'react-icons/gi';
|
|
9
|
+
import { IoIosColorPalette, IoIosWater } from 'react-icons/io';
|
|
10
|
+
import { WiDaySunny, WiFire, WiHumidity, WiSmoke, WiThermometer } from 'react-icons/wi';
|
|
11
|
+
import { FiPower } from 'react-icons/fi';
|
|
12
|
+
import { HiOutlineLightBulb } from 'react-icons/hi';
|
|
13
|
+
import { ImPower } from 'react-icons/im';
|
|
14
|
+
import { WindowTilted } from './icons';
|
|
15
|
+
export const STATES_NAME_ICONS = {
|
|
16
|
+
SET: AiOutlineAppstoreAdd,
|
|
17
|
+
WORKING: MdWork,
|
|
18
|
+
UNREACH: IconUnreach,
|
|
19
|
+
LOWBAT: IconLowbat,
|
|
20
|
+
MAINTAIN: IconMaintain,
|
|
21
|
+
ERROR: IconError,
|
|
22
|
+
DIRECTION: MdDirections,
|
|
23
|
+
CONNECTED: IconUnreach,
|
|
24
|
+
ACTUAL: IconWorking,
|
|
25
|
+
SECOND: BiLastPage,
|
|
26
|
+
PRESS_LONG: FaCompressArrowsAlt,
|
|
27
|
+
PRESS: FaCompress,
|
|
28
|
+
MUTE: FaVolumeMute,
|
|
29
|
+
ACCURACY: GiLaserPrecision,
|
|
30
|
+
RADIUS: AiOutlineRadiusBottomleft,
|
|
31
|
+
ELEVATION: AiOutlineColumnHeight,
|
|
32
|
+
LATITUDE: AiOutlineColumnWidth,
|
|
33
|
+
LONGITUDE: AiOutlineSwap,
|
|
34
|
+
GPS: MdGpsFixed,
|
|
35
|
+
ON_ACTUAL: FaToggleOn,
|
|
36
|
+
ON_SET: FaToggleOn,
|
|
37
|
+
OPEN: FaDoorOpen,
|
|
38
|
+
STOP: GiStopSign,
|
|
39
|
+
WATER_ALARM: IoIosWater, // water
|
|
40
|
+
WASTE_ALARM: GiNuclearWaste,
|
|
41
|
+
PAUSE: AiFillPauseCircle,
|
|
42
|
+
STATE: GiMatterStates,
|
|
43
|
+
BATTERY: IconLowbat,
|
|
44
|
+
WASTE: GiNuclearWaste,
|
|
45
|
+
WATER: IoIosWater,
|
|
46
|
+
WORK_MODE: MdWork,
|
|
47
|
+
MODE: MdDeveloperMode,
|
|
48
|
+
POWER: AiOutlinePoweroff,
|
|
49
|
+
BOOST: SiBoost,
|
|
50
|
+
HUMIDITY: WiHumidity,
|
|
51
|
+
TEMPERATURE: WiThermometer,
|
|
52
|
+
BRIGHTNESS: WiDaySunny,
|
|
53
|
+
MOTION: FaRunning,
|
|
54
|
+
FIRE: WiFire,
|
|
55
|
+
WINDOW: WindowTilted,
|
|
56
|
+
SMOKE: WiSmoke,
|
|
57
|
+
SWING: GiTreeSwing,
|
|
58
|
+
SPEED: GiSpeedometer,
|
|
59
|
+
DIMMER: HiOutlineLightBulb,
|
|
60
|
+
ON: FiPower,
|
|
61
|
+
COLOR_TEMP: FaSun,
|
|
62
|
+
ELECTRIC_POWER: ImPower,
|
|
63
|
+
CURRENT: GiElectric,
|
|
64
|
+
VOLTAGE: GiElectricalResistance,
|
|
65
|
+
CONSUMPTION: FcElectricalSensor,
|
|
66
|
+
FREQUENCY: GiLightningFrequency,
|
|
67
|
+
HUE: IoIosColorPalette,
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=DeviceTypeOptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeviceTypeOptions.js","sourceRoot":"./src/","sources":["Components/DeviceType/DeviceTypeOptions.tsx"],"names":[],"mappings":"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","sourcesContent":["import { FcElectricalSensor } from 'react-icons/fc';\nimport { SiBoost } from 'react-icons/si';\nimport { TiCogOutline as IconWorking } from 'react-icons/ti';\nimport {\n MdPermScanWifi as IconUnreach,\n MdPriorityHigh as IconMaintain,\n MdBatteryAlert as IconLowbat,\n MdError as IconError,\n MdDirections,\n MdGpsFixed,\n MdWork,\n MdDeveloperMode,\n} from 'react-icons/md';\nimport {\n AiOutlineAppstoreAdd,\n AiOutlineRadiusBottomleft,\n AiOutlineColumnHeight,\n AiOutlineColumnWidth,\n AiOutlineSwap,\n AiFillPauseCircle,\n AiOutlinePoweroff,\n} from 'react-icons/ai';\nimport { BiLastPage } from 'react-icons/bi';\nimport {\n FaCompressArrowsAlt,\n FaRunning,\n FaSun,\n FaCompress,\n FaVolumeMute,\n FaToggleOn,\n FaDoorOpen,\n} from 'react-icons/fa';\nimport {\n GiElectricalResistance,\n GiLaserPrecision,\n GiStopSign,\n GiNuclearWaste,\n GiMatterStates,\n GiTreeSwing,\n GiSpeedometer,\n GiElectric,\n GiLightningFrequency,\n} from 'react-icons/gi';\nimport { IoIosColorPalette, IoIosWater } from 'react-icons/io';\nimport { WiDaySunny, WiFire, WiHumidity, WiSmoke, WiThermometer } from 'react-icons/wi';\nimport { FiPower } from 'react-icons/fi';\nimport { HiOutlineLightBulb } from 'react-icons/hi';\nimport { ImPower } from 'react-icons/im';\nimport type { IconType } from 'react-icons';\n\nimport { WindowTilted } from './icons';\n\nexport const STATES_NAME_ICONS: Record<string, IconType> = {\n SET: AiOutlineAppstoreAdd,\n WORKING: MdWork,\n UNREACH: IconUnreach,\n LOWBAT: IconLowbat,\n MAINTAIN: IconMaintain,\n ERROR: IconError,\n DIRECTION: MdDirections,\n CONNECTED: IconUnreach,\n ACTUAL: IconWorking,\n SECOND: BiLastPage,\n PRESS_LONG: FaCompressArrowsAlt,\n PRESS: FaCompress,\n MUTE: FaVolumeMute,\n ACCURACY: GiLaserPrecision,\n RADIUS: AiOutlineRadiusBottomleft,\n ELEVATION: AiOutlineColumnHeight,\n LATITUDE: AiOutlineColumnWidth,\n LONGITUDE: AiOutlineSwap,\n GPS: MdGpsFixed,\n ON_ACTUAL: FaToggleOn,\n ON_SET: FaToggleOn,\n OPEN: FaDoorOpen,\n STOP: GiStopSign,\n WATER_ALARM: IoIosWater, // water\n WASTE_ALARM: GiNuclearWaste,\n PAUSE: AiFillPauseCircle,\n STATE: GiMatterStates,\n BATTERY: IconLowbat,\n WASTE: GiNuclearWaste,\n WATER: IoIosWater,\n WORK_MODE: MdWork,\n MODE: MdDeveloperMode,\n POWER: AiOutlinePoweroff,\n BOOST: SiBoost,\n HUMIDITY: WiHumidity,\n TEMPERATURE: WiThermometer,\n BRIGHTNESS: WiDaySunny,\n MOTION: FaRunning,\n FIRE: WiFire,\n WINDOW: WindowTilted,\n SMOKE: WiSmoke,\n SWING: GiTreeSwing,\n SPEED: GiSpeedometer,\n DIMMER: HiOutlineLightBulb,\n ON: FiPower,\n COLOR_TEMP: FaSun,\n ELECTRIC_POWER: ImPower,\n CURRENT: GiElectric,\n VOLTAGE: GiElectricalResistance,\n CONSUMPTION: FcElectricalSensor,\n FREQUENCY: GiLightningFrequency,\n HUE: IoIosColorPalette,\n};\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Types } from '@iobroker/type-detector';
|
|
3
|
+
import type { ThemeType } from '../../types';
|
|
4
|
+
export declare function DeviceTypeSelector(props: {
|
|
5
|
+
themeType: ThemeType;
|
|
6
|
+
supportedDevices?: Types[];
|
|
7
|
+
unsupportedDevices?: Types[];
|
|
8
|
+
value?: Types | '';
|
|
9
|
+
onChange: (value: Types) => void;
|
|
10
|
+
label?: string;
|
|
11
|
+
style?: React.CSSProperties;
|
|
12
|
+
sx?: Record<string, any>;
|
|
13
|
+
disabled?: boolean;
|
|
14
|
+
error?: boolean;
|
|
15
|
+
/** Show icons for applications: google, amazon, material, alias. Used in devices */
|
|
16
|
+
showApplications?: {
|
|
17
|
+
TYPE_OPTIONS: Partial<Record<Types, Record<string, boolean>>>;
|
|
18
|
+
ICONS_TYPE: Record<string, React.JSX.Element>;
|
|
19
|
+
};
|
|
20
|
+
}): React.JSX.Element;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import React, { useEffect } from 'react';
|
|
2
|
+
import { Box, FormControl, InputLabel, MenuItem, Select } from '@mui/material';
|
|
3
|
+
import { Types } from '@iobroker/type-detector';
|
|
4
|
+
import { I18n } from '../../i18n';
|
|
5
|
+
import { Icon } from '../Icon';
|
|
6
|
+
import { DeviceTypeIcon } from './DeviceTypeIcon';
|
|
7
|
+
import enLang from './i18n/en.json';
|
|
8
|
+
import deLang from './i18n/de.json';
|
|
9
|
+
import ruLang from './i18n/ru.json';
|
|
10
|
+
import ptLang from './i18n/pt.json';
|
|
11
|
+
import plLang from './i18n/pl.json';
|
|
12
|
+
import frLang from './i18n/fr.json';
|
|
13
|
+
import itLang from './i18n/it.json';
|
|
14
|
+
import nlLang from './i18n/nl.json';
|
|
15
|
+
import ukLang from './i18n/uk.json';
|
|
16
|
+
import zhLang from './i18n/zh-cn.json';
|
|
17
|
+
const styles = {
|
|
18
|
+
itemChildrenWrapper: {
|
|
19
|
+
display: 'flex',
|
|
20
|
+
width: '100%',
|
|
21
|
+
justifyContent: 'space-between',
|
|
22
|
+
},
|
|
23
|
+
type: {
|
|
24
|
+
marginTop: 10,
|
|
25
|
+
},
|
|
26
|
+
selectIcon: {
|
|
27
|
+
paddingRight: 8,
|
|
28
|
+
verticalAlign: 'middle',
|
|
29
|
+
width: 20,
|
|
30
|
+
height: 20,
|
|
31
|
+
},
|
|
32
|
+
selectText: {
|
|
33
|
+
verticalAlign: 'middle',
|
|
34
|
+
},
|
|
35
|
+
iconWrapper: {
|
|
36
|
+
display: 'flex',
|
|
37
|
+
alignItems: 'center',
|
|
38
|
+
},
|
|
39
|
+
iconStyle: {
|
|
40
|
+
width: 16,
|
|
41
|
+
height: 16,
|
|
42
|
+
margin: '0 3px',
|
|
43
|
+
},
|
|
44
|
+
emptyIcon: {
|
|
45
|
+
width: 16,
|
|
46
|
+
height: 16,
|
|
47
|
+
margin: '0 3px',
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
export function DeviceTypeSelector(props) {
|
|
51
|
+
const [typesWords, setTypesWords] = React.useState({});
|
|
52
|
+
const [types, setTypes] = React.useState([]);
|
|
53
|
+
useEffect(() => {
|
|
54
|
+
const _typesWords = {};
|
|
55
|
+
Object.keys(Types)
|
|
56
|
+
.filter(id => props.supportedDevices?.includes(id) && !props.unsupportedDevices?.includes(id))
|
|
57
|
+
.forEach(typeId => (_typesWords[typeId] = I18n.t(`type-${Types[typeId]}`)));
|
|
58
|
+
// sort types by ABC in the current language
|
|
59
|
+
const _types = Object.keys(_typesWords);
|
|
60
|
+
_types.sort((a, b) => {
|
|
61
|
+
if (_typesWords[a] === _typesWords[b]) {
|
|
62
|
+
return 0;
|
|
63
|
+
}
|
|
64
|
+
return _typesWords[a].localeCompare(_typesWords[b], 'de');
|
|
65
|
+
});
|
|
66
|
+
I18n.extendTranslations({
|
|
67
|
+
en: enLang,
|
|
68
|
+
de: deLang,
|
|
69
|
+
ru: ruLang,
|
|
70
|
+
pt: ptLang,
|
|
71
|
+
pl: plLang,
|
|
72
|
+
fr: frLang,
|
|
73
|
+
it: itLang,
|
|
74
|
+
nl: nlLang,
|
|
75
|
+
uk: ukLang,
|
|
76
|
+
'zh-cn': zhLang,
|
|
77
|
+
});
|
|
78
|
+
setTypes(_types);
|
|
79
|
+
setTypesWords(_typesWords);
|
|
80
|
+
}, [props.supportedDevices, props.unsupportedDevices]);
|
|
81
|
+
if (!types) {
|
|
82
|
+
return (React.createElement(Box, { style: {
|
|
83
|
+
...styles.type,
|
|
84
|
+
...props.style,
|
|
85
|
+
}, sx: props.sx }));
|
|
86
|
+
}
|
|
87
|
+
return (React.createElement(FormControl, { style: {
|
|
88
|
+
...styles.type,
|
|
89
|
+
...props.style,
|
|
90
|
+
}, sx: props.sx, variant: "standard", error: !!props.error },
|
|
91
|
+
React.createElement(InputLabel, null, props.label || I18n.t('type-Device type')),
|
|
92
|
+
React.createElement(Select, { variant: "standard", disabled: !!props.disabled, value: props.value, onChange: e => props.onChange(e.target.value) }, types.map(typeId => (React.createElement(MenuItem, { key: Types[typeId], value: Types[typeId] },
|
|
93
|
+
React.createElement("div", { style: styles.itemChildrenWrapper },
|
|
94
|
+
React.createElement("div", null,
|
|
95
|
+
React.createElement(DeviceTypeIcon, { type: Types[typeId], style: {
|
|
96
|
+
...styles.selectIcon,
|
|
97
|
+
color: props.themeType === 'dark' ? '#FFFFFF' : '#000',
|
|
98
|
+
} }),
|
|
99
|
+
React.createElement("span", { style: styles.selectText }, typesWords[typeId])),
|
|
100
|
+
props.showApplications?.TYPE_OPTIONS[typeId] ? (React.createElement("div", { style: styles.iconWrapper }, Object.keys(props.showApplications.TYPE_OPTIONS[typeId]).map(key => props.showApplications.TYPE_OPTIONS[typeId][key] ? (React.createElement(Icon, { key: key, style: styles.iconStyle, src: props.showApplications.ICONS_TYPE[key] })) : (React.createElement("div", { key: key, style: styles.emptyIcon }))))) : null)))))));
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=DeviceTypeSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeviceTypeSelector.js","sourceRoot":"./src/","sources":["Components/DeviceType/DeviceTypeSelector.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect } from 'react';\nimport { Box, FormControl, InputLabel, MenuItem, Select } from '@mui/material';\n\nimport { Types } from '@iobroker/type-detector';\n\nimport { I18n } from '../../i18n';\nimport { Icon } from '../Icon';\nimport type { ThemeType } from '../../types';\n\nimport { DeviceTypeIcon } from './DeviceTypeIcon';\n\nimport enLang from './i18n/en.json';\nimport deLang from './i18n/de.json';\nimport ruLang from './i18n/ru.json';\nimport ptLang from './i18n/pt.json';\nimport plLang from './i18n/pl.json';\nimport frLang from './i18n/fr.json';\nimport itLang from './i18n/it.json';\nimport nlLang from './i18n/nl.json';\nimport ukLang from './i18n/uk.json';\nimport zhLang from './i18n/zh-cn.json';\n\nconst styles: Record<\n 'itemChildrenWrapper' | 'type' | 'selectIcon' | 'selectText' | 'iconWrapper' | 'iconStyle' | 'emptyIcon',\n React.CSSProperties\n> = {\n itemChildrenWrapper: {\n display: 'flex',\n width: '100%',\n justifyContent: 'space-between',\n },\n type: {\n marginTop: 10,\n },\n selectIcon: {\n paddingRight: 8,\n verticalAlign: 'middle',\n width: 20,\n height: 20,\n },\n selectText: {\n verticalAlign: 'middle',\n },\n iconWrapper: {\n display: 'flex',\n alignItems: 'center',\n },\n iconStyle: {\n width: 16,\n height: 16,\n margin: '0 3px',\n },\n emptyIcon: {\n width: 16,\n height: 16,\n margin: '0 3px',\n },\n};\n\nexport function DeviceTypeSelector(props: {\n themeType: ThemeType;\n supportedDevices?: Types[];\n unsupportedDevices?: Types[];\n value?: Types | '';\n onChange: (value: Types) => void;\n label?: string;\n style?: React.CSSProperties;\n sx?: Record<string, any>;\n disabled?: boolean;\n error?: boolean;\n /** Show icons for applications: google, amazon, material, alias. Used in devices */\n showApplications?: {\n TYPE_OPTIONS: Partial<Record<Types, Record<string, boolean>>>;\n ICONS_TYPE: Record<string, React.JSX.Element>;\n };\n}): React.JSX.Element {\n const [typesWords, setTypesWords] = React.useState<Partial<Record<Types, string>>>({});\n const [types, setTypes] = React.useState<Types[] | null>([]);\n\n useEffect(() => {\n const _typesWords: Partial<Record<Types, string>> = {};\n Object.keys(Types)\n .filter(\n id => props.supportedDevices?.includes(id as Types) && !props.unsupportedDevices?.includes(id as Types),\n )\n .forEach(typeId => (_typesWords[typeId as Types] = I18n.t(`type-${Types[typeId as Types]}`)));\n\n // sort types by ABC in the current language\n const _types: Types[] = Object.keys(_typesWords) as Types[];\n\n _types.sort((a, b) => {\n if (_typesWords[a as Types] === _typesWords[b as Types]) {\n return 0;\n }\n return _typesWords[a as Types]!.localeCompare(_typesWords[b as Types]!, 'de');\n });\n\n I18n.extendTranslations({\n en: enLang,\n de: deLang,\n ru: ruLang,\n pt: ptLang,\n pl: plLang,\n fr: frLang,\n it: itLang,\n nl: nlLang,\n uk: ukLang,\n 'zh-cn': zhLang,\n });\n\n setTypes(_types);\n setTypesWords(_typesWords);\n }, [props.supportedDevices, props.unsupportedDevices]);\n\n if (!types) {\n return (\n <Box\n style={{\n ...styles.type,\n ...props.style,\n }}\n sx={props.sx}\n />\n );\n }\n\n return (\n <FormControl\n style={{\n ...styles.type,\n ...props.style,\n }}\n sx={props.sx}\n variant=\"standard\"\n error={!!props.error}\n >\n <InputLabel>{props.label || I18n.t('type-Device type')}</InputLabel>\n <Select\n variant=\"standard\"\n disabled={!!props.disabled}\n value={props.value}\n onChange={e => props.onChange(e.target.value as Types)}\n >\n {types.map(typeId => (\n <MenuItem\n key={Types[typeId]}\n value={Types[typeId]}\n >\n <div style={styles.itemChildrenWrapper}>\n <div>\n <DeviceTypeIcon\n type={Types[typeId]}\n style={{\n ...styles.selectIcon,\n color: props.themeType === 'dark' ? '#FFFFFF' : '#000',\n }}\n />\n <span style={styles.selectText}>{typesWords[typeId]}</span>\n </div>\n {props.showApplications?.TYPE_OPTIONS[typeId] ? (\n <div style={styles.iconWrapper}>\n {Object.keys(props.showApplications.TYPE_OPTIONS[typeId]).map(key =>\n props.showApplications.TYPE_OPTIONS[typeId][key] ? (\n <Icon\n key={key}\n style={styles.iconStyle}\n src={props.showApplications.ICONS_TYPE[key]}\n />\n ) : (\n <div\n key={key}\n style={styles.emptyIcon}\n />\n ),\n )}\n </div>\n ) : null}\n </div>\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n );\n}\n"]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"type-Device type": "Gerätetyp",
|
|
3
|
+
"type-airCondition": "Klimaanlage",
|
|
4
|
+
"type-blind": "Jalousien",
|
|
5
|
+
"type-blindButtons": "Jalousie über Tasten gesteuert",
|
|
6
|
+
"type-button": "Taste",
|
|
7
|
+
"type-buttonSensor": "Taste mit Rückmeldung",
|
|
8
|
+
"type-camera": "Kamera",
|
|
9
|
+
"type-chart": "Diagramm",
|
|
10
|
+
"type-cie": "CIE Farblicht",
|
|
11
|
+
"type-ct": "Farbtemperatur",
|
|
12
|
+
"type-dimmer": "Dimmer",
|
|
13
|
+
"type-door": "Türsensor",
|
|
14
|
+
"type-fireAlarm": "Feueralarm",
|
|
15
|
+
"type-floodAlarm": "Wasseralarm",
|
|
16
|
+
"type-gate": "Tor-Steuerung",
|
|
17
|
+
"type-hue": "HUE-Licht",
|
|
18
|
+
"type-humidity": "Feuchtigkeit",
|
|
19
|
+
"type-illuminance": "Beleuchtungsstärke",
|
|
20
|
+
"type-image": "Bild",
|
|
21
|
+
"type-info": "Information",
|
|
22
|
+
"type-instance": "Instanz",
|
|
23
|
+
"type-light": "Licht",
|
|
24
|
+
"type-location": "Position",
|
|
25
|
+
"type-lock": "Schloss",
|
|
26
|
+
"type-media": "Mediaplayer",
|
|
27
|
+
"type-motion": "Bewegungssensor",
|
|
28
|
+
"type-rgb": "RGB-Licht",
|
|
29
|
+
"type-rgbSingle": "R,G,B-Licht Einzelwerte",
|
|
30
|
+
"type-rgbwSingle": "R,G,B,W-Licht Einzelwerte",
|
|
31
|
+
"type-slider": "Schieberegler",
|
|
32
|
+
"type-socket": "Steckdose",
|
|
33
|
+
"type-temperature": "Temperatur",
|
|
34
|
+
"type-thermostat": "Thermostat",
|
|
35
|
+
"type-url": "URL",
|
|
36
|
+
"type-vacuumCleaner": "Staubsauger",
|
|
37
|
+
"type-valve": "Ventil",
|
|
38
|
+
"type-volume": "Lautstärke",
|
|
39
|
+
"type-volumeGroup": "Lautstärke-Gruppe",
|
|
40
|
+
"type-warning": "Warnung",
|
|
41
|
+
"type-weatherCurrent": "Aktuelle Wetterlage",
|
|
42
|
+
"type-weatherForecast": "Wettervorhersage",
|
|
43
|
+
"type-window": "Fenstersensor",
|
|
44
|
+
"type-windowTilt": "Fensterkippung-Sensor"
|
|
45
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"type-Device type": "Device type",
|
|
3
|
+
"type-airCondition": "Air conditioner",
|
|
4
|
+
"type-blind": "Blinds",
|
|
5
|
+
"type-blindButtons": "Blind controlled by buttons",
|
|
6
|
+
"type-button": "Button",
|
|
7
|
+
"type-buttonSensor": "Button with feedback",
|
|
8
|
+
"type-camera": "Camera",
|
|
9
|
+
"type-chart": "Chart",
|
|
10
|
+
"type-cie": "CIE color light",
|
|
11
|
+
"type-ct": "Color temperature",
|
|
12
|
+
"type-dimmer": "Dimmer",
|
|
13
|
+
"type-door": "Door",
|
|
14
|
+
"type-fireAlarm": "Fire alarm",
|
|
15
|
+
"type-floodAlarm": "Flood alarm",
|
|
16
|
+
"type-gate": "Gate",
|
|
17
|
+
"type-hue": "HUE light",
|
|
18
|
+
"type-humidity": "Humidity",
|
|
19
|
+
"type-illuminance": "Illuminance",
|
|
20
|
+
"type-image": "Image",
|
|
21
|
+
"type-info": "Information",
|
|
22
|
+
"type-instance": "Instance",
|
|
23
|
+
"type-light": "Light",
|
|
24
|
+
"type-location": "Position",
|
|
25
|
+
"type-lock": "Lock",
|
|
26
|
+
"type-media": "Media-player",
|
|
27
|
+
"type-motion": "Motion sensor",
|
|
28
|
+
"type-rgb": "RGB light",
|
|
29
|
+
"type-rgbSingle": "R,G,B light - single states",
|
|
30
|
+
"type-rgbwSingle": "R,G,B,W light - single states",
|
|
31
|
+
"type-slider": "Slider",
|
|
32
|
+
"type-socket": "Socket",
|
|
33
|
+
"type-temperature": "Temperature",
|
|
34
|
+
"type-thermostat": "Thermostat",
|
|
35
|
+
"type-url": "URL",
|
|
36
|
+
"type-vacuumCleaner": "Vacuum cleaner",
|
|
37
|
+
"type-valve": "Valve",
|
|
38
|
+
"type-volume": "Volume",
|
|
39
|
+
"type-volumeGroup": "Volume group",
|
|
40
|
+
"type-warning": "Warning",
|
|
41
|
+
"type-weatherCurrent": "Current weather",
|
|
42
|
+
"type-weatherForecast": "Weather forecast",
|
|
43
|
+
"type-window": "Window sensor",
|
|
44
|
+
"type-windowTilt": "Window tilt sensor"
|
|
45
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"type-Device type": "Type d'appareil",
|
|
3
|
+
"type-airCondition": "Climatiseur",
|
|
4
|
+
"type-blind": "stores",
|
|
5
|
+
"type-blindButtons": "Store commandé par boutons",
|
|
6
|
+
"type-button": "bouton",
|
|
7
|
+
"type-buttonSensor": "Capteur de bouton",
|
|
8
|
+
"type-camera": "caméra",
|
|
9
|
+
"type-chart": "Graphique",
|
|
10
|
+
"type-cie": "lumière colorée CIE",
|
|
11
|
+
"type-ct": "Température de couleur",
|
|
12
|
+
"type-dimmer": "variateur",
|
|
13
|
+
"type-door": "porte",
|
|
14
|
+
"type-fireAlarm": "alarme incendie",
|
|
15
|
+
"type-floodAlarm": "alarme d'inondation",
|
|
16
|
+
"type-gate": "grille",
|
|
17
|
+
"type-hue": "Lumière HUE",
|
|
18
|
+
"type-humidity": "humidité",
|
|
19
|
+
"type-illuminance": "Éclairement",
|
|
20
|
+
"type-image": "image",
|
|
21
|
+
"type-info": "informations",
|
|
22
|
+
"type-instance": "exemple",
|
|
23
|
+
"type-light": "lumière",
|
|
24
|
+
"type-location": "emplacement",
|
|
25
|
+
"type-lock": "verrouillage",
|
|
26
|
+
"type-media": "médias",
|
|
27
|
+
"type-motion": "mouvement",
|
|
28
|
+
"type-rgb": "lumière RVB",
|
|
29
|
+
"type-rgbSingle": "Lumière RVB simple",
|
|
30
|
+
"type-rgbwSingle": "RGBW comme valeur unique",
|
|
31
|
+
"type-slider": "curseur",
|
|
32
|
+
"type-socket": "douille",
|
|
33
|
+
"type-temperature": "température",
|
|
34
|
+
"type-thermostat": "thermostat",
|
|
35
|
+
"type-url": "URL",
|
|
36
|
+
"type-vacuumCleaner": "Aspirateur",
|
|
37
|
+
"type-valve": "soupape",
|
|
38
|
+
"type-volume": "volume",
|
|
39
|
+
"type-volumeGroup": "groupe de volumes",
|
|
40
|
+
"type-warning": "avertissement",
|
|
41
|
+
"type-weatherCurrent": "météo actuelle",
|
|
42
|
+
"type-weatherForecast": "prévisions météorologiques",
|
|
43
|
+
"type-window": "fenêtre",
|
|
44
|
+
"type-windowTilt": "inclinaison de la fenêtre"
|
|
45
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"type-Device type": "Tipo di dispositivo",
|
|
3
|
+
"type-airCondition": "Condizionatore d'aria",
|
|
4
|
+
"type-blind": "tende",
|
|
5
|
+
"type-blindButtons": "Tenda controllata da pulsanti",
|
|
6
|
+
"type-button": "pulsante",
|
|
7
|
+
"type-buttonSensor": "Sensore del pulsante",
|
|
8
|
+
"type-camera": "telecamera",
|
|
9
|
+
"type-chart": "Grafico",
|
|
10
|
+
"type-cie": "Luce colorata CIE",
|
|
11
|
+
"type-ct": "Temperatura del colore",
|
|
12
|
+
"type-dimmer": "dimmer",
|
|
13
|
+
"type-door": "porta",
|
|
14
|
+
"type-fireAlarm": "allarme antincendio",
|
|
15
|
+
"type-floodAlarm": "allarme allagamento",
|
|
16
|
+
"type-gate": "cancello",
|
|
17
|
+
"type-hue": "Luce HUE",
|
|
18
|
+
"type-humidity": "umidità",
|
|
19
|
+
"type-illuminance": "Illuminamento",
|
|
20
|
+
"type-image": "immagine",
|
|
21
|
+
"type-info": "informazioni",
|
|
22
|
+
"type-instance": "esempio",
|
|
23
|
+
"type-light": "leggero",
|
|
24
|
+
"type-location": "posizione",
|
|
25
|
+
"type-lock": "serratura",
|
|
26
|
+
"type-media": "media",
|
|
27
|
+
"type-motion": "movimento",
|
|
28
|
+
"type-rgb": "luce RGB",
|
|
29
|
+
"type-rgbSingle": "Luce RGB singola",
|
|
30
|
+
"type-rgbwSingle": "RGBW come valore singolo",
|
|
31
|
+
"type-slider": "cursore",
|
|
32
|
+
"type-socket": "PRESA",
|
|
33
|
+
"type-temperature": "temperatura",
|
|
34
|
+
"type-thermostat": "termostato",
|
|
35
|
+
"type-url": "URL",
|
|
36
|
+
"type-vacuumCleaner": "Aspirapolvere",
|
|
37
|
+
"type-valve": "valvola",
|
|
38
|
+
"type-volume": "volume",
|
|
39
|
+
"type-volumeGroup": "gruppo di volumi",
|
|
40
|
+
"type-warning": "avvertimento",
|
|
41
|
+
"type-weatherCurrent": "meteo attuale",
|
|
42
|
+
"type-weatherForecast": "previsioni del tempo",
|
|
43
|
+
"type-window": "finestra",
|
|
44
|
+
"type-windowTilt": "inclinazione della finestra"
|
|
45
|
+
}
|