react-escalade-priceline
Version:
Dynamically fetch or prefetch Escalade stock & pricing.
180 lines (140 loc) • 4.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _typeof2 = require('babel-runtime/helpers/typeof');
var _typeof3 = _interopRequireDefault(_typeof2);
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _keys = require('babel-runtime/core-js/object/keys');
var _keys2 = _interopRequireDefault(_keys);
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _stringify = require('babel-runtime/core-js/json/stringify');
var _stringify2 = _interopRequireDefault(_stringify);
var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var fetchMethod = function () {
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(options) {
var _this = this;
var ids, body, fetchObj, res;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
if (!options.site) {
console.log('Warning: No site option set.');
}
ids = [];
if (options.ids) {
ids.push.apply(ids, (0, _toConsumableArray3.default)(options.ids));
}
if (options.id) {
ids.push(options.id);
}
if (ids.length) {
_context.next = 6;
break;
}
return _context.abrupt('return');
case 6:
// Fetch data
body = (0, _stringify2.default)({
skus: ids
});
fetchObj = {
headers: {
'ESC-API-Context': options.site
},
method: 'POST',
body: body
};
if (options.debug) {
console.log('Options sent through priceline: ', (0, _stringify2.default)(options, null, 2));
console.log('Ids being sent: ', (0, _stringify2.default)(ids, null, 2));
console.log('Fetch Object: ', (0, _stringify2.default)(fetchObj, null, 2));
}
_context.next = 11;
return (0, _isomorphicFetch2.default)(options.endpoint, fetchObj);
case 11:
res = _context.sent;
_context.prev = 12;
_context.next = 15;
return res.json();
case 15:
res = _context.sent;
_context.next = 26;
break;
case 18:
_context.prev = 18;
_context.t0 = _context['catch'](12);
_context.t1 = console;
_context.t2 = _context.t0;
_context.next = 24;
return res.text();
case 24:
_context.t3 = _context.sent;
_context.t1.log.call(_context.t1, 'res.json() error: ', _context.t2, _context.t3);
case 26:
if (options.debug) {
console.log('fetch response from priceline: ', res);
}
if ('inventory' in res) {
res = extractStock(res, ids);
}
if ('prices' in res) {
res = extractPrices(res, ids);
}
this.setState(res);
// Repoll interval
if ((typeof window === 'undefined' ? 'undefined' : (0, _typeof3.default)(window)) === 'object') {
clearTimeout(this.timeout);
this.timeout = setTimeout(function () {
_this.fetch((0, _extends3.default)({}, options, {
ids: (0, _keys2.default)(_this.state)
}));
}, 60 * 1000);
}
case 31:
case 'end':
return _context.stop();
}
}
}, _callee, this, [[12, 18]]);
}));
return function fetchMethod(_x) {
return _ref.apply(this, arguments);
};
}();
var _isomorphicFetch = require('isomorphic-fetch');
var _isomorphicFetch2 = _interopRequireDefault(_isomorphicFetch);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function extractStock(res, ids) {
var newRes = {};
res = res.inventory || {};
for (var i = ids.length; i--;) {
var id = ids[i].toUpperCase();
if (id in res) {
newRes[id.toLowerCase()] = res[id].stock;
} else {
newRes[id.toLowerCase()] = 0;
}
}
return newRes;
}
function extractPrices(res, ids) {
var newRes = {};
res = res.prices || {};
for (var i = ids.length; i--;) {
var id = ids[i].toUpperCase();
if (id in res) {
newRes[id.toLowerCase()] = Number(res[id].price);
} else {
newRes[id.toLowerCase()] = false;
}
}
return newRes;
}
exports.default = fetchMethod;