import React from 'react'; import NiceModal from '@ebay/nice-modal-react'; import {Button, Dialog} from '@gravity-ui/uikit'; import {useTypedSelector} from '..'; import {SaveQueryButton} from '../../../containers/Tenant/Query/SaveQuery/SaveQuery'; import {selectUserInput} from '../../../store/reducers/query/query'; import {cn} from '../../cn'; import {BRAND_BUTTON_CLASS} from '../../constants'; import i18n from './i18n'; import './UnsavedChangesDialog.scss'; const b = cn('ydb-unsaved-changes-dialog'); export const UNSAVED_CHANGES_DIALOG = 'unsaved-changes-dialog'; interface SaveQueryButtonInDialogProps { onSuccess: () => void; onCancel: () => void; } function SaveQueryButtonInDialog({onSuccess, onCancel}: SaveQueryButtonInDialogProps) { const currentInput = useTypedSelector(selectUserInput); const dialogProps = React.useMemo( () => ({ onSuccess, onCancel, queryBody: currentInput, }), [currentInput, onSuccess, onCancel], ); return ( {i18n('action_save-changes')} ); } interface UnsavedChangesDialogProps { open: boolean; onDontSave: () => void; onCancel: () => void; onSaveSuccess: () => void; } function UnsavedChangesDialog({ open, onDontSave, onCancel, onSaveSuccess, }: UnsavedChangesDialogProps) { return ( {i18n('context_changes-will-be-lost')} ( {buttonCancel} )} > ); } export const UnsavedChangesDialogNiceModal = NiceModal.create(() => { const modal = NiceModal.useModal(); const handleClose = React.useCallback(() => { modal.hide(); modal.remove(); }, [modal]); const handleDontSave = React.useCallback(() => { modal.resolve(true); handleClose(); }, [modal, handleClose]); const handleCancel = React.useCallback(() => { modal.resolve(false); handleClose(); }, [modal, handleClose]); const handleSaveSuccess = React.useCallback(() => { modal.resolve(true); handleClose(); }, [modal, handleClose]); return ( ); }); NiceModal.register(UNSAVED_CHANGES_DIALOG, UnsavedChangesDialogNiceModal);