import React from 'react'; import {Alert, Checkbox, Dialog, Flex, Text} from '@gravity-ui/uikit'; import type {ButtonView} from '@gravity-ui/uikit'; import {ResultIssues} from '../../containers/Tenant/Query/Issues/Issues'; import type {IResponseError} from '../../types/api/error'; import {cn} from '../../utils/cn'; import {BRAND_BUTTON_CLASS} from '../../utils/constants'; import {isResponseError, isResponseErrorWithIssues} from '../../utils/response'; import {criticalActionDialogKeyset} from './i18n'; import './CriticalActionDialog.scss'; const b = cn('ydb-critical-dialog'); const parseError = (error: unknown) => { if (isResponseError(error)) { if (error.status === 403) { return criticalActionDialogKeyset('no-rights-error'); } if (typeof error.data === 'string') { return error.data; } if (isResponseErrorWithIssues(error) && error.data) { return ; } if (error.statusText) { return error.statusText; } } return criticalActionDialogKeyset('default-error'); }; interface CriticalActionDialogProps { visible: boolean; header?: React.ReactNode; description?: string; warningText?: string; withRetry?: boolean; retryButtonText?: string; applyButtonText?: string; applyButtonView?: ButtonView; withCheckBox?: boolean; onClose: VoidFunction; onTransitionOutComplete?: VoidFunction; onConfirm: (isRetry?: boolean) => Promise; onConfirmActionSuccess: VoidFunction; onConfirmActionError: (error: unknown) => void; } export function CriticalActionDialog({ visible, header, description, warningText, withRetry, retryButtonText, applyButtonText = criticalActionDialogKeyset('button-confirm'), applyButtonView, withCheckBox, onClose, onTransitionOutComplete, onConfirm, onConfirmActionSuccess, onConfirmActionError, }: CriticalActionDialogProps) { const [isLoading, setIsLoading] = React.useState(false); const [error, setError] = React.useState(); const [checkBoxChecked, setCheckBoxChecked] = React.useState(false); const onApply = async (isRetry?: boolean) => { setIsLoading(true); return onConfirm(isRetry) .then(() => { onConfirmActionSuccess(); onClose(); }) .catch((err) => { onConfirmActionError(err); setError(err); }) .finally(() => { setIsLoading(false); }); }; const handleTransitionExited = () => { setError(undefined); setCheckBoxChecked(false); onTransitionOutComplete?.(); }; const renderCheckBox = () => { if (withCheckBox) { return ( {criticalActionDialogKeyset('checkbox-text')} ); } return null; }; const renderDialogContent = () => { const isRetry = Boolean(error && withRetry); let currentApplyButtonText: string | undefined = applyButtonText; if (error) { currentApplyButtonText = isRetry ? retryButtonText || criticalActionDialogKeyset('button-retry') : undefined; } return ( {description && {description}} {warningText && } {error && } {renderCheckBox()} onApply(isRetry ? true : undefined)} /> ); }; return ( {renderDialogContent()} ); }