merchi_cart 1.4.4 → 1.4.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/esm/CartProvider.js +74 -36
  2. package/esm/stripe/LegacyStripeCardForm.js +11 -4
  3. package/esm/stripe/StripeCardForm.js +124 -15
  4. package/esm/stripe/actions.js +161 -57
  5. package/esm/stripe/actions.test.js +132 -0
  6. package/esm/utilities/cookie.js +20 -17
  7. package/esm/utilities/index.js +2 -0
  8. package/esm/utilities/job_source.js +139 -0
  9. package/esm/utilities/job_source.test.js +75 -0
  10. package/esm/utilities/test_checkout.js +25 -0
  11. package/esm/utilities/test_checkout.test.js +31 -0
  12. package/lib/CartProvider.js +74 -36
  13. package/lib/stripe/LegacyStripeCardForm.js +10 -3
  14. package/lib/stripe/StripeCardForm.js +122 -16
  15. package/lib/stripe/actions.d.ts +2 -0
  16. package/lib/stripe/actions.js +163 -57
  17. package/lib/stripe/actions.test.d.ts +1 -0
  18. package/lib/utilities/cookie.d.ts +3 -3
  19. package/lib/utilities/cookie.js +20 -17
  20. package/lib/utilities/index.d.ts +2 -0
  21. package/lib/utilities/index.js +22 -0
  22. package/lib/utilities/job_source.d.ts +23 -0
  23. package/lib/utilities/job_source.js +152 -0
  24. package/lib/utilities/job_source.test.d.ts +1 -0
  25. package/lib/utilities/test_checkout.d.ts +6 -0
  26. package/lib/utilities/test_checkout.js +34 -0
  27. package/lib/utilities/test_checkout.test.d.ts +1 -0
  28. package/package.json +6 -3
  29. package/src/CartProvider.tsx +42 -4
  30. package/src/stripe/LegacyStripeCardForm.tsx +9 -3
  31. package/src/stripe/StripeCardForm.tsx +92 -8
  32. package/src/stripe/actions.test.ts +50 -0
  33. package/src/stripe/actions.ts +41 -0
  34. package/src/utilities/cookie.ts +9 -6
  35. package/src/utilities/index.ts +2 -0
  36. package/src/utilities/job_source.test.ts +86 -0
  37. package/src/utilities/job_source.ts +165 -0
  38. package/src/utilities/test_checkout.test.ts +39 -0
  39. package/src/utilities/test_checkout.ts +27 -0
@@ -31,6 +31,8 @@ import { makeJob } from './utilities/job';
31
31
  import { makeProduct } from './utilities/product';
32
32
  import { getSavedCheckoutCustomer, saveCheckoutAddress } from './utilities/local_storage';
33
33
  import { makeUser } from './utilities/user';
34
+ import { persistTestCheckoutFlag, readTestCheckoutFlag } from './utilities/test_checkout';
35
+ import { appendJobSourceToFormData, captureAndReadJobSource, cartNeedsSourceUpdate, jobSourceFieldsForApi } from './utilities/job_source';
34
36
  import { jsx as _jsx } from "react/jsx-runtime";
