33 lines
722 B
TypeScript
33 lines
722 B
TypeScript
/**
|
|
* External dependencies
|
|
*/
|
|
import { useRef, useEffect } from '@wordpress/element';
|
|
|
|
interface Validation< T > {
|
|
( value: T, previousValue: T | undefined ): boolean;
|
|
}
|
|
/**
|
|
* Use Previous based on https://usehooks.com/useprevious/.
|
|
*
|
|
* @param {*} value
|
|
* @param {Function} [validation] Function that needs to validate for the value
|
|
* to be updated.
|
|
*/
|
|
export function usePrevious< T >(
|
|
value: T,
|
|
validation?: Validation< T >
|
|
): T | undefined {
|
|
const ref = useRef< T >();
|
|
|
|
useEffect( () => {
|
|
if (
|
|
ref.current !== value &&
|
|
( ! validation || validation( value, ref.current ) )
|
|
) {
|
|
ref.current = value;
|
|
}
|
|
}, [ value, validation ] );
|
|
|
|
return ref.current;
|
|
}
|