import { DependencyList, useEffect } from 'react'; import { useChart } from '../../hooks/useChart'; export interface ChartFitContentTriggerProps { /** * Dependency list for retriggering the `chart.timeScale().fitContent()` function. * * ❗Should not change the array length since it will be used like * ```js * useEffect(effect, [...deps]) * ``` */ deps?: DependencyList | undefined; } /** * Utility component for triggering `chart.timeScale().fitContent()` depends on dependency list `deps`. * * ❗Only use inside ``. * Turn chart option `disableAutoContentFitOnInit = true` to prevent multiple fit content called. * @example * ```js * const App = () => { * const data = useMemo(() => getData(), []); * return ( * * * * * ); * } * ``` */ export const ChartFitContentTrigger = ({ deps = [], }: ChartFitContentTriggerProps) => { const { chart } = useChart(); useEffect(() => { if (!chart) return; // fit content in next runloop cycle to make sure the data changed if the data is in the `deps` list setTimeout(() => chart.timeScale().fitContent(), 0); }, [chart, ...deps]); // eslint-disable-line react-hooks/exhaustive-deps return null; };