35
37
  var CartContext = /*#__PURE__*/createContext({
36
38
  cart: {},
@@ -499,48 +501,57 @@ var CartProvider = function CartProvider(_ref) {
499
501
  }
500
502
  function _createCartAndCookie() {
501
503
  _createCartAndCookie = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(callback) {
502
- var _cart, _cartJson;
504
+ var isTest, jobSource, _cart, query, created, _cartJson;
503
505
  return _regeneratorRuntime().wrap(function _callee2$(_context2) {
504
506
  while (1) switch (_context2.prev = _context2.next) {
505
507
  case 0:
506
508
  setFetchingCart(true);
507
509
  _context2.prev = 1;
510
+ isTest = readTestCheckoutFlag();
511
+ jobSource = jobSourceFieldsForApi(captureAndReadJobSource());
508
512
  _cart = makeCart({
509
513
  domain: {
510
514
  id: domainId
511
- }
515
+ },
516
+ isTest: isTest
512
517
  }, true);
513
- _context2.next = 5;
514
- return _cart.create({
515
- embed: cartEmbed
518
+ query = [['embed', JSON.stringify(cartEmbed)], ['skip_rights', 'y']];
519
+ if (isTest) query.push(['is_test', 'true']);
520
+ _context2.next = 9;
521
+ return merchi.authenticatedFetch('/carts/', {
522
+ method: 'POST',
523
+ body: appendJobSourceToFormData(_cart.toFormData(), jobSource),
524
+ query: query
516
525
  });
517
- case 5:
518
- _context2.next = 7;
526
+ case 9:
527
+ created = _context2.sent;
528
+ _cart.fromJson(created.cart);
529
+ _context2.next = 13;
519
530
  return _cart.toJson();
520
- case 7:
531
+ case 13:
521
532
  _cartJson = _context2.sent;
522
- if (domainId) setCartCookie(Number(domainId), _cartJson, undefined);
523
- _context2.next = 11;
533
+ if (domainId) setCartCookie(Number(domainId), _cartJson, undefined, isTest);
534
+ _context2.next = 17;
524
535
  return attachSavedClientIfNeeded(_cartJson);
525
- case 11:
536
+ case 17:
526
537
  _cartJson = _context2.sent;
527
538
  setCart(_objectSpread({}, _cartJson));
528
539
  if (callback) callback();
529
- _context2.next = 19;
540
+ _context2.next = 25;
530
541
  break;
531
- case 16:
532
- _context2.prev = 16;
542
+ case 22:
543
+ _context2.prev = 22;
533
544
  _context2.t0 = _context2["catch"](1);
534
545
  alertError(_context2.t0.errorMessage || _context2.t0.message || 'Unable to fetch cart.');
535
- case 19:
536
- _context2.prev = 19;
546
+ case 25:
547
+ _context2.prev = 25;
537
548
  setFetchingCart(false);
538
- return _context2.finish(19);
539
- case 22:
549
+ return _context2.finish(25);
550
+ case 28:
540
551
  case "end":
541
552
  return _context2.stop();
542
553
  }
543
- }, _callee2, null, [[1, 16, 19, 22]]);
554
+ }, _callee2, null, [[1, 22, 25, 28]]);
544
555
  }));
545
556
  return _createCartAndCookie.apply(this, arguments);
546
557
  }
@@ -549,7 +560,7 @@ var CartProvider = function CartProvider(_ref) {
549
560
  }
