Skip to content

Commit 7185f8b

Browse files
keithamuslukasoppermann
authored andcommitted
automatically provide localised Date for SSR in RelativeTime (#4305)
* automatically provide localised Date for SSR in RelativeTime * changeset * fix and add tests * format * fix types
1 parent 6334429 commit 7185f8b

File tree

3 files changed

+28
-2
lines changed

3 files changed

+28
-2
lines changed

.changeset/honest-feet-shop.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@primer/react': patch
3+
---
4+
5+
Render SSR date for RelativeTime
Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,19 @@
1+
import React from 'react'
12
import {RelativeTimeElement} from '@github/relative-time-element'
23
import type {ComponentProps} from '../utils/types'
34
import {createComponent} from '../utils/custom-element'
45

5-
const RelativeTime = createComponent(RelativeTimeElement, 'relative-time')
6+
const RelativeTimeComponent = createComponent(RelativeTimeElement, 'relative-time')
67

7-
export type RelativeTimeProps = ComponentProps<typeof RelativeTime>
8+
const localeOptions: Intl.DateTimeFormatOptions = {month: 'short', day: 'numeric', year: 'numeric'}
9+
function RelativeTime({date, datetime, ...props}: RelativeTimeProps) {
10+
if (datetime) date = new Date(datetime)
11+
return (
12+
<RelativeTimeComponent {...props} date={date}>
13+
{date?.toLocaleDateString('en', localeOptions) || ''}
14+
</RelativeTimeComponent>
15+
)
16+
}
17+
18+
export type RelativeTimeProps = ComponentProps<typeof RelativeTimeComponent>
819
export default RelativeTime

packages/react/src/__tests__/RelativeTime.test.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,14 @@ describe('RelativeTime', () => {
2020
it('renders a <relative-time>', () => {
2121
expect(render(<RelativeTime />).type).toEqual('relative-time')
2222
})
23+
24+
it('renders a date inside', () => {
25+
const date = new Date('2024-03-07T12:22:48.123Z')
26+
expect(render(<RelativeTime date={date} />).children).toEqual(['Mar 7, 2024'])
27+
})
28+
29+
it('renders a datetime inside', () => {
30+
const date = new Date('2024-03-07T12:22:48.123Z')
31+
expect(render(<RelativeTime datetime={date.toJSON()} />).children).toEqual(['Mar 7, 2024'])
32+
})
2333
})

0 commit comments

Comments
 (0)