@reactionable/amplify
Version:
Reactionable package for Amplify
40 lines • 1.23 kB
JavaScript
import { query as amplifyQuery, } from "../query/Query";
export async function queryList(options) {
return fetchListData([], options);
}
async function fetchListData(items, options) {
const result = await amplifyQuery({
...options,
rawData: true,
});
const data = extractListData(result);
items.push(...data.items);
// Aws do not apply filters before applying limit
const limit = options?.variables?.limit;
const limitNotReached = limit && items.length - 1 < limit;
const shouldFetchMore = data.nextToken && (options.queryAll || limitNotReached);
if (!shouldFetchMore) {
return { ...data, items };
}
return fetchListData(items, {
...options,
// Set next token variable
variables: Object.assign(options.variables || {}, {
nextToken: data.nextToken,
}),
});
}
function extractListData(result) {
let data = result;
while (!isAmplifyListType(data)) {
if (!data) {
throw new Error("No data");
}
data = data[Object.keys(data)[0]];
}
return data;
}
function isAmplifyListType(data) {
return Array.isArray(data?.items);
}
//# sourceMappingURL=QueryList.js.map