1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00
Signed-off-by: Jim Ehrismann <jehrismann@mirantis.com>
This commit is contained in:
Jim Ehrismann 2022-06-08 22:39:56 -04:00
parent 7cab54e6de
commit 5cae38406a
2 changed files with 30 additions and 17 deletions

View File

@ -4,7 +4,7 @@
*/
import { getInjectable } from "@ogre-tools/injectable";
import { makeObservable, observable } from "mobx";
export type AutoUpdateStateName = "checking" | "available" | "not-available" | "done" | "downloading" | "download-failed" | "download-succeeded" | "idle";
let timerId: NodeJS.Timeout;
@ -19,7 +19,7 @@ export class AutoUpdateState {
this._state = state;
}
get name() : AutoUpdateStateName {
get name(): AutoUpdateStateName {
return this._state;
}
@ -29,11 +29,11 @@ export class AutoUpdateState {
this.triggerIdle();
}
get version() : string | undefined {
get version(): string | undefined {
return this._version;
}
set version(version: string | undefined ) {
set version(version: string | undefined) {
this._version = version;
this.triggerIdle();
@ -42,18 +42,18 @@ export class AutoUpdateState {
private triggerIdle(): void {
clearTimeout(timerId);
switch(this.name) {
switch (this.name) {
case "checking":
case "available":
case "downloading":
case "idle":
break;
case "done":
case "not-available":
case "download-failed":
case "download-succeeded":
timerId = setTimeout(() => this.name = "idle", 5000);
timerId = setTimeout(() => this.name = "idle", 5000);
break;
}
}
@ -63,5 +63,5 @@ const AutoUpdateStateInjectable = getInjectable({
id: "auto-update-state",
instantiate: () => new AutoUpdateState("idle"),
});
export default AutoUpdateStateInjectable;

View File

@ -8,7 +8,8 @@ import React from "react";
import AutoUpdateStateInjectable from "../../../common/auto-update/auto-update-state.injectable";
import type { AutoUpdateState } from "../../../common/auto-update/auto-update-state.injectable";
import { Spinner } from "../spinner";
import progressOfUpdateDownloadInjectable, { ProgressOfDownload } from "../../../common/application-update/progress-of-update-download/progress-of-update-download.injectable";
import progressOfUpdateDownloadInjectable from "../../../common/application-update/progress-of-update-download/progress-of-update-download.injectable";
import type { ProgressOfDownload } from "../../../common/application-update/progress-of-update-download/progress-of-update-download.injectable";
import type { SyncBox } from "../../../common/utils/sync-box/sync-box-injection-token";
interface Dependencies {
@ -16,14 +17,24 @@ interface Dependencies {
progressOfUpdateDownload: SyncBox<ProgressOfDownload>;
}
const checking = () => <><Spinner/><div>{"Checking for updates..."}</div></>;
const checking = () => (
<>
<Spinner/>
<div>{"Checking for updates..."}</div>
</>
);
const available = () => <div>{"Update is available"}</div>;
const notAvailable = () => <div>{"No new updates available"}</div>;
const downloading = (state: AutoUpdateState, percentDone: number) => {
const {version } = state;
const { version } = state;
if ( percentDone === 0 ) {
return <><div>{`Download for version ${version} started `}</div><Spinner/></>;
return (
<>
<div>{`Download for version ${version} started `}</div>
<Spinner/>
</>
);
}
if ( percentDone < 100 ) {
@ -52,9 +63,11 @@ export const NonInjectedAutoUpdateComponent = observer(({ state, progressOfUpdat
case "not-available":
return notAvailable();
case "downloading":
case "downloading": {
const roundedPercentage = Math.round(progressOfUpdateDownload.value.get().percentage);
return downloading(state, roundedPercentage);
}
case "done":
return done();
@ -62,10 +75,10 @@ export const NonInjectedAutoUpdateComponent = observer(({ state, progressOfUpdat
case "download-failed":
return downloadFailed(state.version);
case "download-succeeded":
return downloadSucceeded(state.version);
case "idle":
case "download-succeeded":
return downloadSucceeded(state.version);
case "idle":
return idle();
}