UNPKG

@kkoehn/ngx-resource-core

Version:
94 lines 11.6 kB
import { ResourceHelper } from './ResourceHelper'; export class ResourceModel { constructor() { this.$resource = null; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzb3VyY2VNb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXNvdXJjZS9jb3JlL3NyYy9saWIvUmVzb3VyY2VNb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHbEQsTUFBTSxPQUFnQixhQUFhO0lBQW5DO1FBV1csY0FBUyxHQUFRLElBQUksQ0FBQztRQUUvQixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLGFBQVEsR0FBd0IsSUFBSSxDQUFDO1FBR3JDLGFBQVEsR0FBRyxJQUFJLENBQUM7SUFxSGxCLENBQUM7SUFuSEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFtQjtRQUM1QixvREFBb0Q7UUFDcEQsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUM7UUFFbkQsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFXO1FBQ3RCLG9EQUFvRDtRQUNwRCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXRELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBbUI7UUFDL0Isb0RBQW9EO1FBQ3BELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDO1FBRXRELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVPLE1BQU0sQ0FBQyxXQUFXO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFFMUIsTUFBTSxLQUFLLEdBQWtCLENBQUMsSUFBSyxJQUFZLEVBQUUsQ0FBQyxDQUFDO1lBRW5ELElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFO2dCQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7YUFDakQ7WUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUU7Z0JBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQzthQUN2RTtZQUVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLElBQUssSUFBWSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO1NBQ2xFO1FBRUQsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUdNLFFBQVEsQ0FBQyxJQUFTO1FBQ3ZCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTFCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVNLEtBQUssQ0FBQyxLQUFXLEVBQUUsTUFBWTtRQUVwQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNoQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3BDO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3BDO0lBRUgsQ0FBQztJQUVNLE9BQU8sQ0FBQyxLQUFXLEVBQUUsTUFBWTtRQUN0QyxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBRSxJQUFJLENBQUMsV0FBbUIsQ0FBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzVGLENBQUM7SUFFTSxPQUFPLENBQUMsS0FBVyxFQUFFLE1BQVk7UUFDdEMsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUUsSUFBSSxDQUFDLFdBQW1CLENBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBRU0sT0FBTyxDQUFDLEtBQVcsRUFBRSxNQUFZO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFFLElBQUksQ0FBQyxXQUFtQixDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUVNLE1BQU07UUFDWCxPQUFPLGNBQWMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVTLEtBQUs7UUFDYixPQUFPLENBQUUsSUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRVMsMkJBQTJCLENBQUMsVUFBa0I7UUFFdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbkIsT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1lBRTlDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUU3QyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pCLE9BQU8sQ0FBQyxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztZQUU3RCxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUM3QixPQUFPLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxVQUFVLFVBQVUsQ0FBQyxDQUFDO1lBRXhFLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxPQUFPLFlBQVksQ0FBQztJQUV0QixDQUFDO0lBRVMsc0JBQXNCLENBQUMsVUFBa0IsRUFBRSxLQUFXLEVBQUUsTUFBWTtRQUU1RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFOUQsSUFBSSxRQUFRLEVBQUU7WUFDWixRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztTQUMzQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7QUFqSU0sOEJBQWdCLEdBQThDLElBQUksQ0FBQztBQUV6RCx5QkFBVyxHQUFHLE9BQU8sQ0FBQztBQUN0Qix1QkFBUyxHQUFHLEtBQUssQ0FBQztBQUNsQiwwQkFBWSxHQUFHLFFBQVEsQ0FBQztBQUN4QiwwQkFBWSxHQUFHLFFBQVEsQ0FBQztBQUN4QiwwQkFBWSxHQUFHLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlc291cmNlSGVscGVyIH0gZnJvbSAnLi9SZXNvdXJjZUhlbHBlcic7XG5pbXBvcnQgeyBSZXNvdXJjZUNSVURQcm9taXNlIH0gZnJvbSAnLi9SZXNvdXJjZUNvbW1vbi9SZXNvdXJjZUNSVURQcm9taXNlJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJlc291cmNlTW9kZWwge1xuXG4gIHN0YXRpYyByZXNvdXJjZUluc3RhbmNlOiBSZXNvdXJjZUNSVURQcm9taXNlPGFueSwgYW55LCBhbnk+IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJvdGVjdGVkIHN0YXRpYyBtZXRob2RRdWVyeSA9ICdxdWVyeSc7XG4gIHByb3RlY3RlZCBzdGF0aWMgbWV0aG9kR2V0ID0gJ2dldCc7XG4gIHByb3RlY3RlZCBzdGF0aWMgbWV0aG9kQ3JlYXRlID0gJ2NyZWF0ZSc7XG4gIHByb3RlY3RlZCBzdGF0aWMgbWV0aG9kVXBkYXRlID0gJ3VwZGF0ZSc7XG4gIHByb3RlY3RlZCBzdGF0aWMgbWV0aG9kUmVtb3ZlID0gJ3JlbW92ZSc7XG5cblxuICByZWFkb25seSAkcmVzb3VyY2U6IGFueSA9IG51bGw7XG5cbiAgJHJlc29sdmVkID0gdHJ1ZTtcbiAgJHByb21pc2U6IFByb21pc2U8YW55PiB8IG51bGwgPSBudWxsO1xuICAkYWJvcnQ6ICgpID0+IHZvaWQ7XG5cbiAgJGlkRmllbGQgPSAnaWQnO1xuXG4gIHN0YXRpYyBnZXQoaWQ6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8YW55PiB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBwcmVmZXItaW1tZWRpYXRlLXJldHVyblxuICAgIGNvbnN0IHAgPSB0aGlzLmdldEluc3RhbmNlKClbdGhpcy5tZXRob2RHZXRdKHtpZH0pO1xuXG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICBzdGF0aWMgcXVlcnkocXVlcnk/OiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogcHJlZmVyLWltbWVkaWF0ZS1yZXR1cm5cbiAgICBjb25zdCBwID0gdGhpcy5nZXRJbnN0YW5jZSgpW3RoaXMubWV0aG9kUXVlcnldKHF1ZXJ5KTtcblxuICAgIHJldHVybiBwO1xuICB9XG5cbiAgc3RhdGljIHJlbW92ZShpZDogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBwcmVmZXItaW1tZWRpYXRlLXJldHVyblxuICAgIGNvbnN0IHAgPSB0aGlzLmdldEluc3RhbmNlKClbdGhpcy5tZXRob2RSZW1vdmVdKHtpZH0pO1xuXG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXRJbnN0YW5jZSgpOiBhbnkge1xuICAgIGlmICghdGhpcy5yZXNvdXJjZUluc3RhbmNlKSB7XG5cbiAgICAgIGNvbnN0IG1vZGVsOiBSZXNvdXJjZU1vZGVsID0gKG5ldyAodGhpcyBhcyBhbnkpKCkpO1xuXG4gICAgICBpZiAoIW1vZGVsLiRyZXNvdXJjZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdXIgcmVzb3VyY2UgaXMgbm90IGRlZmluZWQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFtb2RlbC4kcmVzb3VyY2UuaW5zdGFuY2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3VyIHJlc291cmNlIGlzIG5vdCBjcmVhdGVkIChpbmplY3QgaXQgc29tZXdoZXJlKScpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlc291cmNlSW5zdGFuY2UgPSAobmV3ICh0aGlzIGFzIGFueSkoKSkuJHJlc291cmNlLmluc3RhbmNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlc291cmNlSW5zdGFuY2U7XG4gIH1cblxuXG4gIHB1YmxpYyAkc2V0RGF0YShkYXRhOiBhbnkpIHtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIGRhdGEpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgJHNhdmUocXVlcnk/OiBhbnksIHBhcmFtcz86IGFueSkge1xuXG4gICAgaWYgKHRoaXMuaXNOZXcoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuJGNyZWF0ZShxdWVyeSwgcGFyYW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuJHVwZGF0ZShxdWVyeSwgcGFyYW1zKTtcbiAgICB9XG5cbiAgfVxuXG4gIHB1YmxpYyAkY3JlYXRlKHF1ZXJ5PzogYW55LCBwYXJhbXM/OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy4kZXhlY3V0ZVJlc291cmNlTWV0aG9kKCh0aGlzLmNvbnN0cnVjdG9yIGFzIGFueSkubWV0aG9kQ3JlYXRlLCBxdWVyeSwgcGFyYW1zKTtcbiAgfVxuXG4gIHB1YmxpYyAkdXBkYXRlKHF1ZXJ5PzogYW55LCBwYXJhbXM/OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy4kZXhlY3V0ZVJlc291cmNlTWV0aG9kKCh0aGlzLmNvbnN0cnVjdG9yIGFzIGFueSkubWV0aG9kVXBkYXRlLCBxdWVyeSwgcGFyYW1zKTtcbiAgfVxuXG4gIHB1YmxpYyAkcmVtb3ZlKHF1ZXJ5PzogYW55LCBwYXJhbXM/OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy4kZXhlY3V0ZVJlc291cmNlTWV0aG9kKCh0aGlzLmNvbnN0cnVjdG9yIGFzIGFueSkubWV0aG9kUmVtb3ZlLCBxdWVyeSwgcGFyYW1zKTtcbiAgfVxuXG4gIHB1YmxpYyB0b0pTT04oKTogYW55IHtcbiAgICByZXR1cm4gUmVzb3VyY2VIZWxwZXIuY2xlYW5EYXRhKHRoaXMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzTmV3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhKHRoaXMgYXMgYW55KVt0aGlzLiRpZEZpZWxkXTtcbiAgfVxuXG4gIHByb3RlY3RlZCAkZ2V0UmVzb3VyY2VXaXRoTWV0aG9kQ2hlY2sobWV0aG9kTmFtZTogc3RyaW5nKTogYW55IHtcblxuICAgIGlmICghdGhpcy4kcmVzb3VyY2UpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFlvdXIgUmVzb3VyY2UgaXMgbm90IGRlZmluZWRgKTtcblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdEluc3RhbmNlID0gdGhpcy4kcmVzb3VyY2UuaW5zdGFuY2U7XG5cbiAgICBpZiAoIXJlc3RJbnN0YW5jZSkge1xuICAgICAgY29uc29sZS5lcnJvcihgWW91ciBSZXNvdXJjZSBpcyBub3QgZGVmaW5lZCBvciBub3QgY3JlYXRlZGApO1xuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIXJlc3RJbnN0YW5jZVttZXRob2ROYW1lXSkge1xuICAgICAgY29uc29sZS5lcnJvcihgWW91ciBSZXNvdXJjZSBoYXMgbm8gaW1wbGVtZW50ZWQgJHttZXRob2ROYW1lfSBtZXRob2QuYCk7XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiByZXN0SW5zdGFuY2U7XG5cbiAgfVxuXG4gIHByb3RlY3RlZCAkZXhlY3V0ZVJlc291cmNlTWV0aG9kKG1ldGhvZE5hbWU6IHN0cmluZywgcXVlcnk/OiBhbnksIHBhcmFtcz86IGFueSkge1xuXG4gICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLiRnZXRSZXNvdXJjZVdpdGhNZXRob2RDaGVjayhtZXRob2ROYW1lKTtcblxuICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgcmVzb3VyY2VbbWV0aG9kTmFtZV0odGhpcywgcXVlcnksIHBhcmFtcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuXG59XG4iXX0=