@openshift-console/dynamic-plugin-sdk
Version:
Provides core APIs, types and utilities used by dynamic plugins at runtime.
96 lines (95 loc) • 4.22 kB
JavaScript
import * as React from 'react';
import { BanIcon, ClipboardListIcon, HourglassHalfIcon, HourglassStartIcon, NotStartedIcon, SyncAltIcon, UnknownIcon, } from '@patternfly/react-icons';
import { DASH } from '../../constants';
import { YellowExclamationTriangleIcon } from './icons';
import { ErrorStatus, InfoStatus, ProgressStatus, SuccessStatus } from './statuses';
import StatusIconAndText from './StatusIconAndText';
/**
* Component for displaying a status message
* @param {string} status - type of status to be displayed
* @param {string} [title] - (optional) status text
* @param {boolean} [iconOnly] - (optional) if true, only displays icon
* @param {boolean} [noTooltip] - (optional) if true, tooltip won't be displayed
* @param {string} [className] - (optional) additional class name for the component
* @param {string} [popoverTitle] - (optional) title for popover
* @param {ReactNode} [children] - (optional) children for the component
* @example
* ```tsx
* <Status status='Warning' />
* ```
*/
const Status = ({ status, title, children, iconOnly, noTooltip, className, }) => {
const statusProps = { title: title || status, iconOnly, noTooltip, className };
switch (status) {
case 'New':
return React.createElement(StatusIconAndText, { ...statusProps, icon: React.createElement(HourglassStartIcon, null) });
case 'Pending':
return React.createElement(StatusIconAndText, { ...statusProps, icon: React.createElement(HourglassHalfIcon, null) });
case 'Planning':
return React.createElement(StatusIconAndText, { ...statusProps, icon: React.createElement(ClipboardListIcon, null) });
case 'ContainerCreating':
case 'UpgradePending':
case 'PendingUpgrade':
case 'PendingRollback':
return React.createElement(ProgressStatus, { ...statusProps });
case 'In Progress':
case 'Installing':
case 'InstallReady':
case 'Replacing':
case 'Running':
case 'Updating':
case 'Upgrading':
case 'PendingInstall':
return React.createElement(StatusIconAndText, { ...statusProps, icon: React.createElement(SyncAltIcon, null) });
case 'Cancelled':
case 'Deleting':
case 'Expired':
case 'Not Ready':
case 'Cancelling':
case 'Terminating':
case 'Superseded':
case 'Uninstalling':
return React.createElement(StatusIconAndText, { ...statusProps, icon: React.createElement(BanIcon, null) });
case 'Warning':
case 'RequiresApproval':
return React.createElement(StatusIconAndText, { ...statusProps, icon: React.createElement(YellowExclamationTriangleIcon, null) });
case 'ContainerCannotRun':
case 'CrashLoopBackOff':
case 'Critical':
case 'ErrImagePull':
case 'Error':
case 'Failed':
case 'Failure':
case 'ImagePullBackOff':
case 'InstallCheckFailed':
case 'Lost':
case 'Rejected':
case 'UpgradeFailed':
return React.createElement(ErrorStatus, { ...statusProps }, children);
case 'Accepted':
case 'Active':
case 'Bound':
case 'Complete':
case 'Completed':
case 'Created':
case 'Enabled':
case 'Succeeded':
case 'Ready':
case 'Up to date':
case 'Loaded':
case 'Provisioned as node':
case 'Preferred':
case 'Connected':
case 'Deployed':
return React.createElement(SuccessStatus, { ...statusProps });
case 'Info':
return React.createElement(InfoStatus, { ...statusProps }, children);
case 'Unknown':
return React.createElement(StatusIconAndText, { ...statusProps, icon: React.createElement(UnknownIcon, null) });
case 'PipelineNotStarted':
return React.createElement(StatusIconAndText, { ...statusProps, icon: React.createElement(NotStartedIcon, null) });
default:
return status ? React.createElement(StatusIconAndText, { ...statusProps }) : React.createElement(React.Fragment, null, DASH);
}
};
export default Status;