import React, { useState, useEffect } from 'react'; const PasswordManager = () => { const [passwords, setPasswords] = useState([]); const [showAddForm, setShowAddForm] = useState(false); const [searchTerm, setSearchTerm] = useState(''); const [newPassword, setNewPassword] = useState({ title: '', server: '', username: '', password: '', category: 'server', notes: '' }); useEffect(() => { loadPasswords(); }, []); const loadPasswords = async () => { if (window.electronAPI) { const result = await window.electronAPI.loadPasswords(); if (result.success) { setPasswords(result.passwords || []); } } }; const savePasswords = async (passwordsList) => { if (window.electronAPI) { await window.electronAPI.savePasswords(passwordsList); } }; const addPassword = async () => { if (!newPassword.title) { alert('Заполните название'); return; } const password = { ...newPassword, id: Date.now().toString(), createdAt: new Date().toISOString() }; const updatedPasswords = [...passwords, password]; setPasswords(updatedPasswords); await savePasswords(updatedPasswords); setShowAddForm(false); setNewPassword({ title: '', server: '', username: '', password: '', category: 'server', notes: '' }); }; const deletePassword = async (passwordId) => { if (confirm('Удалить эту запись?')) { const updatedPasswords = passwords.filter(p => p.id !== passwordId); setPasswords(updatedPasswords); await savePasswords(updatedPasswords); } }; const copyToClipboard = async (text) => { if (window.electronAPI) { await window.electronAPI.copyToClipboard(text); alert('Скопировано в буфер обмена'); } }; const generatePassword = () => { const length = 16; const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*"; let password = ""; for (let i = 0; i < length; i++) { password += charset.charAt(Math.floor(Math.random() * charset.length)); } setNewPassword({...newPassword, password}); }; const filteredPasswords = passwords.filter(password => password.title.toLowerCase().includes(searchTerm.toLowerCase()) || password.username.toLowerCase().includes(searchTerm.toLowerCase()) || password.category.toLowerCase().includes(searchTerm.toLowerCase()) ); return (
Безопасное хранение учетных данных
{searchTerm ? 'Ничего не найдено' : 'Добавьте вашу первую запись'}
{password.server}
)}{password.notes}