diff --git a/.changeset/honest-feet-shop.md b/.changeset/honest-feet-shop.md new file mode 100644 index 00000000000..254d446cb78 --- /dev/null +++ b/.changeset/honest-feet-shop.md @@ -0,0 +1,5 @@ +--- +'@primer/react': patch +--- + +Render SSR date for RelativeTime diff --git a/packages/react/src/RelativeTime/RelativeTime.tsx b/packages/react/src/RelativeTime/RelativeTime.tsx index 3ba8c6f6e66..b30924f4956 100644 --- a/packages/react/src/RelativeTime/RelativeTime.tsx +++ b/packages/react/src/RelativeTime/RelativeTime.tsx @@ -1,8 +1,19 @@ +import React from 'react' import {RelativeTimeElement} from '@github/relative-time-element' import type {ComponentProps} from '../utils/types' import {createComponent} from '../utils/custom-element' -const RelativeTime = createComponent(RelativeTimeElement, 'relative-time') +const RelativeTimeComponent = createComponent(RelativeTimeElement, 'relative-time') -export type RelativeTimeProps = ComponentProps +const localeOptions: Intl.DateTimeFormatOptions = {month: 'short', day: 'numeric', year: 'numeric'} +function RelativeTime({date, datetime, ...props}: RelativeTimeProps) { + if (datetime) date = new Date(datetime) + return ( + + {date?.toLocaleDateString('en', localeOptions) || ''} + + ) +} + +export type RelativeTimeProps = ComponentProps export default RelativeTime diff --git a/packages/react/src/__tests__/RelativeTime.test.tsx b/packages/react/src/__tests__/RelativeTime.test.tsx index 57fcffcfdc5..a8903aee588 100644 --- a/packages/react/src/__tests__/RelativeTime.test.tsx +++ b/packages/react/src/__tests__/RelativeTime.test.tsx @@ -20,4 +20,14 @@ describe('RelativeTime', () => { it('renders a ', () => { expect(render().type).toEqual('relative-time') }) + + it('renders a date inside', () => { + const date = new Date('2024-03-07T12:22:48.123Z') + expect(render().children).toEqual(['Mar 7, 2024']) + }) + + it('renders a datetime inside', () => { + const date = new Date('2024-03-07T12:22:48.123Z') + expect(render().children).toEqual(['Mar 7, 2024']) + }) })