import Button from '@material-ui/core/Button'; import PropTypes from 'prop-types'; import React from 'react'; import { Trans } from '@lingui/macro'; import Typography from '@material-ui/core/Typography'; import { apiErrorPropType } from './util/ApiHelpers.jsx'; import { withContext } from './util/AppContext.jsx'; import { withStyles } from '@material-ui/core/styles'; const styles = theme => ({ version: { maxWidth: '250px', padding: theme.spacing(3), }, versionMsg: { fontSize: '12px', }, updateBtn: { marginTop: theme.spacing(1), }, }); class Version extends React.Component { numericVersion = version => { const parts = version.split('-', 2); if (parts.length === 2) { return parts[1]; } else { return version; } } versionChannel = version => { const parts = version.split('-', 2); return parts.length === 2 ? parts[0] : null; } renderVersionCheck = () => { const { classes, latestVersion, error, isLatest } = this.props; if (!latestVersion) { return ( Version check failed{error ? `: ${error.statusText}` : ''}. ); } if (isLatest) { return LinkerdIsUpToDateMsg; } const versionText = this.numericVersion(latestVersion); return (
A new version ({versionText}) is available.
); } render() { const { classes, releaseVersion, productName } = this.props; const channel = this.versionChannel(releaseVersion); let message = ` ${productName || 'controller'}`; message += ` ${this.numericVersion(releaseVersion)}`; if (channel) { message += ` (${channel})`; } message += '.'; return (
Running{message} {this.renderVersionCheck()}
); } } Version.propTypes = { error: apiErrorPropType, isLatest: PropTypes.bool.isRequired, latestVersion: PropTypes.string, productName: PropTypes.string, releaseVersion: PropTypes.string.isRequired, }; Version.defaultProps = { error: null, latestVersion: '', productName: 'controller', }; export default withStyles(styles, { withTheme: true })(withContext(Version));