docs(changeset): Fixed memo of options in GridlerAPIAdaptor

This commit is contained in:
Hein 2025-10-23 15:58:04 +02:00
parent a50920d70e
commit cdcb5c2684
2 changed files with 123 additions and 98 deletions

View File

@ -0,0 +1,5 @@
---
'@warkypublic/oranguru': patch
---
Fixed memo of options in GridlerAPIAdaptor

View File

@ -1,5 +1,5 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import React, { useEffect } from 'react';
import React, { useCallback, useEffect } from 'react';
import type { APIOptions } from '../../utils/types';
@ -20,7 +20,8 @@ function _GlidlerAPIAdaptorForGoLangv2<T = unknown>(props: GlidlerAPIAdaptorForG
s.mounted,
]);
const useAPIQuery: (index: number) => Promise<any> = async (index: number) => {
const useAPIQuery: (index: number) => Promise<any> = useCallback(
async (index: number) => {
const colSort = getState('colSort');
const pageSize = getState('pageSize');
const colFilters = getState('colFilters');
@ -67,14 +68,21 @@ function _GlidlerAPIAdaptorForGoLangv2<T = unknown>(props: GlidlerAPIAdaptorForG
r.controller?.abort?.();
}
});
if (_active_requests && currentRequestIndex >= 0 && _active_requests[currentRequestIndex]) {
if (
_active_requests &&
currentRequestIndex >= 0 &&
_active_requests[currentRequestIndex]
) {
//console.log(`Already queued ${index}`, index, s._active_requests);
setState('loadingData', false);
return undefined;
}
const controller = new AbortController();
await setStateFN('_active_requests', (cv) => [...(cv ?? []), { controller, page: index }]);
await setStateFN('_active_requests', (cv) => [
...(cv ?? []),
{ controller, page: index },
]);
const res = await fetch(
`${props.url}?x-limit=${String(pageSize ?? 50)}&x-offset=${String((pageSize ?? 50) * index)}`,
@ -107,9 +115,12 @@ function _GlidlerAPIAdaptorForGoLangv2<T = unknown>(props: GlidlerAPIAdaptorForG
}
setState('loadingData', false);
return [];
};
},
[getState, props.authtoken, props.url, props.options, setState, setStateFN, addError]
);
const askAPIRowNumber: (key: string) => Promise<number> = async (key: string) => {
const askAPIRowNumber: (key: string) => Promise<number> = useCallback(
async (key: string) => {
const colFilters = getState('colFilters');
//console.log('APIAdaptorGoLangv2', { _active_requests, index, pageSize, props });
@ -130,6 +141,13 @@ function _GlidlerAPIAdaptorForGoLangv2<T = unknown>(props: GlidlerAPIAdaptorForG
});
}
if (props.options && props.options.length > 0) {
const optionHeaders = GoAPIHeaders(props.options);
for (const oh in optionHeaders) {
head.set(oh, optionHeaders[oh]);
}
}
const controller = new AbortController();
const res = await fetch(`${props.url}?x-fetch-rownumber=${key}}`, {
@ -146,12 +164,14 @@ function _GlidlerAPIAdaptorForGoLangv2<T = unknown>(props: GlidlerAPIAdaptorForG
addError(`${res.status} ${res.statusText}`, 'api', props.url);
}
return [];
};
},
[props.url, props.authtoken, props.options, getState, addError]
);
useEffect(() => {
setState('useAPIQuery', useAPIQuery);
setState('askAPIRowNumber', askAPIRowNumber);
}, [props.url, props.authtoken, mounted, setState]);
}, [props.url, props.authtoken, props.options, mounted, setState]);
return <></>;
}