'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _isomorphicFetch = require('isomorphic-fetch');
var _isomorphicFetch2 = _interopRequireDefault(_isomorphicFetch);
var _tmSerialize = require('tm-serialize');
var _tmSerialize2 = _interopRequireDefault(_tmSerialize);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
/**
* Reviews API JS client.
*
* In order to use Reviews API you should create an instance of this class.
* ~~~~
* import Reviews from "tm-reviews-api-client-js";
* const reviews = new Reviews ('http://api.templatemonster.com/reviews/v1', 'en');
* const list = reviews.getReviews ([12345, 55555]);
* ~~~~
* @constructor Reviews
*/
var Review = function () {
function Review(url) {
var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en';
_classCallCheck(this, Review);
this.locale = null;
this.url = null;
this.locale = locale;
this.url = url;
}
/**
* Return review information for given identifiers.
* @param params {Object} Reviews parameters
* @returns {Object} <pre>{
* "currentPageIndex":1,
* "totalCount":11,
* "lastPageIndex":6,
* "items": [
* {
* "id":23,
* "status":4,
* "user_id":21543,
* "user_name":"mice mice",
* "title":"review title",
* "content":"review content",
* "score":5,
* "template_id":58444,
* "vote_up":0,
* "vote_down":0,
* "_links":{"self":{"href":"http://service-reviews.dev/api/v1/reviews/23"}}
* }, ...]
* }</pre>
* @method Reviews#getReviews
*/
_createClass(Review, [{
key: 'getReviews',
value: function () {
var _ref = _asyncToGenerator(regeneratorRuntime.mark(function _callee() {
var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var response, paginationData;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
params = _extends({}, params, { locale: this.locale });
_context.next = 3;
return this._fetchRequest(this.url + '/reviews?' + (0, _tmSerialize2.default)(params));
case 3:
response = _context.sent;
paginationData = {
currentPageIndex: parseInt(response.headers.get('x-pagination-current-page')),
totalCount: parseInt(response.headers.get('x-pagination-total-count')),
lastPageIndex: parseInt(response.headers.get('x-pagination-page-count'))
};
_context.t0 = _extends;
_context.t1 = {};
_context.t2 = paginationData;
_context.next = 10;
return response.json();
case 10:
_context.t3 = _context.sent;
_context.t4 = {
items: _context.t3
};
return _context.abrupt('return', (0, _context.t0)(_context.t1, _context.t2, _context.t4));
case 13:
case 'end':
return _context.stop();
}
}
}, _callee, this);
}));
function getReviews() {
return _ref.apply(this, arguments);
}
return getReviews;
}()
}, {
key: 'approveReview',
/**
* Return approve review information for given identifiers.
* @param token {String} Access token
* @param id {Number} Review id
* @returns {Object} <pre>{
* "canModerate": 1,
* "item":
* {
* "id": 1,
* "title": "Really good. Html is better than cms",
* "content": "I had font problem with flash cms. Now I have no problem with html",
* "score": 5,
* "created_at": 1469607948519,
* "user_id": 123,
* "template_id": 12345,
* "status": "initial",
* "vote_up": 1,
* "vote_down": 0,
* "_links": {"self":{"href":"http://service-reviews.dev/api/v1/reviews/1"}}
* }
* }</pre>
* @method Reviews#approveReview
*/
value: function () {
var _ref2 = _asyncToGenerator(regeneratorRuntime.mark(function _callee2(token, id) {
var response, headersData;
return regeneratorRuntime.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
if (token.length) {
_context2.next = 2;
break;
}
throw new Error('Token not found');
case 2:
if (this._isValidId(id)) {
_context2.next = 4;
break;
}
throw new Error('Id is not correct');
case 4:
_context2.next = 6;
return this._fetchRequest(this.url + '/reviews/approve/' + id, token, 'POST');
case 6:
response = _context2.sent;
headersData = {
canModerate: parseInt(response.headers.get('X-CAN-MODERATE'))
};
_context2.t0 = _extends;
_context2.t1 = {};
_context2.t2 = headersData;
_context2.next = 13;
return response.json();
case 13:
_context2.t3 = _context2.sent;
_context2.t4 = {
item: _context2.t3
};
return _context2.abrupt('return', (0, _context2.t0)(_context2.t1, _context2.t2, _context2.t4));
case 16:
case 'end':
return _context2.stop();
}
}
}, _callee2, this);
}));
function approveReview(_x3, _x4) {
return _ref2.apply(this, arguments);
}
return approveReview;
}()
/**
* Return complete review information for given identifiers.
* @param token {String} Access token
* @param id {Number} Review id
* @returns {Object} <pre>{
* "canModerate": 1,
* "item":
* {
* "id": 1,
* "title": "Really good. Html is better than cms",
* "content": "I had font problem with flash cms. Now I have no problem with html",
* "score": 5,
* "created_at": 1469607948519,
* "user_id": 123,
* "template_id": 12345,
* "status": "initial",
* "vote_up": 1,
* "vote_down": 0,
* "_links": {"self":{"href":"http://service-reviews.dev/api/v1/reviews/1"}}
* }
* }</pre>
* @method Reviews#completeReview
*/
}, {
key: 'completeReview',
value: function () {
var _ref3 = _asyncToGenerator(regeneratorRuntime.mark(function _callee3(token, id) {
var response, headersData;
return regeneratorRuntime.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
if (token.length) {
_context3.next = 2;
break;
}
throw new Error('Token not found');
case 2:
if (this._isValidId(id)) {
_context3.next = 4;
break;
}
throw new Error('Id is not correct');
case 4:
_context3.next = 6;
return this._fetchRequest(this.url + '/reviews/' + id, token, 'POST');
case 6:
response = _context3.sent;
headersData = {
canModerate: parseInt(response.headers.get('X-CAN-MODERATE'))
};
_context3.t0 = _extends;
_context3.t1 = {};
_context3.t2 = headersData;
_context3.next = 13;
return response.json();
case 13:
_context3.t3 = _context3.sent;
_context3.t4 = {
item: _context3.t3
};
return _context3.abrupt('return', (0, _context3.t0)(_context3.t1, _context3.t2, _context3.t4));
case 16:
case 'end':
return _context3.stop();
}
}
}, _callee3, this);
}));
function completeReview(_x5, _x6) {
return _ref3.apply(this, arguments);
}
return completeReview;
}()
/**
* Return decline review information for given identifiers.
* @param token {String} Access token
* @param id {Number} Review id
* @returns {Object} <pre>{
* "canModerate": 1,
* "item":
* {
* "id": 1,
* "title": "Really good. Html is better than cms",
* "content": "I had font problem with flash cms. Now I have no problem with html",
* "score": 5,
* "created_at": 1469607948519,
* "user_id": 123,
* "template_id": 12345,
* "status": "initial",
* "vote_up": 1,
* "vote_down": 0,
* "_links": {"self":{"href":"http://service-reviews.dev/api/v1/reviews/1"}}
* }
* }</pre>
* @method Reviews#declineReview
*/
}, {
key: 'declineReview',
value: function () {
var _ref4 = _asyncToGenerator(regeneratorRuntime.mark(function _callee4(token, id) {
var response, headersData;
return regeneratorRuntime.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
if (token.length) {
_context4.next = 2;
break;
}
throw new Error('Token not found');
case 2:
if (this._isValidId(id)) {
_context4.next = 4;
break;
}
throw new Error('Id is not correct');
case 4:
_context4.next = 6;
return this._fetchRequest(this.url + '/reviews/decline/' + id, token, 'POST');
case 6:
response = _context4.sent;
if (!(response.status >= 400)) {
_context4.next = 9;
break;
}
throw new Error('Bad server response');
case 9:
headersData = {
canModerate: parseInt(response.headers.get('X-CAN-MODERATE'))
};
_context4.t0 = _extends;
_context4.t1 = {};
_context4.t2 = headersData;
_context4.next = 15;
return response.json();
case 15:
_context4.t3 = _context4.sent;
_context4.t4 = {
item: _context4.t3
};
return _context4.abrupt('return', (0, _context4.t0)(_context4.t1, _context4.t2, _context4.t4));
case 18:
case 'end':
return _context4.stop();
}
}
}, _callee4, this);
}));
function declineReview(_x7, _x8) {
return _ref4.apply(this, arguments);
}
return declineReview;
}()
/**
* Return added votes for the review: increment vote_up or vote_down field.
* @param token {String} Access token
* @param id {Number} Review id
* @returns {Object} <pre>{
* "canModerate": 1,
* "item":
* {
* "id": 1,
* "title": "Really good. Html is better than cms",
* "content": "I had font problem with flash cms. Now I have no problem with html",
* "score": 5,
* "created_at": 1469607948519,
* "user_id": 123,
* "template_id": 12345,
* "status": "initial",
* "vote_up": 1,
* "vote_down": 0,
* "_links": {"self":{"href":"http://service-reviews.dev/api/v1/reviews/1"}}
* }
* }</pre>
* @method Reviews#addReviewVote
*/
}, {
key: 'addReviewVote',
value: function () {
var _ref5 = _asyncToGenerator(regeneratorRuntime.mark(function _callee5(token, id) {
var response, headersData;
return regeneratorRuntime.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
if (token.length) {
_context5.next = 2;
break;
}
throw new Error('Token not found');
case 2:
if (this._isValidId(id)) {
_context5.next = 4;
break;
}
throw new Error('Id is not correct');
case 4:
_context5.next = 6;
return this._fetchRequest(this.url + '/reviews/' + id, token, 'POST');
case 6:
response = _context5.sent;
headersData = {
canModerate: parseInt(response.headers.get('X-CAN-MODERATE'))
};
_context5.t0 = _extends;
_context5.t1 = {};
_context5.t2 = headersData;
_context5.next = 13;
return response.json();
case 13:
_context5.t3 = _context5.sent;
_context5.t4 = {
item: _context5.t3
};
return _context5.abrupt('return', (0, _context5.t0)(_context5.t1, _context5.t2, _context5.t4));
case 16:
case 'end':
return _context5.stop();
}
}
}, _callee5, this);
}));
function addReviewVote(_x9, _x10) {
return _ref5.apply(this, arguments);
}
return addReviewVote;
}()
/**
* Return reply of the review information for given identifiers.
* @param token {String} Access token
* @param review_id {Number} ID of the parent review
* @returns {Object} <pre>{
* "canModerate": 1,
* "item":
* {
* "id": 1,
* "review_id": 1,
* "content": "I had font problem with flash cms. Now I have no problem with html",
* "created_at": 1469607948519,
* "user_id": 123,
* "vote_up": 0,
* "vote_down": 0,
* "_links": {"self":{"href":"http://service-reviews.dev/api/v1/reviews/1/comment/1"}}
* }
* }</pre>
* @method Reviews#replayTheReview
*/
}, {
key: 'replayTheReview',
value: function () {
var _ref6 = _asyncToGenerator(regeneratorRuntime.mark(function _callee6(token, review_id) {
var response, headersData;
return regeneratorRuntime.wrap(function _callee6$(_context6) {
while (1) {
switch (_context6.prev = _context6.next) {
case 0:
if (token.length) {
_context6.next = 2;
break;
}
throw new Error('Token not found');
case 2:
if (this._isValidId(review_id)) {
_context6.next = 4;
break;
}
throw new Error('Review id is not correct');
case 4:
_context6.next = 6;
return this._fetchRequest(this.url + '/reviews/' + review_id + '/comments', token, 'POST');
case 6:
response = _context6.sent;
headersData = {
canModerate: parseInt(response.headers.get('X-CAN-MODERATE'))
};
_context6.t0 = _extends;
_context6.t1 = {};
_context6.t2 = headersData;
_context6.next = 13;
return response.json();
case 13:
_context6.t3 = _context6.sent;
_context6.t4 = {
item: _context6.t3
};
return _context6.abrupt('return', (0, _context6.t0)(_context6.t1, _context6.t2, _context6.t4));
case 16:
case 'end':
return _context6.stop();
}
}
}, _callee6, this);
}));
function replayTheReview(_x11, _x12) {
return _ref6.apply(this, arguments);
}
return replayTheReview;
}()
/**
* Return request review comments list.
* @param review_id {Number} ID of the parent review
* @returns {Object} <pre>{
* "canModerate": 1,
* "item":
* {
* "id": 1,
* "review_id": 1,
* "content": "I had font problem with flash cms. Now I have no problem with html",
* "created_at": 1469607948519,
* "user_id": 123,
* "vote_up": 0,
* "vote_down": 0,
* "_links": {"self":{"href":"http://service-reviews.dev/api/v1/reviews/1/comment/1"}}
* }
* }</pre>
* @method Reviews#requestReviewComments
*/
}, {
key: 'requestReviewComments',
value: function () {
var _ref7 = _asyncToGenerator(regeneratorRuntime.mark(function _callee7(review_id) {
var response, headersData;
return regeneratorRuntime.wrap(function _callee7$(_context7) {
while (1) {
switch (_context7.prev = _context7.next) {
case 0:
if (this._isValidId(review_id)) {
_context7.next = 2;
break;
}
throw new Error('Review id is not correct');
case 2:
_context7.next = 4;
return this._fetchRequest(this.url + '/reviews/' + review_id + '/comments');
case 4:
response = _context7.sent;
headersData = {
canModerate: parseInt(response.headers.get('X-CAN-MODERATE'))
};
_context7.t0 = _extends;
_context7.t1 = {};
_context7.t2 = headersData;
_context7.next = 11;
return response.json();
case 11:
_context7.t3 = _context7.sent;
_context7.t4 = {
item: _context7.t3
};
return _context7.abrupt('return', (0, _context7.t0)(_context7.t1, _context7.t2, _context7.t4));
case 14:
case 'end':
return _context7.stop();
}
}
}, _callee7, this);
}));
function requestReviewComments(_x13) {
return _ref7.apply(this, arguments);
}
return requestReviewComments;
}()
/**
* Return votes of the review.
* @param token {String} Access token
* @param id {Number} ID of the comment
* @param review_id {Number} ID of the parent review
* @returns {Object} <pre>{
* "canModerate": 1,
* "item":
* {
*
* "id": 1,
* "review_id": 1,
* "content": "I had font problem with flash cms. Now I have no problem with html",
* "created_at": 1469607948519,
* "user_id": 123,
* "vote_up": 0,
* "vote_down": 0,
* "_links": {"self":{"href":"http://service-reviews.dev/api/v1/reviews/1/comment/1"}}
* }
* }</pre>
* @method Reviews#voteComments
*/
}, {
key: 'voteComments',
value: function () {
var _ref8 = _asyncToGenerator(regeneratorRuntime.mark(function _callee8(token, id, review_id) {
var response, headersData;
return regeneratorRuntime.wrap(function _callee8$(_context8) {
while (1) {
switch (_context8.prev = _context8.next) {
case 0:
if (token.length) {
_context8.next = 2;
break;
}
throw new Error('Token not found');
case 2:
if (this._isValidId(id)) {
_context8.next = 4;
break;
}
throw new Error('Id is not correct');
case 4:
if (this._isValidId(review_id)) {
_context8.next = 6;
break;
}
throw new Error('Review id is not correct');
case 6:
_context8.next = 8;
return this._fetchRequest(this.url + '/reviews/' + review_id + '/comments/' + id, token, 'POST');
case 8:
response = _context8.sent;
headersData = {
canModerate: parseInt(response.headers.get('X-CAN-MODERATE'))
};
_context8.t0 = _extends;
_context8.t1 = {};
_context8.t2 = headersData;
_context8.next = 15;
return response.json();
case 15:
_context8.t3 = _context8.sent;
_context8.t4 = {
item: _context8.t3
};
return _context8.abrupt('return', (0, _context8.t0)(_context8.t1, _context8.t2, _context8.t4));
case 18:
case 'end':
return _context8.stop();
}
}
}, _callee8, this);
}));
function voteComments(_x14, _x15, _x16) {
return _ref8.apply(this, arguments);
}
return voteComments;
}()
/**
* Check for correct id
* @param id {Number}
* @returns {boolean}
* @private
*/
}, {
key: '_isValidId',
value: function _isValidId(id) {
return typeof id == 'number' && id > 0;
}
}, {
key: '_fetchRequest',
value: function () {
var _ref9 = _asyncToGenerator(regeneratorRuntime.mark(function _callee9(url) {
var token = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var method = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'GET';
var headers, response;
return regeneratorRuntime.wrap(function _callee9$(_context9) {
while (1) {
switch (_context9.prev = _context9.next) {
case 0:
headers = {};
if (token) {
headers['Authorization'] = token;
}
if (method === 'POST') {
headers['content-type'] = 'application/x-www-form-urlencoded';
}
_context9.next = 5;
return (0, _isomorphicFetch2.default)(url, {
method: method,
headers: new Headers(headers)
});
case 5:
response = _context9.sent;
if (!(response.status >= 400)) {
_context9.next = 8;
break;
}
throw new Error('Bad server response');
case 8:
return _context9.abrupt('return', response);
case 9:
case 'end':
return _context9.stop();
}
}
}, _callee9, this);
}));
function _fetchRequest(_x17) {
return _ref9.apply(this, arguments);
}
return _fetchRequest;
}()
}]);
return Review;
}();
exports.default = Review;