/** * WordPress dependencies */ import { useMemo } from '@wordpress/element'; import { getFilename } from '@wordpress/url'; import type { DataViewRenderFieldProps } from '@wordpress/dataviews'; import { Tooltip } from '@wordpress/ui'; /** * Internal dependencies */ import type { MediaItem } from '../types'; // Proxy threshold for "long enough that the cell will visually truncate" — // used to decide whether to wrap the filename in a Tooltip showing the full // name on hover. Visual truncation itself is handled in CSS. const TRUNCATE_LENGTH = 15; export default function FileNameView( { item, }: DataViewRenderFieldProps< MediaItem > ) { const fileName = useMemo( () => ( item?.source_url ? getFilename( item.source_url ) : null ), [ item?.source_url ] ); if ( ! fileName ) { return ''; } if ( fileName.length <= TRUNCATE_LENGTH ) { return ( { fileName } ); } // The full filename is always in the DOM, so assistive tech gets it // regardless. The Tooltip aids mouse users where the cell visually clips // (DataViews layouts); in a non-truncating context like the DataForm the // name wraps in full, making it redundant but harmless. return ( { fileName } } /> { fileName } ); }