@open-tender/store
Version:
A library of hooks, reducers, utility functions, and types for use with Open Tender applications that utilize our in-store POS API
114 lines (113 loc) • 5.76 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var utils_1 = require("@open-tender/utils");
var react_1 = require("react");
var hooks_1 = require("../../app/hooks");
var slices_1 = require("../../slices");
var useChipDNATender_utils_1 = require("./useChipDNATender.utils");
// JC Amex card token: 440abfc9cc7518f1ad76e2be56f19fe4
var useChipDNATender = function (amount) {
var dispatch = (0, hooks_1.useAppDispatch)();
var orderId = (0, hooks_1.useAppSelector)(slices_1.selectOrder).orderId;
var api = (0, hooks_1.useAppSelector)(slices_1.selectApi);
var _a = (0, react_1.useState)(false), reading = _a[0], setReading = _a[1];
var _b = (0, react_1.useState)('Pending...'), message = _b[0], setMessage = _b[1];
var _c = (0, react_1.useState)(null), success = _c[0], setSuccess = _c[1];
var _d = (0, react_1.useState)(null), canceled = _d[0], setCanceled = _d[1];
var _e = (0, react_1.useState)(null), error = _e[0], setError = _e[1];
(0, react_1.useEffect)(function () {
var readChipDNA = function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var data, response, reader_1, card_token_1, card_msg_1, err_1, error_1, detail;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
setReading(true);
_a.label = 1;
case 1:
_a.trys.push([1, 3, , 4]);
if (!amount)
return [2 /*return*/];
data = { tender_type: 'CREDIT', amount: amount };
if (!orderId)
return [2 /*return*/];
return [4 /*yield*/, api.postChipDNATender(orderId, data)];
case 2:
response = _a.sent();
reader_1 = response.getReader();
card_token_1 = null;
card_msg_1 = null;
reader_1.read().then(function processText(_a) {
var done = _a.done, value = _a.value;
// done - true if the stream has already given you all its data.
// value - some data. Always undefined when done is true.
if (done) {
if (card_token_1 || card_msg_1 === 'TENDER_CREATED') {
setSuccess('Card authorized!');
}
else if (card_msg_1 === 'TRANSACTION_DECLINED') {
setError('Transaction DECLINED. Please try again.');
}
else if (card_msg_1 !== 'TRANSACTION_CANCELED') {
setError('Card read error. Please try again.');
}
console.log('card_token', card_token_1);
dispatch((0, slices_1.completeChipDNA)(card_token_1));
return;
}
var _b = (0, useChipDNATender_utils_1.processMessage)(value), msg = _b.msg, msgType = _b.msgType, token = _b.token;
var decoded = new TextDecoder('utf-8').decode(value);
console.log('done', done);
console.log(decoded);
console.log(msg, msgType, token);
if (msg)
setMessage(msg);
card_token_1 = token;
card_msg_1 = msgType;
// console.log('card_msg', card_msg)
// console.log('card_token', card_token)
return reader_1.read().then(processText);
});
return [3 /*break*/, 4];
case 3:
err_1 = _a.sent();
error_1 = (0, utils_1.handleRespError)(err_1);
detail = error_1.detail;
setError(detail || 'Unknown payment error. Please contact support.');
return [3 /*break*/, 4];
case 4: return [2 /*return*/];
}
});
}); };
if (!reading && amount && amount !== '0.00')
readChipDNA();
}, [api, dispatch, reading, orderId, amount]);
var cancel = function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var err_2, detail;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 3]);
return [4 /*yield*/, api.postChipDNACancel()];
case 1:
_a.sent();
setCanceled('EMV transaction canceled');
return [3 /*break*/, 3];
case 2:
err_2 = _a.sent();
detail = (0, utils_1.handleRespError)(err_2).detail;
setError(detail || 'Unknown cancellation error. Please contact support.');
return [3 /*break*/, 3];
case 3: return [2 /*return*/];
}
});
}); };
return {
message: message,
success: success,
canceled: canceled,
error: error,
cancel: cancel
};
};
exports.default = useChipDNATender;