fix(POS-FIX-9): botones dialogo merge habilitados — recoveringSaleId no se setea al abrir dialogo
This commit is contained in:
@@ -566,8 +566,9 @@ export default function RegisterPage() {
|
||||
const recoverSale = async (sale: PosPendingSale) => {
|
||||
// POS-FIX-9: if cart has items, show merge dialog instead of auto-merge
|
||||
if (cart.length > 0) {
|
||||
setRecoveringSaleId(sale.id);
|
||||
// Don't set recoveringSaleId here — buttons in the dialog would be disabled
|
||||
setMergePendingSale(sale);
|
||||
setError('');
|
||||
return;
|
||||
}
|
||||
await doRecoverSale(sale);
|
||||
@@ -1532,7 +1533,10 @@ export default function RegisterPage() {
|
||||
<div className="flex flex-col gap-2">
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => void parkAndRecover()}
|
||||
onClick={() => {
|
||||
setError('');
|
||||
void parkAndRecover().catch((err) => setError(err instanceof Error ? err.message : String(err)));
|
||||
}}
|
||||
disabled={recoveringSaleId !== null}
|
||||
className="flex-1 rounded-xl border border-amber-300 bg-amber-50 px-4 py-2.5 text-sm font-bold text-amber-700 hover:bg-amber-100 disabled:opacity-50"
|
||||
>
|
||||
@@ -1540,7 +1544,10 @@ export default function RegisterPage() {
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => void mergeRecoveredItems()}
|
||||
onClick={() => {
|
||||
setError('');
|
||||
void mergeRecoveredItems().catch((err) => setError(err instanceof Error ? err.message : String(err)));
|
||||
}}
|
||||
disabled={recoveringSaleId !== null}
|
||||
className="flex-1 rounded-xl border border-green-300 bg-green-50 px-4 py-2.5 text-sm font-bold text-green-700 hover:bg-green-100 disabled:opacity-50"
|
||||
>
|
||||
@@ -1550,7 +1557,6 @@ export default function RegisterPage() {
|
||||
type="button"
|
||||
onClick={() => {
|
||||
setMergePendingSale(null);
|
||||
setRecoveringSaleId(null);
|
||||
}}
|
||||
className="flex-1 rounded-xl border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50"
|
||||
>
|
||||
|
||||
@@ -19,8 +19,14 @@
|
||||
- ➕ "Añadir al ticket actual" — mergeRecoveredItems()
|
||||
- "Cancelar" — cierra diálogo sin acción
|
||||
|
||||
## Bug corregido
|
||||
Los botones del diálogo no funcionaban porque `recoverSale()` seteaba `recoveringSaleId` al abrir el diálogo, lo que habilitaba `disabled={recoveringSaleId !== null}` en los botones del diálogo.
|
||||
- **Fix**: ya no se setea `recoveringSaleId` al abrir el diálogo (solo se setea durante la carga real)
|
||||
- **Fix**: los handlers de los botones ahora usan `.catch()` para mostrar errores
|
||||
|
||||
## Verificación
|
||||
- [x] TypeScript compila sin errores
|
||||
- [x] Polling 10s eliminado del panel de ventas pendientes
|
||||
- [x] Diálogo de merge visible al recuperar con cart items
|
||||
- [x] Tres opciones funcionando correctamente
|
||||
- [x] Botones no deshabilitados al abrir diálogo
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"feature_id": "POS-FIX-9",
|
||||
"stage": "review_gate",
|
||||
"agent": "reviewer",
|
||||
"action": "Feature implementada",
|
||||
"state": "done",
|
||||
"stage": "build",
|
||||
"agent": "implementer",
|
||||
"action": "Corrigiendo bug en botones merge dialog",
|
||||
"state": "running",
|
||||
"next_agent": "leader",
|
||||
"waiting_for": "Seleccionar una feature pending y actualizar este estado",
|
||||
"updated_at": "2026-08-24T05:44:19Z",
|
||||
"updated_at": "2026-08-24T05:54:22Z",
|
||||
"timeline": [
|
||||
{
|
||||
"ts": "2026-08-24T05:21:22Z",
|
||||
@@ -49,6 +49,13 @@
|
||||
"stage": "review_gate",
|
||||
"state": "done",
|
||||
"message": "Feature implementada"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-24T05:54:22Z",
|
||||
"agent": "implementer",
|
||||
"stage": "build",
|
||||
"state": "running",
|
||||
"message": "Corrigiendo bug en botones merge dialog"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user