37 lines
1.0 KiB
TypeScript
37 lines
1.0 KiB
TypeScript
import { useEffect, useState } from 'react';
|
|
import { REFETCH_DELAY } from './constants';
|
|
|
|
/**
|
|
* Хук, для управления состоянием повторного запроса данных.
|
|
* @param refetch Функция повторного запроса данных.
|
|
* @returns Состояние блокировки кнопки повторного запроса данных.
|
|
*/
|
|
function useRefetchData(refetch: () => void) {
|
|
const [disabledRefetchButton, setDisabled] = useState(false);
|
|
const [isAbleToRefetchData, setIsAbleToRefetchData] = useState(true);
|
|
|
|
const refetchData = () => {
|
|
refetch();
|
|
setIsAbleToRefetchData(false);
|
|
};
|
|
|
|
useEffect(() => {
|
|
if (isAbleToRefetchData) {
|
|
return;
|
|
}
|
|
|
|
setDisabled(true);
|
|
|
|
const timer = setTimeout(() => {
|
|
setDisabled(false);
|
|
setIsAbleToRefetchData(true);
|
|
}, REFETCH_DELAY);
|
|
|
|
return () => clearTimeout(timer);
|
|
}, [isAbleToRefetchData]);
|
|
|
|
return { disabledRefetchButton, refetchData };
|
|
}
|
|
|
|
export { useRefetchData };
|