@@ -9,6 +9,45 @@ const userSelectOffStyle = { userSelect: "none" }
99
1010const Container = styled ( "div" ) ( { } )
1111
12+ const reduceForVisibleDuration = ( data , startTime , visibleDuration ) => {
13+ const firstInnerIndex = data . findIndex ( ( [ t ] ) => t >= startTime )
14+ let visibleSamples = data
15+ . slice ( firstInnerIndex )
16+ . findIndex ( ( [ t ] ) => t >= startTime + visibleDuration )
17+ visibleSamples =
18+ visibleSamples === - 1 ? data . length - firstInnerIndex : visibleSamples
19+ const lastInnerIndex = firstInnerIndex + visibleSamples
20+
21+ data = data . slice ( Math . max ( 0 , firstInnerIndex - 1 ) , lastInnerIndex + 1 )
22+
23+ const minDistance = visibleDuration / 200
24+ const points = [ data [ 0 ] ]
25+ let lastAddedPointIndex = 0
26+ for ( let i = 1 ; i < data . length ; i ++ ) {
27+ if ( data [ i ] [ 0 ] - points [ points . length - 1 ] [ 0 ] > minDistance ) {
28+ // points.push(data[i])
29+ const timeSinceLastPoint = data [ i ] [ 0 ] - points [ points . length - 1 ] [ 0 ]
30+
31+ points . push ( [
32+ data [ i ] [ 0 ] - timeSinceLastPoint / 2 ,
33+ Math . max (
34+ ...data . slice ( lastAddedPointIndex + 1 , i + 1 ) . map ( ( [ , v ] ) => v )
35+ ) ,
36+ ] )
37+
38+ points . push ( [
39+ data [ i ] [ 0 ] ,
40+ Math . min (
41+ ...data . slice ( lastAddedPointIndex + 1 , i + 1 ) . map ( ( [ , v ] ) => v )
42+ ) ,
43+ ] )
44+
45+ lastAddedPointIndex = i
46+ }
47+ }
48+ return points
49+ }
50+
1251export const Wave = ( {
1352 curves,
1453 width,
@@ -124,7 +163,11 @@ export const Wave = ({
124163 key = { i }
125164 stroke = { curve . color }
126165 fill = "transparent"
127- points = { curve . data
166+ points = { reduceForVisibleDuration (
167+ curve . data ,
168+ startTimeOnGraph ,
169+ visibleDuration
170+ )
128171 . map ( ( [ t , y ] ) => {
129172 const p = transformMatrix . applyToPoint ( t , y )
130173 return `${ p . x } ,${ p . y } `
0 commit comments