UNPKG

@ngx-resource/core

Version:
93 lines 11.5 kB
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=