From 49bdc6264ebb87c690f0aad7b18cc141ef18fbb9 Mon Sep 17 00:00:00 2001 From: Eric Olkowski Date: Tue, 11 Oct 2022 11:31:41 -0400 Subject: [PATCH 1/5] fix(Timestamp): updated logic for rendering datetime attribute --- .../src/components/Timestamp/Timestamp.tsx | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/packages/react-core/src/components/Timestamp/Timestamp.tsx b/packages/react-core/src/components/Timestamp/Timestamp.tsx index da10ddb2483..043bb622199 100644 --- a/packages/react-core/src/components/Timestamp/Timestamp.tsx +++ b/packages/react-core/src/components/Timestamp/Timestamp.tsx @@ -2,6 +2,7 @@ import * as React from 'react'; import styles from '@patternfly/react-styles/css/components/Timestamp/timestamp'; import { css } from '@patternfly/react-styles'; import { Tooltip } from '../Tooltip'; +import { isValidDate } from '../CalendarMonth'; export enum TimestampFormat { full = 'full', @@ -78,7 +79,7 @@ export const Timestamp: React.FunctionComponent = ({ children, className, customFormat, - date: dateProp = new Date(), + date: dateProp, dateFormat, displaySuffix = '', is12Hour, @@ -87,6 +88,24 @@ export const Timestamp: React.FunctionComponent = ({ tooltip, ...props }: TimestampProps) => { + const [date, setDate] = React.useState(() => { + const initDate = new Date(dateProp); + if (isValidDate(initDate)) { + return initDate; + } + + return new Date(); + }); + + React.useEffect(() => { + const dateFromProp = new Date(dateProp); + if (isValidDate(dateFromProp) && dateFromProp.toString() !== new Date(date).toString()) { + setDate(dateFromProp); + } else if (!dateProp) { + setDate(new Date()); + } + }, [dateProp]); + const hasTimeFormat = timeFormat && !customFormat; const formatOptions = { ...(dateFormat && !customFormat && { dateStyle: dateFormat }), @@ -94,7 +113,7 @@ export const Timestamp: React.FunctionComponent = ({ ...(is12Hour !== undefined && { hour12: is12Hour }) }; - const dateAsLocaleString = new Date(dateProp).toLocaleString(locale, { + const dateAsLocaleString = new Date(date).toLocaleString(locale, { ...formatOptions, ...(hasTimeFormat && { timeStyle: timeFormat }) }); @@ -102,7 +121,7 @@ export const Timestamp: React.FunctionComponent = ({ const utcTimeFormat = timeFormat !== 'short' ? 'medium' : 'short'; const convertToUTCString = (date: Date) => new Date(date).toUTCString().slice(0, -3); - const utcDateString = new Date(convertToUTCString(dateProp)).toLocaleString(locale, { + const utcDateString = new Date(convertToUTCString(date)).toLocaleString(locale, { ...formatOptions, ...(hasTimeFormat && { timeStyle: utcTimeFormat }) }); @@ -114,7 +133,7 @@ export const Timestamp: React.FunctionComponent = ({ {...(tooltip && { tabIndex: 0 })} {...props} > -