import { Button, ButtonGroupProps, ContextMenu, Menu, MenuItem, } from '@blueprintjs/core'; import { ItemListPredicate, ItemRenderer, Select } from '@blueprintjs/select'; import { clipboard } from 'electron'; import { observer } from 'mobx-react'; import * as React from 'react'; import semver from 'semver'; import { RunnableVersion, VersionSource, VersionState } from '../../interfaces'; import { highlightText } from '../../utils/highlight-text'; import { AppState } from '../state'; const ElectronVersionSelect = Select.ofType(); /** * Helper method: Returns the icon for an Electron * version. * * @param {RunnableVersion} { state } * @returns */ export function getItemIcon({ state }: RunnableVersion) { switch (state) { case VersionState.unknown: return 'cloud'; case VersionState.ready: return 'saved'; case VersionState.downloading: return 'cloud-download'; case VersionState.unzipping: return 'compressed'; } } /** * Helper method: Returns the for Electron * versions. * * @param {RunnableVersion} item * @param {IItemRendererProps} { handleClick, modifiers, query } * @returns */ export const renderItem: ItemRenderer = ( item, { handleClick, modifiers, query }, ) => { if (!modifiers.matchesPredicate) { return null; } return ( ); }; interface VersionSelectState { value: string; } interface VersionSelectProps { appState: AppState; disabled?: boolean; currentVersion: RunnableVersion; onVersionSelect: (version: RunnableVersion) => void; buttonGroupProps?: ButtonGroupProps; itemDisabled?: | keyof RunnableVersion | ((item: RunnableVersion, index: number) => boolean); } /** * A dropdown allowing the selection of Electron versions. The actual * download is managed in the state. * * @class VersionSelect * @extends {React.Component} */ @observer export class VersionSelect extends React.Component< VersionSelectProps, VersionSelectState > { public render() { const { currentVersion, itemDisabled } = this.props; const { version } = currentVersion; return ( } disabled={!!this.props.disabled} >