@netgrif/components-core
Version:
Netgrif Application engine frontend core Angular library
47 lines • 9.73 kB
JavaScript
import { forkJoin, of } from 'rxjs';
import { HttpParams } from '@angular/common/http';
import { concatMap, map } from 'rxjs/operators';
import { hasContent } from './page-has-content';
import { PaginationParams } from './pagination-params';
/**
* Loads all pages from the given endpoint and returns their content as one array
* @param source the method that is used to load an individual page, it must support pagination parameters
* @param filter the filter/query object that is used to specify the requested objects. The `source` argument must accept this filter.
* @param pagination configuration of the initial pagination.
* Pages will be loaded from the provided page number onwards, page size will be upheld.
* @returns content of all pages from the given page onwards (or from the start if no `pagination` argument was provided) as a single Array
*/
export function loadAllPages(source, filter, pagination) {
const basePagination = pagination ? pagination : { number: 0, size: 20, totalPages: undefined, totalElements: undefined };
return source(filter, paginationParams(basePagination)).pipe(map(page => {
basePagination.totalPages = page.pagination.totalPages;
const pages = {};
pages[basePagination.number] = (of(page.content));
if (basePagination.number < basePagination.totalPages) {
for (let pn = basePagination.number + 1; pn < basePagination.totalPages; pn++) {
const pagin = Object.assign({}, basePagination, { number: pn });
pages[pn] = mapToContent(source, filter, pagin);
}
}
return forkJoin(pages);
}), concatMap(o => o), map((joined) => {
const result = [];
Object.values(joined).filter(v => Array.isArray(v)).forEach(arr => result.push(...arr));
return result;
}));
}
function paginationParams(basePagination, pageNumber) {
let params = new HttpParams();
params = params.set(PaginationParams.PAGE_SIZE, `${basePagination.size}`);
params = params.set(PaginationParams.PAGE_NUMBER, (pageNumber !== undefined ? pageNumber : basePagination.number) + '');
return params;
}
function mapToContent(source, filter, pagination) {
return source(filter, paginationParams(pagination)).pipe(map(page => {
if (hasContent(page)) {
return page.content;
}
return [];
}));
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC1hbGwtcGFnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL3V0aWxpdHkvcGFnaW5hdGlvbi9sb2FkLWFsbC1wYWdlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFjLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUk5QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFckQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUksTUFBNEQsRUFDNUQsTUFBVyxFQUNYLFVBQXVCO0lBQ25ELE1BQU0sY0FBYyxHQUFlLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUMsQ0FBQztJQUVwSSxPQUFPLE1BQU0sQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3hELEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNQLGNBQWMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFDdkQsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDbEQsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQyxVQUFVLEVBQUU7WUFDbkQsS0FBSyxJQUFJLEVBQUUsR0FBRyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsY0FBYyxDQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRTtnQkFDM0UsTUFBTSxLQUFLLEdBQWUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsY0FBYyxFQUFFLEVBQUMsTUFBTSxFQUFFLEVBQUUsRUFBQyxDQUFDLENBQUM7Z0JBQzFFLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQzthQUNuRDtTQUNKO1FBQ0QsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQ2pCLEdBQUcsQ0FBQyxDQUFDLE1BQStCLEVBQUUsRUFBRTtRQUNwQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDeEYsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQyxDQUFDLENBQ0wsQ0FBQztBQUNOLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLGNBQTBCLEVBQUUsVUFBbUI7SUFDckUsSUFBSSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztJQUM5QixNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsR0FBRyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMxRSxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN4SCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUksTUFBNEQsRUFDNUQsTUFBVyxFQUNYLFVBQXNCO0lBQzNDLE9BQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDcEQsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ1AsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQ3ZCO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDLENBQUMsQ0FDTCxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Zm9ya0pvaW4sIE9ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7UGFnZX0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9wYWdlJztcbmltcG9ydCB7UGFyYW1zfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvcmVzb3VyY2UtcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQge1BhZ2luYXRpb259IGZyb20gJy4uLy4uL3Jlc291cmNlcy9pbnRlcmZhY2UvcGFnaW5hdGlvbic7XG5pbXBvcnQge0h0dHBQYXJhbXN9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7Y29uY2F0TWFwLCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7aGFzQ29udGVudH0gZnJvbSAnLi9wYWdlLWhhcy1jb250ZW50JztcbmltcG9ydCB7UGFnaW5hdGlvblBhcmFtc30gZnJvbSAnLi9wYWdpbmF0aW9uLXBhcmFtcyc7XG5cbi8qKlxuICogTG9hZHMgYWxsIHBhZ2VzIGZyb20gdGhlIGdpdmVuIGVuZHBvaW50IGFuZCByZXR1cm5zIHRoZWlyIGNvbnRlbnQgYXMgb25lIGFycmF5XG4gKiBAcGFyYW0gc291cmNlIHRoZSBtZXRob2QgdGhhdCBpcyB1c2VkIHRvIGxvYWQgYW4gaW5kaXZpZHVhbCBwYWdlLCBpdCBtdXN0IHN1cHBvcnQgcGFnaW5hdGlvbiBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gZmlsdGVyIHRoZSBmaWx0ZXIvcXVlcnkgb2JqZWN0IHRoYXQgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSByZXF1ZXN0ZWQgb2JqZWN0cy4gVGhlIGBzb3VyY2VgIGFyZ3VtZW50IG11c3QgYWNjZXB0IHRoaXMgZmlsdGVyLlxuICogQHBhcmFtIHBhZ2luYXRpb24gY29uZmlndXJhdGlvbiBvZiB0aGUgaW5pdGlhbCBwYWdpbmF0aW9uLlxuICogUGFnZXMgd2lsbCBiZSBsb2FkZWQgZnJvbSB0aGUgcHJvdmlkZWQgcGFnZSBudW1iZXIgb253YXJkcywgcGFnZSBzaXplIHdpbGwgYmUgdXBoZWxkLlxuICogQHJldHVybnMgY29udGVudCBvZiBhbGwgcGFnZXMgZnJvbSB0aGUgZ2l2ZW4gcGFnZSBvbndhcmRzIChvciBmcm9tIHRoZSBzdGFydCBpZiBubyBgcGFnaW5hdGlvbmAgYXJndW1lbnQgd2FzIHByb3ZpZGVkKSBhcyBhIHNpbmdsZSBBcnJheVxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFsbFBhZ2VzPFQ+KHNvdXJjZTogKGZpbHRlcjogYW55LCBwYXJhbXM6IFBhcmFtcykgPT4gT2JzZXJ2YWJsZTxQYWdlPFQ+PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiBhbnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2luYXRpb24/OiBQYWdpbmF0aW9uKTogT2JzZXJ2YWJsZTxBcnJheTxUPj4ge1xuICAgIGNvbnN0IGJhc2VQYWdpbmF0aW9uOiBQYWdpbmF0aW9uID0gcGFnaW5hdGlvbiA/IHBhZ2luYXRpb24gOiB7bnVtYmVyOiAwLCBzaXplOiAyMCwgdG90YWxQYWdlczogdW5kZWZpbmVkLCB0b3RhbEVsZW1lbnRzOiB1bmRlZmluZWR9O1xuXG4gICAgcmV0dXJuIHNvdXJjZShmaWx0ZXIsIHBhZ2luYXRpb25QYXJhbXMoYmFzZVBhZ2luYXRpb24pKS5waXBlKFxuICAgICAgICBtYXAocGFnZSA9PiB7XG4gICAgICAgICAgICBiYXNlUGFnaW5hdGlvbi50b3RhbFBhZ2VzID0gcGFnZS5wYWdpbmF0aW9uLnRvdGFsUGFnZXM7XG4gICAgICAgICAgICBjb25zdCBwYWdlcyA9IHt9O1xuICAgICAgICAgICAgcGFnZXNbYmFzZVBhZ2luYXRpb24ubnVtYmVyXSA9IChvZihwYWdlLmNvbnRlbnQpKTtcbiAgICAgICAgICAgIGlmIChiYXNlUGFnaW5hdGlvbi5udW1iZXIgPCBiYXNlUGFnaW5hdGlvbi50b3RhbFBhZ2VzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgcG4gPSBiYXNlUGFnaW5hdGlvbi5udW1iZXIgKyAxOyBwbiA8IGJhc2VQYWdpbmF0aW9uLnRvdGFsUGFnZXM7IHBuKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFnaW46IFBhZ2luYXRpb24gPSBPYmplY3QuYXNzaWduKHt9LCBiYXNlUGFnaW5hdGlvbiwge251bWJlcjogcG59KTtcbiAgICAgICAgICAgICAgICAgICAgcGFnZXNbcG5dID0gbWFwVG9Db250ZW50KHNvdXJjZSwgZmlsdGVyLCBwYWdpbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZvcmtKb2luKHBhZ2VzKTtcbiAgICAgICAgfSksXG4gICAgICAgIGNvbmNhdE1hcChvID0+IG8pLFxuICAgICAgICBtYXAoKGpvaW5lZDoge1trOiBzdHJpbmddOiBBcnJheTxUPn0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyhqb2luZWQpLmZpbHRlcih2ID0+IEFycmF5LmlzQXJyYXkodikpLmZvckVhY2goYXJyID0+IHJlc3VsdC5wdXNoKC4uLmFycikpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSlcbiAgICApO1xufVxuXG5mdW5jdGlvbiBwYWdpbmF0aW9uUGFyYW1zKGJhc2VQYWdpbmF0aW9uOiBQYWdpbmF0aW9uLCBwYWdlTnVtYmVyPzogbnVtYmVyKTogSHR0cFBhcmFtcyB7XG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgcGFyYW1zID0gcGFyYW1zLnNldChQYWdpbmF0aW9uUGFyYW1zLlBBR0VfU0laRSwgYCR7YmFzZVBhZ2luYXRpb24uc2l6ZX1gKTtcbiAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KFBhZ2luYXRpb25QYXJhbXMuUEFHRV9OVU1CRVIsIChwYWdlTnVtYmVyICE9PSB1bmRlZmluZWQgPyBwYWdlTnVtYmVyIDogYmFzZVBhZ2luYXRpb24ubnVtYmVyKSArICcnKTtcbiAgICByZXR1cm4gcGFyYW1zO1xufVxuXG5mdW5jdGlvbiBtYXBUb0NvbnRlbnQ8VD4oc291cmNlOiAoZmlsdGVyOiBhbnksIHBhcmFtczogUGFyYW1zKSA9PiBPYnNlcnZhYmxlPFBhZ2U8VD4+LFxuICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjogYW55LFxuICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IFBhZ2luYXRpb24pOiBPYnNlcnZhYmxlPEFycmF5PFQ+PiB7XG4gICAgcmV0dXJuIHNvdXJjZShmaWx0ZXIsIHBhZ2luYXRpb25QYXJhbXMocGFnaW5hdGlvbikpLnBpcGUoXG4gICAgICAgIG1hcChwYWdlID0+IHtcbiAgICAgICAgICAgIGlmIChoYXNDb250ZW50KHBhZ2UpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhZ2UuY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfSlcbiAgICApO1xufVxuIl19