GenericMaster Buttons and Edit Flow
Objetivo
Definir un contrato claro para que botones y edición funcionen de forma consistente en vistas basadas en GenericMaster y GenericMasterDetail.
Regla 1: Elegir el componente correcto
- Usa
GenericMasterpara grillas simples (sin flujo maestro-detalle). - Usa
GenericMasterDetailpara endpointsgmd/*y pantallas con detalle/edición de registro. - No mezclar endpoint
gmd/*con comportamientos pensados paraGenericMastersin validar el flujo de edición.
Regla 2: Contrato de botones (backend)
En buttons_master, usar estructura consistente:
- Editar:
action: "edit"only_selected_rows: true
- Eliminar:
action: "delete"only_selected_rows: truedanger: true
Para acciones custom que sí llaman API o ruta:
- usar
pathexplícito (ej:"/conciliacion"o"/api/...") - no usar
actioncon valores de ruta.
Regla 3: Evitar path undefined en frontend
Al renderizar:
- pasar
...propsantes depathypk - dejar
path/pkal final para que no sean sobreescritos accidentalmente.
Patrón recomendado:
<GenericMasterDetail
{...props}
pk="cod_documento"
path={path}
/>
Regla 4: Convenciones de URL de edición
La URL de detalle debe ser:
.../gmd/<entidad>/details/<pk>
No debe quedar:
.../gmd/<entidad>?filtro=.../details/<pk>
Si aparece ese patrón, revisar cómo se construye path en frontend y aplicar fallback defensivo en backend solo como compatibilidad temporal.
Diagnóstico rápido
Síntoma: POST /undefined
Revisar en este orden:
- Botón custom sin
path. actionusado como ruta (incorrecto).pathpisado por...propsen el componente.- Configuración inconsistente entre
GenericMastery endpointgmd/*.
Síntoma: editar abre en blanco
Revisar:
- Request de detalle (debe ser
/details/<pk>). - Respuesta de backend con estructura de
get_master_detail. detail_configyheader_layoutdel controlador.
Checklist antes de cerrar cambio
- Botones edit/delete con
actioncorrecto. - Acciones custom con
pathexplícito. - Componente correcto (
GenericMastervsGenericMasterDetail). -
pathfinal no sobreescrito por props. - Editar vía botón funciona.
- Editar vía doble click funciona.
- Sin
POST /undefineden consola/terminal.