diff --git a/interface/src/system/SystemStatusForm.tsx b/interface/src/system/SystemStatusForm.tsx
index 1fa18647b..2b5df2b00 100644
--- a/interface/src/system/SystemStatusForm.tsx
+++ b/interface/src/system/SystemStatusForm.tsx
@@ -33,15 +33,19 @@ import {
AuthenticatedContextProps,
withAuthenticatedContext
} from '../authentication';
+
import { RestFormProps, FormButton, ErrorButton } from '../components';
import { FACTORY_RESET_ENDPOINT, RESTART_ENDPOINT } from '../api';
import { SystemStatus, EspPlatform } from './types';
+import VersionCheck from './VersionCheck';
+
interface SystemStatusFormState {
confirmRestart: boolean;
confirmFactoryReset: boolean;
processing: boolean;
+ currentVersion?: string;
}
type SystemStatusFormProps = AuthenticatedContextProps &
@@ -61,6 +65,16 @@ class SystemStatusForm extends Component<
processing: false
};
+ onVersionCheck = (version: string) => {
+ this.setState({ currentVersion: version });
+ };
+
+ closeVersionCheck = () => {
+ this.setState({
+ currentVersion: undefined
+ });
+ };
+
createListItems() {
const { data } = this.props;
return (
@@ -75,7 +89,14 @@ class SystemStatusForm extends Component<
primary="EMS-ESP Version"
secondary={'v' + data.emsesp_version}
/>
+
+
@@ -304,9 +325,16 @@ class SystemStatusForm extends Component<
render() {
const me = this.props.authenticatedContext.me;
+ const { currentVersion } = this.state;
return (
{this.createListItems()}
+ {currentVersion && (
+
+ )}
void;
+}
+
+interface VersionCheckState {
+ latestVersion?: string;
+ latestVersionUrl?: string;
+ latestDevVersion?: string;
+ latestDevVersionUrl?: string;
+}
+
+class VersionCheck extends React.Component<
+ VersionCheckProps,
+ VersionCheckState
+> {
+ state: VersionCheckState = {};
+
+ componentDidMount() {
+ fetch(VERSIONCHECK_ENDPOINT)
+ .then((response) => {
+ if (response.status === 200) {
+ return response.json();
+ } else {
+ throw Error(
+ 'Unable to get version information. Check internet connection. (' +
+ response.status +
+ ')'
+ );
+ }
+ })
+ .then((data) => {
+ this.setState({ latestVersion: data.name });
+ this.setState({
+ latestVersionUrl: data.assets[1].browser_download_url
+ });
+ })
+ .catch((error) => {
+ this.props.enqueueSnackbar(
+ error.message || 'Problem getting response',
+ { variant: 'error' }
+ );
+ this.setState({ latestVersion: undefined });
+ this.props.onClose();
+ });
+
+ fetch(VERSIONCHECK_DEV_ENDPOINT)
+ .then((response) => {
+ if (response.status === 200) {
+ return response.json();
+ } else {
+ throw Error(
+ 'Unable to get version information. Check internet connection. (' +
+ response.status +
+ ')'
+ );
+ }
+ })
+ .then((data) => {
+ this.setState({ latestDevVersion: data.name.split(/\s+/).splice(-1) });
+ this.setState({
+ latestDevVersionUrl: data.assets[1].browser_download_url
+ });
+ })
+ .catch((error) => {
+ this.props.enqueueSnackbar(
+ error.message || 'Problem getting response',
+ { variant: 'error' }
+ );
+ this.setState({ latestDevVersion: undefined });
+ this.props.onClose();
+ });
+ }
+
+ render() {
+ const { onClose, currentVersion } = this.props;
+ const {
+ latestVersion,
+ latestVersionUrl,
+ latestDevVersion,
+ latestDevVersionUrl
+ } = this.state;
+ return (
+
+ );
+ }
+}
+
+export default withSnackbar(VersionCheck);