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) => {
|
const recoverSale = async (sale: PosPendingSale) => {
|
||||||
// POS-FIX-9: if cart has items, show merge dialog instead of auto-merge
|
// POS-FIX-9: if cart has items, show merge dialog instead of auto-merge
|
||||||
if (cart.length > 0) {
|
if (cart.length > 0) {
|
||||||
setRecoveringSaleId(sale.id);
|
// Don't set recoveringSaleId here — buttons in the dialog would be disabled
|
||||||
setMergePendingSale(sale);
|
setMergePendingSale(sale);
|
||||||
|
setError('');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await doRecoverSale(sale);
|
await doRecoverSale(sale);
|
||||||
@@ -1532,7 +1533,10 @@ export default function RegisterPage() {
|
|||||||
<div className="flex flex-col gap-2">
|
<div className="flex flex-col gap-2">
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
onClick={() => void parkAndRecover()}
|
onClick={() => {
|
||||||
|
setError('');
|
||||||
|
void parkAndRecover().catch((err) => setError(err instanceof Error ? err.message : String(err)));
|
||||||
|
}}
|
||||||
disabled={recoveringSaleId !== null}
|
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"
|
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>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
onClick={() => void mergeRecoveredItems()}
|
onClick={() => {
|
||||||
|
setError('');
|
||||||
|
void mergeRecoveredItems().catch((err) => setError(err instanceof Error ? err.message : String(err)));
|
||||||
|
}}
|
||||||
disabled={recoveringSaleId !== null}
|
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"
|
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"
|
type="button"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
setMergePendingSale(null);
|
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"
|
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()
|
- ➕ "Añadir al ticket actual" — mergeRecoveredItems()
|
||||||
- "Cancelar" — cierra diálogo sin acción
|
- "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
|
## Verificación
|
||||||
- [x] TypeScript compila sin errores
|
- [x] TypeScript compila sin errores
|
||||||
- [x] Polling 10s eliminado del panel de ventas pendientes
|
- [x] Polling 10s eliminado del panel de ventas pendientes
|
||||||
- [x] Diálogo de merge visible al recuperar con cart items
|
- [x] Diálogo de merge visible al recuperar con cart items
|
||||||
- [x] Tres opciones funcionando correctamente
|
- [x] Tres opciones funcionando correctamente
|
||||||
|
- [x] Botones no deshabilitados al abrir diálogo
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"feature_id": "POS-FIX-9",
|
"feature_id": "POS-FIX-9",
|
||||||
"stage": "review_gate",
|
"stage": "build",
|
||||||
"agent": "reviewer",
|
"agent": "implementer",
|
||||||
"action": "Feature implementada",
|
"action": "Corrigiendo bug en botones merge dialog",
|
||||||
"state": "done",
|
"state": "running",
|
||||||
"next_agent": "leader",
|
"next_agent": "leader",
|
||||||
"waiting_for": "Seleccionar una feature pending y actualizar este estado",
|
"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": [
|
"timeline": [
|
||||||
{
|
{
|
||||||
"ts": "2026-08-24T05:21:22Z",
|
"ts": "2026-08-24T05:21:22Z",
|
||||||
@@ -49,6 +49,13 @@
|
|||||||
"stage": "review_gate",
|
"stage": "review_gate",
|
||||||
"state": "done",
|
"state": "done",
|
||||||
"message": "Feature implementada"
|
"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