Fix infinite spinner during tax selection (#3397)

This commit is contained in:
Paweł Chyła 2023-03-21 21:02:59 +01:00 committed by GitHub
parent e8534f50af
commit e22d8f0e68
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 9 deletions

View file

@ -26,7 +26,7 @@ const offset = 24;
export type ChoiceValue = string; export type ChoiceValue = string;
export interface SingleAutocompleteChoiceType< export interface SingleAutocompleteChoiceType<
V extends ChoiceValue = ChoiceValue, V extends ChoiceValue = ChoiceValue,
L = string L = string,
> { > {
label: L; label: L;
value: V; value: V;
@ -137,7 +137,9 @@ function getChoiceIndex(
const sliceSize = 20; const sliceSize = 20;
const SingleAutocompleteSelectFieldContent: React.FC<SingleAutocompleteSelectFieldContentProps> = props => { const SingleAutocompleteSelectFieldContent: React.FC<
SingleAutocompleteSelectFieldContentProps
> = props => {
const { const {
add, add,
choices, choices,
@ -179,13 +181,16 @@ const SingleAutocompleteSelectFieldContent: React.FC<SingleAutocompleteSelectFie
if (!onFetchMore) { if (!onFetchMore) {
setSlice(sliceSize); setSlice(sliceSize);
} }
}, [choices?.length]);
React.useEffect(() => {
if (anchor.current?.scrollTo && !initialized) { if (anchor.current?.scrollTo && !initialized) {
anchor.current.scrollTo({ anchor.current.scrollTo({
top: 0, top: 0,
}); });
setInitialized(true); setInitialized(true);
} }
}, [choices?.length]); }, [initialized]);
React.useEffect(() => { React.useEffect(() => {
setInitialized(false); setInitialized(false);
@ -280,7 +285,7 @@ const SingleAutocompleteSelectFieldContent: React.FC<SingleAutocompleteSelectFie
); );
const key = React.isValidElement(suggestion.label) const key = React.isValidElement(suggestion.label)
? `${index}${suggestion.value}${ ? `${index}${suggestion.value}${
((suggestion as unknown) as ReactElement).props (suggestion as unknown as ReactElement).props
}` }`
: JSON.stringify(suggestion); : JSON.stringify(suggestion);

View file

@ -18,21 +18,40 @@ interface UseTaxClassFetchMoreHookResult {
* @returns fetchMore - props for paginated components, e.g. dropdowns * @returns fetchMore - props for paginated components, e.g. dropdowns
*/ */
export function useTaxClassFetchMore(): UseTaxClassFetchMoreHookResult { export function useTaxClassFetchMore(): UseTaxClassFetchMoreHookResult {
const { data, loading, fetchMore } = useTaxClassAssignQuery({ const { data, loading, loadMore, variables } = useTaxClassAssignQuery({
variables: { variables: {
first: 20, first: 10,
}, },
}); });
const taxClasses = mapEdgesToItems(data?.taxClasses); const taxClasses = mapEdgesToItems(data?.taxClasses);
const fetchMoreTaxClasses = { const fetchMoreTaxClasses = {
hasMore: data?.taxClasses?.pageInfo?.hasNextPage, hasMore: data?.taxClasses?.pageInfo?.hasNextPage,
loading, loading,
onFetchMore: () => { onFetchMore: () => {
fetchMore({ loadMore(
variables: { (prev, next) => {
if (
prev.taxClasses.pageInfo.endCursor ===
next.taxClasses.pageInfo.endCursor
) {
return prev;
}
return {
...prev,
taxClasses: {
...prev.taxClasses,
edges: [...prev.taxClasses.edges, ...next.taxClasses.edges],
pageInfo: next.taxClasses.pageInfo,
},
};
},
{
...variables,
after: data?.taxClasses?.pageInfo?.endCursor, after: data?.taxClasses?.pageInfo?.endCursor,
}, },
}); );
}, },
}; };