550
561
  function _getCart() {
551
562
  _getCart = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(cartIdAndToken) {
552
- var id, _cart2, _cartJson2;
563
+ var id, _cart2, _cartJson2, isTest, jobSource, saved;
553
564
  return _regeneratorRuntime().wrap(function _callee3$(_context3) {
554
565
  while (1) switch (_context3.prev = _context3.next) {
555
566
  case 0:
@@ -567,37 +578,63 @@ var CartProvider = function CartProvider(_ref) {
567
578
  return _cart2.toJson();
568
579
  case 9:
569
580
  _cartJson2 = _context3.sent;
570
- if (!stripeIsValidAndActive(_cartJson2)) {
571
- _context3.next = 17;
581
+ isTest = readTestCheckoutFlag();
582
+ if (!(Boolean(_cartJson2.isTest) !== isTest)) {
583
+ _context3.next = 15;
584
+ break;
585
+ }
586
+ _context3.next = 14;
587
+ return createCartAndCookie();
588
+ case 14:
589
+ return _context3.abrupt("return");
590
+ case 15:
591
+ jobSource = jobSourceFieldsForApi(captureAndReadJobSource());
592
+ if (!cartNeedsSourceUpdate(_cartJson2, jobSource)) {
593
+ _context3.next = 22;
572
594
  break;
573
595
  }
574
- _context3.next = 13;
596
+ _context3.next = 19;
597
+ return merchi.authenticatedFetch("/carts/".concat(_cart2.id, "/"), {
598
+ method: 'PATCH',
599
+ body: appendJobSourceToFormData(_cart2.toFormData(), jobSource),
600
+ query: [['embed', JSON.stringify(cartEmbed)], ['skip_rights', 'y']]
601
+ });
602
+ case 19:
603
+ saved = _context3.sent;
604
+ _cart2.fromJson(saved.cart);
605
+ _cartJson2 = _cart2.toJson();
606
+ case 22:
607
+ if (!(stripeIsValidAndActive(_cartJson2) || isTest)) {
608
+ _context3.next = 29;
609
+ break;
610
+ }
611
+ _context3.next = 25;
575
612
  return attachSavedClientIfNeeded(_cartJson2);
576
- case 13:
613
+ case 25:
577
614
  _cartJson2 = _context3.sent;
578
615
  setCart(_objectSpread({}, _cartJson2));
579
- _context3.next = 19;
616
+ _context3.next = 31;
580
617
  break;
581
- case 17:
618
+ case 29:
582
619
  console.error("MErhci cart error: Stripe payment " + "options have not been correctly set up. " + "Check the company profile payment options tab " + "to set and edit stripe payment options.");
583
620
  setCartSettingsInvalid(true);
584
- case 19:
585
- _context3.next = 25;
621
+ case 31:
622
+ _context3.next = 37;
586
623
  break;
587
- case 21:
588
- _context3.prev = 21;
624
+ case 33:
625
+ _context3.prev = 33;
589
626
  _context3.t0 = _context3["catch"](3);
590
- _context3.next = 25;
627
+ _context3.next = 37;
591
628
  return createCartAndCookie();
592
- case 25:
593
- _context3.prev = 25;
629
+ case 37:
630
+ _context3.prev = 37;
594
631
  setFetchingCart(false);
595
- return _context3.finish(25);
596
- case 28:
632
+ return _context3.finish(37);
633
+ case 40:
597
634
  case "end":
598
635
  return _context3.stop();
599
636
  }
600
- }, _callee3, null, [[3, 21, 25, 28]]);
637
+ }, _callee3, null, [[3, 33, 37, 40]]);
601
638
  }));
602
639
  return _getCart.apply(this, arguments);
603
640
  }
@@ -974,6 +1011,7 @@ var CartProvider = function CartProvider(_ref) {
974
1011
  window.createCartAndCookie = createCartAndCookie;
975
1012
  }
976
1013
  useEffect(function () {
1014
+ persistTestCheckoutFlag();
977
1015
  if (domainId) actionGetMerchiCart();
978
1016
  if (domainId && includeTheme) actionFetchTheme();
979
1017
  }, [domainId]);
@@ -12,7 +12,7 @@ import * as React from 'react';
12
12
  import { useEffect, useState } from 'react';
13
13
  import { ButtonPay } from '../buttons';
14
14
  import FormStripeCardFields from './StripeCardFields';
15
- import { stripeCardFormSubmit, stripeInitPromise, stripePaymentButtonSubmit } from './actions';
15
+ import { fetchTestPublishableKey, stripeCardFormSubmit, stripeInitPromise, stripePaymentButtonSubmit } from './actions';
16
16
  import { companyStripePubKeyOrTestPubKey } from './utils';
17
17
  import { useCartContext } from '../CartProvider';
18
18
  import { tabIdPaymentSuccess } from '../utilities/tabs';
@@ -49,6 +49,7 @@ function StripeCardForm() {
49
49
  error = _useState2[0],
50
50
  setError = _useState2[1];
51
51
  var company = domain.company;
52
+ var isTestCheckout = Boolean(cart.isTest);
52
53
  var hasCompanyPubKey = Boolean(company.isStripeValid && companyStripePubKeyOrTestPubKey(company));
53
54
  var companyPubKey = hasCompanyPubKey ? companyStripePubKeyOrTestPubKey(company) : '';
54
55
  var canUseConnect = !!company.stripeAccountId;
@@ -137,15 +138,21 @@ function StripeCardForm() {
137
138
  }));
138
139
  return _doStripePaymentRequestForButton.apply(this, arguments);
139
140
  }
140
- var _useState7 = useState(companyPubKey),
141
+ var _useState7 = useState(isTestCheckout ? '' : companyPubKey),
141
142
  _useState8 = _slicedToArray(_useState7, 2),
