feat: version 2.13.2 -- "Destruir" con advertencia fuerte en Contraseñas

Solo en el modulo Contraseñas (entradas y grupos): "Eliminar" pasa a decir
"Destruir", con dialogo en tono error (franja roja) y mensaje explicito de
que la destruccion es permanente e irreversible. El resto de la app
(Notas, Proyectos, etc.) sigue igual. El audit_log de borrado ya existia
(usuario/accion/fecha, sin el contenido) -- sin cambios ahi.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Milton Gonzalez
2026-10-14 17:22:59 -05:00
parent 70b601307f
commit dad73b841d
6 changed files with 28 additions and 13 deletions
+7
View File
@@ -1,5 +1,12 @@
# Changelog - project.linkedcorp.net # Changelog - project.linkedcorp.net
## [2.13.2] - 2026-10-14
### Changed
- Contraseñas (solo este módulo): borrar una credencial o un grupo ahora dice "Destruir" en vez
de "Eliminar", con una advertencia fuerte (franja roja, texto en mayúsculas) de que la
destrucción es permanente e irreversible. El registro de auditoría ya guardaba quién y cuándo
borró cada una (sin el contenido), sin cambios ahí.
## [2.13.1] - 2026-10-14 ## [2.13.1] - 2026-10-14
### Fixed ### Fixed
- ComboBox y Flyout (menu de 3 puntos): el panel desplegable se quedaba cortado por el borde - ComboBox y Flyout (menu de 3 puntos): el panel desplegable se quedaba cortado por el borde
+1 -1
View File
@@ -1 +1 @@
2.13.1 2.13.2
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "project-linkedcorp-backend", "name": "project-linkedcorp-backend",
"version": "2.13.1", "version": "2.13.2",
"private": true, "private": true,
"type": "module", "type": "module",
"main": "src/server.js", "main": "src/server.js",
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "project-linkedcorp-frontend", "name": "project-linkedcorp-frontend",
"private": true, "private": true,
"version": "2.13.1", "version": "2.13.2",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
+8
View File
@@ -234,6 +234,10 @@ export const messages = {
vault_share_placeholder: 'Elegir usuario', vault_share_placeholder: 'Elegir usuario',
vault_share_empty: 'No compartida con nadie.', vault_share_empty: 'No compartida con nadie.',
vault_shared_by: 'Compartida por', vault_shared_by: 'Compartida por',
vault_destroy: 'Destruir',
vault_confirm_destroy_title: 'Destrucción irreversible',
vault_confirm_destroy_entry_msg: 'Vas a DESTRUIR esta credencial de forma permanente. No hay papelera ni copia de respaldo -- una vez confirmado, no hay forma de recuperarla.',
vault_confirm_destroy_group_msg: 'Vas a DESTRUIR este grupo de forma permanente. No hay papelera ni copia de respaldo -- una vez confirmado, no hay forma de recuperarlo. Las credenciales que contiene no se destruyen, quedan sin grupo.',
notes_title: 'Notas', notes_title: 'Notas',
notes_placeholder: 'Escribe un apunte rápido...', notes_placeholder: 'Escribe un apunte rápido...',
notes_empty: 'No tienes notas todavía.', notes_empty: 'No tienes notas todavía.',
@@ -589,6 +593,10 @@ export const messages = {
vault_share_placeholder: 'Choose a user', vault_share_placeholder: 'Choose a user',
vault_share_empty: 'Not shared with anyone.', vault_share_empty: 'Not shared with anyone.',
vault_shared_by: 'Shared by', vault_shared_by: 'Shared by',
vault_destroy: 'Destroy',
vault_confirm_destroy_title: 'Irreversible destruction',
vault_confirm_destroy_entry_msg: 'You are about to permanently DESTROY this credential. There is no trash bin or backup copy -- once confirmed, there is no way to recover it.',
vault_confirm_destroy_group_msg: 'You are about to permanently DESTROY this group. There is no trash bin or backup copy -- once confirmed, there is no way to recover it. Its credentials are not destroyed, they stay ungrouped.',
notes_title: 'Notes', notes_title: 'Notes',
notes_placeholder: 'Write a quick note...', notes_placeholder: 'Write a quick note...',
notes_empty: 'You don\'t have any notes yet.', notes_empty: 'You don\'t have any notes yet.',
@@ -272,13 +272,13 @@ export default function ContrasenasPage() {
function confirmDelete(entry) { function confirmDelete(entry) {
openDialog({ openDialog({
tone: 'warning', tone: 'error',
title: t('common_confirm_delete_title'), title: t('vault_confirm_destroy_title'),
message: t('common_confirm_delete_msg'), message: t('vault_confirm_destroy_entry_msg'),
actions: [ actions: [
{ label: t('common_cancel'), variant: 'standard' }, { label: t('common_cancel'), variant: 'standard' },
{ {
label: t('common_delete'), variant: 'danger', label: t('vault_destroy'), variant: 'danger',
onClick: () => runAction(async () => { onClick: () => runAction(async () => {
await deleteVaultEntry(entry.id); await deleteVaultEntry(entry.id);
await Promise.all([loadEntries(), loadGroups()]); await Promise.all([loadEntries(), loadGroups()]);
@@ -343,13 +343,13 @@ export default function ContrasenasPage() {
function confirmDeleteGroup(group) { function confirmDeleteGroup(group) {
openDialog({ openDialog({
tone: 'warning', tone: 'error',
title: t('common_confirm_delete_title'), title: t('vault_confirm_destroy_title'),
message: t('vault_group_delete_confirm_msg'), message: t('vault_confirm_destroy_group_msg'),
actions: [ actions: [
{ label: t('common_cancel'), variant: 'standard' }, { label: t('common_cancel'), variant: 'standard' },
{ {
label: t('common_delete'), variant: 'danger', label: t('vault_destroy'), variant: 'danger',
onClick: () => runAction(async () => { onClick: () => runAction(async () => {
await deleteVaultGroup(group.id); await deleteVaultGroup(group.id);
if (activeGroupId === group.id) setActiveGroupId(null); if (activeGroupId === group.id) setActiveGroupId(null);
@@ -446,7 +446,7 @@ export default function ContrasenasPage() {
<button className="icon-btn row-menu-btn" onClick={onClick}><MoreVertical size={16} /></button> <button className="icon-btn row-menu-btn" onClick={onClick}><MoreVertical size={16} /></button>
)}> )}>
<FlyoutItem icon={Pencil} onClick={() => openEditGroup(group)}>{t('common_edit')}</FlyoutItem> <FlyoutItem icon={Pencil} onClick={() => openEditGroup(group)}>{t('common_edit')}</FlyoutItem>
<FlyoutItem icon={Trash2} danger onClick={() => confirmDeleteGroup(group)}>{t('common_delete')}</FlyoutItem> <FlyoutItem icon={Trash2} danger onClick={() => confirmDeleteGroup(group)}>{t('vault_destroy')}</FlyoutItem>
</Flyout> </Flyout>
</div> </div>
<GroupIcon iconKey={group.icon_key} /> <GroupIcon iconKey={group.icon_key} />
@@ -463,7 +463,7 @@ export default function ContrasenasPage() {
<Flyout trigger={({ onClick }) => ( <Flyout trigger={({ onClick }) => (
<button className="icon-btn row-menu-btn" onClick={onClick}><MoreVertical size={16} /></button> <button className="icon-btn row-menu-btn" onClick={onClick}><MoreVertical size={16} /></button>
)}> )}>
<FlyoutItem icon={Trash2} danger onClick={() => confirmDelete(entry)}>{t('common_delete')}</FlyoutItem> <FlyoutItem icon={Trash2} danger onClick={() => confirmDelete(entry)}>{t('vault_destroy')}</FlyoutItem>
</Flyout> </Flyout>
</div> </div>
) : ( ) : (