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 (
- {/* Item Type Selector (create mode only) */} - {!isEditMode && ( -
-
+ {/* Item Type Selector (both create and edit mode) */} +
+
+ + {/* Regenerate alias button - icon only for flexibility */} + {item?.ItemType === 'Alias' && !isEditMode && ( - {/* Regenerate alias button - icon only for flexibility */} - {item?.ItemType === 'Alias' && ( - - )} -
- - {/* Type Dropdown Menu */} - {showTypeDropdown && ( - <> -
setShowTypeDropdown(false)} - /> -
- {ITEM_TYPE_OPTIONS.map((option) => ( - - ))} -
- )}
- )} + + {/* Type Dropdown Menu */} + {showTypeDropdown && ( + <> +
setShowTypeDropdown(false)} + /> +
+ {ITEM_TYPE_OPTIONS.map((option) => ( + + ))} +
+ + )} +
{/* Item Name and Header fields block */}
diff --git a/apps/browser-extension/src/i18n/locales/en.json b/apps/browser-extension/src/i18n/locales/en.json index c9a810572..3b769f50e 100644 --- a/apps/browser-extension/src/i18n/locales/en.json +++ b/apps/browser-extension/src/i18n/locales/en.json @@ -294,6 +294,7 @@ "selectTypeDescription": "Choose the type of item you want to create", "typeLabel": "Item Type", "creating": "Creating", + "editing": "Editing", "generateAlias": "Generate random alias", "regenerateAlias": "Regenerate alias", "addAlias": "Add alias",