Descripción
Actualmente, cuando una factura Lightning se queda en estado pendiente (por ejemplo, porque el usuario salió de la pantalla de recibir, el timeout de monitoreo expiró, o la factura nunca se pagó), la transacción sigue apareciendo en el historial sin que el usuario pueda hacer nada para ocultarla.
Issue relacionado: #107 (facturas creadas desde "Recibir" aparecían en el historial). Ese problema se resolvió con los PRs #108 y #111 para el flujo de creación de facturas, pero no cubre el caso general de cualquier transacción pendiente que el usuario quiera limpiar manualmente desde el historial.
Comportamiento esperado
El usuario debe poder eliminar del historial una transacción pendiente directamente desde la pantalla de historial, con las siguientes acciones:
- La transacción se oculta del listado (deja de mostrarse)
- Se registra el
payment_hash en un store local persistente (ClearedInvoiceStore) para que no reaparezca al recargar o reiniciar la app
- Opcionalmente, se intenta cancelar la factura en el servidor LNBits via
DELETE /api/v1/payments/{paymentHash} (sin bloquear la UI si falla)
Base técnica
El PR #111 (abierto) ya implementa la infraestructura necesaria:
ClearedInvoiceStore — persistencia local de hashes limpiados vía SharedPreferences
InvoiceService.cancelInvoice() — intento de cancelación en servidor LNBits
- Filtro en
_filteredTransactions de HistoryScreen para excluir transacciones cuyo hash está en el store
Ese PR cubre solo el caso de facturas creadas desde la pantalla "Recibir". Este issue propone extenderlo para que desde el historial se pueda invocar la misma lógica sobre cualquier transacción pendiente.
Alternativas de implementación
Opción A — Botón en el bottom sheet de detalles (Recomendada)
Al hacer tap en una transacción pendiente → se abre el modal de detalles actual → agregar un botón "Limpiar del historial" al final del modal (visible solo cuando transaction.isPending && transaction.paymentHash != null).
Pros:
- Consistente con el flujo actual de interacción (tap → detalles)
- No añade complejidad visual a la lista
- Fácil de implementar
Contra:
- Requiere un tap adicional para llegar al botón
Opción B — Swipe-to-dismiss en cards pendientes
Las transacciones pendientes se pueden deslizar (swipe) a la izquierda o derecha para limpiarlas, con confirmación.
Pros:
- Acción rápida, gesto natural en móvil
- Visible sin taps adicionales
Contra:
- Puede activarse por accidente (requiere confirmación)
- Menos discoverable para nuevos usuarios
Opción C — Combinación: swipe + botón en detalles
Ambas opciones disponibles. Swipe para acción rápida, botón en detalles para descubribilidad.
Archivos a modificar
| Archivo |
Cambio |
lib/screens/7history_screen.dart |
Agregar botón/swipe para limpiar facturas pendientes |
lib/l10n/app_es.arb |
Nuevos strings de localización |
lib/l10n/app_en.arb |
Nuevos strings de localización |
(El resto de archivos ya están cubiertos por el PR #111)
Nuevos strings de localización necesarios
| Key |
ES |
EN |
clear_pending_invoice |
"Limpiar del historial" |
"Clear from history" |
clear_pending_confirm_title |
"¿Limpiar factura pendiente?" |
"Clear pending invoice?" |
clear_pending_confirm_message |
"Esta transacción pendiente se eliminará del historial. La factura seguirá existiendo en LNBits hasta su expiración." |
"This pending transaction will be removed from history. The invoice will remain on LNBits until it expires." |
invoice_cleared_from_history |
"Factura eliminada del historial" |
"Invoice removed from history" |
Pregunta al equipo
¿Cuál opción de interacción prefieren para limpiar transacciones pendientes desde el historial?
- Opción A: Botón dentro del modal de detalles (tap → detalles → botón "Limpiar")
- Opción B: Swipe-to-dismiss en la card de la transacción pendiente
- Opción C: Ambas (swipe + botón en detalles)
Descripción
Actualmente, cuando una factura Lightning se queda en estado pendiente (por ejemplo, porque el usuario salió de la pantalla de recibir, el timeout de monitoreo expiró, o la factura nunca se pagó), la transacción sigue apareciendo en el historial sin que el usuario pueda hacer nada para ocultarla.
Issue relacionado: #107 (facturas creadas desde "Recibir" aparecían en el historial). Ese problema se resolvió con los PRs #108 y #111 para el flujo de creación de facturas, pero no cubre el caso general de cualquier transacción pendiente que el usuario quiera limpiar manualmente desde el historial.
Comportamiento esperado
El usuario debe poder eliminar del historial una transacción pendiente directamente desde la pantalla de historial, con las siguientes acciones:
payment_hashen un store local persistente (ClearedInvoiceStore) para que no reaparezca al recargar o reiniciar la appDELETE /api/v1/payments/{paymentHash}(sin bloquear la UI si falla)Base técnica
El PR #111 (abierto) ya implementa la infraestructura necesaria:
ClearedInvoiceStore— persistencia local de hashes limpiados vía SharedPreferencesInvoiceService.cancelInvoice()— intento de cancelación en servidor LNBits_filteredTransactionsdeHistoryScreenpara excluir transacciones cuyo hash está en el storeEse PR cubre solo el caso de facturas creadas desde la pantalla "Recibir". Este issue propone extenderlo para que desde el historial se pueda invocar la misma lógica sobre cualquier transacción pendiente.
Alternativas de implementación
Opción A — Botón en el bottom sheet de detalles (Recomendada)
Al hacer tap en una transacción pendiente → se abre el modal de detalles actual → agregar un botón "Limpiar del historial" al final del modal (visible solo cuando
transaction.isPending && transaction.paymentHash != null).Pros:
Contra:
Opción B — Swipe-to-dismiss en cards pendientes
Las transacciones pendientes se pueden deslizar (swipe) a la izquierda o derecha para limpiarlas, con confirmación.
Pros:
Contra:
Opción C — Combinación: swipe + botón en detalles
Ambas opciones disponibles. Swipe para acción rápida, botón en detalles para descubribilidad.
Archivos a modificar
lib/screens/7history_screen.dartlib/l10n/app_es.arblib/l10n/app_en.arb(El resto de archivos ya están cubiertos por el PR #111)
Nuevos strings de localización necesarios
clear_pending_invoiceclear_pending_confirm_titleclear_pending_confirm_messageinvoice_cleared_from_historyPregunta al equipo
¿Cuál opción de interacción prefieren para limpiar transacciones pendientes desde el historial?