import React from 'react'; import { SharedValue, useSharedValue } from 'react-native-reanimated'; import type { TContext, TData, TDomain } from './types'; import { getDomain } from './utils'; export const CandlestickChartContext = React.createContext({ currentX: { value: -1 } as SharedValue, currentY: { value: -1 } as SharedValue, data: [], height: 0, width: 0, domain: [0, 0], step: 0, setWidth: () => undefined, setHeight: () => undefined, }); type CandlestickChartProviderProps = { children: React.ReactNode; data: TData; width?: number; height?: number; valueRangeY?: TDomain; }; export function CandlestickChartProvider({ children, data = [], valueRangeY, }: CandlestickChartProviderProps) { const [width, setWidth] = React.useState(0); const [height, setHeight] = React.useState(0); const currentX = useSharedValue(-1); const currentY = useSharedValue(-1); const domain = React.useMemo(() => valueRangeY ?? getDomain(data), [data, valueRangeY]); const step = React.useMemo(() => width / data.length, [data.length, width]) const contextValue = React.useMemo( () => ({ currentX, currentY, data, width, height, domain, step, setWidth, setHeight, }), [currentX, currentY, data, domain, height, step, width] ); return ( {children} ); } CandlestickChartProvider.displayName = 'CandlestickChartProvider';