UNPKG

@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
"use strict"; 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;