import { Box, CustomModalLayoutProps, TextButton, Text, } from '@wix/design-system'; import { ExportState, FiltersMap, isWixPatternsError, WixPatternsError, } from '@wix/bex-core'; import React, { ReactElement } from 'react'; import { isErrorDetailsHttpError, isHttpError } from '@wix/bex-core/util'; import { ApplicationError } from '@wix/bex-utils/@wix/ambassador-fedinfra-exportservice-v1-export-async-job/types'; export type RenderModalError = ( data: ApplicationError['data'], ) => undefined | Partial; export function getExportModalErrorProps({ renderError, state, }: { state: ExportState; renderError?: RenderModalError; }): Partial { const { exportStatus: { error: _error }, translate: t, errorHandler, } = state; const error = isWixPatternsError(_error) ? (_error as WixPatternsError).originalException : _error; const details = isErrorDetailsHttpError(error) ? error.response.data : null; const applicationErrorCode = details?.applicationError?.code; const applicationErrorData = details?.applicationError?.data; if (!isHttpError(error)) { return {}; } if (applicationErrorCode === 'method_endpoint_permission_denied') { return { children: ( {t('cairo.export.noPermissionsMessage')} {t('cairo.export.noPermissionsCTA')} ), }; } if ( applicationErrorCode === 'media_generate_signed_url' || applicationErrorCode === 'media_appender_completion' || applicationErrorCode === 'async_job_infra' ) { return { children: ( {t('cairo.export.databaseIssueMessage')} {t('cairo.error.contactSupport.cta')} ), }; } if (applicationErrorCode === 'max_polling_stale_job') { return { children: ( {t('cairo.export.overloadErrorMessage')} {t('cairo.export.tryAgain')} ), }; } if (applicationErrorCode === 'offline') { return { title: t('cairo.connection.error.title'), children: {t('cairo.export.offlineMessage')}, }; } if (applicationErrorCode === 'grpc_query_target_internal') { return { children: ( {t('cairo.export.serverErrorMessage')} {t('cairo.error.contactSupport.cta')} ), ...renderError?.(applicationErrorData), }; } const resolvedError = errorHandler.getResolvedError?.(error); return { children: ( {resolvedError?.message} {resolvedError?.action && ( {resolvedError?.action?.text} )} ), }; }