saleor-dashboard/src/hooks/makeTopLevelSearch.ts

48 lines
1.1 KiB
TypeScript
Raw Normal View History

2019-11-19 15:01:54 +00:00
import { DocumentNode } from "graphql";
import { PageInfoFragment } from "@saleor/types/PageInfoFragment";
import makeSearch, { SearchVariables, UseSearchHook } from "./makeSearch";
export interface SearchData {
search: {
edges: Array<{
node: any;
}>;
pageInfo: PageInfoFragment;
};
}
function makeTopLevelSearch<
TData extends SearchData,
TVariables extends SearchVariables
>(query: DocumentNode): UseSearchHook<TData, TVariables> {
return makeSearch<TData, TVariables>(query, result => {
if (result.data.search.pageInfo.hasNextPage) {
result.loadMore(
(prev, next) => {
if (
prev.search.pageInfo.endCursor === next.search.pageInfo.endCursor
) {
return prev;
}
return {
...prev,
search: {
...prev.search,
edges: [...prev.search.edges, ...next.search.edges],
pageInfo: next.search.pageInfo
}
};
},
{
...result.variables,
after: result.data.search.pageInfo.endCursor
}
);
}
});
}
2019-11-19 15:23:17 +00:00
export default makeTopLevelSearch;