UNPKG

@acaprojects/a2-composer

Version:
239 lines 9.44 kB
import { COMMON } from './common'; import { Resource } from './resource.class'; var ResourceFactory = (function () { function ResourceFactory(url, route_params, methods, http) { var _this = this; this.http = http; this.url = url; this.methods = methods; this.params = route_params; var keys = Object.keys(methods); for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) { var key = keys_1[_i]; var func = void 0; switch (this.methods[key].method) { case COMMON.cmd.GET: func = function (ikey) { _this[ikey] = function (params) { return _this._get(_this.methods[ikey], params); }; }; func(key); break; case COMMON.cmd.POST: func = function (ikey) { _this[ikey] = function (params, data) { return _this._post(_this.methods[ikey], params, data); }; }; func(key); break; case COMMON.cmd.PUT: func = function (ikey) { _this[ikey] = function (params, data) { return _this._put(_this.methods[ikey], params, data); }; }; func(key); break; case COMMON.cmd.DELETE: func = function (ikey) { _this[ikey] = function (params) { return _this._delete(_this.methods[ikey], params); }; }; func(key); break; } } } ResourceFactory.prototype.createUrl = function (params, url) { var gkeys = Object.keys(this.params); if (params === undefined || params === null) { params = {}; } var keys = Object.keys(params); var outUrl = url ? url : this.url; for (var _i = 0, gkeys_1 = gkeys; _i < gkeys_1.length; _i++) { var key = gkeys_1[_i]; if (this.params[key].indexOf('@') === 0) { var value = (params[this.params[key].substr(1)] ? '/' + params[this.params[key].substr(1)] : ''); outUrl = outUrl.replace('/:' + key, value); } else { var value = this.params[key] ? '/' + this.params[key] : ''; outUrl = outUrl.replace('/:' + key, value); } } var first = true; var query = '?'; for (var _a = 0, keys_2 = keys; _a < keys_2.length; _a++) { var key = keys_2[_a]; if (gkeys.indexOf(key) < 0) { if (!first) { query += '&'; } if (key && params[key]) { query += key + '=' + params[key]; first = false; } } } if (query.length > 1) { outUrl += query; } return outUrl; }; ResourceFactory.prototype.processData = function (data, url, isArray) { var result; if (isArray === true) { result = []; for (var _i = 0, data_1 = data; _i < data_1.length; _i++) { var item = data_1[_i]; result.push(new Resource(this, item, url)); } } else { result = new Resource(this, data, url); } return result; }; ResourceFactory.prototype._get = function (method, params) { var _this = this; var url = method.url ? this.createUrl(params, method.url) : this.createUrl(params); return new Promise(function (resolve, reject) { _this.__get(url, method, resolve, reject); }); }; ResourceFactory.prototype.__get = function (url, method, resolve, reject, tries) { var _this = this; if (tries === void 0) { tries = 0; } if (tries > 10) { return reject({ status: 401, message: 'No auth tokens loaded.' }); } if (this.service.authLoaded) { this.service.is_ready.then(function (ready) { if (ready) { var result_1; _this.http.get(url, method) .subscribe(function (data) { return result_1 = _this.processData(data, url, method.isArray); }, function (err) { return reject(err); }, function () { return resolve(result_1); }); } else { setTimeout(function () { _this.__get(url, method, resolve, reject, ++tries); }, 500); } }); } else { setTimeout(function () { _this.__get(url, method, resolve, reject); }, 500); } }; ResourceFactory.prototype._post = function (method, params, data) { var _this = this; var url = this.createUrl(params); return new Promise(function (resolve, reject) { _this.__post(url, method, data, resolve, reject); }); }; ResourceFactory.prototype.__post = function (url, method, req_data, resolve, reject, tries) { var _this = this; if (tries === void 0) { tries = 0; } if (tries > 10) { return reject({ status: 401, message: 'No auth tokens loaded.' }); } if (this.service.authLoaded) { this.service.is_ready.then(function (ready) { if (ready) { var result_2; _this.http.post(url, req_data, method) .subscribe(function (data) { return result_2 = _this.processData(data, url, method.isArray); }, function (err) { return reject(err); }, function () { return resolve(result_2); }); } else { setTimeout(function () { _this.__post(url, method, req_data, resolve, reject, ++tries); }, 500); } }); } else { setTimeout(function () { _this.__post(url, req_data, method, resolve, reject); }, 500); } }; ResourceFactory.prototype._put = function (method, params, data) { var _this = this; var url = this.createUrl(params); return new Promise(function (resolve, reject) { _this.__put(url, method, data, resolve, reject); }); }; ResourceFactory.prototype.__put = function (url, method, req_data, resolve, reject, tries) { var _this = this; if (tries === void 0) { tries = 0; } if (tries > 10) { return reject({ status: 401, message: 'No auth tokens loaded.' }); } if (this.service.authLoaded) { this.service.is_ready.then(function (ready) { if (ready) { var result_3; _this.http.put(url, req_data, method) .subscribe(function (data) { return result_3 = _this.processData(data, url, method.isArray); }, function (err) { return reject(err); }, function () { return resolve(result_3); }); } else { setTimeout(function () { _this.__put(url, method, req_data, resolve, reject, ++tries); }, 500); } }); } else { setTimeout(function () { _this.__put(url, method, req_data, resolve, reject); }, 500); } }; ResourceFactory.prototype._delete = function (method, params) { var _this = this; var url = this.createUrl(params); return new Promise(function (resolve, reject) { _this.__delete(url, method, resolve, reject); }); }; ResourceFactory.prototype.__delete = function (url, method, resolve, reject, tries) { var _this = this; if (tries === void 0) { tries = 0; } if (tries > 10) { return reject({ status: 401, message: 'No auth tokens loaded.' }); } if (this.service.authLoaded) { this.service.is_ready.then(function (ready) { if (ready) { var result_4; _this.http.delete(url, method) .subscribe(function (data) { return result_4 = _this.processData(data, url, method.isArray); }, function (err) { return reject(err); }, function () { return resolve(result_4); }); } else { setTimeout(function () { _this.__delete(url, method, resolve, reject, ++tries); }, 500); } }); } else { setTimeout(function () { _this.__delete(url, method, resolve, reject); }, 500); } }; ResourceFactory.prototype.auth = function () { return this.http.isLoggedIn(); }; return ResourceFactory; }()); export { ResourceFactory }; //# sourceMappingURL=resource-factory.class.js.map