142
143
  stripePublicKey = _useState8[0],
143
144
  setStripePublicKey = _useState8[1];
144
145
  useEffect(function () {
146
+ if (isTestCheckout) {
147
+ fetchTestPublishableKey(url).then(setStripePublicKey)["catch"](function () {
148
+ return setStripePublicKey('');
149
+ });
150
+ return;
151
+ }
145
152
  if (!stripePublicKey && canUseConnect) stripeInitPromise(url).then(setStripePublicKey);
146
- }, [stripePublicKey, canUseConnect]);
153
+ }, [stripePublicKey, canUseConnect, isTestCheckout, url]);
147
154
  return /*#__PURE__*/_jsxs(_Fragment, {
148
- children: [company.isTesting && badgeTestMode, /*#__PURE__*/_jsx(FormStripeCardFields, {
155
+ children: [!isTestCheckout && company.isTesting && badgeTestMode, /*#__PURE__*/_jsx(FormStripeCardFields, {
149
156
  doStripePayment: doStripePayment,
150
157
  doStripePaymentRequestForButton: doStripePaymentRequestForButton,
151
158
  cart: cart,
@@ -1,33 +1,142 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
3
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
4
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
5
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
6
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
7
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
8
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
9
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
10
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
1
11
  import * as React from 'react';
12
+ import { useEffect, useState } from 'react';
2
13
  import { StripePaymentForm, StripePaymentGate } from 'merchi_invoice';
3
14
  import LegacyStripeCardForm from './LegacyStripeCardForm';
15
+ import { completeTestPayment, fetchTestPublishableKey } from './actions';
4
16
  import { useCartContext } from '../CartProvider';
5
17
  import { tabIdPaymentSuccess } from '../utilities/tabs';
18
+ import { TEST_CARD_NUMBER } from '../utilities/test_checkout';
6
19
  import { jsx as _jsx } from "react/jsx-runtime";
20
+ import { jsxs as _jsxs } from "react/jsx-runtime";
21
+ import { Fragment as _Fragment } from "react/jsx-runtime";
22
+ var testCheckoutHint = /*#__PURE__*/_jsxs("div", {
23
+ style: {
24
+ marginBottom: '12px'
25
+ },
26
+ children: [/*#__PURE__*/_jsx("div", {
27
+ style: {
28
+ color: 'red',
29
+ fontWeight: 600
30
+ },
31
+ children: "Test checkout"
32
+ }), /*#__PURE__*/_jsxs("p", {
33
+ style: {
34
+ margin: '4px 0 0',
35
+ fontSize: '13px'
36
+ },
37
+ children: ["No real charge. Use card ", TEST_CARD_NUMBER, ", any future expiry, any CVC, any ZIP."]
38
+ })]
39
+ });
7
40
  export default function StripeCardForm() {
8
41
  var _useCartContext = useCartContext(),
9
42
  alertError = _useCartContext.alertError,
10
43
  apiUrl = _useCartContext.apiUrl,
11
44
  cart = _useCartContext.cart,
45
+ classNameBtnPay = _useCartContext.classNameBtnPay,
12
46
  setActiveTabIndex = _useCartContext.setActiveTabIndex,
13
47
  setInvoiceJson = _useCartContext.setInvoiceJson;
14
- return /*#__PURE__*/_jsx(StripePaymentGate, {
15
- engine: cart.stripePaymentEngine,
16
- apiUrl: apiUrl || 'https://api.merchi.co/v6/',
17
- resource: "cart",
18
- resourceId: cart.id,
19
- resourceToken: cart.token || cart.cartToken,
20
- legacy: /*#__PURE__*/_jsx(LegacyStripeCardForm, {}),
21
- children: /*#__PURE__*/_jsx(StripePaymentForm, {
22
- apiUrl: apiUrl || 'https://api.merchi.co/v6/',
48
+ var isTestCheckout = Boolean(cart.isTest);
49
+ var url = apiUrl || 'https://api.merchi.co/v6/';
50
+ var _useState = useState(false),
51
+ _useState2 = _slicedToArray(_useState, 2),
52
+ testKeyMissing = _useState2[0],
53
+ setTestKeyMissing = _useState2[1];
54
+ var _useState3 = useState(false),
55
+ _useState4 = _slicedToArray(_useState3, 2),
56
+ loadingTestPayment = _useState4[0],
57
+ setLoadingTestPayment = _useState4[1];
58
+ useEffect(function () {
59
+ if (!isTestCheckout) {
60
+ setTestKeyMissing(false);
61
+ return;
62
+ }
63
+ fetchTestPublishableKey(url).then(function () {
64
+ return setTestKeyMissing(false);
65
+ })["catch"](function () {
66
+ return setTestKeyMissing(true);
67
+ });
68
+ }, [isTestCheckout, url]);
69
+ function doCompleteTestPayment() {
70
+ return _doCompleteTestPayment.apply(this, arguments);
71
+ }
72
+ function _doCompleteTestPayment() {
73
+ _doCompleteTestPayment = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
74
+ var invoice;
75
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
76
+ while (1) switch (_context.prev = _context.next) {
77
+ case 0:
78
+ setLoadingTestPayment(true);
79
+ _context.prev = 1;
80
+ _context.next = 4;
81
+ return completeTestPayment(url, cart);
82
+ case 4:
83
+ invoice = _context.sent;
84
+ setInvoiceJson(invoice);
85
+ setActiveTabIndex(tabIdPaymentSuccess);
86
+ _context.next = 12;
87
+ break;
88
+ case 9:
89
+ _context.prev = 9;
90
+ _context.t0 = _context["catch"](1);
91
+ alertError(_context.t0.message);
92
+ case 12:
93
+ _context.prev = 12;
94
+ setLoadingTestPayment(false);
95
+ return _context.finish(12);
96
+ case 15:
97
+ case "end":
98
+ return _context.stop();
99
+ }
100
+ }, _callee, null, [[1, 9, 12, 15]]);
101
+ }));
102
+ return _doCompleteTestPayment.apply(this, arguments);
103
+ }
104
+ if (isTestCheckout && testKeyMissing) {
105
+ return /*#__PURE__*/_jsxs(_Fragment, {
106
+ children: [testCheckoutHint, /*#__PURE__*/_jsx("p", {
107
+ style: {
108
+ fontSize: '13px',
109
+ marginBottom: '12px'
110
+ },
111
+ children: "Stripe test keys are not configured. Complete this as a test order without a card."
112
+ }), /*#__PURE__*/_jsx("button", {
113
+ type: "button",
114
+ className: classNameBtnPay,
115
+ disabled: loadingTestPayment,
116
+ onClick: doCompleteTestPayment,
117
+ children: loadingTestPayment ? 'Completing…' : 'Complete test order'
118
+ })]
119
+ });
120
+ }
121
+ return /*#__PURE__*/_jsxs(_Fragment, {
122
+ children: [isTestCheckout && testCheckoutHint, /*#__PURE__*/_jsx(StripePaymentGate, {
123
+ engine: isTestCheckout ? 'legacy' : cart.stripePaymentEngine,
124
+ apiUrl: url,
23
125
  resource: "cart",
24
126
  resourceId: cart.id,
25
127
  resourceToken: cart.token || cart.cartToken,
26
- onError: alertError,
27
- onSuccess: function onSuccess(invoice) {
28
- setInvoiceJson(invoice);
29
- setActiveTabIndex(tabIdPaymentSuccess);
30
- }
31
- })
128
+ legacy: /*#__PURE__*/_jsx(LegacyStripeCardForm, {}),
129
+ children: /*#__PURE__*/_jsx(StripePaymentForm, {
130
+ apiUrl: url,
131
+ resource: "cart",
132
+ resourceId: cart.id,
133
+ resourceToken: cart.token || cart.cartToken,
134
+ onError: alertError,
135
+ onSuccess: function onSuccess(invoice) {
136
+ setInvoiceJson(invoice);
137
+ setActiveTabIndex(tabIdPaymentSuccess);
138
+ }
139
+ })
140
+ })]
32
141
  });
33
142
  }