File: /var/www/html/wpmuhibbah/wp-content/plugins/give/src/Views/Components/ListTable/hooks/lagData.ts
import {useRef, useEffect, useCallback} from 'react';
// SWR middleware for keeping the data even if key changes.
export default function lagData(useSWRNext) {
return (key, fetcher, config) => {
// Use a ref to store previous returned data.
const laggyDataRef = useRef();
// Actual SWR hook.
const swr = useSWRNext(key, fetcher, config);
useEffect(() => {
// Update ref if data is not undefined.
if (swr.data !== undefined) {
laggyDataRef.current = swr.data;
}
}, [swr.data]);
// Expose a method to clear the laggy data, if any.
const resetLaggy = useCallback(() => {
laggyDataRef.current = undefined;
}, []);
// Fallback to previous data if the current data is undefined.
const dataOrLaggyData = swr.data === undefined ? laggyDataRef.current : swr.data;
// Is it showing previous data?
const isLagging = swr.data === undefined && laggyDataRef.current !== undefined;
// Also add a `isLagging` field to SWR.
return Object.assign({}, swr, {
data: dataOrLaggyData,
isLagging,
resetLaggy,
});
};
}