diff --git a/app/javascript/dashboard/i18n/locale/en/settings.json b/app/javascript/dashboard/i18n/locale/en/settings.json index f3c58bb7e..648f058ac 100644 --- a/app/javascript/dashboard/i18n/locale/en/settings.json +++ b/app/javascript/dashboard/i18n/locale/en/settings.json @@ -493,8 +493,7 @@ "TITLE": "Cancel Subscription", "WARNING_TITLE": "Are you sure?", "WARNING_MESSAGE": "Cancelling your subscription will stop monthly credit renewals. Any remaining credits will still be available until used.", - "REASON_LABEL": "Reason for cancellation", - "OPTIONAL": "(optional)", + "REASON_LABEL": "Reason for cancellation (optional)", "REASON_PLACEHOLDER": "Help us improve by sharing why you're cancelling...", "INFO": "You can resubscribe anytime to continue receiving monthly credits.", "KEEP_SUBSCRIPTION": "Keep Subscription", diff --git a/app/javascript/dashboard/routes/dashboard/settings/billing-v2/components/CancelSubscriptionModal.vue b/app/javascript/dashboard/routes/dashboard/settings/billing-v2/components/CancelSubscriptionModal.vue index 40af4d072..c713924fe 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/billing-v2/components/CancelSubscriptionModal.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/billing-v2/components/CancelSubscriptionModal.vue @@ -1,94 +1,76 @@ - - - - - {{ $t('BILLING_SETTINGS_V2.CANCEL_MODAL.TITLE') }} - - - - - - - - - - - {{ $t('BILLING_SETTINGS_V2.CANCEL_MODAL.WARNING_TITLE') }} - - - {{ $t('BILLING_SETTINGS_V2.CANCEL_MODAL.WARNING_MESSAGE') }} - - - - - - - - - {{ $t('BILLING_SETTINGS_V2.CANCEL_MODAL.REASON_LABEL') }} - {{ - $t('BILLING_SETTINGS_V2.CANCEL_MODAL.OPTIONAL') - }} - - - - - - - - - - {{ $t('BILLING_SETTINGS_V2.CANCEL_MODAL.INFO') }} + + + + + + + + + {{ t('BILLING_SETTINGS_V2.CANCEL_MODAL.WARNING_TITLE') }} + + + {{ t('BILLING_SETTINGS_V2.CANCEL_MODAL.WARNING_MESSAGE') }} - - - {{ $t('BILLING_SETTINGS_V2.CANCEL_MODAL.KEEP_SUBSCRIPTION') }} - - - {{ $t('BILLING_SETTINGS_V2.CANCEL_MODAL.CONFIRM_CANCEL') }} - + + + + + + {{ t('BILLING_SETTINGS_V2.CANCEL_MODAL.INFO') }} + - + diff --git a/app/javascript/dashboard/routes/dashboard/settings/billing-v2/components/PricingPlans.vue b/app/javascript/dashboard/routes/dashboard/settings/billing-v2/components/PricingPlans.vue index 871ec2668..07295604a 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/billing-v2/components/PricingPlans.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/billing-v2/components/PricingPlans.vue @@ -36,7 +36,7 @@ const { t } = useI18n(); const store = useStore(); const showSubscribeModal = ref(false); -const showCancelModal = ref(false); +const cancelModalRef = ref(null); const selectedPlan = ref(null); const selectedQuantity = ref(1); @@ -112,16 +112,6 @@ const formatNextBillingDate = () => { }).format(date); }; -const currentPlan = computed(() => { - if (!currentPlanId.value) return null; - return transformedPlans.value.find(plan => plan.id === currentPlanId.value); -}); - -const pendingPlan = computed(() => { - if (!pendingPlanId.value) return null; - return transformedPlans.value.find(plan => plan.id === pendingPlanId.value); -}); - // Transform backend component structure to flat structure const transformedPlans = computed(() => { return props.plans.map(plan => { @@ -145,6 +135,16 @@ const transformedPlans = computed(() => { }); }); +const currentPlan = computed(() => { + if (!currentPlanId.value) return null; + return transformedPlans.value.find(plan => plan.id === currentPlanId.value); +}); + +const pendingPlan = computed(() => { + if (!pendingPlanId.value) return null; + return transformedPlans.value.find(plan => plan.id === pendingPlanId.value); +}); + const formatPrice = price => { if (!price) return '$0'; return new Intl.NumberFormat('en-US', { @@ -186,7 +186,7 @@ const handleSubscribe = async data => { }; const openCancelModal = () => { - showCancelModal.value = true; + cancelModalRef.value?.dialogRef?.open(); }; const handleCancelSubscription = async reason => { @@ -195,7 +195,7 @@ const handleCancelSubscription = async reason => { }); if (result.success) { useAlert(t('BILLING_SETTINGS_V2.PRICING_PLANS.CANCEL_SUCCESS')); - showCancelModal.value = false; + cancelModalRef.value?.dialogRef?.close(); } else if (result.error) { useAlert(result.error); } @@ -553,9 +553,8 @@ const isCurrentPlan = plan => {
- {{ $t('BILLING_SETTINGS_V2.CANCEL_MODAL.WARNING_MESSAGE') }} -
- {{ $t('BILLING_SETTINGS_V2.CANCEL_MODAL.INFO') }} + + + + + + + + + {{ t('BILLING_SETTINGS_V2.CANCEL_MODAL.WARNING_TITLE') }} + + + {{ t('BILLING_SETTINGS_V2.CANCEL_MODAL.WARNING_MESSAGE') }} - - - {{ $t('BILLING_SETTINGS_V2.CANCEL_MODAL.KEEP_SUBSCRIPTION') }} - - - {{ $t('BILLING_SETTINGS_V2.CANCEL_MODAL.CONFIRM_CANCEL') }} - + + + + + + {{ t('BILLING_SETTINGS_V2.CANCEL_MODAL.INFO') }} + - + diff --git a/app/javascript/dashboard/routes/dashboard/settings/billing-v2/components/PricingPlans.vue b/app/javascript/dashboard/routes/dashboard/settings/billing-v2/components/PricingPlans.vue index 871ec2668..07295604a 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/billing-v2/components/PricingPlans.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/billing-v2/components/PricingPlans.vue @@ -36,7 +36,7 @@ const { t } = useI18n(); const store = useStore(); const showSubscribeModal = ref(false); -const showCancelModal = ref(false); +const cancelModalRef = ref(null); const selectedPlan = ref(null); const selectedQuantity = ref(1); @@ -112,16 +112,6 @@ const formatNextBillingDate = () => { }).format(date); }; -const currentPlan = computed(() => { - if (!currentPlanId.value) return null; - return transformedPlans.value.find(plan => plan.id === currentPlanId.value); -}); - -const pendingPlan = computed(() => { - if (!pendingPlanId.value) return null; - return transformedPlans.value.find(plan => plan.id === pendingPlanId.value); -}); - // Transform backend component structure to flat structure const transformedPlans = computed(() => { return props.plans.map(plan => { @@ -145,6 +135,16 @@ const transformedPlans = computed(() => { }); }); +const currentPlan = computed(() => { + if (!currentPlanId.value) return null; + return transformedPlans.value.find(plan => plan.id === currentPlanId.value); +}); + +const pendingPlan = computed(() => { + if (!pendingPlanId.value) return null; + return transformedPlans.value.find(plan => plan.id === pendingPlanId.value); +}); + const formatPrice = price => { if (!price) return '$0'; return new Intl.NumberFormat('en-US', { @@ -186,7 +186,7 @@ const handleSubscribe = async data => { }; const openCancelModal = () => { - showCancelModal.value = true; + cancelModalRef.value?.dialogRef?.open(); }; const handleCancelSubscription = async reason => { @@ -195,7 +195,7 @@ const handleCancelSubscription = async reason => { }); if (result.success) { useAlert(t('BILLING_SETTINGS_V2.PRICING_PLANS.CANCEL_SUCCESS')); - showCancelModal.value = false; + cancelModalRef.value?.dialogRef?.close(); } else if (result.error) { useAlert(result.error); } @@ -553,9 +553,8 @@ const isCurrentPlan = plan => {
+ {{ t('BILLING_SETTINGS_V2.CANCEL_MODAL.WARNING_MESSAGE') }}
+ {{ t('BILLING_SETTINGS_V2.CANCEL_MODAL.INFO') }} +