diff --git a/packages/react-core/src/components/Card/Card.tsx b/packages/react-core/src/components/Card/Card.tsx index abdf05d82b3..3cf8b760cc5 100644 --- a/packages/react-core/src/components/Card/Card.tsx +++ b/packages/react-core/src/components/Card/Card.tsx @@ -14,15 +14,21 @@ 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; /** @deprecated Specifies the card is selectable, and applies raised styling on hover and select */ isSelectableRaised?: 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; /** @deprecated Modifies a raised selectable card to have disabled styling */ isDisabledRaised?: boolean; @@ -56,6 +62,8 @@ interface CardContextProps { isExpanded: boolean; isClickable: boolean; isSelectable: boolean; + isSelected: boolean; + isClicked: boolean; isDisabled: boolean; // TODO: Remove hasSelectableInput when deprecated prop is removed hasSelectableInput: boolean; @@ -72,6 +80,8 @@ export const CardContext = React.createContext>({ isExpanded: false, isClickable: false, isSelectable: false, + isSelected: false, + isClicked: false, isDisabled: false }); @@ -86,6 +96,7 @@ export const Card: React.FunctionComponent = ({ isDisabled = false, isSelectableRaised = false, isSelected = false, + isClicked = false, isDisabledRaised = false, isFlat = false, isExpanded = false, @@ -119,7 +130,11 @@ export const Card: React.FunctionComponent = ({ return css(styles.modifiers.selectableRaised, isSelected && styles.modifiers.selectedRaised); } 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) { @@ -127,7 +142,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 ''; @@ -162,6 +177,8 @@ export const Card: React.FunctionComponent = ({ isExpanded, isClickable, isSelectable, + isSelected, + isClicked, isDisabled, // TODO: Remove hasSelectableInput when deprecated prop is removed hasSelectableInput diff --git a/packages/react-core/src/components/Card/CardHeader.tsx b/packages/react-core/src/components/Card/CardHeader.tsx index c8b34353b34..d368bf47109 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; } @@ -80,7 +82,7 @@ export const CardHeader: React.FunctionComponent = ({ }: CardHeaderProps) => ( {/* TODO: Remove hasSelectableInput when deprecated props are removed */} - {({ cardId, isClickable, isSelectable, isDisabled: isCardDisabled, hasSelectableInput }) => { + {({ cardId, isClickable, isSelectable, isSelected, isClicked, isDisabled: isCardDisabled, hasSelectableInput }) => { const cardHeaderToggle = (