@vlsergey/react-bootstrap-pagetable
Version:
Complex solution to work with pageable data, including sorting, filtering, actions, changing displayed columns, etc.
38 lines (34 loc) • 1.02 kB
text/typescript
import Page from './Page';
interface SpringDataApiResponseType<K extends string, T> {
_embedded: {
[P in K]: T[];
};
page: {
size: number;
totalElements: number;
totalPages: number;
number: number;
};
}
export default function springDataRestResponseToPage<K extends string, T> (
key: K, response: SpringDataApiResponseType<K, T>
): Page<T> {
const _embedded = response._embedded;
if (!_embedded) {
throw new Error('Missing property \'_embedded\' in response object');
}
const content = _embedded[key];
if (content === null || content === undefined) {
throw new Error(`Missing property '${key}' in response '_embedded' object property`);
}
if (!Array.isArray(content)) {
throw new Error(`Property '${key}' in response '_embedded' object property is not an array`);
}
const {number, totalElements, totalPages} = response.page;
return {
content,
number,
totalElements,
totalPages,
} as Page<T>;
}