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 (
{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
)}
);
};