@@ -150,25 +150,41 @@ export function Table ({ headers, items, itemId = '_id', selectedIds, mode, show
150150 return header . label || ''
151151 }
152152
153+ // Gets a value from a given path in an object
154+ function getValueAsString ( item , path ) {
155+ try {
156+ // Retreive the value
157+ let value = get ( item , path )
158+
159+ // If item value is not string, convert it before returning
160+ if ( typeof value === 'object' ) value = JSON . stringify ( value )
161+ else if ( typeof value !== 'string' && value . toString ) {
162+ value = value . toString ( )
163+ }
164+
165+ return value
166+ } catch { return '' }
167+ }
168+
153169 // Gets the appropriate value to render for a item
154170 function getItemValue ( item , header , index ) {
155171 // If no item or header, just return a empty string
156172 if ( ! item || ! header ) return ''
157173
174+ // Retreive the value
175+ const value = get ( item , header . value )
176+
158177 // If the header has a render function for the item
159178 if ( header . itemRender && typeof header . itemRender === 'function' ) {
160179 try {
161- const result = header . itemRender ( item , index , header )
180+ const result = header . itemRender ( value , item , header , index )
162181 if ( result && typeof result === 'object' ) return result
163182 } catch ( err ) { console . error ( 'Error rendering item' , err ) }
164183 }
165184
166185 // If the item contain a element
167186 if ( item . _elements ?. [ header . value ] ) return item . _elements ?. [ header . value ]
168187
169- // Retreive the value
170- const value = get ( item , header . value )
171-
172188 // If the item has no matching value
173189 if ( ! value ) return ''
174190
@@ -207,7 +223,12 @@ export function Table ({ headers, items, itemId = '_id', selectedIds, mode, show
207223 {
208224 // Render all headers
209225 headers . map ( ( header ) =>
210- < th key = { nanoid ( ) } className = { mergeClasses ( headerClass , header . class ) } style = { mergeStyles ( headerStyle , header . style ) } >
226+ < th
227+ key = { nanoid ( ) }
228+ className = { mergeClasses ( headerClass , header . class ) }
229+ style = { mergeStyles ( headerStyle , header . style ) }
230+ title = { getValueAsString ( header , header . itemTooltip ) || header . tooltip }
231+ >
211232 {
212233 getHeaderValue ( header )
213234 }
@@ -251,6 +272,7 @@ export function Table ({ headers, items, itemId = '_id', selectedIds, mode, show
251272 key = { nanoid ( ) }
252273 className = { mergeClasses ( itemClass , header . itemClass ) }
253274 style = { mergeStyles ( itemStyle , header . itemStyle ) }
275+ title = { getValueAsString ( item , header . itemTooltip ) || header . itemTooltip }
254276 >
255277 { getItemValue ( item , header , index ) }
256278 </ td >
@@ -362,6 +384,10 @@ Table.propTypes = {
362384 itemStyle : PropTypes . object ,
363385 class : PropTypes . string ,
364386 itemClass : PropTypes . string ,
387+ render : PropTypes . func ,
388+ itemRender : PropTypes . func ,
389+ tooltip : PropTypes . string ,
390+ itemTooltip : PropTypes . string ,
365391 element : PropTypes . element
366392 } ) ) . isRequired ,
367393 isLoading : PropTypes . bool ,
0 commit comments