|
@@ -20,7 +20,7 @@ import CostSummary from '@/features/group-management/components/add-seats/cost-s
|
|
|
import RequestStatus from '@/features/group-management/components/request-status'
|
|
import RequestStatus from '@/features/group-management/components/request-status'
|
|
|
import useAsync from '@/shared/hooks/use-async'
|
|
import useAsync from '@/shared/hooks/use-async'
|
|
|
import getMeta from '@/utils/meta'
|
|
import getMeta from '@/utils/meta'
|
|
|
-import { postJSON } from '@/infrastructure/fetch-json'
|
|
|
|
|
|
|
+import { FetchError, postJSON } from '@/infrastructure/fetch-json'
|
|
|
import { debugConsole } from '@/utils/debugging'
|
|
import { debugConsole } from '@/utils/debugging'
|
|
|
import * as yup from 'yup'
|
|
import * as yup from 'yup'
|
|
|
import {
|
|
import {
|
|
@@ -54,7 +54,8 @@ function AddSeats() {
|
|
|
runAsync: runAsyncCostSummary,
|
|
runAsync: runAsyncCostSummary,
|
|
|
data: costSummaryData,
|
|
data: costSummaryData,
|
|
|
reset: resetCostSummaryData,
|
|
reset: resetCostSummaryData,
|
|
|
- } = useAsync<CostSummaryData>()
|
|
|
|
|
|
|
+ error: errorCostSummary,
|
|
|
|
|
+ } = useAsync<CostSummaryData, FetchError>()
|
|
|
const {
|
|
const {
|
|
|
isLoading: isAddingSeats,
|
|
isLoading: isAddingSeats,
|
|
|
isError: isErrorAddingSeats,
|
|
isError: isErrorAddingSeats,
|
|
@@ -326,6 +327,7 @@ function AddSeats() {
|
|
|
<CostSummarySection
|
|
<CostSummarySection
|
|
|
isLoadingCostSummary={isLoadingCostSummary}
|
|
isLoadingCostSummary={isLoadingCostSummary}
|
|
|
isErrorCostSummary={isErrorCostSummary}
|
|
isErrorCostSummary={isErrorCostSummary}
|
|
|
|
|
+ errorCostSummary={errorCostSummary}
|
|
|
shouldContactSales={shouldContactSales}
|
|
shouldContactSales={shouldContactSales}
|
|
|
costSummaryData={costSummaryData}
|
|
costSummaryData={costSummaryData}
|
|
|
totalLicenses={totalLicenses}
|
|
totalLicenses={totalLicenses}
|
|
@@ -379,6 +381,7 @@ function AddSeats() {
|
|
|
type CostSummarySectionProps = {
|
|
type CostSummarySectionProps = {
|
|
|
isLoadingCostSummary: boolean
|
|
isLoadingCostSummary: boolean
|
|
|
isErrorCostSummary: boolean
|
|
isErrorCostSummary: boolean
|
|
|
|
|
+ errorCostSummary: Nullable<FetchError>
|
|
|
shouldContactSales: boolean
|
|
shouldContactSales: boolean
|
|
|
costSummaryData: Nullable<CostSummaryData>
|
|
costSummaryData: Nullable<CostSummaryData>
|
|
|
totalLicenses: number
|
|
totalLicenses: number
|
|
@@ -387,6 +390,7 @@ type CostSummarySectionProps = {
|
|
|
function CostSummarySection({
|
|
function CostSummarySection({
|
|
|
isLoadingCostSummary,
|
|
isLoadingCostSummary,
|
|
|
isErrorCostSummary,
|
|
isErrorCostSummary,
|
|
|
|
|
+ errorCostSummary,
|
|
|
shouldContactSales,
|
|
shouldContactSales,
|
|
|
costSummaryData,
|
|
costSummaryData,
|
|
|
totalLicenses,
|
|
totalLicenses,
|
|
@@ -416,6 +420,24 @@ function CostSummarySection({
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (isErrorCostSummary) {
|
|
if (isErrorCostSummary) {
|
|
|
|
|
+ if (errorCostSummary?.data?.code === 'subtotal_limit_exceeded') {
|
|
|
|
|
+ return (
|
|
|
|
|
+ <Notification
|
|
|
|
|
+ type="error"
|
|
|
|
|
+ content={
|
|
|
|
|
+ <Trans
|
|
|
|
|
+ i18nKey="sorry_there_was_an_issue_adding_x_users_to_your_subscription"
|
|
|
|
|
+ // eslint-disable-next-line react/jsx-key, jsx-a11y/anchor-has-content
|
|
|
|
|
+ components={[<a href="/contact" rel="noreferrer noopener" />]}
|
|
|
|
|
+ values={{ count: errorCostSummary?.data?.adding }}
|
|
|
|
|
+ shouldUnescape
|
|
|
|
|
+ tOptions={{ interpolation: { escapeValue: true } }}
|
|
|
|
|
+ />
|
|
|
|
|
+ }
|
|
|
|
|
+ />
|
|
|
|
|
+ )
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
return (
|
|
return (
|
|
|
<Notification type="error" content={t('generic_something_went_wrong')} />
|
|
<Notification type="error" content={t('generic_something_went_wrong')} />
|
|
|
)
|
|
)
|