diff --git a/packages/console/src/pages/TenantSettings/Subscription/CurrentPlan/MauLimitExceededNotification/index.tsx b/packages/console/src/pages/TenantSettings/Subscription/CurrentPlan/MauLimitExceededNotification/index.tsx index 52c538e6e..3a5713270 100644 --- a/packages/console/src/pages/TenantSettings/Subscription/CurrentPlan/MauLimitExceededNotification/index.tsx +++ b/packages/console/src/pages/TenantSettings/Subscription/CurrentPlan/MauLimitExceededNotification/index.tsx @@ -1,4 +1,4 @@ -import { useContext } from 'react'; +import { useContext, useMemo } from 'react'; import { toastResponseError } from '@/cloud/hooks/use-cloud-api'; import { subscriptionPage } from '@/consts/pages'; @@ -6,8 +6,12 @@ import { ReservedPlanId } from '@/consts/subscriptions'; import { TenantsContext } from '@/contexts/TenantsProvider'; import DynamicT from '@/ds-components/DynamicT'; import InlineNotification from '@/ds-components/InlineNotification'; +import { useConfirmModal } from '@/hooks/use-confirm-modal'; import useSubscribe from '@/hooks/use-subscribe'; +import useSubscriptionPlans from '@/hooks/use-subscription-plans'; +import NotEligibleSwitchPlanModalContent from '@/pages/TenantSettings/components/NotEligibleSwitchPlanModalContent'; import { type SubscriptionPlan } from '@/types/subscriptions'; +import { isExceededQuotaLimitError } from '@/utils/subscription'; type Props = { activeUsers: number; @@ -18,12 +22,21 @@ type Props = { function MauLimitExceededNotification({ activeUsers, currentPlan, className }: Props) { const { currentTenantId } = useContext(TenantsContext); const { subscribe } = useSubscribe(); + const { show } = useConfirmModal(); + const { data: subscriptionPlans } = useSubscriptionPlans(); + const proPlan = useMemo( + () => subscriptionPlans?.find(({ id }) => id === ReservedPlanId.pro), + [subscriptionPlans] + ); + const { quota: { mauLimit }, } = currentPlan; + if ( mauLimit === null || // Unlimited - activeUsers < mauLimit + activeUsers < mauLimit || + !proPlan ) { return null; } @@ -36,11 +49,21 @@ function MauLimitExceededNotification({ activeUsers, currentPlan, className }: P onClick={async () => { try { await subscribe({ - planId: ReservedPlanId.pro, + planId: proPlan.id, tenantId: currentTenantId, callbackPage: subscriptionPage, }); } catch (error: unknown) { + if (await isExceededQuotaLimitError(error)) { + await show({ + ModalContent: () => , + title: 'subscription.not_eligible_modal.upgrade_title', + confirmButtonText: 'general.got_it', + confirmButtonType: 'primary', + }); + return; + } + void toastResponseError(error); } }} diff --git a/packages/console/src/pages/TenantSettings/Subscription/SwitchPlanActionBar/index.tsx b/packages/console/src/pages/TenantSettings/Subscription/SwitchPlanActionBar/index.tsx index 8a62ae6b1..bf5f58144 100644 --- a/packages/console/src/pages/TenantSettings/Subscription/SwitchPlanActionBar/index.tsx +++ b/packages/console/src/pages/TenantSettings/Subscription/SwitchPlanActionBar/index.tsx @@ -1,9 +1,8 @@ -import { ResponseError } from '@withtyped/client'; import { useContext } from 'react'; import { toast } from 'react-hot-toast'; import { Trans, useTranslation } from 'react-i18next'; -import { responseErrorBodyGuard, toastResponseError } from '@/cloud/hooks/use-cloud-api'; +import { toastResponseError } from '@/cloud/hooks/use-cloud-api'; import PlanName from '@/components/PlanName'; import { contactEmailLink } from '@/consts'; import { subscriptionPage } from '@/consts/pages'; @@ -13,11 +12,11 @@ import Button from '@/ds-components/Button'; import Spacer from '@/ds-components/Spacer'; import { useConfirmModal } from '@/hooks/use-confirm-modal'; import useSubscribe from '@/hooks/use-subscribe'; +import NotEligibleSwitchPlanModalContent from '@/pages/TenantSettings/components/NotEligibleSwitchPlanModalContent'; import { type SubscriptionPlan } from '@/types/subscriptions'; -import { isDowngradePlan } from '@/utils/subscription'; +import { isDowngradePlan, isExceededQuotaLimitError } from '@/utils/subscription'; import DowngradeConfirmModalContent from '../DowngradeConfirmModalContent'; -import NotEligibleDowngradeModalContent from '../NotEligibleDowngradeModalContent'; import * as styles from './index.module.scss'; @@ -37,64 +36,62 @@ function SwitchPlanActionBar({ const { subscribe, cancelSubscription } = useSubscribe(); const { show } = useConfirmModal(); - const handleDownGrade = async (targetPlan: SubscriptionPlan) => { - const { id: planId, name } = targetPlan; - try { - if (planId === ReservedPlanId.free) { - await cancelSubscription(currentTenantId); - onSubscriptionUpdated(); - toast.success( - }}>{t('downgrade_success')} - ); - return; - } - - await subscribe({ - tenantId: currentTenantId, - planId, - isDowngrade: true, - callbackPage: subscriptionPage, - }); - } catch (error: unknown) { - /** - * Note: this is a temporary solution to handle the case when the user tries to downgrade but the quota limit is exceeded. - * Need a better solution to handle this case by sharing the error type between the console and cloud. - LOG-6608 - */ - if (error instanceof ResponseError) { - const parsed = responseErrorBodyGuard.safeParse(await error.response.json()); - if (parsed.success && parsed.data.message.includes('Exceeded quota limit')) { - await show({ - ModalContent: () => , - title: 'subscription.downgrade_modal.not_eligible', - confirmButtonText: 'general.got_it', - confirmButtonType: 'primary', - }); - } - return; - } - - void toastResponseError(error); - } - }; - - const onDowngradeClick = async (targetPlanId: string) => { + const handleSubscribe = async (targetPlanId: string, isDowngrade: boolean) => { const currentPlan = subscriptionPlans.find(({ id }) => id === currentSubscriptionPlanId); const targetPlan = subscriptionPlans.find(({ id }) => id === targetPlanId); if (!currentPlan || !targetPlan) { return; } - const [result] = await show({ - ModalContent: () => ( - - ), - title: 'subscription.downgrade_modal.title', - confirmButtonText: 'subscription.downgrade_modal.downgrade', - size: 'large', - }); + if (isDowngrade) { + const [result] = await show({ + ModalContent: () => ( + + ), + title: 'subscription.downgrade_modal.title', + confirmButtonText: 'subscription.downgrade_modal.downgrade', + size: 'large', + }); - if (result) { - await handleDownGrade(targetPlan); + if (!result) { + return; + } + } + + try { + if (targetPlanId === ReservedPlanId.free) { + await cancelSubscription(currentTenantId); + onSubscriptionUpdated(); + toast.success( + }}> + {t('downgrade_success')} + + ); + return; + } + + await subscribe({ + tenantId: currentTenantId, + planId: targetPlanId, + isDowngrade, + callbackPage: subscriptionPage, + }); + } catch (error: unknown) { + if (await isExceededQuotaLimitError(error)) { + await show({ + ModalContent: () => ( + + ), + title: isDowngrade + ? 'subscription.not_eligible_modal.downgrade_title' + : 'subscription.not_eligible_modal.upgrade_title', + confirmButtonText: 'general.got_it', + confirmButtonType: 'primary', + }); + return; + } + + void toastResponseError(error); } }; @@ -117,22 +114,8 @@ function SwitchPlanActionBar({ } type={isDowngrade ? 'default' : 'primary'} disabled={isCurrentPlan} - onClick={async () => { - if (isDowngrade) { - await onDowngradeClick(planId); - - return; - } - - try { - await subscribe({ - tenantId: currentTenantId, - planId, - callbackPage: subscriptionPage, - }); - } catch (error: unknown) { - void toastResponseError(error); - } + onClick={() => { + void handleSubscribe(planId, isDowngrade); }} /> diff --git a/packages/console/src/pages/TenantSettings/Subscription/NotEligibleDowngradeModalContent/index.module.scss b/packages/console/src/pages/TenantSettings/components/NotEligibleSwitchPlanModalContent/index.module.scss similarity index 100% rename from packages/console/src/pages/TenantSettings/Subscription/NotEligibleDowngradeModalContent/index.module.scss rename to packages/console/src/pages/TenantSettings/components/NotEligibleSwitchPlanModalContent/index.module.scss diff --git a/packages/console/src/pages/TenantSettings/Subscription/NotEligibleDowngradeModalContent/index.tsx b/packages/console/src/pages/TenantSettings/components/NotEligibleSwitchPlanModalContent/index.tsx similarity index 84% rename from packages/console/src/pages/TenantSettings/Subscription/NotEligibleDowngradeModalContent/index.tsx rename to packages/console/src/pages/TenantSettings/components/NotEligibleSwitchPlanModalContent/index.tsx index f1b10d95f..4a0764c66 100644 --- a/packages/console/src/pages/TenantSettings/Subscription/NotEligibleDowngradeModalContent/index.tsx +++ b/packages/console/src/pages/TenantSettings/components/NotEligibleSwitchPlanModalContent/index.tsx @@ -20,10 +20,13 @@ const excludedQuotaKeys = new Set([ type Props = { targetPlan: SubscriptionPlan; + isDowngrade?: boolean; }; -function NotEligibleDowngradeModalContent({ targetPlan }: Props) { - const { t } = useTranslation(undefined, { keyPrefix: 'admin_console' }); +function NotEligibleSwitchPlanModalContent({ targetPlan, isDowngrade = false }: Props) { + const { t } = useTranslation(undefined, { + keyPrefix: 'admin_console.subscription.not_eligible_modal', + }); const { name, quota } = targetPlan; @@ -40,7 +43,7 @@ function NotEligibleDowngradeModalContent({ targetPlan }: Props) { name: , }} > - {t('subscription.downgrade_modal.not_eligible_description')} + {t(isDowngrade ? 'downgrade_description' : 'upgrade_description')}
    @@ -68,7 +71,7 @@ function NotEligibleDowngradeModalContent({ targetPlan }: Props) { ), }} > - {t('subscription.downgrade_modal.a_maximum_of')} + {t('a_maximum_of')} ) : ( , }} > - {t('subscription.downgrade_modal.help_tip')} + {t(isDowngrade ? 'downgrade_help_tip' : 'upgrade_help_tip')} ); } -export default NotEligibleDowngradeModalContent; +export default NotEligibleSwitchPlanModalContent; diff --git a/packages/console/src/utils/subscription.ts b/packages/console/src/utils/subscription.ts index 9e46a953e..7a21841e6 100644 --- a/packages/console/src/utils/subscription.ts +++ b/packages/console/src/utils/subscription.ts @@ -1,5 +1,7 @@ +import { ResponseError } from '@withtyped/client'; import dayjs from 'dayjs'; +import { responseErrorBodyGuard } from '@/cloud/hooks/use-cloud-api'; import { type SubscriptionPlanResponse } from '@/cloud/types/router'; import { communitySupportEnabledMap, @@ -52,3 +54,21 @@ export const getLatestUnpaidInvoice = (invoices: Invoice[]) => new Date(invoiceB.createdAt).getTime() - new Date(invoiceA.createdAt).getTime() ) .find(({ status }) => status === 'uncollectible'); + +/** + * Note: this is a temporary solution to handle the case when the user tries to downgrade but the quota limit is exceeded. + * Need a better solution to handle this case by sharing the error type between the console and cloud. - LOG-6608 + */ +export const isExceededQuotaLimitError = async (error: unknown) => { + if (!(error instanceof ResponseError)) { + return false; + } + + try { + const responseBody = await error.response.json(); + const { message } = responseErrorBodyGuard.parse(responseBody); + return message.includes('Exceeded quota limit'); + } catch { + return false; + } +}; diff --git a/packages/phrases/src/locales/de/translation/admin-console/subscription/index.ts b/packages/phrases/src/locales/de/translation/admin-console/subscription/index.ts index 867955dc3..96f9008c9 100644 --- a/packages/phrases/src/locales/de/translation/admin-console/subscription/index.ts +++ b/packages/phrases/src/locales/de/translation/admin-console/subscription/index.ts @@ -51,11 +51,17 @@ const subscription = { before: 'Vorher: ', after: 'Nachher: ', downgrade: 'Herabstufen', - not_eligible: 'Sie sind nicht berechtigt für eine Herabstufung', - not_eligible_description: - 'Stellen Sie sicher, dass Sie die folgenden Kriterien erfüllen, bevor Sie auf herabstufen.', + }, + not_eligible_modal: { + downgrade_title: 'Downgrade nicht möglich', + downgrade_description: + 'Stellen Sie sicher, dass Sie die folgenden Kriterien erfüllen, bevor Sie auf downgraden.', + downgrade_help_tip: 'Hilfe beim Downgrade benötigt? Kontaktieren Sie uns.', + upgrade_title: 'Upgrade nicht möglich', + upgrade_description: + 'Sie verwenden derzeit mehr als das von zugelassene Kontingent. Stellen Sie sicher, dass Sie die folgenden Kriterien erfüllen, bevor Sie auf upgraden.', + upgrade_help_tip: 'Hilfe beim Upgrade benötigt? Kontaktieren Sie uns.', a_maximum_of: 'Maximal ', - help_tip: 'Benötigen Sie Hilfe beim Herabstufen? Kontaktieren Sie uns.', }, upgrade_success: 'Erfolgreich auf hochgestuft', downgrade_success: 'Erfolgreich auf herabgestuft', diff --git a/packages/phrases/src/locales/en/translation/admin-console/subscription/index.ts b/packages/phrases/src/locales/en/translation/admin-console/subscription/index.ts index 24a0f4bcd..715aa7775 100644 --- a/packages/phrases/src/locales/en/translation/admin-console/subscription/index.ts +++ b/packages/phrases/src/locales/en/translation/admin-console/subscription/index.ts @@ -51,11 +51,17 @@ const subscription = { before: 'Before: ', after: 'After: ', downgrade: 'Downgrade', - not_eligible: 'You are not eligible for downgrade', - not_eligible_description: + }, + not_eligible_modal: { + downgrade_title: 'You are not eligible for downgrade', + downgrade_description: 'Make sure you meet the following criteria before downgrading to the .', + downgrade_help_tip: 'Need help downgrading? Contact us.', + upgrade_title: 'You are not eligible for upgrade', + upgrade_description: + 'You’re currently using more than what the allows. Before you consider upgrading to the , make sure you meet the following criteria before upgrading.', + upgrade_help_tip: 'Need help upgrading? Contact us.', a_maximum_of: 'A maximum of ', - help_tip: 'Need help downgrading? Contact us.', }, upgrade_success: 'Successfully upgraded to ', downgrade_success: 'Successfully downgraded to ', diff --git a/packages/phrases/src/locales/es/translation/admin-console/subscription/index.ts b/packages/phrases/src/locales/es/translation/admin-console/subscription/index.ts index f37f91e4d..e47151728 100644 --- a/packages/phrases/src/locales/es/translation/admin-console/subscription/index.ts +++ b/packages/phrases/src/locales/es/translation/admin-console/subscription/index.ts @@ -53,11 +53,17 @@ const subscription = { before: 'Antes: ', after: 'Después: ', downgrade: 'Degradar', - not_eligible: 'No cumple con los requisitos para degradar', - not_eligible_description: - 'Asegúrese de cumplir con los siguientes criterios antes de degradar a .', + }, + not_eligible_modal: { + downgrade_title: 'No es posible el cambio a un plan inferior', + downgrade_description: + 'Asegúrese de cumplir con los siguientes criterios antes de cambiar al plan .', + downgrade_help_tip: '¿Necesitas ayuda para cambiar de plan? Contáctenos.', + upgrade_title: 'No es posible el cambio a un plan superior', + upgrade_description: + 'Actualmente está utilizando más de lo permitido por el plan . Asegúrese de cumplir con los siguientes criterios antes de considerar el cambio al plan .', + upgrade_help_tip: '¿Necesitas ayuda para cambiar de plan? Contáctenos.', a_maximum_of: 'Un máximo de ', - help_tip: 'Necesitas ayuda para degradar? Contáctenos.', }, upgrade_success: 'Actualizado con éxito a ', downgrade_success: 'Degradado con éxito a ', diff --git a/packages/phrases/src/locales/fr/translation/admin-console/subscription/index.ts b/packages/phrases/src/locales/fr/translation/admin-console/subscription/index.ts index e8ecdb5b5..faf456343 100644 --- a/packages/phrases/src/locales/fr/translation/admin-console/subscription/index.ts +++ b/packages/phrases/src/locales/fr/translation/admin-console/subscription/index.ts @@ -45,9 +45,7 @@ const subscription = { uncollectible: 'En souffrance', }, }, - quota_item, - downgrade_modal: { title: 'Êtes-vous sûr de vouloir passer à un Plan Inférieur?', description: @@ -55,11 +53,17 @@ const subscription = { before: 'Avant: ', after: 'Après: ', downgrade: 'Passer à un Plan Inférieur', - not_eligible: "Vous n'êtes pas éligible pour passer à un Plan Inférieur", - not_eligible_description: - 'Veuillez vous assurer de répondre aux critères suivants avant de passer au . ', + }, + not_eligible_modal: { + downgrade_title: "Vous n'êtes pas éligible pour une rétrogradation", + downgrade_description: + 'Assurez-vous de remplir les critères suivants avant de rétrograder vers le plan .', + downgrade_help_tip: "Besoin d'aide pour rétrograder ? Contactez-nous.", + upgrade_title: "Vous n'êtes pas éligible pour une mise à niveau", + upgrade_description: + 'Vous utilisez actuellement plus que ce que permet le plan . Avant de considérer une mise à niveau vers le plan , assurez-vous de remplir les critères suivants.', + upgrade_help_tip: "Besoin d'aide pour la mise à niveau ? Contactez-nous.", a_maximum_of: 'Un maximum de ', - help_tip: "Besoin d'aide pour rétrograder ? Contactez-nous.", }, upgrade_success: 'Passé avec succès à ', downgrade_success: 'Rétrogradé avec succès à ', diff --git a/packages/phrases/src/locales/it/translation/admin-console/subscription/index.ts b/packages/phrases/src/locales/it/translation/admin-console/subscription/index.ts index 00783e2a6..60282cc85 100644 --- a/packages/phrases/src/locales/it/translation/admin-console/subscription/index.ts +++ b/packages/phrases/src/locales/it/translation/admin-console/subscription/index.ts @@ -52,11 +52,17 @@ const subscription = { before: 'Prima: ', after: 'Dopo: ', downgrade: 'Degrado', - not_eligible: 'Non sei idoneo al degrado', - not_eligible_description: - 'Assicurati di soddisfare i seguenti criteri prima di degradare a .', + }, + not_eligible_modal: { + downgrade_title: 'Non sei idoneo per il downgrade', + downgrade_description: + 'Assicurati di soddisfare i seguenti criteri prima di eseguire il downgrade al piano .', + downgrade_help_tip: 'Hai bisogno di aiuto per il downgrade? Contattaci.', + upgrade_title: "Non sei idoneo per l'upgrade", + upgrade_description: + "Attualmente stai utilizzando più di quanto consentito dal piano . Prima di considerare l'upgrade al piano , assicurati di soddisfare i seguenti criteri.", + upgrade_help_tip: "Hai bisogno di aiuto per l'upgrade? Contattaci.", a_maximum_of: 'Un massimo di ', - help_tip: 'Hai bisogno di aiuto per il degrado? Contattaci.', }, upgrade_success: 'Aggiornamento effettuato con successo a ', downgrade_success: 'Degrado effettuato con successo a ', diff --git a/packages/phrases/src/locales/ja/translation/admin-console/subscription/index.ts b/packages/phrases/src/locales/ja/translation/admin-console/subscription/index.ts index e29ffd94b..a8df1f70e 100644 --- a/packages/phrases/src/locales/ja/translation/admin-console/subscription/index.ts +++ b/packages/phrases/src/locales/ja/translation/admin-console/subscription/index.ts @@ -52,11 +52,17 @@ const subscription = { before: '前: ', after: '後: ', downgrade: 'ダウングレード', - not_eligible: 'ダウングレードできません', - not_eligible_description: - 'にダウングレードする前に、以下の基準を満たしていることを確認してください。', - a_maximum_of: '最大 ', - help_tip: 'ダウングレードのヘルプが必要ですか? お問い合わせ。', + }, + not_eligible_modal: { + downgrade_title: 'ダウングレードの対象外です', + downgrade_description: + 'へダウングレードする前に、以下の条件を満たしていることを確認してください。', + downgrade_help_tip: 'ダウングレードのヘルプが必要ですか?お問い合わせください。', + upgrade_title: 'アップグレードの対象外です', + upgrade_description: + 'が許可する量を超えて使用しています。 へのアップグレードを検討する前に、以下の条件を満たしていることを確認してください。', + upgrade_help_tip: 'アップグレードのヘルプが必要ですか?お問い合わせください。', + a_maximum_of: 'の最大数', }, upgrade_success: '正常ににアップグレードされました', downgrade_success: '正常ににダウングレードされました', diff --git a/packages/phrases/src/locales/ko/translation/admin-console/subscription/index.ts b/packages/phrases/src/locales/ko/translation/admin-console/subscription/index.ts index 993b59656..fe202cf6d 100644 --- a/packages/phrases/src/locales/ko/translation/admin-console/subscription/index.ts +++ b/packages/phrases/src/locales/ko/translation/admin-console/subscription/index.ts @@ -51,11 +51,16 @@ const subscription = { before: '이전: ', after: '이후: ', downgrade: '다운그레이드', - not_eligible: '다운그레이드할 수 없습니다.', - not_eligible_description: - '으로 다운그레이드하기 전에 다음 기준을 충족하는지 확인하세요.', - a_maximum_of: ' 최대', - help_tip: '다운그레이드 도움이 필요하신가요? 문의하기.', + }, + not_eligible_modal: { + downgrade_title: '다운그레이드할 수 없습니다', + downgrade_description: '로 다운그레이드하기 전에 다음 기준을 충족하는지 확인하세요.', + downgrade_help_tip: '다운그레이드 도움이 필요하세요? 문의하세요.', + upgrade_title: '업그레이드할 수 없습니다', + upgrade_description: + '이(가) 허용하는 양을 현재 사용 중입니다. 로 업그레이드를 고려하기 전에 다음 기준을 충족하는지 확인하세요.', + upgrade_help_tip: '업그레이드 도움이 필요하세요? 문의하세요.', + a_maximum_of: ' 최대 한도', }, upgrade_success: '성공적으로 으로 업그레이드되었습니다.', downgrade_success: '성공적으로 으로 다운그레이드되었습니다.', diff --git a/packages/phrases/src/locales/pl-pl/translation/admin-console/subscription/index.ts b/packages/phrases/src/locales/pl-pl/translation/admin-console/subscription/index.ts index b1dff1d4c..a634ee385 100644 --- a/packages/phrases/src/locales/pl-pl/translation/admin-console/subscription/index.ts +++ b/packages/phrases/src/locales/pl-pl/translation/admin-console/subscription/index.ts @@ -52,11 +52,17 @@ const subscription = { before: 'Przed: ', after: 'Po: ', downgrade: 'Zdegradować', - not_eligible: 'Nie spełniasz wymogów do zdegradowania', - not_eligible_description: - 'Upewnij się, że spełniasz następujące kryteria przed dokonaniem degradacji do . ', + }, + not_eligible_modal: { + downgrade_title: 'Nie spełniasz warunków do zmniejszenia', + downgrade_description: + 'Upewnij się, że spełniasz następujące kryteria przed zmniejszeniem do .', + downgrade_help_tip: 'Potrzebna pomoc przy zmniejszaniu? Skontaktuj się z nami.', + upgrade_title: 'Nie spełniasz warunków do zwiększenia', + upgrade_description: + 'Obecnie używasz więcej niż to, co pozwala . Przed rozważeniem zwiększenia do , upewnij się, że spełniasz następujące kryteria.', + upgrade_help_tip: 'Potrzebna pomoc przy zwiększaniu? Skontaktuj się z nami.', a_maximum_of: 'Maksymalnie ', - help_tip: 'Potrzebujesz pomocy przy zdegradowaniu? Skontaktuj się z nami.', }, upgrade_success: 'Pomyślnie uaktualniono do ', downgrade_success: 'Pomyślnie zdegradowano do ', diff --git a/packages/phrases/src/locales/pt-br/translation/admin-console/subscription/index.ts b/packages/phrases/src/locales/pt-br/translation/admin-console/subscription/index.ts index 46aa76538..909189872 100644 --- a/packages/phrases/src/locales/pt-br/translation/admin-console/subscription/index.ts +++ b/packages/phrases/src/locales/pt-br/translation/admin-console/subscription/index.ts @@ -43,9 +43,7 @@ const subscription = { uncollectible: 'Vencida', }, }, - quota_item, - downgrade_modal: { title: 'Tem certeza de que deseja fazer downgrade?', description: @@ -53,11 +51,17 @@ const subscription = { before: 'Antes: ', after: 'Depois: ', downgrade: 'Downgrade', - not_eligible: 'Não é elegível para downgrade', - not_eligible_description: - 'Certifique-se de atender aos seguintes critérios antes de fazer downgrade para o .', + }, + not_eligible_modal: { + downgrade_title: 'Você não é elegível para fazer downgrade', + downgrade_description: + 'Certifique-se de atender aos seguintes critérios antes de fazer o downgrade para o plano .', + downgrade_help_tip: 'Precisa de ajuda com o downgrade? Contate-nos.', + upgrade_title: 'Você não é elegível para fazer upgrade', + upgrade_description: + 'Atualmente, você está usando mais do que o permitido pelo plano . Antes de considerar o upgrade para o plano , certifique-se de atender aos seguintes critérios.', + upgrade_help_tip: 'Precisa de ajuda com o upgrade? Contate-nos.', a_maximum_of: 'Um máximo de ', - help_tip: 'Precisa de ajuda para fazer o downgrade? Contate-nos.', }, upgrade_success: 'Atualizado com sucesso para ', downgrade_success: 'Downgrade realizado com sucesso para ', diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/subscription/index.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/subscription/index.ts index b244f1976..e308aa415 100644 --- a/packages/phrases/src/locales/pt-pt/translation/admin-console/subscription/index.ts +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/subscription/index.ts @@ -52,11 +52,17 @@ const subscription = { before: 'Antes: ', after: 'Depois: ', downgrade: 'Downgrade', - not_eligible: 'Você não é elegível para fazer o downgrade', - not_eligible_description: - 'Verifique se você atende aos seguintes critérios antes de fazer o downgrade para o .', - a_maximum_of: 'No máximo ', - help_tip: 'Precisa de ajuda para fazer o downgrade? Entre em contato conosco.', + }, + not_eligible_modal: { + downgrade_title: 'Não é possível fazer downgrade', + downgrade_description: + 'Certifique-se de cumprir os seguintes critérios antes de efetuar o downgrade para o plano .', + downgrade_help_tip: 'Precisa de ajuda com o downgrade? Contacte-nos.', + upgrade_title: 'Não é possível fazer upgrade', + upgrade_description: + 'Atualmente está a utilizar mais do que o permitido pelo plano . Antes de considerar o upgrade para o plano , certifique-se de cumprir os seguintes critérios.', + upgrade_help_tip: 'Precisa de ajuda com o upgrade? Contacte-nos.', + a_maximum_of: 'Um máximo de ', }, upgrade_success: 'Atualizou com sucesso para ', downgrade_success: 'Downgrade concluído com sucesso para ', diff --git a/packages/phrases/src/locales/ru/translation/admin-console/subscription/index.ts b/packages/phrases/src/locales/ru/translation/admin-console/subscription/index.ts index e75b2a5df..7d52eb48a 100644 --- a/packages/phrases/src/locales/ru/translation/admin-console/subscription/index.ts +++ b/packages/phrases/src/locales/ru/translation/admin-console/subscription/index.ts @@ -51,11 +51,17 @@ const subscription = { before: 'Позднее: ', after: 'После: ', downgrade: 'Понизить уровень', - not_eligible: 'Вы не имеете права на понижение уровня', - not_eligible_description: - 'Убедитесь, что вы соответствуете следующим критериям, прежде чем понизить до .', + }, + not_eligible_modal: { + downgrade_title: 'Вы не можете понизить уровень тарифа', + downgrade_description: + 'Перед понижением до тарифа , убедитесь, что соответствуете следующим критериям.', + downgrade_help_tip: 'Нужна помощь в понижении? Свяжитесь с нами.', + upgrade_title: 'Вы не можете повысить уровень тарифа', + upgrade_description: + 'В настоящее время вы используете более того, что позволяет тариф . Перед рассмотрением перехода на тариф , убедитесь, что соответствуете следующим критериям.', + upgrade_help_tip: 'Нужна помощь в повышении? Свяжитесь с нами.', a_maximum_of: 'Максимум ', - help_tip: 'Нужна помощь в понижении уровня? Свяжитесь с нами.', }, upgrade_success: 'Успешно повышен до ', downgrade_success: 'Успешно понижен до ', diff --git a/packages/phrases/src/locales/tr-tr/translation/admin-console/subscription/index.ts b/packages/phrases/src/locales/tr-tr/translation/admin-console/subscription/index.ts index d22b271a8..2abf72b7e 100644 --- a/packages/phrases/src/locales/tr-tr/translation/admin-console/subscription/index.ts +++ b/packages/phrases/src/locales/tr-tr/translation/admin-console/subscription/index.ts @@ -52,11 +52,19 @@ const subscription = { before: 'Önce: ', after: 'Sonra: ', downgrade: 'Düşür', - not_eligible: 'Düşürme için uygun değilsiniz', - not_eligible_description: - "Aşağıdaki kriterleri karşıladığınızdan emin olun 'ye düşürmeden önce.", - a_maximum_of: 'En fazla ', - help_tip: 'Düşürme için yardıma mı ihtiyacınız var? Bizimle iletişime geçin.', + }, + not_eligible_modal: { + downgrade_title: 'Düşürme için uygun değilsiniz', + downgrade_description: + ' planına düşürmeden önce aşağıdaki kriterleri sağladığınızdan emin olun.', + downgrade_help_tip: + 'Düşürme konusunda yardıma mı ihtiyacınız var? Bizimle iletişime geçin.', + upgrade_title: 'Yükseltme için uygun değilsiniz', + upgrade_description: + 'Şu anda izin verilen miktarın üzerinde kullanıyorsunuz. planına yükseltmeyi düşünmeden önce aşağıdaki kriterleri sağladığınızdan emin olun.', + upgrade_help_tip: + 'Yükseltme konusunda yardıma mı ihtiyacınız var? Bizimle iletişime geçin.', + a_maximum_of: ' için maksimum', }, upgrade_success: 'Successfully upgraded to ', downgrade_success: 'Successfully downgraded to ', diff --git a/packages/phrases/src/locales/zh-cn/translation/admin-console/subscription/index.ts b/packages/phrases/src/locales/zh-cn/translation/admin-console/subscription/index.ts index 44b77e545..1b4789dfc 100644 --- a/packages/phrases/src/locales/zh-cn/translation/admin-console/subscription/index.ts +++ b/packages/phrases/src/locales/zh-cn/translation/admin-console/subscription/index.ts @@ -50,10 +50,16 @@ const subscription = { before: '之前:', after: '之后:', downgrade: '降级', - not_eligible: '您不符合降级条件', - not_eligible_description: '在降级到 之前,请确保满足以下条件。', - a_maximum_of: '最多个', - help_tip: '需要帮助降级?联系我们。', + }, + not_eligible_modal: { + downgrade_title: '您不符合降级条件', + downgrade_description: '降级到前,请确保满足以下条件。', + downgrade_help_tip: '需要降级帮助?联系我们。', + upgrade_title: '您不符合升级条件', + upgrade_description: + '您目前使用的内容超过了允许的范围。在考虑升级到之前,请确保满足以下条件。', + upgrade_help_tip: '需要升级帮助?联系我们。', + a_maximum_of: '最多', }, upgrade_success: '成功升级到 ', downgrade_success: '成功降级到 ', diff --git a/packages/phrases/src/locales/zh-hk/translation/admin-console/subscription/index.ts b/packages/phrases/src/locales/zh-hk/translation/admin-console/subscription/index.ts index bad6b2c32..c3892f95e 100644 --- a/packages/phrases/src/locales/zh-hk/translation/admin-console/subscription/index.ts +++ b/packages/phrases/src/locales/zh-hk/translation/admin-console/subscription/index.ts @@ -49,10 +49,16 @@ const subscription = { before: '之前:', after: '之後:', downgrade: '降級', - not_eligible: '您不符合降級的資格', - not_eligible_description: '在降級到之前,請確保符合以下標準。', - a_maximum_of: '最多:', - help_tip: '需要協助降級嗎?聯繫我們。', + }, + not_eligible_modal: { + downgrade_title: '您不符合降級條件', + downgrade_description: '降級到前,請確保符合以下條件。', + downgrade_help_tip: '需要降級幫助?聯絡我們。', + upgrade_title: '您不符合升級條件', + upgrade_description: + '您目前使用的內容超過了允許的範圍。在考慮升級到之前,請確保符合以下條件。', + upgrade_help_tip: '需要升級幫助?聯絡我們。', + a_maximum_of: '最多', }, upgrade_success: '升級成功至', downgrade_success: '成功降級至', diff --git a/packages/phrases/src/locales/zh-tw/translation/admin-console/subscription/index.ts b/packages/phrases/src/locales/zh-tw/translation/admin-console/subscription/index.ts index 3e2f96652..794c501af 100644 --- a/packages/phrases/src/locales/zh-tw/translation/admin-console/subscription/index.ts +++ b/packages/phrases/src/locales/zh-tw/translation/admin-console/subscription/index.ts @@ -49,10 +49,16 @@ const subscription = { before: '在此之前:', after: '在此之後:', downgrade: '降級', - not_eligible: '您不符合降級資格', - not_eligible_description: '在降級到 之前,請確保符合以下條件。', - a_maximum_of: '最大數量', - help_tip: '需要協助降級嗎?聯繫我們。', + }, + not_eligible_modal: { + downgrade_title: '您不符合降級條件', + downgrade_description: '降級到前,請確保符合以下條件。', + downgrade_help_tip: '需要降級幫助?聯絡我們。', + upgrade_title: '您不符合升級條件', + upgrade_description: + '您目前使用的內容超過了允許的範圍。在考慮升級到之前,請確保符合以下條件。', + upgrade_help_tip: '需要升級幫助?聯絡我們。', + a_maximum_of: '最多', }, upgrade_success: '已成功升級到 ', downgrade_success: '已成功降級到 ',