Repository navigation
Description
Description
When a saved timestamp is passed to Message, the visible timestamp and the message section's accessible label correctly use the supplied string. However, the underlying <time datetime="..."> attribute still contains the time of rendering. It also changes on subsequent renders.
This makes the machine-readable timestamp disagree with the displayed message time. Consumers can supply timestamp?: string, but cannot supply the actual date to the nested PatternFly Timestamp component.
The implementation creates const date = new Date() during rendering and uses <Timestamp date={date}>{timestamp}</Timestamp>:
https://github.com/patternfly/chatbot/blob/aca7848d3212003a20ebcd916217e9d29c9862e6/packages/module/src/Message/Message.tsx
Expected: Consumers should be able to provide the saved message instant so that both the displayed timestamp and the HTML datetime describe that instant and remain stable across rerenders.
Actual: Supplying timestamp fixes the displayed text, but datetime continues to describe render time.
Related reports #448 and #299, and documentation PR #302, explain that applications must supply persistent timestamps. This report concerns the remaining HTML datetime mismatch even after following that guidance.
A possible backward-compatible solution is an optional date prop forwarded to the native Timestamp, while retaining the existing display-string prop and default behavior. The API shape is open for discussion; localized display strings should not need to be parsed to recover the date.
Steps to Reproduce
- Render the example below using
@patternfly/chatbot. - Inspect the
<time>element inside the message in browser developer tools. - Notice that its text is the supplied historical timestamp, while its
datetimeattribute is the current render time rather than2025-01-15T10:00:00.000Z. - Wait a few seconds, then click Rerender.
- Inspect the same element again: the displayed text remains unchanged, but
datetimehas advanced.
Data/JSON Context (if applicable)
import { useState } from 'react';
import { Message } from '@patternfly/chatbot';
export default function TimestampReproduction() {
const [renderCount, setRenderCount] = useState(0);
return (
<>
<button onClick={() => setRenderCount((count) => count + 1)}>
Rerender ({renderCount})
</button>
<Message
role="user"
name="You"
content="A saved message"
timestamp="2025-01-15 10:00:00 UTC"
/>
</>
);
}Environment
- PatternFly Chatbot:
6.7.1 - PatternFly React Core:
6.6.1 - React:
19.3.0 - Browser: Chromium (exact version not recorded)
- Viewport: observed in desktop chat; the date is generated in the component independently of layout
- The same timestamp implementation is present in the linked upstream source revision.
Screenshots or Logs
DOM inspection of a saved conversation showed the following values (displayed text was in Asia/Kolkata, UTC+05:30):
| Field | Value |
|---|---|
| Visible timestamp | 02/11/2026, 13:14:56 |
Expected datetime for that saved instant |
2026-11-02T07:44:56.000Z |
Actual datetime when the conversation was reopened |
2026-11-02T08:25:39.646Z |
The supplied visible timestamp remained correct; the HTML attribute represented the later render time.
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsNeeds triage
Activity