import React, { useEffect, useState, useMemo, useReducer } from 'react' import { debounce } from 'leva/plugin' import { PreviewSvg } from './StyledBezier' import type { BezierProps } from './bezier-types' const DebouncedBezierPreview = React.memo(({ value }: Pick) => { // use to forceUpdate on click const [, forceUpdate] = useReducer((x) => x + 1, 0) const plotPoints = Array(21) .fill(0) .map((_, i) => 5 + value.evaluate(i / 20) * 90) return ( {plotPoints.map((p, i) => ( ))} ) }) export function BezierPreview({ value }: Pick) { const [debouncedValue, set] = useState(value) const debounceValue = useMemo(() => debounce((v: typeof value) => set(v), 250), []) useEffect(() => void debounceValue(value), [value, debounceValue]) return }