Fix infinite spinner during tax selection (#3397)
This commit is contained in:
parent
e8534f50af
commit
e22d8f0e68
2 changed files with 33 additions and 9 deletions
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
},
|
},
|
||||||
});
|
);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue