forked from ddrilling/asb_cloud_front
33 lines
927 B
TypeScript
33 lines
927 B
TypeScript
|
import { ChartOffset, ChartRegistry } from '@components/d3/types'
|
||
|
|
||
|
export const renderNeedle = <DataType extends Record<string, unknown>>(
|
||
|
xAxis: (value: d3.NumberValue) => number,
|
||
|
yAxis: (value: d3.NumberValue) => number,
|
||
|
chart: ChartRegistry<DataType>,
|
||
|
data: DataType[],
|
||
|
height: number,
|
||
|
offset: ChartOffset
|
||
|
): DataType[] => {
|
||
|
if (chart.type !== 'needle') return data
|
||
|
|
||
|
data = data.filter(chart.y)
|
||
|
|
||
|
const currentNeedles = chart()
|
||
|
.selectAll('line')
|
||
|
.data(data)
|
||
|
|
||
|
currentNeedles.exit().remove()
|
||
|
currentNeedles.enter().append('line')
|
||
|
|
||
|
chart()
|
||
|
.selectAll('line')
|
||
|
.transition()
|
||
|
.duration(chart.animDurationMs ?? 0)
|
||
|
.attr('x1', (d: any) => xAxis(chart.x(d)))
|
||
|
.attr('x2', (d: any) => xAxis(chart.x(d)))
|
||
|
.attr('y1', height - offset.bottom - offset.top)
|
||
|
.attr('y2', (d: any) => yAxis(chart.y(d)))
|
||
|
|
||
|
return data
|
||
|
}
|