diff --git a/apps/browser-extension/src/entrypoints/popup/pages/credentials/ItemAddEdit.tsx b/apps/browser-extension/src/entrypoints/popup/pages/credentials/ItemAddEdit.tsx index dc03dfdef..109c574dd 100644 --- a/apps/browser-extension/src/entrypoints/popup/pages/credentials/ItemAddEdit.tsx +++ b/apps/browser-extension/src/entrypoints/popup/pages/credentials/ItemAddEdit.tsx @@ -528,21 +528,30 @@ const ItemAddEdit: React.FC = () => { /** * Handle item type change from dropdown. + * In edit mode, preserves existing field values that are compatible with the new type. */ const handleTypeChange = useCallback((newType: ItemType) => { - if (!item || isEditMode) { + if (!item) { return; } - // Clear field values when changing type (except name) - setFieldValues({}); - setCustomFields([]); + /* + * In create mode, clear all field values when changing type. + * In edit mode, keep existing field values - they'll be filtered during save + * based on what fields apply to the new type. + */ + if (!isEditMode) { + setFieldValues({}); + setCustomFields([]); + } // For Alias type, show alias fields by default; otherwise hide if (newType === 'Alias') { setShowAliasFields(true); - // Reset the ref so alias will be auto-generated - aliasGeneratedRef.current = false; + // Reset the ref so alias will be auto-generated (only in create mode) + if (!isEditMode) { + aliasGeneratedRef.current = false; + } } else { setShowAliasFields(false); } @@ -551,16 +560,22 @@ const ItemAddEdit: React.FC = () => { const newTypeFields = getSystemFieldsForItemType(newType); const newNotesField = newTypeFields.find(f => f.FieldKey === 'metadata.notes'); const notesShownByDefault = newNotesField ? isFieldShownByDefault(newNotesField, newType) : false; - setShowNotes(notesShownByDefault); + setShowNotes(notesShownByDefault || (isEditMode && !!fieldValues['metadata.notes'])); + + // Update 2FA visibility - only supported for Login and Alias types + const supports2FA = newType === 'Login' || newType === 'Alias'; + if (!supports2FA && show2FA) { + setShow2FA(false); + } setItem({ ...item, ItemType: newType, - Fields: [] + Fields: isEditMode ? item.Fields : [] }); setShowTypeDropdown(false); - }, [item, isEditMode]); + }, [item, isEditMode, fieldValues, show2FA]); /** * Initialize generators for random alias generation. @@ -949,88 +964,86 @@ const ItemAddEdit: React.FC = () => { return (