Make OTA update live
This commit is contained in:
parent
386f0439e4
commit
e7190bab71
@ -65,4 +65,23 @@ export class OTAAPI {
|
|||||||
})
|
})
|
||||||
).data;
|
).data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set desired version for one or mor devices
|
||||||
|
*/
|
||||||
|
static async SetDesiredVersion(
|
||||||
|
update: OTAUpdate,
|
||||||
|
all_devices: boolean,
|
||||||
|
devices?: string[]
|
||||||
|
): Promise<void> {
|
||||||
|
await APIClient.exec({
|
||||||
|
method: "POST",
|
||||||
|
uri: "/ota/set_desired_version",
|
||||||
|
jsonData: {
|
||||||
|
version: update.version,
|
||||||
|
platform: update.platform,
|
||||||
|
devices: all_devices ? undefined : devices!,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,13 +16,22 @@ import {
|
|||||||
} from "@mui/material";
|
} from "@mui/material";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { Device, DeviceApi } from "../api/DeviceApi";
|
import { Device, DeviceApi } from "../api/DeviceApi";
|
||||||
import { OTAUpdate } from "../api/OTAApi";
|
import { OTAAPI, OTAUpdate } from "../api/OTAApi";
|
||||||
|
import { useAlert } from "../hooks/context_providers/AlertDialogProvider";
|
||||||
|
import { useConfirm } from "../hooks/context_providers/ConfirmDialogProvider";
|
||||||
|
import { useLoadingMessage } from "../hooks/context_providers/LoadingMessageProvider";
|
||||||
|
import { useSnackbar } from "../hooks/context_providers/SnackbarProvider";
|
||||||
import { AsyncWidget } from "../widgets/AsyncWidget";
|
import { AsyncWidget } from "../widgets/AsyncWidget";
|
||||||
|
|
||||||
export function DeployOTAUpdateDialogProvider(p: {
|
export function DeployOTAUpdateDialogProvider(p: {
|
||||||
update: OTAUpdate;
|
update: OTAUpdate;
|
||||||
onClose: () => void;
|
onClose: () => void;
|
||||||
}): React.ReactElement {
|
}): React.ReactElement {
|
||||||
|
const loadingMessage = useLoadingMessage();
|
||||||
|
const alert = useAlert();
|
||||||
|
const confirm = useConfirm();
|
||||||
|
const snackbar = useSnackbar();
|
||||||
|
|
||||||
const [devicesList, setDevicesList] = React.useState<Device[] | undefined>();
|
const [devicesList, setDevicesList] = React.useState<Device[] | undefined>();
|
||||||
|
|
||||||
const loadDevicesList = async () => {
|
const loadDevicesList = async () => {
|
||||||
@ -34,7 +43,29 @@ export function DeployOTAUpdateDialogProvider(p: {
|
|||||||
const [allDevices, setAllDevices] = React.useState(false);
|
const [allDevices, setAllDevices] = React.useState(false);
|
||||||
const [selectedDevices, setSelectedDevices] = React.useState<string[]>([]);
|
const [selectedDevices, setSelectedDevices] = React.useState<string[]>([]);
|
||||||
|
|
||||||
const startDeployment = () => {};
|
const startDeployment = async () => {
|
||||||
|
if (
|
||||||
|
allDevices &&
|
||||||
|
!(await confirm(
|
||||||
|
"Do you really want to deploy the update to all devices?"
|
||||||
|
))
|
||||||
|
)
|
||||||
|
return;
|
||||||
|
try {
|
||||||
|
loadingMessage.show("Applying OTA update...");
|
||||||
|
|
||||||
|
await OTAAPI.SetDesiredVersion(p.update, allDevices, selectedDevices);
|
||||||
|
|
||||||
|
snackbar("The update was successfully applied!");
|
||||||
|
p.onClose();
|
||||||
|
} catch (e) {
|
||||||
|
console.error("Failed to deploy the udpate!", e);
|
||||||
|
alert(`Failed to deploy the udpate! ${e}`);
|
||||||
|
} finally {
|
||||||
|
loadingMessage.hide();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Dialog open={true} onClose={p.onClose}>
|
<Dialog open={true} onClose={p.onClose}>
|
||||||
<DialogTitle>
|
<DialogTitle>
|
||||||
|
Loading…
Reference in New Issue
Block a user