Merge branch 'release/0.0.3'

This commit is contained in:
jwu-fisker
2022-10-18 16:50:04 -07:00
17 changed files with 185 additions and 14 deletions

View File

@@ -2,4 +2,4 @@ REACT_APP_AUTH_SERVICE_URL=https://stg-gw.cloud.fiskerinc.com/compute_auth
REACT_APP_CERT_SERVICE_URL=https://stg-gw.cloud.fiskerinc.com/certificate REACT_APP_CERT_SERVICE_URL=https://stg-gw.cloud.fiskerinc.com/certificate
REACT_APP_UPLOAD_SERVICE_URL=https://stg-gw.cloud.fiskerinc.com/ota_update REACT_APP_UPLOAD_SERVICE_URL=https://stg-gw.cloud.fiskerinc.com/ota_update
REACT_APP_AUTH_CALLBACK_URL=https://stg-ota-admin.cloud.fiskerinc.com REACT_APP_AUTH_CALLBACK_URL=https://stg-ota-admin.cloud.fiskerinc.com
REACT_APP_SUPERSET_URL=https://stg-superset.cloud.fiskerinc.com/superset/dashboard/6/?native_filters_key=XBwRgJIvmxhqBhqlz45kuTnXc1iUY_M_ovzXCzXy5_l-AOFAXEaGLWpYIsfrEHGR REACT_APP_SUPERSET_URL=https://stg-superset.cloud.fiskerinc.com/superset/dashboard/11/?native_filters_key=Vsj5MqKEPxPnyCgVzFWSSI3E_KgEJxD30afm_URlamPqBi6ypNKsaQ90YhQ6Fc54

View File

@@ -124,7 +124,7 @@ exports[`CANFiltersAdd Render 1`] = `
for="interval" for="interval"
id="interval-label" id="interval-label"
> >
Interval Interval (ms)
</label> </label>
<div <div
class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-fullWidth MuiInputBase-formControl" class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-fullWidth MuiInputBase-formControl"
@@ -146,7 +146,7 @@ exports[`CANFiltersAdd Render 1`] = `
class="PrivateNotchedOutline-legendLabelled-0" class="PrivateNotchedOutline-legendLabelled-0"
> >
<span> <span>
Interval Interval (ms)
</span> </span>
</legend> </legend>
</fieldset> </fieldset>

View File

