mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-07 00:09:51 +03:00
#1174 - include translated device type name in dropdown
This commit is contained in:
@@ -83,7 +83,8 @@ const Customization: FC = () => {
|
|||||||
const [selectedDevice, setSelectedDevice] = useState<number>(
|
const [selectedDevice, setSelectedDevice] = useState<number>(
|
||||||
Number(useLocation().state) || -1
|
Number(useLocation().state) || -1
|
||||||
);
|
);
|
||||||
const [selectedDeviceTypeName, setSelectedDeviceTypeName] = useState<string>(''); // needed for API URL
|
const [selectedDeviceTypeNameURL, setSelectedDeviceTypeNameURL] =
|
||||||
|
useState<string>(''); // needed for API URL
|
||||||
const [selectedDeviceName, setSelectedDeviceName] = useState<string>('');
|
const [selectedDeviceName, setSelectedDeviceName] = useState<string>('');
|
||||||
|
|
||||||
const { send: resetCustomizations } = useRequest(EMSESP.resetCustomizations(), {
|
const { send: resetCustomizations } = useRequest(EMSESP.resetCustomizations(), {
|
||||||
@@ -234,9 +235,9 @@ const Customization: FC = () => {
|
|||||||
const id = devices.devices.findIndex((d) => d.i === selectedDevice);
|
const id = devices.devices.findIndex((d) => d.i === selectedDevice);
|
||||||
if (id === -1) {
|
if (id === -1) {
|
||||||
setSelectedDevice(-1);
|
setSelectedDevice(-1);
|
||||||
setSelectedDeviceTypeName('');
|
setSelectedDeviceTypeNameURL('');
|
||||||
} else {
|
} else {
|
||||||
setSelectedDeviceTypeName(devices.devices[id].tn || '');
|
setSelectedDeviceTypeNameURL(devices.devices[id].url || '');
|
||||||
setSelectedDeviceName(devices.devices[id].s);
|
setSelectedDeviceName(devices.devices[id].s);
|
||||||
setNumChanges(0);
|
setNumChanges(0);
|
||||||
setRestartNeeded(false);
|
setRestartNeeded(false);
|
||||||
@@ -439,6 +440,7 @@ const Customization: FC = () => {
|
|||||||
disabled={numChanges !== 0}
|
disabled={numChanges !== 0}
|
||||||
onChange={(e) => setSelectedDevice(parseInt(e.target.value))}
|
onChange={(e) => setSelectedDevice(parseInt(e.target.value))}
|
||||||
margin="normal"
|
margin="normal"
|
||||||
|
style={{ minWidth: '50%' }}
|
||||||
select
|
select
|
||||||
>
|
>
|
||||||
<MenuItem disabled key={-1} value={-1}>
|
<MenuItem disabled key={-1} value={-1}>
|
||||||
@@ -446,7 +448,7 @@ const Customization: FC = () => {
|
|||||||
</MenuItem>
|
</MenuItem>
|
||||||
{devices.devices.map((device: DeviceShort) => (
|
{devices.devices.map((device: DeviceShort) => (
|
||||||
<MenuItem key={device.i} value={device.i}>
|
<MenuItem key={device.i} value={device.i}>
|
||||||
{device.s}
|
{device.s} ({device.tn})
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
))}
|
))}
|
||||||
</TextField>
|
</TextField>
|
||||||
@@ -612,7 +614,7 @@ const Customization: FC = () => {
|
|||||||
{formatName(de, false)} (
|
{formatName(de, false)} (
|
||||||
<Link
|
<Link
|
||||||
target="_blank"
|
target="_blank"
|
||||||
href={APIURL + selectedDeviceTypeName + '/' + de.id}
|
href={APIURL + selectedDeviceTypeNameURL + '/' + de.id}
|
||||||
>
|
>
|
||||||
{de.id}
|
{de.id}
|
||||||
</Link>
|
</Link>
|
||||||
|
|||||||
@@ -646,8 +646,8 @@ const Devices: FC = () => {
|
|||||||
>
|
>
|
||||||
<Box sx={{ border: '1px solid #177ac9' }}>
|
<Box sx={{ border: '1px solid #177ac9' }}>
|
||||||
<Typography noWrap variant="subtitle1" color="warning.main" sx={{ ml: 1 }}>
|
<Typography noWrap variant="subtitle1" color="warning.main" sx={{ ml: 1 }}>
|
||||||
{coreData.devices[deviceIndex].tn} |
|
{coreData.devices[deviceIndex].n} (
|
||||||
{coreData.devices[deviceIndex].n}
|
{coreData.devices[deviceIndex].tn})
|
||||||
</Typography>
|
</Typography>
|
||||||
|
|
||||||
<Grid container justifyContent="space-between">
|
<Grid container justifyContent="space-between">
|
||||||
|
|||||||
@@ -113,7 +113,8 @@ export interface DeviceShort {
|
|||||||
p?: number; // productid
|
p?: number; // productid
|
||||||
s: string; // shortname
|
s: string; // shortname
|
||||||
t?: number; // device type id
|
t?: number; // device type id
|
||||||
tn?: string; // device type internal name
|
tn?: string; // device type internal name (translated)
|
||||||
|
url?: string; // lowercase type name used in API URL
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Devices {
|
export interface Devices {
|
||||||
|
|||||||
@@ -642,55 +642,64 @@ const emsesp_devices = {
|
|||||||
i: 2,
|
i: 2,
|
||||||
s: 'RC20',
|
s: 'RC20',
|
||||||
t: 5,
|
t: 5,
|
||||||
tn: 'thermostat'
|
tn: 'Thermostat',
|
||||||
|
url: 'thermostat'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
i: 3,
|
i: 3,
|
||||||
s: 'GB125',
|
s: 'GB125',
|
||||||
t: 5,
|
t: 5,
|
||||||
tn: 'boiler'
|
tn: 'Boiler',
|
||||||
|
url: 'boiler'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
i: 4,
|
i: 4,
|
||||||
s: 'Moduline 1000',
|
s: 'Moduline 1000',
|
||||||
t: 5,
|
t: 5,
|
||||||
tn: 'thermostat'
|
tn: 'Thermostat',
|
||||||
|
url: 'thermostat'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
i: 5,
|
i: 5,
|
||||||
s: 'MM10',
|
s: 'MM10',
|
||||||
t: 7,
|
t: 7,
|
||||||
tn: 'mixer'
|
tn: 'Mixer Module',
|
||||||
|
url: 'mixer'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
i: 6,
|
i: 6,
|
||||||
s: 'SM10',
|
s: 'SM10',
|
||||||
t: 8,
|
t: 8,
|
||||||
tn: 'solar'
|
tn: 'Solar Module',
|
||||||
|
url: 'solar'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
i: 7,
|
i: 7,
|
||||||
s: 'Trendline HRC30',
|
s: 'Trendline HRC30',
|
||||||
t: 4,
|
t: 4,
|
||||||
tn: 'boiler'
|
tn: 'Boiler',
|
||||||
|
url: 'boiler'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
i: 8,
|
i: 8,
|
||||||
s: 'Bosch Compress 7000i AW Heat Pump',
|
s: 'Bosch Compress 7000i AW Heat Pump',
|
||||||
t: 5,
|
t: 5,
|
||||||
tn: 'boiler'
|
tn: 'Boiler',
|
||||||
|
url: 'boiler'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
i: 9,
|
i: 9,
|
||||||
s: 'RC100H',
|
s: 'RC100H',
|
||||||
t: 6,
|
t: 6,
|
||||||
tn: 'thermostat'
|
tn: 'Thermostat',
|
||||||
|
url: 'thermostat'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
i: 10,
|
i: 10,
|
||||||
s: 'RC310',
|
s: 'RC310',
|
||||||
t: 6,
|
t: 6,
|
||||||
tn: 'thermostat'
|
tn: 'Thermostat',
|
||||||
|
url: 'thermostat'
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -173,8 +173,9 @@ void WebCustomizationService::devices(AsyncWebServerRequest * request) {
|
|||||||
JsonObject obj = devices.add<JsonObject>();
|
JsonObject obj = devices.add<JsonObject>();
|
||||||
obj["i"] = emsdevice->unique_id(); // its unique id
|
obj["i"] = emsdevice->unique_id(); // its unique id
|
||||||
obj["s"] = emsdevice->name(); // custom name
|
obj["s"] = emsdevice->name(); // custom name
|
||||||
obj["tn"] = emsdevice->device_type_name(); // non-translated, lower-case
|
|
||||||
obj["t"] = emsdevice->device_type(); // internal device type ID
|
obj["t"] = emsdevice->device_type(); // internal device type ID
|
||||||
|
obj["tn"] = std::string(emsdevice->device_type_2_device_name_translated()); // translated device type name
|
||||||
|
obj["url"] = emsdevice->device_type_name(); // non-translated, lower-case, used for API URL
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user