@acaprojects/a2-composer
Version:
Angular 2 Interface for composer
239 lines • 9.44 kB
JavaScript
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