| Current File : /home/digitaw/www/wp-content/updraft/plugins-old/simple-history/src/components/EventDate.jsx |
import {
Button,
__experimentalText as Text,
Tooltip,
} from '@wordpress/components';
import {
dateI18n,
getSettings as getDateSettings,
humanTimeDiff,
date,
} from '@wordpress/date';
import { useEffect, useState } from '@wordpress/element';
import { __, sprintf } from '@wordpress/i18n';
import { navigateToEventPermalink } from '../functions';
import { EventHeaderItem } from './EventHeaderItem';
export function EventDate( props ) {
const { event, eventVariant } = props;
const dateSettings = getDateSettings();
const dateFormatAbbreviated = dateSettings.formats.datetimeAbbreviated;
const dateFormatTime = dateSettings.formats.time;
// Show date as "Sep 2, 2024 8:36 pm".
// If the event is today, show "Today instead".
// Today is determined by the date in GMT.
const eventDateYMD = date( 'Y-m-d', event.date_gmt );
const nowDateYMD = date( 'Y-m-d' );
const eventIsToday = eventDateYMD === nowDateYMD;
let formattedDateFormatAbbreviated;
if ( eventIsToday ) {
formattedDateFormatAbbreviated = sprintf(
// translators: %s is the time, like 8:36 pm.
__( 'Today %s', 'simple-history' ),
dateI18n( dateFormatTime, event.date_gmt )
);
} else {
formattedDateFormatAbbreviated = dateI18n(
dateFormatAbbreviated,
event.date_gmt
);
}
const [ formattedDateLiveUpdated, setFormattedDateLiveUpdated ] = useState(
() => {
return humanTimeDiff( event.date_gmt );
}
);
// Update live time every second.
useEffect( () => {
const intervalId = setInterval( () => {
setFormattedDateLiveUpdated( humanTimeDiff( event.date_gmt ) );
}, 1000 );
return () => {
clearInterval( intervalId );
};
}, [ event.date_gmt ] );
const tooltipText = sprintf(
/* translators: 1: date in local time, 2: date in GMT time */
__( '%1$s local time (%2$s GMT time)', 'simple-history' ),
event.date,
event.date_gmt
);
const handleDateClick = () => {
navigateToEventPermalink( { event } );
};
const time = (
<>
<time
dateTime={ event.date_gmt }
className="SimpleHistoryLogitem__when__liveRelative"
>
{ formattedDateFormatAbbreviated } ({ formattedDateLiveUpdated }
)
</time>
</>
);
let output;
if ( eventVariant === 'compact' ) {
output = <div>{ formattedDateLiveUpdated }</div>;
} else {
output = (
<Tooltip text={ tooltipText } delay={ 500 }>
{ eventVariant === 'modal' ? (
<Text>{ time }</Text>
) : (
<Button variant="link" onClick={ handleDateClick }>
{ time }
</Button>
) }
</Tooltip>
);
}
return (
<EventHeaderItem className="SimpleHistoryLogitem__permalink SimpleHistoryLogitem__when">
{ output }
</EventHeaderItem>
);
}