File tree Expand file tree Collapse file tree 2 files changed +31
-3
lines changed Expand file tree Collapse file tree 2 files changed +31
-3
lines changed Original file line number Diff line number Diff line change @@ -3,4 +3,10 @@ import { Timeline } from './Timeline';
3
3
4
4
<Meta title = " Timeline" component = { Timeline } />
5
5
6
- <Timeline items = { [{ title: ' test' , date: new Date () }]} />
6
+ <Timeline
7
+ items = { [
8
+ { title: ' test1' , date: new Date () },
9
+ { title: ' test2' , date: new Date () },
10
+ { title: ' test3' , date: new Date () },
11
+ ]}
12
+ />
Original file line number Diff line number Diff line change 1
- import { TimelineItem , TimelineItemProps } from './TimelineItem' ;
2
1
import './Timeline.css' ;
2
+ import { useRef } from 'react' ;
3
+ import { TimelineItem , TimelineItemProps } from './TimelineItem' ;
3
4
4
5
export type TimelineProps = {
5
6
items : TimelineItemProps [ ] ;
6
7
} ;
7
8
8
9
export function Timeline ( { items } : TimelineProps ) {
10
+ const itemsRef = useRef < Map < Date , HTMLDivElement > > ( ) ;
11
+
12
+ function getRefMap ( ) {
13
+ if ( ! itemsRef . current ) {
14
+ // Initialize the Map on first usage.
15
+ itemsRef . current = new Map ( ) ;
16
+ }
17
+ return itemsRef . current ;
18
+ }
19
+
9
20
return (
10
21
< div className = "timeline" >
11
22
< div className = "timeline__line" />
12
23
{ items . map ( ( item ) => (
13
- < TimelineItem key = { item . date . toISOString ( ) } { ...item } />
24
+ < div
25
+ ref = { ( node ) => {
26
+ const map = getRefMap ( ) ;
27
+ if ( node ) {
28
+ map . set ( item . date , node ) ;
29
+ } else {
30
+ map . delete ( item . date ) ;
31
+ }
32
+ } }
33
+ >
34
+ < TimelineItem key = { item . date . toISOString ( ) } { ...item } />
35
+ </ div >
14
36
) ) }
15
37
</ div >
16
38
) ;
You can’t perform that action at this time.
0 commit comments