@@ -93,7 +93,7 @@ const MainForm = () => {
<TextField <TextField
id="interval" id="interval"
name="interval" name="interval"
label="Interval" label="Interval (ms)"
variant="outlined" variant="outlined"
margin="normal" margin="normal"
inputProps={{ inputProps={{

View File

@@ -172,6 +172,29 @@ exports[`CANFiltersTable Render 1`] = `
</svg> </svg>
</span> </span>
</th> </th>
<th
class="MuiTableCell-root MuiTableCell-head MuiTableCell-alignCenter"
scope="col"
>
<span
aria-disabled="false"
class="MuiButtonBase-root MuiTableSortLabel-root"
role="button"
tabindex="0"
>
Edge mask
<svg
aria-hidden="true"
class="MuiSvgIcon-root MuiTableSortLabel-icon MuiTableSortLabel-iconDirectionAsc"
focusable="false"
viewBox="0 0 24 24"
>
<path
d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z"
/>
</svg>
</span>
</th>
<th <th
class="MuiTableCell-root MuiTableCell-head MuiTableCell-alignCenter" class="MuiTableCell-root MuiTableCell-head MuiTableCell-alignCenter"
scope="col" scope="col"
@@ -203,6 +226,9 @@ exports[`CANFiltersTable Render 1`] = `
href="/fleet/undefined" href="/fleet/undefined"
/> />
</td> </td>
<td
class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter"
/>
<td <td
class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter" class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter"
> >
@@ -263,6 +289,9 @@ exports[`CANFiltersTable Render 1`] = `
href="/fleet/undefined" href="/fleet/undefined"
/> />
</td> </td>
<td
class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter"
/>
<td <td
class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter" class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter"
> >
@@ -323,6 +352,9 @@ exports[`CANFiltersTable Render 1`] = `
href="/fleet/undefined" href="/fleet/undefined"
/> />
</td> </td>
<td
class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter"
/>
<td <td
class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter" class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter"
> >

View File

@@ -29,6 +29,7 @@ import SearchField from "../../Controls/SearchField";
import { logger } from "../../../services/monitoring"; import { logger } from "../../../services/monitoring";
import { Roles, hasRole } from "../../../utils/roles"; import { Roles, hasRole } from "../../../utils/roles";
import {useLocalStorage} from "../../useLocalStorage"; import {useLocalStorage} from "../../useLocalStorage";
import {trimIfMoreThan} from "../../../utils/strings";
const tableColumns = [ const tableColumns = [
{ {
@@ -43,6 +44,10 @@ const tableColumns = [
id: "fleet", id: "fleet",
label: "Fleet" label: "Fleet"
}, },
{
id: "edge_mask",
label: "Edge mask"
},
{ {
id: "", id: "",
label: "Actions" label: "Actions"
@@ -121,6 +126,10 @@ const MainForm = ({ vin }) => {
}; };
const Actions = (row) => { const Actions = (row) => {
if(row.fleet != null) {
return
}
let actions = []; let actions = [];
if (hasRole([Roles.CREATE], groups)) { if (hasRole([Roles.CREATE], groups)) {
actions.push({ actions.push({
@@ -187,6 +196,7 @@ const MainForm = ({ vin }) => {
<TableCell align="center"> <TableCell align="center">
<Link to={`/fleet/${row.fleet}`}>{row.fleet}</Link> <Link to={`/fleet/${row.fleet}`}>{row.fleet}</Link>
</TableCell> </TableCell>
<TableCell align="center">{trimIfMoreThan(row.edge_mask, 15, "...")}</TableCell>
<TableCell align="center">{Actions(row)}</TableCell> <TableCell align="center">{Actions(row)}</TableCell>
</TableRow> </TableRow>
))} ))}

View File

@@ -125,7 +125,7 @@ exports[`CANFiltersUpdate Render 1`] = `
for="interval" for="interval"
id="interval-label" id="interval-label"
> >
Interval Interval (ms)
<span <span
aria-hidden="true" aria-hidden="true"
class="MuiFormLabel-asterisk MuiInputLabel-asterisk" class="MuiFormLabel-asterisk MuiInputLabel-asterisk"
@@ -155,7 +155,7 @@ exports[`CANFiltersUpdate Render 1`] = `
class="PrivateNotchedOutline-legendLabelled-0" class="PrivateNotchedOutline-legendLabelled-0"
> >
<span> <span>
Interval Interval (ms)
 *  *
</span> </span>
</legend> </legend>

View File

@@ -24,6 +24,7 @@ const MainForm = () => {
const vin = queries.get("vin") ?? "" const vin = queries.get("vin") ?? ""
const canID = queries.get("can_id") ?? "" const canID = queries.get("can_id") ?? ""
const interval = queries.get("interval") ?? "" const interval = queries.get("interval") ?? ""
// const edge_mask = queries.get("edge_mask") ?? ""
useEffect(() => { useEffect(() => {
setTitle("Update CAN Filter"); setTitle("Update CAN Filter");
@@ -95,7 +96,7 @@ const MainForm = () => {
<TextField <TextField
id="interval" id="interval"
name="interval" name="interval"
label="Interval" label="Interval (ms)"
variant="outlined" variant="outlined"
margin="normal" margin="normal"
inputProps={{ inputProps={{

View File

@@ -16,6 +16,7 @@ const MainForm = () => {
const classes = useStyles(); const classes = useStyles();
const [search, setSearch] = useState(""); const [search, setSearch] = useState("");
const [online, setOnline] = useState(false); const [online, setOnline] = useState(false);
const [onlineHMI, setOnlineHMI] = useState(false);
const { setTitle, setSitePath } = useStatusContext(); const { setTitle, setSitePath } = useStatusContext();
const { const {
token: { token: {
@@ -31,6 +32,10 @@ const MainForm = () => {
setOnline(event.target.checked); setOnline(event.target.checked);
} }
const handleOnlineHMI = (event) => {
setOnlineHMI(event.target.checked);
}
useEffect(() => { useEffect(() => {
setTitle("Vehicles"); setTitle("Vehicles");
setSitePath([]); setSitePath([]);
@@ -58,6 +63,14 @@ const MainForm = () => {
/> />
} label="Only online" /> } label="Only online" />
</MenuItem> </MenuItem>
<MenuItem>
<FormControlLabel control={
<Checkbox
checked={onlineHMI}
onChange={handleOnlineHMI}
/>
} label="Only online HMI" />
</MenuItem>
</OptionsDropdown> </OptionsDropdown>
</Grid> </Grid>
<Grid item md={2} className={classes.textRightAlign} /> <Grid item md={2} className={classes.textRightAlign} />
@@ -66,7 +79,7 @@ const MainForm = () => {
classes={classes} classes={classes}
token={token} token={token}
multiSelect={false} multiSelect={false}
search={{ search, online: online? true : null}} search={{ search, online: online? true : null, online_hmi: onlineHMI? true : null }}
/> />
</div> </div>
); );

View File

@@ -171,6 +171,29 @@ exports[`CANFiltersTab Render 1`] = `
</svg> </svg>
</span> </span>
</th> </th>
<th
class="MuiTableCell-root MuiTableCell-head MuiTableCell-alignCenter"
scope="col"
>
<span
aria-disabled="false"
class="MuiButtonBase-root MuiTableSortLabel-root"
role="button"
tabindex="0"
>
Edge mask
<svg
aria-hidden="true"
class="MuiSvgIcon-root MuiTableSortLabel-icon MuiTableSortLabel-iconDirectionAsc"
focusable="false"
viewBox="0 0 24 24"
>
<path
d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z"
/>
</svg>
</span>
</th>
<th <th
class="MuiTableCell-root MuiTableCell-head MuiTableCell-alignCenter" class="MuiTableCell-root MuiTableCell-head MuiTableCell-alignCenter"
scope="col" scope="col"
@@ -202,6 +225,9 @@ exports[`CANFiltersTab Render 1`] = `
href="/fleet/undefined" href="/fleet/undefined"
/> />
</td> </td>
<td
class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter"
/>
<td <td
class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter" class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter"
> >
@@ -262,6 +288,9 @@ exports[`CANFiltersTab Render 1`] = `
href="/fleet/undefined" href="/fleet/undefined"
/> />
</td> </td>
<td
class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter"
/>
<td <td
class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter" class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter"
> >
@@ -322,6 +351,9 @@ exports[`CANFiltersTab Render 1`] = `
href="/fleet/undefined" href="/fleet/undefined"
/> />
</td> </td>
<td
class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter"
/>
<td <td
class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter" class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter"
> >

View File

@@ -124,7 +124,7 @@ exports[`FleetCANFilterAdd Render 1`] = `
for="interval" for="interval"
id="interval-label" id="interval-label"
> >
Interval Interval (ms)
</label> </label>
<div <div
class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-fullWidth MuiInputBase-formControl" class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-fullWidth MuiInputBase-formControl"
@@ -146,7 +146,7 @@ exports[`FleetCANFilterAdd Render 1`] = `
class="PrivateNotchedOutline-legendLabelled-0" class="PrivateNotchedOutline-legendLabelled-0"
> >
<span> <span>
Interval Interval (ms)
</span> </span>
</legend> </legend>
</fieldset> </fieldset>

View File

@@ -93,7 +93,7 @@ const MainForm = () => {
<TextField <TextField
id="interval" id="interval"
name="interval" name="interval"
label="Interval" label="Interval (ms)"
variant="outlined" variant="outlined"
margin="normal" margin="normal"
inputProps={{ inputProps={{

View File

@@ -150,6 +150,29 @@ exports[`FleetCANFiltersTable Render 1`] = `
</svg> </svg>
</span> </span>
</th> </th>
<th
class="MuiTableCell-root MuiTableCell-head MuiTableCell-alignCenter"
scope="col"
>
<span
aria-disabled="false"
class="MuiButtonBase-root MuiTableSortLabel-root"
role="button"
tabindex="0"
>
Edge mask
<svg
aria-hidden="true"
class="MuiSvgIcon-root MuiTableSortLabel-icon MuiTableSortLabel-iconDirectionAsc"
focusable="false"
viewBox="0 0 24 24"
>
<path
d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z"
/>
</svg>
</span>
</th>
<th <th
class="MuiTableCell-root MuiTableCell-head MuiTableCell-alignCenter" class="MuiTableCell-root MuiTableCell-head MuiTableCell-alignCenter"
scope="col" scope="col"
@@ -174,6 +197,9 @@ exports[`FleetCANFiltersTable Render 1`] = `
> >
789 789
</td> </td>
<td
class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter"
/>
<td <td
class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter" class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter"
> >
@@ -227,6 +253,9 @@ exports[`FleetCANFiltersTable Render 1`] = `
> >
1000 1000
</td> </td>
<td
class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter"
/>
<td <td
class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter" class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter"
> >
@@ -280,6 +309,9 @@ exports[`FleetCANFiltersTable Render 1`] = `
> >
1 1
</td> </td>
<td
class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter"
/>
<td <td
class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter" class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter"
> >

View File

@@ -24,6 +24,7 @@ import SearchField from "../../../../Controls/SearchField";
import { logger } from "../../../../../services/monitoring"; import { logger } from "../../../../../services/monitoring";
import { Roles, hasRole } from "../../../../../utils/roles"; import { Roles, hasRole } from "../../../../../utils/roles";
import {useLocalStorage} from "../../../../useLocalStorage"; import {useLocalStorage} from "../../../../useLocalStorage";
import {trimIfMoreThan} from "../../../../../utils/strings"
const tableColumns = [ const tableColumns = [
{ {
@@ -34,6 +35,10 @@ const tableColumns = [
id: "interval", id: "interval",
label: "Interval (ms)" label: "Interval (ms)"
}, },
{
id: "edge_mask",
label: "Edge mask"
},
{ {
id: "", id: "",
label: "Actions" label: "Actions"
@@ -173,6 +178,7 @@ const MainForm = ({ name }) => {
<TableRow key={row.can_id}> <TableRow key={row.can_id}>
<TableCell align="center">{row.can_id}</TableCell> <TableCell align="center">{row.can_id}</TableCell>
<TableCell align="center">{row.interval}</TableCell> <TableCell align="center">{row.interval}</TableCell>
<TableCell align="center">{trimIfMoreThan(row.edge_mask, 15, "...")}</TableCell>
<TableCell align="center">{Actions(row)}</TableCell> <TableCell align="center">{Actions(row)}</TableCell>
</TableRow> </TableRow>
))} ))}

View File

@@ -125,7 +125,7 @@ exports[`FleetCANFilterUpdate Render 1`] = `
for="interval" for="interval"
id="interval-label" id="interval-label"
> >
Interval Interval (ms)
<span <span
aria-hidden="true" aria-hidden="true"
class="MuiFormLabel-asterisk MuiInputLabel-asterisk" class="MuiFormLabel-asterisk MuiInputLabel-asterisk"
@@ -155,7 +155,7 @@ exports[`FleetCANFilterUpdate Render 1`] = `
class="PrivateNotchedOutline-legendLabelled-0" class="PrivateNotchedOutline-legendLabelled-0"
> >
<span> <span>
Interval Interval (ms)
 *  *
</span> </span>
</legend> </legend>

View File

@@ -97,7 +97,7 @@ const MainForm = () => {
<TextField <TextField
id="interval" id="interval"
name="interval" name="interval"
label="Interval" label="Interval (ms)"
variant="outlined" variant="outlined"
margin="normal" margin="normal"
inputProps={{ inputProps={{

View File

@@ -149,6 +149,29 @@ exports[`CANFiltersTab Render 1`] = `
</svg> </svg>
</span> </span>
</th> </th>
<th
class="MuiTableCell-root MuiTableCell-head MuiTableCell-alignCenter"
scope="col"
>
<span
aria-disabled="false"
class="MuiButtonBase-root MuiTableSortLabel-root"
role="button"
tabindex="0"
>
Edge mask
<svg
aria-hidden="true"
class="MuiSvgIcon-root MuiTableSortLabel-icon MuiTableSortLabel-iconDirectionAsc"
focusable="false"
viewBox="0 0 24 24"
>
<path
d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z"
/>
</svg>
</span>
</th>
<th <th
class="MuiTableCell-root MuiTableCell-head MuiTableCell-alignCenter" class="MuiTableCell-root MuiTableCell-head MuiTableCell-alignCenter"
scope="col" scope="col"
@@ -173,6 +196,9 @@ exports[`CANFiltersTab Render 1`] = `
> >
789 789
</td> </td>
<td
class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter"
/>
<td <td
class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter" class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter"
> >
@@ -226,6 +252,9 @@ exports[`CANFiltersTab Render 1`] = `
> >
1000 1000
</td> </td>
<td
class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter"
/>
<td <td
class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter" class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter"
> >
@@ -279,6 +308,9 @@ exports[`CANFiltersTab Render 1`] = `
> >
1 1
</td> </td>
<td
class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter"
/>
<td <td
class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter" class="MuiTableCell-root MuiTableCell-body MuiTableCell-alignCenter"
> >

13
src/utils/strings.js Normal file
View File

@@ -0,0 +1,13 @@
export function trimIfMoreThan(maybeString, maxLength = 20, sfx = "") {
if (typeof maybeString == "string" && maybeString !== "") {
let toAppSfx = sfx
let toTrimLnth = maxLength - toAppSfx.length
if (maybeString.length <= maxLength) {
toAppSfx = ""
toTrimLnth = maxLength
}
return maybeString.substring(0, toTrimLnth) + toAppSfx
}
return ""
}