/** * External dependencies */ import { decodeEntities } from '@wordpress/html-entities'; import classnames from 'classnames'; import { AnchorHTMLAttributes, HTMLAttributes } from 'react'; /** * Internal dependencies */ import './style.scss'; export interface ProductNameProps extends AnchorHTMLAttributes< HTMLAnchorElement > { /** * If `true` renders a `span` element instead of a link */ disabled?: boolean; /** * The product name * * Note: can be an HTML string */ name: string; /** * Click handler */ onClick?: () => void; /** * Link for the product */ permalink?: string; } /** * Render the Product name. * * The store API runs titles through `wp_kses_post()` which removes dangerous HTML tags, so using it inside `dangerouslySetInnerHTML` is considered safe. */ export const ProductName = ( { className = '', disabled = false, name, permalink = '', rel, style, onClick, ...props }: ProductNameProps ): JSX.Element => { const classes = classnames( 'wc-block-components-product-name', className ); if ( disabled ) { // Cast the props as type HTMLSpanElement. const disabledProps = props as HTMLAttributes< HTMLSpanElement >; return ( ); } return ( ); }; export default ProductName;