mirror of
https://github.com/portainer/portainer.git
synced 2025-07-22 06:49:40 +02:00
refactor(app): move react components to react codebase [EE-3179] (#6971)
This commit is contained in:
parent
212400c283
commit
18252ab854
346 changed files with 642 additions and 644 deletions
42
app/react/components/datatables/useRepeater.ts
Normal file
42
app/react/components/datatables/useRepeater.ts
Normal file
|
@ -0,0 +1,42 @@
|
|||
import { useEffect, useCallback, useState } from 'react';
|
||||
|
||||
export function useRepeater(
|
||||
refreshRate: number,
|
||||
onRefresh?: () => Promise<void>
|
||||
) {
|
||||
const [intervalId, setIntervalId] = useState<NodeJS.Timeout | null>(null);
|
||||
|
||||
const stopRepeater = useCallback(() => {
|
||||
if (!intervalId) {
|
||||
return;
|
||||
}
|
||||
|
||||
clearInterval(intervalId);
|
||||
setIntervalId(null);
|
||||
}, [intervalId]);
|
||||
|
||||
const startRepeater = useCallback(
|
||||
(refreshRate) => {
|
||||
if (intervalId || !onRefresh) {
|
||||
return;
|
||||
}
|
||||
|
||||
setIntervalId(
|
||||
setInterval(async () => {
|
||||
await onRefresh();
|
||||
}, refreshRate * 1000)
|
||||
);
|
||||
},
|
||||
[intervalId, onRefresh]
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
if (!refreshRate || !onRefresh) {
|
||||
stopRepeater();
|
||||
} else {
|
||||
startRepeater(refreshRate);
|
||||
}
|
||||
|
||||
return stopRepeater;
|
||||
}, [refreshRate, startRepeater, stopRepeater, intervalId, onRefresh]);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue