soda-material
Version:
A React(>=18) component library that may follow [Material Design 3](https://m3.material.io/components) (a.k.a. Material You)
38 lines (35 loc) • 849 B
text/typescript
import { useEffect } from 'react'
import { ripple } from './ripple-effect'
/**
* Hooks wrapper of the raw dom function
*/
export function useRippleEffect<T extends HTMLElement>(
eleRef: React.RefObject<T>,
duration?: number,
color?: string
) {
useEffect(
() =>
eleRef.current
? ripple(eleRef.current, duration, color)?.cleanup
: undefined,
[eleRef, duration, color]
)
}
/**
* @example
* ```jsx
* <div ref={useRippleRef()}> Ripple </div>
* <div ref={useMergeRefs([useRippleRef(), ...])}> Ripple </div>
* ```
*/
export function useRippleRef<T extends HTMLElement>(
duration?: number,
color?: string
) {
const refCallback: React.RefCallback<T> = (ele) => {
if (!ele) return
ripple(ele, duration, color)
}
return refCallback
}