@pelcro/react-pelcro-js 3.26.1 → 3.27.0

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.
package/dist/index.cjs.js CHANGED
@@ -4048,12 +4048,16 @@ var invoiceDetails_en = {
4048
4048
  var labels$R = {
4049
4049
  title: "Cancel subscription",
4050
4050
  cancelReason: "Cancellation reason",
4051
+ endOn: "End on",
4052
+ endImmediately: "End immediately",
4053
+ cancel: "Cancel",
4051
4054
  subCancellation: {
4052
4055
  goBack: "Go back"
4053
4056
  }
4054
4057
  };
4055
4058
  var messages$T = {
4056
4059
  subscriptionEnd: "This subscription is set to expire on",
4060
+ cancelWhen: "When would you like to cancel?",
4057
4061
  cancelNow: "Cancel Subscription Now",
4058
4062
  cancelLater: "Cancel at Period End",
4059
4063
  subCancellation: {
@@ -4916,12 +4920,16 @@ var invoiceDetails_fr = {
4916
4920
  var labels$A = {
4917
4921
  title: "Annuler l'abonnement",
4918
4922
  cancelReason: "Motif d'annulation",
4923
+ endOn: "Fin sur",
4924
+ endImmediately: "Fin immédiate",
4925
+ cancel: "Annuler",
4919
4926
  subCancellation: {
4920
4927
  goBack: "Retourner"
4921
4928
  }
4922
4929
  };
4923
4930
  var messages$B = {
4924
4931
  subscriptionEnd: "Cet abonnement doit expirer le",
4932
+ cancelWhen: "Quand voulez-vous annuler?",
4925
4933
  cancelNow: "Cancel Subscription Now",
4926
4934
  cancelLater: "Annuler l'abonnement maintenant",
4927
4935
  subCancellation: {
@@ -5890,12 +5898,16 @@ var invoiceDetails_ko = {
5890
5898
  var labels$j = {
5891
5899
  title: "구독 취소",
5892
5900
  cancelReason: "취소 사유",
5901
+ endOn: "종료",
5902
+ endImmediately: "즉시 종료",
5903
+ cancel: "취소",
5893
5904
  subCancellation: {
5894
5905
  goBack: "돌아가기"
5895
5906
  }
5896
5907
  };
5897
5908
  var messages$j = {
5898
5909
  subscriptionEnd: "이 구독은 다음 날짜에 만료되도록 설정되었습니다.",
5910
+ cancelWhen: "언제 취소하시겠습니까?",
5899
5911
  cancelNow: "지금 구독 취소",
5900
5912
  cancelLater: "기간 종료 시 취소",
5901
5913
  subCancellation: {
@@ -6750,12 +6762,16 @@ var invoiceDetails_es = {
6750
6762
  var labels$2 = {
6751
6763
  title: "Cancelar suscripción",
6752
6764
  cancelReason: "Razón de la cancelación",
6765
+ endOn: "Fin de",
6766
+ endImmediately: "Fin inmediato",
6767
+ cancel: "Cancelar",
6753
6768
  subCancellation: {
6754
6769
  goBack: "Volver"
6755
6770
  }
6756
6771
  };
6757
6772
  var messages$1 = {
6758
6773
  subscriptionEnd: "Esta suscripción expirará el",
6774
+ cancelWhen: "¿Cuándo desea cancelar?",
6759
6775
  cancelNow: "Cancelar Suscripción Ahora",
6760
6776
  cancelLater: "Cancelar al Final del Periodo",
6761
6777
  subCancellation: {
@@ -12452,6 +12468,7 @@ const GET_NEWSLETTERS_SUCCESS = "GET_NEWSLETTERS_SUCCESS";
12452
12468
  const SWITCH_TO_UPDATE = "SWITCH_TO_UPDATE";
12453
12469
  const LINK_TOKEN_VERIFY = "LINK_TOKEN_VERIFY";
12454
12470
  const SET_CANCEL_SUBSCRIPTION_REASON = "SET_CANCEL_SUBSCRIPTION_REASON";
12471
+ const SET_CANCEL_SUBSCRIPTION_OPTION = "SET_CANCEL_SUBSCRIPTION_OPTION";
12455
12472
  const HANDLE_CHECKBOX_CHANGE = "HANDLE_CHECKBOX_CHANGE";
12456
12473
  const SET_SUBSCRIPTION_SUSPEND_DATE = "SET_SUBSCRIPTION_SUSPEND_DATE";
12457
12474
  const SET_EMAILS = "SET_EMAILS";
@@ -20382,7 +20399,8 @@ function SubscriptionRenewModal(_ref) {
20382
20399
  SubscriptionRenewModal.viewId = "subscription-renew";
20383
20400
 
20384
20401
  const initialState$j = {
20385
- cancelationReason: ""
20402
+ cancelationReason: "",
20403
+ cancelationOption: ""
20386
20404
  };
20387
20405
  const store$j = /*#__PURE__*/React.createContext(initialState$j);
20388
20406
  const {
@@ -20397,7 +20415,6 @@ const SubscriptionCancelContainer = _ref => {
20397
20415
  children,
20398
20416
  ...props
20399
20417
  } = _ref;
20400
- useTranslation("verifyEmail");
20401
20418
  const [state, dispatch] = useReducerWithSideEffects((state, action) => {
20402
20419
  switch (action.type) {
20403
20420
  case SET_CANCEL_SUBSCRIPTION_REASON:
@@ -20405,6 +20422,11 @@ const SubscriptionCancelContainer = _ref => {
20405
20422
  ...state,
20406
20423
  cancelationReason: action.payload
20407
20424
  });
20425
+ case SET_CANCEL_SUBSCRIPTION_OPTION:
20426
+ return lib_7({
20427
+ ...state,
20428
+ cancelationOption: action.payload
20429
+ });
20408
20430
  default:
20409
20431
  return state;
20410
20432
  }
@@ -20504,8 +20526,7 @@ const SubscriptionCancelReason = props => {
20504
20526
  t
20505
20527
  } = useTranslation("subscriptionCancel");
20506
20528
  const {
20507
- dispatch,
20508
- state
20529
+ dispatch
20509
20530
  } = React.useContext(store$j);
20510
20531
  const handleOnTextAreaBlur = e => {
20511
20532
  dispatch({
@@ -20537,7 +20558,7 @@ function SvgSubscription(props) {
20537
20558
  }))))));
20538
20559
  }
20539
20560
 
20540
- const SubscriptionCancelNowButton = _ref => {
20561
+ const SubscriptionCancelButton = _ref => {
20541
20562
  let {
20542
20563
  subscription,
20543
20564
  onClick,
@@ -20548,9 +20569,9 @@ const SubscriptionCancelNowButton = _ref => {
20548
20569
  } = usePelcro();
20549
20570
  const {
20550
20571
  state: {
20551
- cancelationReason
20552
- },
20553
- dispatch
20572
+ cancelationReason,
20573
+ cancelationOption
20574
+ }
20554
20575
  } = React.useContext(store$j);
20555
20576
  const {
20556
20577
  t
@@ -20584,10 +20605,10 @@ const SubscriptionCancelNowButton = _ref => {
20584
20605
  onSuccess === null || onSuccess === void 0 ? void 0 : onSuccess(res);
20585
20606
  });
20586
20607
  };
20587
- const handleCancelNowClick = () => {
20608
+ const handleCancelClick = () => {
20588
20609
  const payload = {
20589
20610
  subscription_id: subscription.id,
20590
- mode: "now",
20611
+ mode: cancelationOption,
20591
20612
  ...(cancelationReason && {
20592
20613
  reason: cancelationReason
20593
20614
  })
@@ -20601,7 +20622,7 @@ const SubscriptionCancelNowButton = _ref => {
20601
20622
  notify$1.confirm((onSuccess, onFailure) => {
20602
20623
  cancelSubscription(payload, onSuccess, onFailure);
20603
20624
  }, {
20604
- confirmMessage: t("messages.subCancellation.isSureToCancelNow"),
20625
+ confirmMessage: cancelationOption === "now" ? t("messages.subCancellation.isSureToCancelNow") : t("messages.subCancellation.isSureToCancel"),
20605
20626
  loadingMessage: t("messages.subCancellation.loading"),
20606
20627
  successMessage: t("messages.subCancellation.success"),
20607
20628
  errorMessage: t("messages.subCancellation.error")
@@ -20610,96 +20631,89 @@ const SubscriptionCancelNowButton = _ref => {
20610
20631
  });
20611
20632
  };
20612
20633
  return /*#__PURE__*/React__default['default'].createElement(Button, {
20613
- onClick: handleCancelNowClick,
20614
- className: `${className}`
20615
- }, t("messages.cancelNow"));
20634
+ onClick: handleCancelClick,
20635
+ className: `${className}`,
20636
+ disabled: !cancelationOption
20637
+ }, t("labels.cancel"));
20616
20638
  };
20617
20639
 
20618
- const SubscriptionCancelLaterButton = _ref => {
20640
+ // New cancellation option modal
20641
+ const SubscriptionCancelOptions = _ref => {
20642
+ var _subscription$schedul;
20619
20643
  let {
20620
20644
  subscription,
20645
+ hasPhases,
20621
20646
  onClick,
20622
20647
  className
20623
20648
  } = _ref;
20624
- const {
20625
- switchView
20626
- } = usePelcro();
20627
20649
  const {
20628
20650
  state: {
20629
- cancelationReason
20651
+ cancelationOption
20630
20652
  },
20631
20653
  dispatch
20632
20654
  } = React.useContext(store$j);
20633
20655
  const {
20634
20656
  t
20635
20657
  } = useTranslation("subscriptionCancel");
20636
- const cancelSubscription = (payload, onSuccess, onFailure) => {
20637
- var _window, _window$Pelcro, _window$Pelcro$uiSett;
20638
- const enableReactGA4 = (_window = window) === null || _window === void 0 ? void 0 : (_window$Pelcro = _window.Pelcro) === null || _window$Pelcro === void 0 ? void 0 : (_window$Pelcro$uiSett = _window$Pelcro.uiSettings) === null || _window$Pelcro$uiSett === void 0 ? void 0 : _window$Pelcro$uiSett.enableReactGA4;
20639
- window.Pelcro.subscription.cancel({
20640
- auth_token: window.Pelcro.user.read().auth_token,
20641
- subscription_id: payload.subscription_id,
20642
- mode: payload.mode,
20643
- ...(payload.reason && {
20644
- reason: payload.reason
20645
- })
20646
- }, (err, res) => {
20647
- if (err) {
20648
- return onFailure === null || onFailure === void 0 ? void 0 : onFailure(err);
20649
- }
20650
- if (enableReactGA4) {
20651
- ReactGA4.event("Canceled", {
20652
- nonInteraction: true
20653
- });
20654
- } else {
20655
- var _ReactGA$event;
20656
- ReactGA === null || ReactGA === void 0 ? void 0 : (_ReactGA$event = ReactGA.event) === null || _ReactGA$event === void 0 ? void 0 : _ReactGA$event.call(ReactGA, {
20657
- category: "ACTIONS",
20658
- action: "Canceled",
20659
- nonInteraction: true
20660
- });
20661
- }
20662
- onSuccess === null || onSuccess === void 0 ? void 0 : onSuccess(res);
20663
- });
20664
- };
20665
- const handleCancelNowClick = () => {
20666
- const payload = {
20667
- subscription_id: subscription.id,
20668
- mode: "period_end",
20669
- ...(cancelationReason && {
20670
- reason: cancelationReason
20671
- })
20672
- };
20673
- onClick === null || onClick === void 0 ? void 0 : onClick();
20674
-
20675
- // Close the modal
20676
- switchView(null);
20677
-
20678
- // Show confirmation alert after closing the modal
20679
- notify$1.confirm((onSuccess, onFailure) => {
20680
- cancelSubscription(payload, onSuccess, onFailure);
20681
- }, {
20682
- confirmMessage: t("messages.subCancellation.isSureToCancel"),
20683
- loadingMessage: t("messages.subCancellation.loading"),
20684
- successMessage: t("messages.subCancellation.success"),
20685
- errorMessage: t("messages.subCancellation.error")
20686
- }, {
20687
- closeButtonLabel: t("labels.subCancellation.goBack")
20658
+ const phases = subscription === null || subscription === void 0 ? void 0 : (_subscription$schedul = subscription.schedule) === null || _subscription$schedul === void 0 ? void 0 : _subscription$schedul.phases;
20659
+ const lastPhase = !phases ? [] : phases[(phases === null || phases === void 0 ? void 0 : phases.length) - 1];
20660
+ const handleOptionSelect = event => {
20661
+ dispatch({
20662
+ type: SET_CANCEL_SUBSCRIPTION_OPTION,
20663
+ payload: event.target.value
20688
20664
  });
20689
20665
  };
20690
- return /*#__PURE__*/React__default['default'].createElement(Button, {
20691
- onClick: handleCancelNowClick,
20692
- className: `${className}`
20693
- }, t("messages.cancelLater"));
20666
+ return /*#__PURE__*/React__default['default'].createElement("div", {
20667
+ className: "plc-text-left plc-mr-auto plc-mb-6"
20668
+ }, /*#__PURE__*/React__default['default'].createElement("p", {
20669
+ className: "plc-mb-3"
20670
+ }, t("messages.cancelWhen")), subscription.cancel_at_period_end === 0 && hasPhases && /*#__PURE__*/React__default['default'].createElement(Radio, {
20671
+ onChange: handleOptionSelect,
20672
+ checked: cancelationOption === "period_end",
20673
+ value: "period_end"
20674
+ }, t("labels.endOn"), " ", new Date(Number(`${lastPhase === null || lastPhase === void 0 ? void 0 : lastPhase.end_date}000`)).toLocaleDateString("en-CA", {
20675
+ year: "numeric",
20676
+ month: "short",
20677
+ day: "numeric"
20678
+ })), subscription.cancel_at_period_end === 0 && /*#__PURE__*/React__default['default'].createElement(Radio, {
20679
+ onChange: handleOptionSelect,
20680
+ checked: cancelationOption === "current_period_end",
20681
+ value: "current_period_end"
20682
+ }, t("labels.endOn"), " ", new Date(subscription === null || subscription === void 0 ? void 0 : subscription.current_period_end).toLocaleDateString("en-CA", {
20683
+ year: "numeric",
20684
+ month: "short",
20685
+ day: "numeric"
20686
+ })), /*#__PURE__*/React__default['default'].createElement(Radio, {
20687
+ onChange: handleOptionSelect,
20688
+ checked: cancelationOption === "now",
20689
+ value: "now"
20690
+ }, t("labels.endImmediately")));
20694
20691
  };
20695
20692
 
20696
20693
  const SubscriptionCancelView = props => {
20694
+ var _subscriptionToCancel7, _subscriptionToCancel8;
20697
20695
  const {
20698
- subscriptionToCancel
20696
+ subscriptionToCancel,
20697
+ switchView
20699
20698
  } = usePelcro();
20700
20699
  const {
20701
20700
  t
20702
20701
  } = useTranslation("subscriptionCancel");
20702
+ const getPhases = () => {
20703
+ var _subscriptionToCancel, _subscriptionToCancel2, _subscriptionToCancel3, _subscriptionToCancel4, _subscriptionToCancel5, _subscriptionToCancel6;
20704
+ if (!subscriptionToCancel.schedule) return [];
20705
+ const currentPhaseStartDate = subscriptionToCancel === null || subscriptionToCancel === void 0 ? void 0 : (_subscriptionToCancel = subscriptionToCancel.schedule) === null || _subscriptionToCancel === void 0 ? void 0 : (_subscriptionToCancel2 = _subscriptionToCancel.current_phase) === null || _subscriptionToCancel2 === void 0 ? void 0 : _subscriptionToCancel2.start_date;
20706
+ const currentPhase = subscriptionToCancel === null || subscriptionToCancel === void 0 ? void 0 : (_subscriptionToCancel3 = subscriptionToCancel.schedule) === null || _subscriptionToCancel3 === void 0 ? void 0 : (_subscriptionToCancel4 = _subscriptionToCancel3.phases) === null || _subscriptionToCancel4 === void 0 ? void 0 : _subscriptionToCancel4.find(phase => {
20707
+ return (phase === null || phase === void 0 ? void 0 : phase.start_date) === currentPhaseStartDate;
20708
+ });
20709
+ const futurePhases = subscriptionToCancel === null || subscriptionToCancel === void 0 ? void 0 : (_subscriptionToCancel5 = subscriptionToCancel.schedule) === null || _subscriptionToCancel5 === void 0 ? void 0 : (_subscriptionToCancel6 = _subscriptionToCancel5.phases) === null || _subscriptionToCancel6 === void 0 ? void 0 : _subscriptionToCancel6.filter(phase => {
20710
+ return (phase === null || phase === void 0 ? void 0 : phase.start_date) > currentPhaseStartDate;
20711
+ });
20712
+ return [currentPhase, ...futurePhases];
20713
+ };
20714
+ const hasPhases = getPhases().length > 0;
20715
+ const phases = subscriptionToCancel === null || subscriptionToCancel === void 0 ? void 0 : (_subscriptionToCancel7 = subscriptionToCancel.schedule) === null || _subscriptionToCancel7 === void 0 ? void 0 : _subscriptionToCancel7.phases;
20716
+ const lastPhase = !phases ? [] : phases[(phases === null || phases === void 0 ? void 0 : phases.length) - 1];
20703
20717
  return /*#__PURE__*/React__default['default'].createElement("div", {
20704
20718
  id: "pelcro-subscription-cancel-view"
20705
20719
  }, /*#__PURE__*/React__default['default'].createElement("div", {
@@ -20708,22 +20722,35 @@ const SubscriptionCancelView = props => {
20708
20722
  className: "plc-text-2xl plc-font-semibold"
20709
20723
  }, t("labels.title"), /*#__PURE__*/React__default['default'].createElement("span", {
20710
20724
  className: "plc-text-gray-400 plc-text-base plc-block"
20711
- }, "(", subscriptionToCancel.plan.nickname, ")"))), /*#__PURE__*/React__default['default'].createElement(SubscriptionCancelContainer, props, /*#__PURE__*/React__default['default'].createElement("div", {
20725
+ }, "(", subscriptionToCancel === null || subscriptionToCancel === void 0 ? void 0 : (_subscriptionToCancel8 = subscriptionToCancel.plan) === null || _subscriptionToCancel8 === void 0 ? void 0 : _subscriptionToCancel8.nickname, ")"))), /*#__PURE__*/React__default['default'].createElement(SubscriptionCancelContainer, props, /*#__PURE__*/React__default['default'].createElement("div", {
20712
20726
  className: "plc-flex plc-flex-col plc-items-center plc-justify-center plc-mt-4"
20713
20727
  }, /*#__PURE__*/React__default['default'].createElement(SvgSubscription, {
20714
20728
  className: "plc-w-32 plc-h-32"
20715
20729
  }), /*#__PURE__*/React__default['default'].createElement("p", {
20716
- className: "plc-mb-3 plc-text-gray-900 plc-text-center plc-whitespace-pre-line"
20717
- }, t("messages.subscriptionEnd"), " ", new Date(subscriptionToCancel === null || subscriptionToCancel === void 0 ? void 0 : subscriptionToCancel.current_period_end).toLocaleDateString("en-CA", {
20730
+ className: "plc-mb-3 plc-text-gray-900 plc-text-left plc-mr-auto plc-whitespace-pre-line"
20731
+ }, t("messages.subscriptionEnd"), " ", hasPhases ? new Date(Number(`${lastPhase === null || lastPhase === void 0 ? void 0 : lastPhase.end_date}000`)).toLocaleDateString("en-CA", {
20718
20732
  year: "numeric",
20719
20733
  month: "short",
20720
20734
  day: "numeric"
20721
- }), "."), /*#__PURE__*/React__default['default'].createElement(SubscriptionCancelReason, null), /*#__PURE__*/React__default['default'].createElement(SubscriptionCancelNowButton, {
20722
- className: "plc-mb-2",
20723
- subscription: subscriptionToCancel
20724
- }), subscriptionToCancel.cancel_at_period_end === 0 && /*#__PURE__*/React__default['default'].createElement(SubscriptionCancelLaterButton, {
20735
+ }) : new Date(subscriptionToCancel === null || subscriptionToCancel === void 0 ? void 0 : subscriptionToCancel.current_period_end).toLocaleDateString("en-CA", {
20736
+ year: "numeric",
20737
+ month: "short",
20738
+ day: "numeric"
20739
+ }), "."), /*#__PURE__*/React__default['default'].createElement(SubscriptionCancelOptions, {
20740
+ subscription: subscriptionToCancel,
20741
+ hasPhases: hasPhases
20742
+ }), /*#__PURE__*/React__default['default'].createElement(SubscriptionCancelReason, null), /*#__PURE__*/React__default['default'].createElement("div", {
20743
+ className: "plc-space-x-0 plc-space-y-3 md:plc-space-x-3 md:plc-space-y-0 plc-w-full plc-flex plc-flex-col md:plc-flex-row plc-items-center plc-justify-center"
20744
+ }, /*#__PURE__*/React__default['default'].createElement(SubscriptionCancelButton, {
20745
+ className: "plc-w-3/4 md:plc-w-2/5",
20725
20746
  subscription: subscriptionToCancel
20726
- }))));
20747
+ }), /*#__PURE__*/React__default['default'].createElement(Button, {
20748
+ variant: "outline",
20749
+ className: "plc-w-3/4 md:plc-w-2/5",
20750
+ onClick: () => {
20751
+ switchView("dashboard");
20752
+ }
20753
+ }, t("labels.subCancellation.goBack"))))));
20727
20754
  };
20728
20755
 
20729
20756
  const SubscriptionCancelModal = _ref => {
package/dist/index.esm.js CHANGED
@@ -4018,12 +4018,16 @@ var invoiceDetails_en = {
4018
4018
  var labels$R = {
4019
4019
  title: "Cancel subscription",
4020
4020
  cancelReason: "Cancellation reason",
4021
+ endOn: "End on",
4022
+ endImmediately: "End immediately",
4023
+ cancel: "Cancel",
4021
4024
  subCancellation: {
4022
4025
  goBack: "Go back"
4023
4026
  }
4024
4027
  };
4025
4028
  var messages$T = {
4026
4029
  subscriptionEnd: "This subscription is set to expire on",
4030
+ cancelWhen: "When would you like to cancel?",
4027
4031
  cancelNow: "Cancel Subscription Now",
4028
4032
  cancelLater: "Cancel at Period End",
4029
4033
  subCancellation: {
@@ -4886,12 +4890,16 @@ var invoiceDetails_fr = {
4886
4890
  var labels$A = {
4887
4891
  title: "Annuler l'abonnement",
4888
4892
  cancelReason: "Motif d'annulation",
4893
+ endOn: "Fin sur",
4894
+ endImmediately: "Fin immédiate",
4895
+ cancel: "Annuler",
4889
4896
  subCancellation: {
4890
4897
  goBack: "Retourner"
4891
4898
  }
4892
4899
  };
4893
4900
  var messages$B = {
4894
4901
  subscriptionEnd: "Cet abonnement doit expirer le",
4902
+ cancelWhen: "Quand voulez-vous annuler?",
4895
4903
  cancelNow: "Cancel Subscription Now",
4896
4904
  cancelLater: "Annuler l'abonnement maintenant",
4897
4905
  subCancellation: {
@@ -5860,12 +5868,16 @@ var invoiceDetails_ko = {
5860
5868
  var labels$j = {
5861
5869
  title: "구독 취소",
5862
5870
  cancelReason: "취소 사유",
5871
+ endOn: "종료",
5872
+ endImmediately: "즉시 종료",
5873
+ cancel: "취소",
5863
5874
  subCancellation: {
5864
5875
  goBack: "돌아가기"
5865
5876
  }
5866
5877
  };
5867
5878
  var messages$j = {
5868
5879
  subscriptionEnd: "이 구독은 다음 날짜에 만료되도록 설정되었습니다.",
5880
+ cancelWhen: "언제 취소하시겠습니까?",
5869
5881
  cancelNow: "지금 구독 취소",
5870
5882
  cancelLater: "기간 종료 시 취소",
5871
5883
  subCancellation: {
@@ -6720,12 +6732,16 @@ var invoiceDetails_es = {
6720
6732
  var labels$2 = {
6721
6733
  title: "Cancelar suscripción",
6722
6734
  cancelReason: "Razón de la cancelación",
6735
+ endOn: "Fin de",
6736
+ endImmediately: "Fin inmediato",
6737
+ cancel: "Cancelar",
6723
6738
  subCancellation: {
6724
6739
  goBack: "Volver"
6725
6740
  }
6726
6741
  };
6727
6742
  var messages$1 = {
6728
6743
  subscriptionEnd: "Esta suscripción expirará el",
6744
+ cancelWhen: "¿Cuándo desea cancelar?",
6729
6745
  cancelNow: "Cancelar Suscripción Ahora",
6730
6746
  cancelLater: "Cancelar al Final del Periodo",
6731
6747
  subCancellation: {
@@ -12422,6 +12438,7 @@ const GET_NEWSLETTERS_SUCCESS = "GET_NEWSLETTERS_SUCCESS";
12422
12438
  const SWITCH_TO_UPDATE = "SWITCH_TO_UPDATE";
12423
12439
  const LINK_TOKEN_VERIFY = "LINK_TOKEN_VERIFY";
12424
12440
  const SET_CANCEL_SUBSCRIPTION_REASON = "SET_CANCEL_SUBSCRIPTION_REASON";
12441
+ const SET_CANCEL_SUBSCRIPTION_OPTION = "SET_CANCEL_SUBSCRIPTION_OPTION";
12425
12442
  const HANDLE_CHECKBOX_CHANGE = "HANDLE_CHECKBOX_CHANGE";
12426
12443
  const SET_SUBSCRIPTION_SUSPEND_DATE = "SET_SUBSCRIPTION_SUSPEND_DATE";
12427
12444
  const SET_EMAILS = "SET_EMAILS";
@@ -20352,7 +20369,8 @@ function SubscriptionRenewModal(_ref) {
20352
20369
  SubscriptionRenewModal.viewId = "subscription-renew";
20353
20370
 
20354
20371
  const initialState$j = {
20355
- cancelationReason: ""
20372
+ cancelationReason: "",
20373
+ cancelationOption: ""
20356
20374
  };
20357
20375
  const store$j = /*#__PURE__*/createContext(initialState$j);
20358
20376
  const {
@@ -20367,7 +20385,6 @@ const SubscriptionCancelContainer = _ref => {
20367
20385
  children,
20368
20386
  ...props
20369
20387
  } = _ref;
20370
- useTranslation("verifyEmail");
20371
20388
  const [state, dispatch] = useReducerWithSideEffects((state, action) => {
20372
20389
  switch (action.type) {
20373
20390
  case SET_CANCEL_SUBSCRIPTION_REASON:
@@ -20375,6 +20392,11 @@ const SubscriptionCancelContainer = _ref => {
20375
20392
  ...state,
20376
20393
  cancelationReason: action.payload
20377
20394
  });
20395
+ case SET_CANCEL_SUBSCRIPTION_OPTION:
20396
+ return lib_7({
20397
+ ...state,
20398
+ cancelationOption: action.payload
20399
+ });
20378
20400
  default:
20379
20401
  return state;
20380
20402
  }
@@ -20474,8 +20496,7 @@ const SubscriptionCancelReason = props => {
20474
20496
  t
20475
20497
  } = useTranslation("subscriptionCancel");
20476
20498
  const {
20477
- dispatch,
20478
- state
20499
+ dispatch
20479
20500
  } = useContext(store$j);
20480
20501
  const handleOnTextAreaBlur = e => {
20481
20502
  dispatch({
@@ -20507,7 +20528,7 @@ function SvgSubscription(props) {
20507
20528
  }))))));
20508
20529
  }
20509
20530
 
20510
- const SubscriptionCancelNowButton = _ref => {
20531
+ const SubscriptionCancelButton = _ref => {
20511
20532
  let {
20512
20533
  subscription,
20513
20534
  onClick,
@@ -20518,9 +20539,9 @@ const SubscriptionCancelNowButton = _ref => {
20518
20539
  } = usePelcro();
20519
20540
  const {
20520
20541
  state: {
20521
- cancelationReason
20522
- },
20523
- dispatch
20542
+ cancelationReason,
20543
+ cancelationOption
20544
+ }
20524
20545
  } = useContext(store$j);
20525
20546
  const {
20526
20547
  t
@@ -20554,10 +20575,10 @@ const SubscriptionCancelNowButton = _ref => {
20554
20575
  onSuccess === null || onSuccess === void 0 ? void 0 : onSuccess(res);
20555
20576
  });
20556
20577
  };
20557
- const handleCancelNowClick = () => {
20578
+ const handleCancelClick = () => {
20558
20579
  const payload = {
20559
20580
  subscription_id: subscription.id,
20560
- mode: "now",
20581
+ mode: cancelationOption,
20561
20582
  ...(cancelationReason && {
20562
20583
  reason: cancelationReason
20563
20584
  })
@@ -20571,7 +20592,7 @@ const SubscriptionCancelNowButton = _ref => {
20571
20592
  notify$1.confirm((onSuccess, onFailure) => {
20572
20593
  cancelSubscription(payload, onSuccess, onFailure);
20573
20594
  }, {
20574
- confirmMessage: t("messages.subCancellation.isSureToCancelNow"),
20595
+ confirmMessage: cancelationOption === "now" ? t("messages.subCancellation.isSureToCancelNow") : t("messages.subCancellation.isSureToCancel"),
20575
20596
  loadingMessage: t("messages.subCancellation.loading"),
20576
20597
  successMessage: t("messages.subCancellation.success"),
20577
20598
  errorMessage: t("messages.subCancellation.error")
@@ -20580,96 +20601,89 @@ const SubscriptionCancelNowButton = _ref => {
20580
20601
  });
20581
20602
  };
20582
20603
  return /*#__PURE__*/React__default.createElement(Button, {
20583
- onClick: handleCancelNowClick,
20584
- className: `${className}`
20585
- }, t("messages.cancelNow"));
20604
+ onClick: handleCancelClick,
20605
+ className: `${className}`,
20606
+ disabled: !cancelationOption
20607
+ }, t("labels.cancel"));
20586
20608
  };
20587
20609
 
20588
- const SubscriptionCancelLaterButton = _ref => {
20610
+ // New cancellation option modal
20611
+ const SubscriptionCancelOptions = _ref => {
20612
+ var _subscription$schedul;
20589
20613
  let {
20590
20614
  subscription,
20615
+ hasPhases,
20591
20616
  onClick,
20592
20617
  className
20593
20618
  } = _ref;
20594
- const {
20595
- switchView
20596
- } = usePelcro();
20597
20619
  const {
20598
20620
  state: {
20599
- cancelationReason
20621
+ cancelationOption
20600
20622
  },
20601
20623
  dispatch
20602
20624
  } = useContext(store$j);
20603
20625
  const {
20604
20626
  t
20605
20627
  } = useTranslation("subscriptionCancel");
20606
- const cancelSubscription = (payload, onSuccess, onFailure) => {
20607
- var _window, _window$Pelcro, _window$Pelcro$uiSett;
20608
- const enableReactGA4 = (_window = window) === null || _window === void 0 ? void 0 : (_window$Pelcro = _window.Pelcro) === null || _window$Pelcro === void 0 ? void 0 : (_window$Pelcro$uiSett = _window$Pelcro.uiSettings) === null || _window$Pelcro$uiSett === void 0 ? void 0 : _window$Pelcro$uiSett.enableReactGA4;
20609
- window.Pelcro.subscription.cancel({
20610
- auth_token: window.Pelcro.user.read().auth_token,
20611
- subscription_id: payload.subscription_id,
20612
- mode: payload.mode,
20613
- ...(payload.reason && {
20614
- reason: payload.reason
20615
- })
20616
- }, (err, res) => {
20617
- if (err) {
20618
- return onFailure === null || onFailure === void 0 ? void 0 : onFailure(err);
20619
- }
20620
- if (enableReactGA4) {
20621
- ReactGA4.event("Canceled", {
20622
- nonInteraction: true
20623
- });
20624
- } else {
20625
- var _ReactGA$event;
20626
- ReactGA === null || ReactGA === void 0 ? void 0 : (_ReactGA$event = ReactGA.event) === null || _ReactGA$event === void 0 ? void 0 : _ReactGA$event.call(ReactGA, {
20627
- category: "ACTIONS",
20628
- action: "Canceled",
20629
- nonInteraction: true
20630
- });
20631
- }
20632
- onSuccess === null || onSuccess === void 0 ? void 0 : onSuccess(res);
20633
- });
20634
- };
20635
- const handleCancelNowClick = () => {
20636
- const payload = {
20637
- subscription_id: subscription.id,
20638
- mode: "period_end",
20639
- ...(cancelationReason && {
20640
- reason: cancelationReason
20641
- })
20642
- };
20643
- onClick === null || onClick === void 0 ? void 0 : onClick();
20644
-
20645
- // Close the modal
20646
- switchView(null);
20647
-
20648
- // Show confirmation alert after closing the modal
20649
- notify$1.confirm((onSuccess, onFailure) => {
20650
- cancelSubscription(payload, onSuccess, onFailure);
20651
- }, {
20652
- confirmMessage: t("messages.subCancellation.isSureToCancel"),
20653
- loadingMessage: t("messages.subCancellation.loading"),
20654
- successMessage: t("messages.subCancellation.success"),
20655
- errorMessage: t("messages.subCancellation.error")
20656
- }, {
20657
- closeButtonLabel: t("labels.subCancellation.goBack")
20628
+ const phases = subscription === null || subscription === void 0 ? void 0 : (_subscription$schedul = subscription.schedule) === null || _subscription$schedul === void 0 ? void 0 : _subscription$schedul.phases;
20629
+ const lastPhase = !phases ? [] : phases[(phases === null || phases === void 0 ? void 0 : phases.length) - 1];
20630
+ const handleOptionSelect = event => {
20631
+ dispatch({
20632
+ type: SET_CANCEL_SUBSCRIPTION_OPTION,
20633
+ payload: event.target.value
20658
20634
  });
20659
20635
  };
20660
- return /*#__PURE__*/React__default.createElement(Button, {
20661
- onClick: handleCancelNowClick,
20662
- className: `${className}`
20663
- }, t("messages.cancelLater"));
20636
+ return /*#__PURE__*/React__default.createElement("div", {
20637
+ className: "plc-text-left plc-mr-auto plc-mb-6"
20638
+ }, /*#__PURE__*/React__default.createElement("p", {
20639
+ className: "plc-mb-3"
20640
+ }, t("messages.cancelWhen")), subscription.cancel_at_period_end === 0 && hasPhases && /*#__PURE__*/React__default.createElement(Radio, {
20641
+ onChange: handleOptionSelect,
20642
+ checked: cancelationOption === "period_end",
20643
+ value: "period_end"
20644
+ }, t("labels.endOn"), " ", new Date(Number(`${lastPhase === null || lastPhase === void 0 ? void 0 : lastPhase.end_date}000`)).toLocaleDateString("en-CA", {
20645
+ year: "numeric",
20646
+ month: "short",
20647
+ day: "numeric"
20648
+ })), subscription.cancel_at_period_end === 0 && /*#__PURE__*/React__default.createElement(Radio, {
20649
+ onChange: handleOptionSelect,
20650
+ checked: cancelationOption === "current_period_end",
20651
+ value: "current_period_end"
20652
+ }, t("labels.endOn"), " ", new Date(subscription === null || subscription === void 0 ? void 0 : subscription.current_period_end).toLocaleDateString("en-CA", {
20653
+ year: "numeric",
20654
+ month: "short",
20655
+ day: "numeric"
20656
+ })), /*#__PURE__*/React__default.createElement(Radio, {
20657
+ onChange: handleOptionSelect,
20658
+ checked: cancelationOption === "now",
20659
+ value: "now"
20660
+ }, t("labels.endImmediately")));
20664
20661
  };
20665
20662
 
20666
20663
  const SubscriptionCancelView = props => {
20664
+ var _subscriptionToCancel7, _subscriptionToCancel8;
20667
20665
  const {
20668
- subscriptionToCancel
20666
+ subscriptionToCancel,
20667
+ switchView
20669
20668
  } = usePelcro();
20670
20669
  const {
20671
20670
  t
20672
20671
  } = useTranslation("subscriptionCancel");
20672
+ const getPhases = () => {
20673
+ var _subscriptionToCancel, _subscriptionToCancel2, _subscriptionToCancel3, _subscriptionToCancel4, _subscriptionToCancel5, _subscriptionToCancel6;
20674
+ if (!subscriptionToCancel.schedule) return [];
20675
+ const currentPhaseStartDate = subscriptionToCancel === null || subscriptionToCancel === void 0 ? void 0 : (_subscriptionToCancel = subscriptionToCancel.schedule) === null || _subscriptionToCancel === void 0 ? void 0 : (_subscriptionToCancel2 = _subscriptionToCancel.current_phase) === null || _subscriptionToCancel2 === void 0 ? void 0 : _subscriptionToCancel2.start_date;
20676
+ const currentPhase = subscriptionToCancel === null || subscriptionToCancel === void 0 ? void 0 : (_subscriptionToCancel3 = subscriptionToCancel.schedule) === null || _subscriptionToCancel3 === void 0 ? void 0 : (_subscriptionToCancel4 = _subscriptionToCancel3.phases) === null || _subscriptionToCancel4 === void 0 ? void 0 : _subscriptionToCancel4.find(phase => {
20677
+ return (phase === null || phase === void 0 ? void 0 : phase.start_date) === currentPhaseStartDate;
20678
+ });
20679
+ const futurePhases = subscriptionToCancel === null || subscriptionToCancel === void 0 ? void 0 : (_subscriptionToCancel5 = subscriptionToCancel.schedule) === null || _subscriptionToCancel5 === void 0 ? void 0 : (_subscriptionToCancel6 = _subscriptionToCancel5.phases) === null || _subscriptionToCancel6 === void 0 ? void 0 : _subscriptionToCancel6.filter(phase => {
20680
+ return (phase === null || phase === void 0 ? void 0 : phase.start_date) > currentPhaseStartDate;
20681
+ });
20682
+ return [currentPhase, ...futurePhases];
20683
+ };
20684
+ const hasPhases = getPhases().length > 0;
20685
+ const phases = subscriptionToCancel === null || subscriptionToCancel === void 0 ? void 0 : (_subscriptionToCancel7 = subscriptionToCancel.schedule) === null || _subscriptionToCancel7 === void 0 ? void 0 : _subscriptionToCancel7.phases;
20686
+ const lastPhase = !phases ? [] : phases[(phases === null || phases === void 0 ? void 0 : phases.length) - 1];
20673
20687
  return /*#__PURE__*/React__default.createElement("div", {
20674
20688
  id: "pelcro-subscription-cancel-view"
20675
20689
  }, /*#__PURE__*/React__default.createElement("div", {
@@ -20678,22 +20692,35 @@ const SubscriptionCancelView = props => {
20678
20692
  className: "plc-text-2xl plc-font-semibold"
20679
20693
  }, t("labels.title"), /*#__PURE__*/React__default.createElement("span", {
20680
20694
  className: "plc-text-gray-400 plc-text-base plc-block"
20681
- }, "(", subscriptionToCancel.plan.nickname, ")"))), /*#__PURE__*/React__default.createElement(SubscriptionCancelContainer, props, /*#__PURE__*/React__default.createElement("div", {
20695
+ }, "(", subscriptionToCancel === null || subscriptionToCancel === void 0 ? void 0 : (_subscriptionToCancel8 = subscriptionToCancel.plan) === null || _subscriptionToCancel8 === void 0 ? void 0 : _subscriptionToCancel8.nickname, ")"))), /*#__PURE__*/React__default.createElement(SubscriptionCancelContainer, props, /*#__PURE__*/React__default.createElement("div", {
20682
20696
  className: "plc-flex plc-flex-col plc-items-center plc-justify-center plc-mt-4"
20683
20697
  }, /*#__PURE__*/React__default.createElement(SvgSubscription, {
20684
20698
  className: "plc-w-32 plc-h-32"
20685
20699
  }), /*#__PURE__*/React__default.createElement("p", {
20686
- className: "plc-mb-3 plc-text-gray-900 plc-text-center plc-whitespace-pre-line"
20687
- }, t("messages.subscriptionEnd"), " ", new Date(subscriptionToCancel === null || subscriptionToCancel === void 0 ? void 0 : subscriptionToCancel.current_period_end).toLocaleDateString("en-CA", {
20700
+ className: "plc-mb-3 plc-text-gray-900 plc-text-left plc-mr-auto plc-whitespace-pre-line"
20701
+ }, t("messages.subscriptionEnd"), " ", hasPhases ? new Date(Number(`${lastPhase === null || lastPhase === void 0 ? void 0 : lastPhase.end_date}000`)).toLocaleDateString("en-CA", {
20688
20702
  year: "numeric",
20689
20703
  month: "short",
20690
20704
  day: "numeric"
20691
- }), "."), /*#__PURE__*/React__default.createElement(SubscriptionCancelReason, null), /*#__PURE__*/React__default.createElement(SubscriptionCancelNowButton, {
20692
- className: "plc-mb-2",
20693
- subscription: subscriptionToCancel
20694
- }), subscriptionToCancel.cancel_at_period_end === 0 && /*#__PURE__*/React__default.createElement(SubscriptionCancelLaterButton, {
20705
+ }) : new Date(subscriptionToCancel === null || subscriptionToCancel === void 0 ? void 0 : subscriptionToCancel.current_period_end).toLocaleDateString("en-CA", {
20706
+ year: "numeric",
20707
+ month: "short",
20708
+ day: "numeric"
20709
+ }), "."), /*#__PURE__*/React__default.createElement(SubscriptionCancelOptions, {
20710
+ subscription: subscriptionToCancel,
20711
+ hasPhases: hasPhases
20712
+ }), /*#__PURE__*/React__default.createElement(SubscriptionCancelReason, null), /*#__PURE__*/React__default.createElement("div", {
20713
+ className: "plc-space-x-0 plc-space-y-3 md:plc-space-x-3 md:plc-space-y-0 plc-w-full plc-flex plc-flex-col md:plc-flex-row plc-items-center plc-justify-center"
20714
+ }, /*#__PURE__*/React__default.createElement(SubscriptionCancelButton, {
20715
+ className: "plc-w-3/4 md:plc-w-2/5",
20695
20716
  subscription: subscriptionToCancel
20696
- }))));
20717
+ }), /*#__PURE__*/React__default.createElement(Button, {
20718
+ variant: "outline",
20719
+ className: "plc-w-3/4 md:plc-w-2/5",
20720
+ onClick: () => {
20721
+ switchView("dashboard");
20722
+ }
20723
+ }, t("labels.subCancellation.goBack"))))));
20697
20724
  };
20698
20725
 
20699
20726
  const SubscriptionCancelModal = _ref => {
package/dist/pelcro.css CHANGED
@@ -1724,6 +1724,12 @@ in order to scope selectors under pelcro-root
1724
1724
 
1725
1725
  /* utilities */
1726
1726
 
1727
+ .pelcro-root .plc-space-x-0 > :not([hidden]) ~ :not([hidden]) {
1728
+ --tw-space-x-reverse: 0;
1729
+ margin-right: calc(0px * var(--tw-space-x-reverse));
1730
+ margin-left: calc(0px * calc(1 - var(--tw-space-x-reverse)));
1731
+ }
1732
+
1727
1733
  .pelcro-root .plc-space-y-2 > :not([hidden]) ~ :not([hidden]) {
1728
1734
  --tw-space-y-reverse: 0;
1729
1735
  margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));
@@ -1736,6 +1742,12 @@ in order to scope selectors under pelcro-root
1736
1742
  margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
1737
1743
  }
1738
1744
 
1745
+ .pelcro-root .plc-space-y-3 > :not([hidden]) ~ :not([hidden]) {
1746
+ --tw-space-y-reverse: 0;
1747
+ margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));
1748
+ margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));
1749
+ }
1750
+
1739
1751
  .pelcro-root .plc-space-x-3 > :not([hidden]) ~ :not([hidden]) {
1740
1752
  --tw-space-x-reverse: 0;
1741
1753
  margin-right: calc(0.75rem * var(--tw-space-x-reverse));
@@ -2320,6 +2332,10 @@ in order to scope selectors under pelcro-root
2320
2332
  margin-top: auto;
2321
2333
  }
2322
2334
 
2335
+ .pelcro-root .plc-mr-auto {
2336
+ margin-right: auto;
2337
+ }
2338
+
2323
2339
  .pelcro-root .plc-ml-auto {
2324
2340
  margin-left: auto;
2325
2341
  }
@@ -3218,6 +3234,25 @@ in order to scope selectors under pelcro-root
3218
3234
  }
3219
3235
 
3220
3236
  @media (min-width: 768px) {
3237
+ .pelcro-root .md\:plc-space-y-0 > :not([hidden]) ~ :not([hidden]) {
3238
+ --tw-space-y-reverse: 0;
3239
+ margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));
3240
+ margin-bottom: calc(0px * var(--tw-space-y-reverse));
3241
+ }
3242
+
3243
+ .pelcro-root .md\:plc-space-x-3 > :not([hidden]) ~ :not([hidden]) {
3244
+ --tw-space-x-reverse: 0;
3245
+ margin-right: calc(0.75rem * var(--tw-space-x-reverse));
3246
+ margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse)));
3247
+ }
3248
+
3249
+ .pelcro-root .md\:plc-flex-row {
3250
+ flex-direction: row;
3251
+ }
3252
+
3253
+ .pelcro-root .md\:plc-w-2\/5 {
3254
+ width: 40%;
3255
+ }
3221
3256
  }
3222
3257
 
3223
3258
  @media (min-width: 1024px) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pelcro/react-pelcro-js",
3
3
  "description": "Pelcro's React UI Elements",
4
- "version": "3.26.1",
4
+ "version": "3.27.0",
5
5
  "license": "MIT",
6
6
  "private": false,
7
7
  "main": "dist/index.cjs.js",