@@ -2,6 +2,7 @@ import * as React from 'react';
22import { css } from '@patternfly/react-styles' ;
33import styles from '@patternfly/react-styles/css/components/DataList/data-list' ;
44import { DataListWrapModifier } from './DataList' ;
5+ import { Tooltip } from '../Tooltip' ;
56
67export interface DataListCellProps extends Omit < React . HTMLProps < HTMLDivElement > , 'width' > {
78 /** Content rendered inside the DataList cell */
@@ -29,20 +30,38 @@ export const DataListCell: React.FunctionComponent<DataListCellProps> = ({
2930 isIcon = false ,
3031 wrapModifier = null ,
3132 ...props
32- } : DataListCellProps ) => (
33- < div
34- className = { css (
35- styles . dataListCell ,
36- width > 1 && styles . modifiers [ `flex_${ width } ` as 'flex_2' | 'flex_3' | 'flex_4' | 'flex_5' ] ,
37- ! isFilled && styles . modifiers . noFill ,
38- alignRight && styles . modifiers . alignRight ,
39- isIcon && styles . modifiers . icon ,
40- className ,
41- wrapModifier && styles . modifiers [ wrapModifier ]
42- ) }
43- { ...props }
44- >
45- { children }
46- </ div >
47- ) ;
33+ } : DataListCellProps ) => {
34+ const cellRef = React . useRef ( null ) ;
35+ const [ isTooltipVisible , setIsTooltipVisible ] = React . useState ( false ) ;
36+
37+ React . useEffect ( ( ) => {
38+ if ( ! cellRef . current || wrapModifier !== 'truncate' ) {
39+ return ;
40+ }
41+ const showTooltip = cellRef . current && cellRef . current . offsetWidth < cellRef . current . scrollWidth ;
42+ if ( isTooltipVisible !== showTooltip ) {
43+ setIsTooltipVisible ( showTooltip ) ;
44+ }
45+ } , [ cellRef , wrapModifier , isTooltipVisible ] ) ;
46+
47+ return (
48+ < div
49+ className = { css (
50+ styles . dataListCell ,
51+ width > 1 && styles . modifiers [ `flex_${ width } ` as 'flex_2' | 'flex_3' | 'flex_4' | 'flex_5' ] ,
52+ ! isFilled && styles . modifiers . noFill ,
53+ alignRight && styles . modifiers . alignRight ,
54+ isIcon && styles . modifiers . icon ,
55+ className ,
56+ wrapModifier && styles . modifiers [ wrapModifier ]
57+ ) }
58+ { ...( isTooltipVisible && { tabIndex : 0 } ) }
59+ ref = { cellRef }
60+ { ...props }
61+ >
62+ { children }
63+ { isTooltipVisible && < Tooltip content = { children } triggerRef = { cellRef } /> }
64+ </ div >
65+ ) ;
66+ } ;
4867DataListCell . displayName = 'DataListCell' ;
0 commit comments