mirror of https://github.com/portainer/portainer
28 lines
646 B
TypeScript
28 lines
646 B
TypeScript
|
import { useRef } from 'react';
|
||
|
import { TestContext, TestFunction } from 'yup';
|
||
|
|
||
|
function cacheTest<T, TContext>(
|
||
|
asyncValidate: TestFunction<T, TContext>
|
||
|
): TestFunction<T, TContext> {
|
||
|
let valid = true;
|
||
|
let value: T | undefined;
|
||
|
|
||
|
return async (newValue: T, context: TestContext<TContext>) => {
|
||
|
if (newValue !== value) {
|
||
|
value = newValue;
|
||
|
|
||
|
const response = await asyncValidate.call(context, newValue, context);
|
||
|
valid = !!response;
|
||
|
}
|
||
|
return valid;
|
||
|
};
|
||
|
}
|
||
|
|
||
|
export function useCachedValidation<T, TContext>(
|
||
|
test: TestFunction<T, TContext>
|
||
|
) {
|
||
|
const ref = useRef(cacheTest(test));
|
||
|
|
||
|
return ref.current;
|
||
|
}
|