import { ScaleContinuousNumeric, ScaleTime } from "d3-scale"; import { getCurrentItem } from "../utils/ChartDataUtil"; import { last } from "../utils/index"; export interface IZoomAnchorOptions { readonly plotData: TData[]; readonly mouseXY: number[]; readonly xAccessor: (data: TData) => TXAxis; readonly xScale: ScaleContinuousNumeric | ScaleTime; } export const mouseBasedZoomAnchor = ( options: IZoomAnchorOptions, ) => { const { xScale, xAccessor, mouseXY, plotData } = options; const currentItem = getCurrentItem(xScale, xAccessor, mouseXY, plotData); return xAccessor(currentItem); }; export const lastVisibleItemBasedZoomAnchor = ( options: IZoomAnchorOptions, ) => { const { xAccessor, plotData } = options; const lastItem = last(plotData); return xAccessor(lastItem); }; export const rightDomainBasedZoomAnchor = ( options: IZoomAnchorOptions, ) => { const { xScale } = options; const [, end] = xScale.domain(); return end; };