@granito/ngx-hal-client
Version:
A HAL client to be used in Angular projects
57 lines • 6.96 kB
JavaScript
import { catchError, map } from 'rxjs';
import { Resource } from './internal';
const next = 'next';
const prev = 'prev';
/**
* This class represents an in-memory collection of resources.
*/
export class Collection extends Resource {
/**
* @param type the element resource type
* @param obj the object used to assign the properties
*/
constructor(type, obj) {
super(obj);
this.type = type;
this.start = obj.start > 0 ? Math.trunc(obj.start) : 0;
for (const rel in this._embedded) {
const values = this._embedded[rel];
if (Array.isArray(values)) {
this.values = this.arrayOf(type, values);
return;
}
}
this.values = [];
}
/**
* Follow `next` link if it exists and can be read.
*
* @returns the accessor for the link or `undefined`
*/
next() {
const accessor = this.follow(next);
return !!accessor && accessor.canRead ? accessor : undefined;
}
/**
* Follow `prev` link if it exists and can be read.
*
* @returns the accessor for the link or `undefined`
*/
previous() {
const accessor = this.follow(prev);
return !!accessor && accessor.canRead ? accessor : undefined;
}
/**
* Refresh the resource collection. In other words, read
* the resource collection identified by `self` link.
*
* @returns an observable of the refreshed resource collection instance
*/
read() {
return this.withSelf(self => this._client.get(self).pipe(map(obj => new Collection(this.type, {
...obj,
_client: this._client
})), catchError(this.handleError)));
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY29sbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWMsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQVksUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWhELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUVwQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUM7QUFFcEI7O0dBRUc7QUFDSCxNQUFNLE9BQU8sVUFBK0IsU0FBUSxRQUFRO0lBWXhEOzs7T0FHRztJQUNILFlBQTZCLElBQWEsRUFBRSxHQUFRO1FBQ2hELEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQURjLFNBQUksR0FBSixJQUFJLENBQVM7UUFHdEMsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV2RCxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMvQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRW5DLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUV6QyxPQUFPO1lBQ1gsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUk7UUFDQSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRW5DLE9BQU8sQ0FBQyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNqRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFFBQVE7UUFDSixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRW5DLE9BQU8sQ0FBQyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNqRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDTSxJQUFJO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUNwRCxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2pDLEdBQUcsR0FBRztZQUNMLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztTQUN6QixDQUFTLENBQUMsRUFDWCxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUMvQixDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFjY2Vzc29yLCBSZXNvdXJjZSB9IGZyb20gJy4vaW50ZXJuYWwnO1xuXG5jb25zdCBuZXh0ID0gJ25leHQnO1xuXG5jb25zdCBwcmV2ID0gJ3ByZXYnO1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhbiBpbi1tZW1vcnkgY29sbGVjdGlvbiBvZiByZXNvdXJjZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uPFQgZXh0ZW5kcyBSZXNvdXJjZT4gZXh0ZW5kcyBSZXNvdXJjZSB7XG4gICAgLyoqXG4gICAgICogWmVyby1iYXNlZCBvZmZzZXQgb2YgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGB2YWx1ZXNgIGFycmF5IGluXG4gICAgICogdGhlIGNvbGxlY3Rpb24uXG4gICAgICovXG4gICAgcmVhZG9ubHkgc3RhcnQ6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEEgcGFnZSBvZiB2YWx1ZXMgb2YgdGhlIGNvbGxlY3Rpb24gc3RhcnRpbmcgd2l0aCBgc3RhcnRgIG9mZnNldC5cbiAgICAgKi9cbiAgICByZWFkb25seSB2YWx1ZXM6IFRbXTtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB0eXBlIHRoZSBlbGVtZW50IHJlc291cmNlIHR5cGVcbiAgICAgKiBAcGFyYW0gb2JqIHRoZSBvYmplY3QgdXNlZCB0byBhc3NpZ24gdGhlIHByb3BlcnRpZXNcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHR5cGU6IFR5cGU8VD4sIG9iajogYW55KSB7XG4gICAgICAgIHN1cGVyKG9iaik7XG5cbiAgICAgICAgdGhpcy5zdGFydCA9IG9iai5zdGFydCA+IDAgPyBNYXRoLnRydW5jKG9iai5zdGFydCkgOiAwO1xuXG4gICAgICAgIGZvciAoY29uc3QgcmVsIGluIHRoaXMuX2VtYmVkZGVkKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLl9lbWJlZGRlZFtyZWxdO1xuXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSB0aGlzLmFycmF5T2YodHlwZSwgdmFsdWVzKTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9sbG93IGBuZXh0YCBsaW5rIGlmIGl0IGV4aXN0cyBhbmQgY2FuIGJlIHJlYWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB0aGUgYWNjZXNzb3IgZm9yIHRoZSBsaW5rIG9yIGB1bmRlZmluZWRgXG4gICAgICovXG4gICAgbmV4dCgpOiBBY2Nlc3NvciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IGFjY2Vzc29yID0gdGhpcy5mb2xsb3cobmV4dCk7XG5cbiAgICAgICAgcmV0dXJuICEhYWNjZXNzb3IgJiYgYWNjZXNzb3IuY2FuUmVhZCA/IGFjY2Vzc29yIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvbGxvdyBgcHJldmAgbGluayBpZiBpdCBleGlzdHMgYW5kIGNhbiBiZSByZWFkLlxuICAgICAqXG4gICAgICogQHJldHVybnMgdGhlIGFjY2Vzc29yIGZvciB0aGUgbGluayBvciBgdW5kZWZpbmVkYFxuICAgICAqL1xuICAgIHByZXZpb3VzKCk6IEFjY2Vzc29yIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgYWNjZXNzb3IgPSB0aGlzLmZvbGxvdyhwcmV2KTtcblxuICAgICAgICByZXR1cm4gISFhY2Nlc3NvciAmJiBhY2Nlc3Nvci5jYW5SZWFkID8gYWNjZXNzb3IgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVmcmVzaCB0aGUgcmVzb3VyY2UgY29sbGVjdGlvbi4gSW4gb3RoZXIgd29yZHMsIHJlYWRcbiAgICAgKiB0aGUgcmVzb3VyY2UgY29sbGVjdGlvbiBpZGVudGlmaWVkIGJ5IGBzZWxmYCBsaW5rLlxuICAgICAqXG4gICAgICogQHJldHVybnMgYW4gb2JzZXJ2YWJsZSBvZiB0aGUgcmVmcmVzaGVkIHJlc291cmNlIGNvbGxlY3Rpb24gaW5zdGFuY2VcbiAgICAgKi9cbiAgICBvdmVycmlkZSByZWFkKCk6IE9ic2VydmFibGU8dGhpcz4ge1xuICAgICAgICByZXR1cm4gdGhpcy53aXRoU2VsZihzZWxmID0+IHRoaXMuX2NsaWVudC5nZXQoc2VsZikucGlwZShcbiAgICAgICAgICAgIG1hcChvYmogPT4gbmV3IENvbGxlY3Rpb24odGhpcy50eXBlLCB7XG4gICAgICAgICAgICAgICAgLi4ub2JqLFxuICAgICAgICAgICAgICAgICBfY2xpZW50OiB0aGlzLl9jbGllbnRcbiAgICAgICAgICAgIH0pIGFzIHRoaXMpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxuICAgICAgICApKTtcbiAgICB9XG59XG4iXX0=