252 lines
7.4 KiB
JavaScript
252 lines
7.4 KiB
JavaScript
import {Grid, Slider, Switch} from "@material-ui/core";
|
|
import Typography from "@material-ui/core/Typography";
|
|
|
|
const tempMarks = [...[{value: 0, label: "Off"}, {value: 1, label: "On"},],
|
|
...Array.from({length: 26}, (_, i) => {
|
|
return {value: i + 2, label: `${i + 15}°C`}
|
|
})];
|
|
|
|
const valuetext = (value) => {
|
|
return `${value}`;
|
|
}
|
|
|
|
const highMidLowOffMarks = [{
|
|
value: 3, label: "High",
|
|
}, {
|
|
value: 2, label: "Mid",
|
|
}, {
|
|
value: 1, label: "Low",
|
|
}, {
|
|
value: 0, label: "Off",
|
|
},]
|
|
|
|
const precondMarks = [
|
|
{value: 0, label: "Battery"},
|
|
{value: 1, label: "All"},
|
|
{value: 2, label: "Climate"},
|
|
{value: 3, label: "Stop"},
|
|
]
|
|
|
|
const labelFunc = (marks) => (value) => marks.find(mark => mark.value === value)?.label;
|
|
|
|
const labelRemoved = (marks) => Array.from(marks).map((mark) => {
|
|
return {value: mark.value}
|
|
})
|
|
|
|
const Commands = [
|
|
{value: "doors_lock", label: "Lock doors"},
|
|
{value: "doors_unlock", label: "Unlock doors"},
|
|
{value: "vent_windows", label: "Vent windows"},
|
|
{value: "close_windows", label: "Close windows"},
|
|
{value: "flash_headlights", label: "Flash headlights"},
|
|
{value: "trunk_close", label: "Close trunk"},
|
|
{value: "alert", label: "Alert"},
|
|
{
|
|
value: "precondition", label: "Precondition", params: {
|
|
dataFunc: (val, handleValChange) => <span>
|
|
<Typography id="precondition-slider" gutterBottom>
|
|
Set driver seat preheat
|
|
</Typography>
|
|
<Slider
|
|
valueLabelFormat={labelFunc(precondMarks)}
|
|
getAriaValueText={labelFunc(precondMarks)}
|
|
defaultValue={0}
|
|
value={val}
|
|
aria-labelledby="precondition-slider"
|
|
valueLabelDisplay="auto"
|
|
step={null}
|
|
min={0}
|
|
max={3}
|
|
marks={precondMarks}
|
|
size="small"
|
|
onChange={handleValChange}
|
|
/>
|
|
</span>,
|
|
}
|
|
},
|
|
{
|
|
value: "california_mode", label: "California mode", params: {
|
|
dataFunc: (val, handleValChange) => {
|
|
if (typeof val !== "boolean") {
|
|
val = false
|
|
}
|
|
return <span>
|
|
<Typography id="california_mode-slider" gutterBottom>
|
|
Set California mode
|
|
</Typography>
|
|
<Typography component="div">
|
|
<Grid component="label" container alignItems="center" spacing={1}>
|
|
<Grid item>Off</Grid>
|
|
<Grid item>
|
|
<Switch checked={val} onChange={handleValChange} name="checkedC"/>
|
|
</Grid>
|
|
<Grid item>On</Grid>
|
|
</Grid>
|
|
</Typography>
|
|
</span>
|
|
},
|
|
},
|
|
}, {
|
|
value: "trunk_open", label: "Open trunk", params: {
|
|
dataFunc: (val, handleValChange) => <span>
|
|
<Typography id="trunk_open-slider" gutterBottom>
|
|
Set trunk's openness level
|
|
</Typography>
|
|
<Slider
|
|
defaultValue={1}
|
|
value={val}
|
|
getAriaValueText={valuetext}
|
|
aria-label="Open trunk"
|
|
aria-labelledby="trunk_open-slider"
|
|
valueLabelDisplay="auto"
|
|
step={1}
|
|
marks
|
|
size="small"
|
|
min={1}
|
|
max={5}
|
|
onChange={handleValChange}
|
|
/>
|
|
</span>,
|
|
}
|
|
}, {
|
|
value: "temp_cabin", label: "Set cabin temperature(°C)", params: {
|
|
dataFunc: (val, handleValChange) => {
|
|
return <span>
|
|
<Typography id="temp_cabin-slider" gutterBottom>
|
|
Set cabin temperature
|
|
</Typography>
|
|
<Slider
|
|
valueLabelFormat={labelFunc(tempMarks)}
|
|
getAriaValueText={labelFunc(tempMarks)}
|
|
defaultValue={0}
|
|
value={val}
|
|
aria-labelledby="temp_cabin-slider"
|
|
valueLabelDisplay="auto"
|
|
step={1}
|
|
min={0}
|
|
max={27}
|
|
marks={labelRemoved(tempMarks)}
|
|
size="small"
|
|
onChange={handleValChange}
|
|
/>
|
|
</span>
|
|
}
|
|
}
|
|
}, {
|
|
value: "defrost", label: "Defrost", params: {
|
|
dataFunc: (val, handleValChange) => {
|
|
if (typeof val !== "boolean") {
|
|
val = false
|
|
}
|
|
return <span>
|
|
<Typography id="defrost-slider" gutterBottom>
|
|
Set defrost
|
|
</Typography>
|
|
<Typography component="div">
|
|
<Grid component="label" container alignItems="center" spacing={1}>
|
|
<Grid item>Off</Grid>
|
|
<Grid item>
|
|
<Switch checked={val} onChange={handleValChange} name="checkedC"/>
|
|
</Grid>
|
|
<Grid item>On</Grid>
|
|
</Grid>
|
|
</Typography>
|
|
</span>
|
|
},
|
|
|
|
},
|
|
}, {
|
|
value: "driver_seat_preheat", label: "Driver seat preheat", params: {
|
|
dataFunc: (val, handleValChange) => <span>
|
|
<Typography id="driver_seat_preheat-slider" gutterBottom>
|
|
Set driver seat preheat
|
|
</Typography>
|
|
<Slider
|
|
valueLabelFormat={labelFunc(highMidLowOffMarks)}
|
|
getAriaValueText={labelFunc(highMidLowOffMarks)}
|
|
defaultValue={0}
|
|
value={val}
|
|
aria-labelledby="driver_seat_preheat-slider"
|
|
valueLabelDisplay="auto"
|
|
step={null}
|
|
min={0}
|
|
max={3}
|
|
marks={highMidLowOffMarks}
|
|
size="small"
|
|
onChange={handleValChange}
|
|
/>
|
|
</span>,
|
|
}
|
|
}, {
|
|
value: "passenger_seat_preheat", label: "Preheat passenger seat", params: {
|
|
dataFunc: (val, handleValChange) => <span>
|
|
<Typography id="passenger_seat_preheat-slider" gutterBottom>
|
|
Set passenger seat preheat
|
|
</Typography>
|
|
<Slider
|
|
valueLabelFormat={labelFunc(highMidLowOffMarks)}
|
|
getAriaValueText={labelFunc(highMidLowOffMarks)}
|
|
defaultValue={0}
|
|
value={val}
|
|
aria-labelledby="passenger_seat_preheat-slider"
|
|
valueLabelDisplay="auto"
|
|
step={null}
|
|
min={0}
|
|
max={3}
|
|
marks={highMidLowOffMarks}
|
|
size="small"
|
|
onChange={handleValChange}
|
|
/>
|
|
</span>,
|
|
}
|
|
}, {
|
|
value: "steering_wheel_preheat", label: "Preheat Steering wheel", params: {
|
|
dataFunc: (val, handleValChange) => {
|
|
if (typeof val !== "boolean") {
|
|
val = false
|
|
}
|
|
|
|
return <span>
|
|
<Typography id="steering_wheel_preheat-slider" gutterBottom>
|
|
Set steering wheel preheat on/off
|
|
</Typography>
|
|
<Typography component="div">
|
|
<Grid component="label" container alignItems="center" spacing={1}>
|
|
<Grid item>Off</Grid>
|
|
<Grid item>
|
|
<Switch checked={val} onChange={handleValChange} name="checkedC"/>
|
|
</Grid>
|
|
<Grid item>On</Grid>
|
|
</Grid>
|
|
</Typography>
|
|
</span>
|
|
},
|
|
|
|
},
|
|
}, {
|
|
value: "charging", label: "Charging", params: {
|
|
dataFunc: (val, handleValChange) => {
|
|
if (typeof val !== "boolean") {
|
|
val = false
|
|
}
|
|
return <span>
|
|
<Typography id="charging-slider" gutterBottom>
|
|
Set charging on/off
|
|
</Typography>
|
|
<Typography component="div">
|
|
<Grid component="label" container alignItems="center" spacing={1}>
|
|
<Grid item>Off</Grid>
|
|
<Grid item>
|
|
<Switch checked={val} onChange={handleValChange} name="checkedC"/>
|
|
</Grid>
|
|
<Grid item>On</Grid>
|
|
</Grid>
|
|
</Typography>
|
|
</span>
|
|
},
|
|
|
|
},
|
|
}]
|
|
|
|
export default Commands;
|