diff --git a/website/client/app.vue b/website/client/app.vue
index 0ed4b662e1..a7e3a424d5 100644
--- a/website/client/app.vue
+++ b/website/client/app.vue
@@ -12,6 +12,8 @@ div
banned-account-modal
amazon-payments-modal(v-if='!isStaticPage')
payments-success-modal
+ sub-cancel-modal-confirm(v-if='isUserLoaded')
+ sub-canceled-modal(v-if='isUserLoaded')
snackbars
router-view(v-if="!isUserLoggedIn || isStaticPage")
template(v-else)
@@ -187,6 +189,8 @@ import notifications from 'client/mixins/notifications';
import { setup as setupPayments } from 'client/libs/payments';
import amazonPaymentsModal from 'client/components/payments/amazonModal';
import paymentsSuccessModal from 'client/components/payments/successModal';
+import subCancelModalConfirm from 'client/components/payments/cancelModalConfirm';
+import subCanceledModal from 'client/components/payments/canceledModal';
import spellsMixin from 'client/mixins/spells';
import { CONSTANTS, getLocalSetting, removeLocalSetting } from 'client/libs/userlocalManager';
@@ -210,6 +214,8 @@ export default {
amazonPaymentsModal,
bannedAccountModal,
paymentsSuccessModal,
+ subCancelModalConfirm,
+ subCanceledModal,
},
data () {
return {
diff --git a/website/client/assets/scss/modal.scss b/website/client/assets/scss/modal.scss
index 60c0274d13..6aa6a283ac 100644
--- a/website/client/assets/scss/modal.scss
+++ b/website/client/assets/scss/modal.scss
@@ -123,3 +123,87 @@
}
}
}
+
+#subscription-cancel-modal, #subscription-canceled-modal {
+ .modal-content {
+ background: transparent;
+ }
+
+ &.modal-hidden-footer .modal-body {
+ border-bottom-right-radius: 8px;
+ border-bottom-left-radius: 8px;
+ }
+
+ .modal-header {
+ justify-content: center;
+ padding-top: 24px;
+ padding-bottom: 0px;
+ border-top-right-radius: 8px;
+ border-top-left-radius: 8px;
+ border-bottom: none;
+ background: $white;
+ }
+
+ .icon-container {
+ border-radius: 50%;
+ width: 64px;
+ height: 64px;
+ margin: 0 auto;
+ margin-bottom: 8px;
+ }
+
+ .modal-footer {
+ background: $gray-700;
+ border-bottom-right-radius: 8px;
+ border-bottom-left-radius: 8px;
+ justify-content: center;
+ border-top: none;
+
+ .small-text {
+ font-style: normal;
+ }
+ }
+
+ .modal-body {
+ padding-top: 16px;
+ padding-bottom: 24px;
+ background: white;
+
+ .modal-body-col {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ text-align: center;
+
+ .btn.btn-primary {
+ margin-top: 24px;
+ }
+ }
+
+ h2 {
+ margin-bottom: 8px;
+ }
+
+ .cancel-text {
+ color: $gray-50;
+ line-height: 1.71;
+ }
+
+ .details-block {
+ background: $gray-700;
+ border-radius: 4px;
+ padding: 8px 24px;
+ margin-top: 16px;
+ display: flex;
+ flex-direction: row;
+ text-align: center;
+ }
+
+ .auto-renew {
+ margin-top: 16px;
+ color: $orange-10;
+ font-style: normal;
+ }
+ }
+
+}
diff --git a/website/client/assets/svg/exclamation.svg b/website/client/assets/svg/exclamation.svg
new file mode 100644
index 0000000000..cc2cdfe8c8
--- /dev/null
+++ b/website/client/assets/svg/exclamation.svg
@@ -0,0 +1,3 @@
+
diff --git a/website/client/components/group-plans/billing.vue b/website/client/components/group-plans/billing.vue
index f9b886d54b..976028f89e 100644
--- a/website/client/components/group-plans/billing.vue
+++ b/website/client/components/group-plans/billing.vue
@@ -29,13 +29,14 @@
.btn.btn-primary(v-if='!group.purchased.plan.dateTerminated && group.purchased.plan.paymentMethod === "Stripe"',
@click='showStripeEdit({groupId: group.id})') {{ $t('subUpdateCard') }}
.btn.btn-sm.btn-danger(v-if='!group.purchased.plan.dateTerminated',
- @click='cancelSubscription({group: group})') {{ $t('cancelGroupSub') }}
+ @click='cancelSubscriptionConfirm({group: group})') {{ $t('cancelGroupSub') }}
\ No newline at end of file
diff --git a/website/client/components/payments/canceledModal.vue b/website/client/components/payments/canceledModal.vue
new file mode 100644
index 0000000000..e3f2960a71
--- /dev/null
+++ b/website/client/components/payments/canceledModal.vue
@@ -0,0 +1,100 @@
+
+ b-modal#subscription-canceled-modal(
+ size='sm',
+ :hideFooter="true",
+ :modalClass="['modal-hidden-footer']"
+ )
+ div(slot="modal-header")
+ .svg-icon.close(v-html="icons.close", v-once, @click="close()")
+ .icon-container.check-container.d-flex.align-items-center.justify-content-center
+ .svg-icon.check(v-html="icons.check", v-once)
+ .row
+ .col-12.modal-body-col
+ h2 {{ $t(isGroup ? 'canceledGroupPlan' : 'subCanceledTitle') }}
+ .details-block
+ span
+ | {{ $t('subWillBecomeInactive') }}
+ br
+ strong {{ isGroup ? groupDateTerminated : dateTerminated }}
+ span.auto-renew.small-text(v-once) {{ $t('paymentCanceledDisputes') }}
+
+
+
+
+
\ No newline at end of file
diff --git a/website/client/components/settings/subscription.vue b/website/client/components/settings/subscription.vue
index 6e2a634258..80023627c8 100644
--- a/website/client/components/settings/subscription.vue
+++ b/website/client/components/settings/subscription.vue
@@ -68,7 +68,7 @@
div(v-if='hasSubscription')
.btn.btn-primary(v-if='canEditCardDetails', @click='showStripeEdit()') {{ $t('subUpdateCard') }}
- .btn.btn-sm.btn-danger(v-if='canCancelSubscription && !loading', @click='cancelSubscription()') {{ $t('cancelSub') }}
+ .btn.btn-sm.btn-danger(v-if='canCancelSubscription && !loading', @click='cancelSubscriptionConfirm()') {{ $t('cancelSub') }}
small(v-if='!canCancelSubscription && !hasCanceledSubscription', v-html='getCancelSubInfo()')
.subscribe-pay(v-if='!hasSubscription || hasCanceledSubscription')
@@ -104,7 +104,6 @@