/** * Machine save confirmation modal */ import React, { useState } from 'react'; import { Save, X } from 'lucide-react'; import { useMachineStore } from '../store/machineStore'; import { log } from '../utils/logger'; import { Button } from './shared/Button'; interface SaveConfirmationModalProps { isOpen: boolean; onClose: () => void; onSuccess?: () => void; } export const SaveConfirmationModal: React.FC = ({ isOpen, onClose, onSuccess }) => { const { machineToSave, createSavedMachine, setMachineToSave, setShowSaveConfirmModal } = useMachineStore(); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const handleConfirm = async () => { if (!machineToSave) { setError('Нет данных для сохранения'); return; } setLoading(true); setError(null); try { log.info('SaveConfirmationModal', 'Saving machine', { name: machineToSave.name }); await createSavedMachine(machineToSave); log.info('SaveConfirmationModal', 'Machine saved successfully'); // Сбрасываем состояние setMachineToSave(null); setShowSaveConfirmModal(false); if (onSuccess) { onSuccess(); } onClose(); } catch (err) { const errorMessage = err instanceof Error ? err.message : 'Не удалось сохранить машину'; log.error('SaveConfirmationModal', 'Failed to save machine', { error: errorMessage }); setError(errorMessage); } finally { setLoading(false); } }; const handleCancel = () => { setMachineToSave(null); setShowSaveConfirmModal(false); setError(null); onClose(); }; if (!isOpen || !machineToSave) return null; return (
{/* Header */}

Сохранить машину?

Подтвердите сохранение в профиль

{/* Error */} {error && (
⚠️ {error}
)} {/* Machine Info */}
Название: {machineToSave.name}
Хост: {machineToSave.hostname}:{machineToSave.port}
Протокол: {machineToSave.protocol}
{machineToSave.description && (
Описание: {machineToSave.description}
)} {machineToSave.tags && machineToSave.tags.length > 0 && (
Теги:
{machineToSave.tags.map((tag, index) => ( {tag} ))}
)} {machineToSave.is_favorite && (
В избранном
)}
{/* Description */}

💾 Машина будет сохранена в вашем профиле и доступна из любой сессии. Учетные данные для подключения будут запрашиваться отдельно при каждом подключении.

{/* Actions */}
); };