Make OTA update live
This commit is contained in:
		@@ -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>
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user