@reactionable/amplify
Version:
Reactionable package for Amplify
45 lines • 1.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.queryList = void 0;
const tslib_1 = require("tslib");
const Query_1 = require("../query/Query");
function queryList(options) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
return fetchListData([], options);
});
}
exports.queryList = queryList;
function fetchListData(items, options) {
var _a;
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const result = yield (0, Query_1.query)(Object.assign(Object.assign({}, options), { rawData: true }));
const data = extractListData(result);
items.push(...data.items);
// Aws do not apply filters before applying limit
const limit = (_a = options === null || options === void 0 ? void 0 : options.variables) === null || _a === void 0 ? void 0 : _a.limit;
const limitNotReached = limit && items.length - 1 < limit;
const shouldFetchMore = data.nextToken && (options.queryAll || limitNotReached);
if (!shouldFetchMore) {
return Object.assign(Object.assign({}, data), { items });
}
return fetchListData(items, Object.assign(Object.assign({}, 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 === null || data === void 0 ? void 0 : data.items);
}
//# sourceMappingURL=QueryList.js.map