import { LogicalRangeChangeEventHandler, MouseEventHandler, SizeChangeEventHandler, TimeRangeChangeEventHandler, } from 'lightweight-charts'; import { useEffect } from 'react'; import { useChart } from '../../hooks/useChart'; /** * Subscribe `handler` via `chart.subscribeClick()`. * * ❗Only use inside ``. */ export const ChartOnClickSubscriber = ({ handler, }: { handler: MouseEventHandler; }) => { const { chart } = useChart(); useEffect(() => { chart?.subscribeClick(handler); return () => chart?.unsubscribeClick(handler); }, [chart, handler]); return null; }; /** * Subscribe `handler` via `chart.subscribeCrosshairMove()`. * * ❗Only use inside ``. */ export const ChartOnCrosshairMoveSubscriber = ({ handler, }: { handler: MouseEventHandler; }) => { const { chart } = useChart(); useEffect(() => { chart?.subscribeCrosshairMove(handler); return () => chart?.unsubscribeCrosshairMove(handler); }, [chart, handler]); return null; }; /** * Subscribe `handler` via `chart.timeScale().subscribeSizeChange()`. * * ❗Only use inside ``. */ export const TimeScaleOnSizeChangeSubscriber = ({ handler, }: { handler: SizeChangeEventHandler; }) => { const { chart } = useChart(); useEffect(() => { chart?.timeScale().subscribeSizeChange(handler); return () => chart?.timeScale().unsubscribeSizeChange(handler); }, [chart, handler]); return null; }; /** * Subscribe `handler` via `chart.timeScale().subscribeVisibleTimeRangeChange()`. * * ❗Only use inside ``. */ export const TimeScaleOnVisibleTimeRangeChangeSubscriber = ({ handler, }: { handler: TimeRangeChangeEventHandler; }) => { const { chart } = useChart(); useEffect(() => { chart?.timeScale().subscribeVisibleTimeRangeChange(handler); return () => chart?.timeScale().unsubscribeVisibleTimeRangeChange(handler); }, [chart, handler]); return null; }; /** * Subscribe `handler` via `chart.timeScale().subscribeVisibleLogicalRangeChange()`. * * ❗Only use inside ``. */ export const TimeScaleOnVisibleLogicalRangeChangeSubscriber = ({ handler, }: { handler: LogicalRangeChangeEventHandler; }) => { const { chart } = useChart(); useEffect(() => { chart?.timeScale().subscribeVisibleLogicalRangeChange(handler); return () => chart?.timeScale().unsubscribeVisibleLogicalRangeChange(handler); }, [chart, handler]); return null; };