Skip to content

[Bug] - Message datetime uses render time even when a saved timestamp is supplied #938

Open

Description

@harshit-wadhwani

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

  1. Render the example below using @patternfly/chatbot.
  2. Inspect the <time> element inside the message in browser developer tools.
  3. Notice that its text is the supplied historical timestamp, while its datetime attribute is the current render time rather than 2025-01-15T10:00:00.000Z.
  4. Wait a few seconds, then click Rerender.
  5. Inspect the same element again: the displayed text remains unchanged, but datetime has 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions