Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 44 additions & 28 deletions frontend/public/components/cluster-settings/cluster-settings.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import * as _ from 'lodash-es';
import { Helmet } from 'react-helmet';
import { Button } from 'patternfly-react';
import { Link } from 'react-router-dom';
import { Tooltip } from '@patternfly/react-core';
import {
AddCircleOIcon,
ArrowCircleUpIcon,
Expand Down Expand Up @@ -40,6 +41,7 @@ import {
resourcePathFromModel,
SectionHeading,
Timestamp,
truncateMiddle,
} from '../utils';
import {
GreenCheckCircleIcon,
Expand All @@ -60,16 +62,16 @@ export const CurrentChannel: React.SFC<CurrentChannelProps> = ({cv}) => <button
{cv.spec.channel || '-'}
</button>;

const InvalidMessage: React.SFC<CVStatusMessageProps> = ({cv}) => <React.Fragment>
const InvalidMessage: React.SFC<CVStatusMessageProps> = ({cv}) => <>
<div>
<RedExclamationCircleIcon /> Invalid cluster version
</div>
<Button bsStyle="primary" onClick={() => cancelUpdate(cv)}>
Cancel update
</Button>
</React.Fragment>;
</>;

const UpdatesAvailableMessage: React.SFC<CVStatusMessageProps> = ({cv}) => <React.Fragment>
const UpdatesAvailableMessage: React.SFC<CVStatusMessageProps> = ({cv}) => <>
<div className="co-update-status">
<ArrowCircleUpIcon className="update-pending" /> Update available
</div>
Expand All @@ -78,26 +80,38 @@ const UpdatesAvailableMessage: React.SFC<CVStatusMessageProps> = ({cv}) => <Reac
Update now
</Button>
</div>
</React.Fragment>;
</>;

const UpdatingMessage: React.SFC<CVStatusMessageProps> = ({cv}) => {
const updatingCondition = getClusterVersionCondition(cv, ClusterVersionConditionType.Progressing, K8sResourceConditionStatus.True);
return <React.Fragment>
return <>
{updatingCondition.message && <div><SyncAltIcon className="fa-spin" /> {updatingCondition.message}</div>}
<Link to="/settings/cluster/clusteroperators">View details</Link>
</React.Fragment>;
</>;
};

const ErrorRetrievingMessage: React.SFC<{}> = () => <div>
<RedExclamationCircleIcon /> Error retrieving
</div>;
const ErrorRetrievingMessage: React.SFC<CVStatusMessageProps> = ({cv}) => {
const retrievedUpdatesCondition = getClusterVersionCondition(cv, ClusterVersionConditionType.RetrievedUpdates, K8sResourceConditionStatus.False);
return retrievedUpdatesCondition.reason === 'NoChannel'
? <span className="text-muted">No update channel selected</span>
: (
<Tooltip content={truncateMiddle(retrievedUpdatesCondition.message, { length: 256 })}>
<span><RedExclamationCircleIcon /> Error retrieving</span>
</Tooltip>
);
};

const FailingMessage: React.SFC<{}> = () => <React.Fragment>
<div>
<RedExclamationCircleIcon /> Failing
</div>
<Link to="/settings/cluster/clusteroperators">View details</Link>
</React.Fragment>;
const FailingMessage: React.SFC<CVStatusMessageProps> = ({cv}) => {
const failingCondition = getClusterVersionCondition(cv, ClusterVersionConditionType.Failing, K8sResourceConditionStatus.True);
return <>
<div>
<Tooltip content={truncateMiddle(failingCondition.message, { length: 256 })}>
<span><RedExclamationCircleIcon /> Failing</span>
</Tooltip>
</div>
<Link to="/settings/cluster/clusteroperators">View details</Link>
</>;
};

const UpToDateMessage: React.SFC<{}> = () => <span>
<GreenCheckCircleIcon /> Up to date
Expand All @@ -113,9 +127,9 @@ export const UpdateStatus: React.SFC<UpdateStatusProps> = ({cv}) => {
case ClusterUpdateStatus.Updating:
return <UpdatingMessage cv={cv} />;
case ClusterUpdateStatus.ErrorRetrieving:
return <ErrorRetrievingMessage />;
return <ErrorRetrievingMessage cv={cv} />;
case ClusterUpdateStatus.Failing:
return <FailingMessage />;
return <FailingMessage cv={cv} />;
default:
return <UpToDateMessage />;
}
Expand All @@ -129,29 +143,31 @@ export const CurrentVersion: React.SFC<CurrentVersionProps> = ({cv}) => {
if (status === ClusterUpdateStatus.UpToDate || status === ClusterUpdateStatus.UpdatesAvailable) {
return desiredVersion
? <span className="co-select-to-copy">{desiredVersion}</span>
: <React.Fragment><YellowExclamationTriangleIcon />&nbsp;Unknown</React.Fragment>;
: <><YellowExclamationTriangleIcon />&nbsp;Unknown</>;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: you're using <React.Fragment> above (as are the previously existing examples).

}

return <React.Fragment>{lastVersion || 'None'}</React.Fragment>;
return lastVersion
? <span className="co-select-to-copy">{lastVersion}</span>
: <>None</>;
};

export const UpdateLink: React.SFC<CurrentVersionProps> = ({cv}) => {
const status = getClusterUpdateStatus(cv);
const updatesAvailable = !_.isEmpty(getAvailableClusterUpdates(cv));
return <React.Fragment>
return <>
{
updatesAvailable && (status === ClusterUpdateStatus.ErrorRetrieving || status === ClusterUpdateStatus.Failing || status === ClusterUpdateStatus.Updating)
? <Button bsStyle="link" className="btn-link--no-btn-default-values" onClick={() => (clusterUpdateModal({cv}))}>Update to another version</Button>
: null
}
</React.Fragment>;
</>;
};

export const CurrentVersionHeader: React.SFC<CurrentVersionProps> = ({cv}) => {
const status = getClusterUpdateStatus(cv);
return <React.Fragment>
return <>
{ status === ClusterUpdateStatus.UpToDate || status === ClusterUpdateStatus.UpdatesAvailable ? 'Current Version' : 'Last Completed Version' }
</React.Fragment>;
</>;
};

export const ClusterVersionDetailsTable: React.SFC<ClusterVersionDetailsTableProps> = ({obj: cv, autoscalers}) => {
Expand All @@ -162,7 +178,7 @@ export const ClusterVersionDetailsTable: React.SFC<ClusterVersionDetailsTablePro
// Split image on `@` to emphasize the digest.
const imageParts = desiredImage.split('@');

return <React.Fragment>
return <>
<div className="co-m-pane__body">
<div className="co-m-pane__body-group">
<div className="co-detail-table co-detail-table--lg">
Expand Down Expand Up @@ -206,7 +222,7 @@ export const ClusterVersionDetailsTable: React.SFC<ClusterVersionDetailsTablePro
<dt>Desired Release Image</dt>
<dd className="co-break-all co-select-to-copy" data-test-id="cv-details-table-image">
{imageParts.length === 2
? <React.Fragment><span className="text-muted">{imageParts[0]}@</span>{imageParts[1]}</React.Fragment>
? <><span className="text-muted">{imageParts[0]}@</span>{imageParts[1]}</>
: desiredImage || '-'}
</dd>
<dt>Cluster Version Configuration</dt>
Expand Down Expand Up @@ -252,7 +268,7 @@ export const ClusterVersionDetailsTable: React.SFC<ClusterVersionDetailsTablePro
</div>
}
</div>
</React.Fragment>;
</>;
};

export const ClusterOperatorTabPage: React.SFC<ClusterOperatorTabPageProps> = ({obj: cv}) => <ClusterOperatorPage cv={cv} autoFocus={false} showTitle={false} />;
Expand All @@ -278,7 +294,7 @@ export const ClusterSettingsPage: React.SFC<ClusterSettingsPageProps> = ({match}
{kind: clusterAutoscalerReference, isList: true, prop: 'autoscalers', optional: true},
];
const resourceKeys = _.map(resources, 'prop');
return <React.Fragment>
return <>
<Helmet>
<title>{title}</title>
</Helmet>
Expand All @@ -288,7 +304,7 @@ export const ClusterSettingsPage: React.SFC<ClusterSettingsPageProps> = ({match}
<Firehose forceUpdate resources={resources}>
<HorizontalNav pages={pages} match={match} resourceKeys={resourceKeys} hideDivider />
</Firehose>
</React.Fragment>;
</>;
};

type UpdateStatusProps = {
Expand Down