diff --git a/packages/react-core/src/components/Card/Card.tsx b/packages/react-core/src/components/Card/Card.tsx index 08ec332a5a0..79e282dcc2d 100644 --- a/packages/react-core/src/components/Card/Card.tsx +++ b/packages/react-core/src/components/Card/Card.tsx @@ -14,13 +14,19 @@ export interface CardProps extends React.HTMLProps, OUIAProps { component?: keyof JSX.IntrinsicElements; /** Modifies the card to include compact styling. Should not be used with isLarge. */ isCompact?: boolean; - /** Modifies the card to include selectable styling */ + /** Flag indicating that the card is selectable. */ isSelectable?: boolean; - /** Modifies the card to include selected styling */ - isSelected?: boolean; - /** Modifies the card to include clickable styling */ + /** Flag indicating that the card is clickable and contains some action that triggers on click. */ isClickable?: boolean; - /** Modifies a clickable or selectable card to have disabled styling. */ + /** Flag indicating whether a card that is either selectable only or both clickable and selectable is + * currently selected and has selected styling. + */ + isSelected?: boolean; + /** Flag indicating whether a card that is either only clickable or that is both clickable and selectable + * is currently clicked and has clicked styling. + */ + isClicked?: boolean; + /** Flag indicating that a clickable or selectable card is disabled. */ isDisabled?: boolean; /** Modifies the card to be large. Should not be used with isCompact. */ isLarge?: boolean; @@ -43,6 +49,8 @@ interface CardContextProps { isExpanded: boolean; isClickable: boolean; isSelectable: boolean; + isSelected: boolean; + isClicked: boolean; isDisabled: boolean; } @@ -51,6 +59,8 @@ export const CardContext = React.createContext>({ isExpanded: false, isClickable: false, isSelectable: false, + isSelected: false, + isClicked: false, isDisabled: false }); @@ -64,6 +74,7 @@ export const Card: React.FunctionComponent = ({ isClickable = false, isDisabled = false, isSelected = false, + isClicked = false, isExpanded = false, isLarge = false, isFullHeight = false, @@ -85,7 +96,11 @@ export const Card: React.FunctionComponent = ({ const getSelectableModifiers = () => { if (isSelectable && isClickable) { - return css(styles.modifiers.selectable, styles.modifiers.clickable, isSelected && styles.modifiers.current); + return css( + styles.modifiers.selectable, + styles.modifiers.clickable, + (isSelected || isClicked) && styles.modifiers.current + ); } if (isSelectable) { @@ -93,7 +108,7 @@ export const Card: React.FunctionComponent = ({ } if (isClickable) { - return css(styles.modifiers.clickable, isSelected && styles.modifiers.selected); + return css(styles.modifiers.clickable, isClicked && styles.modifiers.current); } return ''; @@ -106,6 +121,8 @@ export const Card: React.FunctionComponent = ({ isExpanded, isClickable, isSelectable, + isSelected, + isClicked, isDisabled }} > diff --git a/packages/react-core/src/components/Card/CardHeader.tsx b/packages/react-core/src/components/Card/CardHeader.tsx index adc3bfddaba..96d248dd31c 100644 --- a/packages/react-core/src/components/Card/CardHeader.tsx +++ b/packages/react-core/src/components/Card/CardHeader.tsx @@ -44,7 +44,9 @@ export interface CardHeaderSelectableActionsObject { isExternalLink?: boolean; /** Name for the input element of a clickable or selectable card. */ name?: string; - /** Flag indicating whether the selectable card input is checked */ + /** @deprecated Flag indicating whether the selectable card input is checked. We recommend using + * the isSelected prop on the card component instead. + */ isChecked?: boolean; } @@ -79,7 +81,7 @@ export const CardHeader: React.FunctionComponent = ({ ...props }: CardHeaderProps) => ( - {({ cardId, isClickable, isSelectable, isDisabled: isCardDisabled }) => { + {({ cardId, isClickable, isSelectable, isSelected, isClicked, isDisabled: isCardDisabled }) => { const cardHeaderToggle = (