????JFIF??x?x????'
| Server IP : 104.21.30.238  /  Your IP : 216.73.216.83 Web Server : LiteSpeed System : Linux premium151.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64 User : tempvsty ( 647) PHP Version : 8.0.30 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /././home/tempvsty/./pontiacques.org/wp-content/plugins/give/src/Views/Components/ListTable/ | 
| Upload File : | 
import useSWR from 'swr';
import lagData from './hooks/lagData';
import useFallbackAsInitial from '@givewp/components/ListTable/hooks/useFallbackAsInitial';
export default class ListTableApi {
    private readonly apiRoot: string;
    private controller: AbortController | null;
    private readonly headers: {'X-WP-Nonce': string; 'Content-Type': string};
    private readonly swrOptions;
    constructor({apiNonce, apiRoot, preload = null, swrConfig = {}}) {
        this.controller = null;
        this.apiRoot = apiRoot;
        this.headers = {
            'Content-Type': 'application/json',
            'X-WP-Nonce': apiNonce,
        };
        this.swrOptions = {
            use: [lagData],
            ...swrConfig,
            onErrorRetry: (error, key, config, revalidate, {retryCount}) => {
                //don't retry if we cancelled the initial request
                if (error.name == 'AbortError') return;
                if (retryCount >= 5) return;
                const retryAfter = (retryCount + 1) * 500;
                setTimeout(() => revalidate({retryCount}), retryAfter);
            },
        };
        if (preload) {
            this.swrOptions.fallbackData = preload;
            this.swrOptions.use.push(useFallbackAsInitial);
        }
    }
    fetchWithArgs = (endpoint, args, method = 'GET', signal = null) => {
        const url = new URL(this.apiRoot + endpoint);
        for (const [param, value] of Object.entries(args)) {
            value !== '' && url.searchParams.set(param, value as string);
        }
        return fetch(url.href, {
            method: method,
            signal: signal,
            headers: this.headers,
        }).then((res) => {
            if (!res.ok) {
                throw new Error();
            }
            return res.json();
        });
    };
    fetcher = (params) => {
        if (this.controller instanceof AbortController) this.controller.abort();
        this.controller = new AbortController();
        return this.fetchWithArgs('', params, 'GET', this.controller.signal);
    };
    // SWR Fetcher
    useListTable = ({page, perPage, sortColumn, sortDirection, locale, testMode, ...filters}) => {
        const {data, error, mutate, isValidating} = useSWR(
            {
                page,
                perPage,
                sortColumn,
                sortDirection,
                locale,
                testMode,
                ...filters,
            },
            this.fetcher,
            this.swrOptions
        );
        return {data, error, mutate, isValidating};
    };
}