@vlsergey/react-bootstrap-pagetable
Version:
Complex solution to work with pageable data, including sorting, filtering, actions, changing displayed columns, etc.
73 lines (72 loc) • 3.61 kB
JavaScript
import { __awaiter, __generator, __read, __values } from "tslib";
import springDataRestResponseToPage from './springDataRestResponseToPage';
var FETCH_PARAMS = {
method: 'GET',
headers: {
Accept: 'application/json',
},
};
export default function fetchFromSpringDataRest(url, _a, responseCollectionKey) {
var page = _a.page, size = _a.size, filter = _a.filter, sort = _a.sort;
return __awaiter(this, void 0, void 0, function () {
var args, _b, _c, _d, fieldKey, filterValue, sort_1, sort_1_1, sortBy, response, json, result;
var e_1, _e, e_2, _f;
return __generator(this, function (_g) {
switch (_g.label) {
case 0:
args = new URLSearchParams();
args.append('page', String(page));
args.append('size', String(size));
if (filter) {
try {
for (_b = __values(Object.entries(filter)), _c = _b.next(); !_c.done; _c = _b.next()) {
_d = __read(_c.value, 2), fieldKey = _d[0], filterValue = _d[1];
if (typeof filterValue === 'string' || typeof filterValue === 'number') {
args.append(fieldKey, String(filterValue));
}
else {
console.warn("Unsupported filter value type for field '" + fieldKey + "': " + typeof filterValue);
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_c && !_c.done && (_e = _b.return)) _e.call(_b);
}
finally { if (e_1) throw e_1.error; }
}
}
if (sort) {
try {
for (sort_1 = __values(sort), sort_1_1 = sort_1.next(); !sort_1_1.done; sort_1_1 = sort_1.next()) {
sortBy = sort_1_1.value;
args.append('sort', sortBy.field + (sortBy.direction === 'DESC' ? ',desc' : ''));
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (sort_1_1 && !sort_1_1.done && (_f = sort_1.return)) _f.call(sort_1);
}
finally { if (e_2) throw e_2.error; }
}
}
return [4 /*yield*/, fetch(url + "?" + args.toString(), FETCH_PARAMS)];
case 1:
response = _g.sent();
if (!response.ok) {
console.trace(response);
throw new Error('Spring Data REST error: ' + response.statusText);
}
return [4 /*yield*/, response.json()];
case 2:
json = _g.sent();
result = springDataRestResponseToPage(responseCollectionKey,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
json);
return [2 /*return*/, result];
}
});
});
}