import { __, _n, sprintf } from '@wordpress/i18n'; import ButtonInput from '@/components/Inputs/ButtonInput'; import Icon from '@/utils/Icon'; import { formatDate, formatNumber, getRelativeTime } from '@/utils/formatting'; import type { PageSummaryData } from '@/api/getPageSummaryData'; interface PageSummaryHeaderProps { data: PageSummaryData; pagePath: string; pageHref: string; editUrl: string; } interface MetaItemProps { icon: string; children: React.ReactNode; } /** * Renders one icon-labelled page metadata item. * * @param props - Component properties. * @param props.icon - Icon key from the shared icon map. * @param props.children - Metadata content. * @return The metadata item. */ const MetaItem = ({ icon, children }: MetaItemProps ): JSX.Element => ( {children} ); /** * Displays page metadata and links for the selected page. * * @param props - Component properties. * @param props.data - Page-summary data. * @param props.pagePath - Display path for the selected page. * @param props.pageHref - Absolute public page URL. * @param props.editUrl - WordPress edit URL, or an empty string when unavailable. * @return The page-summary heading. */ export const PageSummaryHeader = ({ data, pagePath, pageHref, editUrl }: PageSummaryHeaderProps ): JSX.Element => { const relativeEditTime = getRelativeTime( data.editedAt ); const readingTime = sprintf( _n( '%s min read', '%s min read', data.readingMinutes, 'burst-statistics' ), formatNumber( data.readingMinutes, 0, false ) ); return (

{data.title}

{pagePath}
{editUrl && ( window.location.assign( editUrl )} className="inline-flex shrink-0 items-center gap-2 bg-white" ariaLabel={__( 'Edit page', 'burst-statistics' )} > {__( 'Edit page', 'burst-statistics' )} )}
{sprintf( __( '%1$s · %2$s', 'burst-statistics' ), data.postType, data.status )} {data.author} {sprintf( __( 'Published %s', 'burst-statistics' ), formatDate( data.publishedAt ) )} {sprintf( __( 'Edited %s', 'burst-statistics' ), relativeEditTime )} {sprintf( __( '%1$s words · %2$s', 'burst-statistics' ), formatNumber( data.wordCount, 0, false ), readingTime )}
); };