feat: reset password visibility and history state on cipher selection change

This commit is contained in:
shuaiplus
2026-05-10 19:57:32 +08:00
parent 1d23b3fe5e
commit e0d81f2733
3 changed files with 14 additions and 2 deletions
+1 -1
View File
@@ -554,7 +554,7 @@ export default function SendsPage(props: SendsPageProps) {
<button type="button" className="btn btn-secondary small" onClick={() => copyAccessUrl(selectedSend)}>
<Copy size={14} className="btn-icon" /> {t('txt_copy_link')}
</button>
<button type="button" className="btn btn-secondary small" onClick={() => { setDraft(draftFromSend(selectedSend)); setIsCreating(false); setIsEditing(true); }}>
<button type="button" className="btn btn-secondary small" onClick={() => { setDraft(draftFromSend(selectedSend)); setIsCreating(false); setIsEditing(true); setShowPassword(false); }}>
<Pencil size={14} className="btn-icon" /> {t('txt_edit')}
</button>
</div>
+8
View File
@@ -263,6 +263,8 @@ export default function VaultPage(props: VaultPageProps) {
setRepromptApprovedCipherId(null);
setRepromptPassword('');
setRepromptOpen(false);
setShowPassword(false);
setHiddenFieldVisibleMap({});
}, [selectedCipherId]);
useEffect(() => {
@@ -516,6 +518,7 @@ const folderName = useCallback((id: string | null | undefined): string => {
setCreateMenuOpen(false);
setSelectedCipherId('');
setShowPassword(false);
setHiddenFieldVisibleMap({});
setLocalError('');
setAttachmentQueue([]);
setRemovedAttachmentIds({});
@@ -530,6 +533,7 @@ const folderName = useCallback((id: string | null | undefined): string => {
setIsCreating(false);
setIsEditing(true);
setShowPassword(false);
setHiddenFieldVisibleMap({});
setLocalError('');
setAttachmentQueue([]);
setRemovedAttachmentIds({});
@@ -542,6 +546,8 @@ const folderName = useCallback((id: string | null | undefined): string => {
setDraft(null);
setIsEditing(false);
setIsCreating(false);
setShowPassword(false);
setHiddenFieldVisibleMap({});
setLocalError('');
setAttachmentQueue([]);
setRemovedAttachmentIds({});
@@ -971,6 +977,8 @@ const folderName = useCallback((id: string | null | undefined): string => {
}
setSelectedCipherId(cipherId);
setRepromptApprovedCipherId(null);
setShowPassword(false);
setHiddenFieldVisibleMap({});
if (isMobileLayout) setMobilePanel('detail');
setMobileSidebarOpen(false);
}, [isEditing, isCreating, cancelEdit, isMobileLayout]);
@@ -1,5 +1,5 @@
import { createPortal } from 'preact/compat';
import { useMemo, useState } from 'preact/hooks';
import { useEffect, useMemo, useState } from 'preact/hooks';
import { Archive, Clipboard, Download, Eye, EyeOff, ExternalLink, Folder, Paperclip, Pencil, RotateCcw, Trash2, X } from 'lucide-preact';
import { useDialogLifecycle } from '@/components/ConfirmDialog';
import type { Cipher } from '@/lib/types';
@@ -92,6 +92,10 @@ export default function VaultDetailView(props: VaultDetailViewProps) {
.filter((entry) => entry.password.trim()),
[props.selectedCipher.passwordHistory]
);
useEffect(() => {
setShowSshPrivateKey(false);
setPasswordHistoryOpen(false);
}, [props.selectedCipher.id]);
const formatDownloadLabel = (attachmentId: string) => {
const downloadKey = `${props.selectedCipher.id}:${attachmentId}`;
if (props.downloadingAttachmentKey !== downloadKey) return t('txt_download');