#1174 - include translated device type name in dropdown

This commit is contained in:
proddy
2024-07-03 11:19:41 +02:00
parent 0aa8e138b5
commit 307c196046
5 changed files with 34 additions and 21 deletions

View File

@@ -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}&nbsp;({device.tn})
</MenuItem> </MenuItem>
))} ))}
</TextField> </TextField>
@@ -612,7 +614,7 @@ const Customization: FC = () => {
{formatName(de, false)}&nbsp;( {formatName(de, false)}&nbsp;(
<Link <Link
target="_blank" target="_blank"
href={APIURL + selectedDeviceTypeName + '/' + de.id} href={APIURL + selectedDeviceTypeNameURL + '/' + de.id}
> >
{de.id} {de.id}
</Link> </Link>

View File

@@ -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}&nbsp;&#124;&nbsp; {coreData.devices[deviceIndex].n}&nbsp;(
{coreData.devices[deviceIndex].n} {coreData.devices[deviceIndex].tn})
</Typography> </Typography>
<Grid container justifyContent="space-between"> <Grid container justifyContent="space-between">

View File

@@ -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 {

View File

@@ -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'
}, },
] ]
}; };

View File

@@ -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
} }
} }