Skip to content

Commit 9c8773d

Browse files
committed
feat: reposition items on resize
1 parent 3f805b2 commit 9c8773d

File tree

3 files changed

+12
-3
lines changed

3 files changed

+12
-3
lines changed

src/components/Timeline.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
position: absolute;
2424
width: 50%;
2525
display: flex;
26+
transition: top 0.1s;
2627
}
2728

2829
.timeline-item--left {

src/components/Timeline.stories.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ export const items = [
1010
title: '1 First date',
1111
date: new Date(),
1212
children:
13-
'alsjflskdfjsdklfjsdlkjdslkjdsalfjadslkajdfsöfj fsdjf lskdfj alsfj fljsdflö dsakfjd slkfj alsjflskdfjsdklfjsdlkjdslkjdsalfjadslkajdfsöfj fsdjf lskdfj alsfj fljsdflö dsakfjd slkfj alsjflskdfjsdklfjsdlkjdslkjdsalfjadslkajdfsöfj fsdjf lskdfj alsfj fljsdflö dsakfjd slkfj alsjflskdfjsdklfjsdlkjdslkjdsalfjadslkajdfsöfj fsdjf lskdfj alsfj fljsdflö dsakfjd slkfj ',
13+
'alsjflskdf jsdklfjsdlkjd slkjdsalfjadslkajdfsöfj fsdjf lskdfj alsfj fljsdflö dsakfjd slkfj alsjflskdfjsdkl fjsdlkjdslkjds alfjadslkajdfsöfj fsdjf lskdfj alsfj fljsdflö dsakfjd slkfj alsj flskdfjsdkl fjsdlkjdslk jds alfjadslkajdfsöfj fsdjf lskdfj alsfj fljsdflö dsakfjd slkfj als jflskdfjs dklfjsdlkjdslk jdsalfjadslk ajdfsöfj fsdjf lskdfj alsfj fljsdflö dsakfjd slkfj ',
1414
},
1515
{ key: 2, title: '2 Another date', date: new Date(), children: 'askflkfjds flksjfdsölfks flkalkja sflkjdsf lsdkf sdflkajlkfs f' },
1616
{ key: 3, title: '3 A cool event', date: new Date(), children: 'askflkfjds flksjfdsölfks flkalkja sflkjdsf lsdkf sdflkajlkfs f' },

src/components/Timeline.tsx

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ export function Timeline(props: TimelineProps) {
4343
return itemsRef.current;
4444
}
4545

46-
useEffect(() => {
46+
function positionTimelineItems() {
4747
const elements = Array.from(getRefMap().values());
4848

4949
const { left, right } = resolveOffsets(offset ?? 0);
@@ -58,12 +58,14 @@ export function Timeline(props: TimelineProps) {
5858

5959
element.style.top = `${rightHeight}px`;
6060
element.classList.add('timeline-item--right');
61+
element.classList.remove('timeline-item--left');
6162
rightHeight += element.offsetHeight + (gap ?? 0);
6263
} else {
6364
rightHeight += getMarkerCompensationOffset(leftHeight, rightHeight);
6465

6566
element.style.top = `${leftHeight}px`;
6667
element.classList.add('timeline-item--left');
68+
element.classList.remove('timeline-item--right');
6769
leftHeight += element.offsetHeight + (gap ?? 0);
6870
}
6971
});
@@ -72,7 +74,13 @@ export function Timeline(props: TimelineProps) {
7274
if (timelineElement) {
7375
timelineElement.style.height = `${Math.max(leftHeight, rightHeight)}px`;
7476
}
75-
}, [itemsRef]);
77+
}
78+
79+
useEffect(() => {
80+
window.addEventListener('resize', positionTimelineItems);
81+
return () => window.removeEventListener('resize', positionTimelineItems);
82+
}, []);
83+
useEffect(positionTimelineItems, [itemsRef]);
7684

7785
return (
7886
<div className={['timeline', className].join(' ')} ref={timelineRef}>

0 commit comments

Comments
 (0)