diff --git a/src/renderer/components/commands-runner.tsx b/src/renderer/components/commands-runner.tsx
index fe89978bc4..7e709ed7b6 100644
--- a/src/renderer/components/commands-runner.tsx
+++ b/src/renderer/components/commands-runner.tsx
@@ -3,7 +3,7 @@ import * as React from 'react';
import { Button, ButtonProps, Spinner } from '@blueprintjs/core';
import { observer } from 'mobx-react';
-import { InstallState } from '../../interfaces';
+import { InstallState, VersionSource } from '../../interfaces';
import { AppState } from '../state';
interface RunnerProps {
@@ -29,7 +29,7 @@ export const Runner = observer(
isOnline,
} = this.props.appState;
- const state = currentElectronVersion?.state;
+ const { downloadProgress, source, state } = currentElectronVersion;
const props: ButtonProps = { disabled: true };
if ([downloading, missing].includes(state) && !isOnline) {
@@ -41,12 +41,7 @@ export const Runner = observer(
switch (state) {
case downloading: {
props.text = 'Downloading';
- props.icon = (
-
- );
+ props.icon = ;
break;
}
case installing: {
@@ -72,6 +67,13 @@ export const Runner = observer(
}
break;
}
+ case missing: {
+ if (source === VersionSource.local) {
+ props.text = 'Unavailable';
+ props.icon = 'issue';
+ break;
+ }
+ }
default: {
props.text = 'Checking status';
props.icon = ;
diff --git a/src/renderer/components/version-select.tsx b/src/renderer/components/version-select.tsx
index 752e3355db..12150386fb 100644
--- a/src/renderer/components/version-select.tsx
+++ b/src/renderer/components/version-select.tsx
@@ -66,8 +66,9 @@ const itemListRenderer: ItemListRenderer = ({
* @returns {string}
*/
export function getItemLabel({ source, state, name }: RunnableVersion): string {
+ // If a version is local, either it's there or it's not.
if (source === VersionSource.local) {
- return name || 'Local';
+ return state === InstallState.missing ? 'Unavailable' : name || 'Local';
}
const installStateLabels: Record = {
@@ -87,7 +88,12 @@ export function getItemLabel({ source, state, name }: RunnableVersion): string {
* @param {RunnableVersion} { state }
* @returns {IconName}
*/
-export function getItemIcon({ state }: RunnableVersion): IconName {
+export function getItemIcon({ source, state }: RunnableVersion): IconName {
+ // If a version is local, either it's there or it's not.
+ if (source === VersionSource.local) {
+ return state === InstallState.missing ? 'issue' : 'saved';
+ }
+
const installStateIcons: Record = {
missing: 'cloud',
downloading: 'cloud-download',
diff --git a/tests/renderer/components/version-select-spec.tsx b/tests/renderer/components/version-select-spec.tsx
index 7741ea8b05..2795aa91c3 100644
--- a/tests/renderer/components/version-select-spec.tsx
+++ b/tests/renderer/components/version-select-spec.tsx
@@ -125,9 +125,10 @@ describe('VersionSelect component', () => {
});
describe('getItemLabel()', () => {
- it('returns the correct label for a local version', () => {
+ it('returns the correct label for an available local version', () => {
const input: RunnableVersion = {
...mockVersion1,
+ state: installed,
source: local,
};
@@ -135,6 +136,16 @@ describe('VersionSelect component', () => {
expect(getItemLabel({ ...input, name: 'Hi' })).toBe('Hi');
});
+ it('returns the correct label for an unavailable local version', () => {
+ const input: RunnableVersion = {
+ ...mockVersion1,
+ state: missing,
+ source: local,
+ };
+
+ expect(getItemLabel(input)).toBe('Unavailable');
+ });
+
it('returns the correct label for a version not downloaded', () => {
const input: RunnableVersion = {
...mockVersion1,