import Button from '@material-ui/core/Button'; import PropTypes from 'prop-types'; import React from 'react'; 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: 3 * theme.spacing.unit, }, versionMsg: { fontSize: "12px" }, updateBtn: { marginTop: theme.spacing.unit, } }); class Version extends React.Component { static defaultProps = { error: null, latestVersion: '', productName: 'controller' } static propTypes = { classes: PropTypes.shape({}).isRequired, error: apiErrorPropType, isLatest: PropTypes.bool.isRequired, latestVersion: PropTypes.string, productName: PropTypes.string, releaseVersion: PropTypes.string.isRequired, } numericVersion = version => { let parts = version.split("-", 2); if (parts.length === 2) { return parts[1]; } else { return version; } } versionChannel = version => { let parts = version.split("-", 2); if (parts.length === 2) { return parts[0]; } } renderVersionCheck = () => { const {classes, latestVersion, error, isLatest} = this.props; if (!latestVersion) { return ( Version check failed{error ? `: ${error.statusText}` : ''}. ); } if (isLatest) { return Linkerd is up to date.; } return (
A new version ({this.numericVersion(latestVersion)}) is available.
); } render() { const { classes, releaseVersion, productName } = this.props; let channel = this.versionChannel(releaseVersion); let message = `Running ${productName || "controller"}`; message += ` ${this.numericVersion(releaseVersion)}`; if (channel) { message += ` (${channel})`; } message += "."; return (
{message} {this.renderVersionCheck()}
); } } export default withStyles(styles, { withTheme: true })(withContext(Version));