@ngx-resource/core
Version:
Core of resource library
93 lines • 11.5 kB
JavaScript
import { ResourceHelper } from './ResourceHelper';
export class ResourceModel {
constructor() {
this.$resolved = true;
this.$promise = null;
this.$idField = 'id';
}
static get(id) {
// tslint:disable-next-line: prefer-immediate-return
const p = this.getInstance()[this.methodGet]({ id });
return p;
}
static query(query) {
// tslint:disable-next-line: prefer-immediate-return
const p = this.getInstance()[this.methodQuery](query);
return p;
}
static remove(id) {
// tslint:disable-next-line: prefer-immediate-return
const p = this.getInstance()[this.methodRemove]({ id });
return p;
}
static getInstance() {
if (!this.resourceInstance) {
const model = (new this());
if (!model.$resource) {
throw new Error('Your resource is not defined');
}
if (!model.$resource.instance) {
throw new Error('Your resource is not created (inject it somewhere)');
}
this.resourceInstance = (new this()).$resource.instance;
}
return this.resourceInstance;
}
$setData(data) {
Object.assign(this, data);
return this;
}
$save(query, params) {
if (this.isNew()) {
return this.$create(query, params);
}
else {
return this.$update(query, params);
}
}
$create(query, params) {
return this.$executeResourceMethod(this.constructor.methodCreate, query, params);
}
$update(query, params) {
return this.$executeResourceMethod(this.constructor.methodUpdate, query, params);
}
$remove(query, params) {
return this.$executeResourceMethod(this.constructor.methodRemove, query, params);
}
toJSON() {
return ResourceHelper.cleanData(this);
}
isNew() {
return !this[this.$idField];
}
$getResourceWithMethodCheck(methodName) {
if (!this.$resource) {
console.error(`Your Resource is not defined`);
return null;
}
const restInstance = this.$resource.instance;
if (!restInstance) {
console.error(`Your Resource is not defined or not created`);
return null;
}
if (!restInstance[methodName]) {
console.error(`Your Resource has no implemented ${methodName} method.`);
return null;
}
return restInstance;
}
$executeResourceMethod(methodName, query, params) {
const resource = this.$getResourceWithMethodCheck(methodName);
if (resource) {
resource[methodName](this, query, params);
}
return this;
}
}
ResourceModel.resourceInstance = null;
ResourceModel.methodQuery = 'query';
ResourceModel.methodGet = 'get';
ResourceModel.methodCreate = 'create';
ResourceModel.methodUpdate = 'update';
ResourceModel.methodRemove = 'remove';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzb3VyY2VNb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXNvdXJjZS9jb3JlL3NyYy9saWIvUmVzb3VyY2VNb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHbEQsTUFBTSxPQUFnQixhQUFhO0lBQW5DO1FBYUUsY0FBUyxHQUFHLElBQUksQ0FBQztRQUNqQixhQUFRLEdBQXdCLElBQUksQ0FBQztRQUdyQyxhQUFRLEdBQUcsSUFBSSxDQUFDO0lBcUhsQixDQUFDO0lBbkhDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBbUI7UUFDNUIsb0RBQW9EO1FBQ3BELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDO1FBRW5ELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBVztRQUN0QixvREFBb0Q7UUFDcEQsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV0RCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQW1CO1FBQy9CLG9EQUFvRDtRQUNwRCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQztRQUV0RCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFTyxNQUFNLENBQUMsV0FBVztRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBRTFCLE1BQU0sS0FBSyxHQUFr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QUksQ0FBQztJQUNkLENBQUM7O0FBaklNLDhCQUFnQixHQUE4QyxJQUFJLENBQUM7QUFFekQseUJBQVcsR0FBRyxPQUFPLENBQUM7QUFDdEIsdUJBQVMsR0FBRyxLQUFLLENBQUM7QUFDbEIsMEJBQVksR0FBRyxRQUFRLENBQUM7QUFDeEIsMEJBQVksR0FBRyxRQUFRLENBQUM7QUFDeEIsMEJBQVksR0FBRyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXNvdXJjZUhlbHBlciB9IGZyb20gJy4vUmVzb3VyY2VIZWxwZXInO1xuaW1wb3J0IHsgUmVzb3VyY2VDUlVEUHJvbWlzZSB9IGZyb20gJy4vUmVzb3VyY2VDb21tb24vUmVzb3VyY2VDUlVEUHJvbWlzZSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSZXNvdXJjZU1vZGVsIHtcblxuICBzdGF0aWMgcmVzb3VyY2VJbnN0YW5jZTogUmVzb3VyY2VDUlVEUHJvbWlzZTxhbnksIGFueSwgYW55PiB8IG51bGwgPSBudWxsO1xuXG4gIHByb3RlY3RlZCBzdGF0aWMgbWV0aG9kUXVlcnkgPSAncXVlcnknO1xuICBwcm90ZWN0ZWQgc3RhdGljIG1ldGhvZEdldCA9ICdnZXQnO1xuICBwcm90ZWN0ZWQgc3RhdGljIG1ldGhvZENyZWF0ZSA9ICdjcmVhdGUnO1xuICBwcm90ZWN0ZWQgc3RhdGljIG1ldGhvZFVwZGF0ZSA9ICd1cGRhdGUnO1xuICBwcm90ZWN0ZWQgc3RhdGljIG1ldGhvZFJlbW92ZSA9ICdyZW1vdmUnO1xuXG5cbiAgYWJzdHJhY3QgcmVhZG9ubHkgJHJlc291cmNlOiBhbnk7XG5cbiAgJHJlc29sdmVkID0gdHJ1ZTtcbiAgJHByb21pc2U6IFByb21pc2U8YW55PiB8IG51bGwgPSBudWxsO1xuICAkYWJvcnQ6ICgpID0+IHZvaWQ7XG5cbiAgJGlkRmllbGQgPSAnaWQnO1xuXG4gIHN0YXRpYyBnZXQoaWQ6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8YW55PiB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBwcmVmZXItaW1tZWRpYXRlLXJldHVyblxuICAgIGNvbnN0IHAgPSB0aGlzLmdldEluc3RhbmNlKClbdGhpcy5tZXRob2RHZXRdKHtpZH0pO1xuXG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICBzdGF0aWMgcXVlcnkocXVlcnk/OiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogcHJlZmVyLWltbWVkaWF0ZS1yZXR1cm5cbiAgICBjb25zdCBwID0gdGhpcy5nZXRJbnN0YW5jZSgpW3RoaXMubWV0aG9kUXVlcnldKHF1ZXJ5KTtcblxuICAgIHJldHVybiBwO1xuICB9XG5cbiAgc3RhdGljIHJlbW92ZShpZDogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBwcmVmZXItaW1tZWRpYXRlLXJldHVyblxuICAgIGNvbnN0IHAgPSB0aGlzLmdldEluc3RhbmNlKClbdGhpcy5tZXRob2RSZW1vdmVdKHtpZH0pO1xuXG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXRJbnN0YW5jZSgpOiBhbnkge1xuICAgIGlmICghdGhpcy5yZXNvdXJjZUluc3RhbmNlKSB7XG5cbiAgICAgIGNvbnN0IG1vZGVsOiBSZXNvdXJjZU1vZGVsID0gKG5ldyAodGhpcyBhcyBhbnkpKCkpO1xuXG4gICAgICBpZiAoIW1vZGVsLiRyZXNvdXJjZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdXIgcmVzb3VyY2UgaXMgbm90IGRlZmluZWQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFtb2RlbC4kcmVzb3VyY2UuaW5zdGFuY2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3VyIHJlc291cmNlIGlzIG5vdCBjcmVhdGVkIChpbmplY3QgaXQgc29tZXdoZXJlKScpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlc291cmNlSW5zdGFuY2UgPSAobmV3ICh0aGlzIGFzIGFueSkoKSkuJHJlc291cmNlLmluc3RhbmNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlc291cmNlSW5zdGFuY2U7XG4gIH1cblxuXG4gIHB1YmxpYyAkc2V0RGF0YShkYXRhOiBhbnkpIHtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIGRhdGEpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgJHNhdmUocXVlcnk/OiBhbnksIHBhcmFtcz86IGFueSkge1xuXG4gICAgaWYgKHRoaXMuaXNOZXcoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuJGNyZWF0ZShxdWVyeSwgcGFyYW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuJHVwZGF0ZShxdWVyeSwgcGFyYW1zKTtcbiAgICB9XG5cbiAgfVxuXG4gIHB1YmxpYyAkY3JlYXRlKHF1ZXJ5PzogYW55LCBwYXJhbXM/OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy4kZXhlY3V0ZVJlc291cmNlTWV0aG9kKCh0aGlzLmNvbnN0cnVjdG9yIGFzIGFueSkubWV0aG9kQ3JlYXRlLCBxdWVyeSwgcGFyYW1zKTtcbiAgfVxuXG4gIHB1YmxpYyAkdXBkYXRlKHF1ZXJ5PzogYW55LCBwYXJhbXM/OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy4kZXhlY3V0ZVJlc291cmNlTWV0aG9kKCh0aGlzLmNvbnN0cnVjdG9yIGFzIGFueSkubWV0aG9kVXBkYXRlLCBxdWVyeSwgcGFyYW1zKTtcbiAgfVxuXG4gIHB1YmxpYyAkcmVtb3ZlKHF1ZXJ5PzogYW55LCBwYXJhbXM/OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy4kZXhlY3V0ZVJlc291cmNlTWV0aG9kKCh0aGlzLmNvbnN0cnVjdG9yIGFzIGFueSkubWV0aG9kUmVtb3ZlLCBxdWVyeSwgcGFyYW1zKTtcbiAgfVxuXG4gIHB1YmxpYyB0b0pTT04oKTogYW55IHtcbiAgICByZXR1cm4gUmVzb3VyY2VIZWxwZXIuY2xlYW5EYXRhKHRoaXMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzTmV3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhKHRoaXMgYXMgYW55KVt0aGlzLiRpZEZpZWxkXTtcbiAgfVxuXG4gIHByb3RlY3RlZCAkZ2V0UmVzb3VyY2VXaXRoTWV0aG9kQ2hlY2sobWV0aG9kTmFtZTogc3RyaW5nKTogYW55IHtcblxuICAgIGlmICghdGhpcy4kcmVzb3VyY2UpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFlvdXIgUmVzb3VyY2UgaXMgbm90IGRlZmluZWRgKTtcblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdEluc3RhbmNlID0gdGhpcy4kcmVzb3VyY2UuaW5zdGFuY2U7XG5cbiAgICBpZiAoIXJlc3RJbnN0YW5jZSkge1xuICAgICAgY29uc29sZS5lcnJvcihgWW91ciBSZXNvdXJjZSBpcyBub3QgZGVmaW5lZCBvciBub3QgY3JlYXRlZGApO1xuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIXJlc3RJbnN0YW5jZVttZXRob2ROYW1lXSkge1xuICAgICAgY29uc29sZS5lcnJvcihgWW91ciBSZXNvdXJjZSBoYXMgbm8gaW1wbGVtZW50ZWQgJHttZXRob2ROYW1lfSBtZXRob2QuYCk7XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiByZXN0SW5zdGFuY2U7XG5cbiAgfVxuXG4gIHByb3RlY3RlZCAkZXhlY3V0ZVJlc291cmNlTWV0aG9kKG1ldGhvZE5hbWU6IHN0cmluZywgcXVlcnk/OiBhbnksIHBhcmFtcz86IGFueSkge1xuXG4gICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLiRnZXRSZXNvdXJjZVdpdGhNZXRob2RDaGVjayhtZXRob2ROYW1lKTtcblxuICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgcmVzb3VyY2VbbWV0aG9kTmFtZV0odGhpcywgcXVlcnksIHBhcmFtcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuXG59XG4iXX0=