Edit navigation#2002
Open
Yopli2k wants to merge 2 commits into
Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Descripción
Añade botones de navegación ‹ n/m › en las pantallas de edición para avanzar y retroceder por los registros tal y como se estaban viendo en el listado de origen (mismos filtros, búsqueda y ordenación), sin tener que volver atrás.
El sistema no reconstruye filtros ni consultas en el Edit. Al renderizar un listado, cada ListView guarda en caché una "foto" de los códigos visibles (claves primarias), identificada por un token aleatorio de un solo render. Los enlaces de fila añaden
&navfrom={token}, y el Edit solo tiene que localizar sucodedentro de esa foto para pintar los botones y el indicador de posición. Sin token, con la foto caducada (TTL 1h) o si el registro no está en ella, simplemente no se muestran botones.Detalles del diseño:
Token por render + rotación: se conservan las últimas 10 fotos por vista y usuario (
ListView::NAVIGATION_TOKENS), borrando las que caducan. Cada pestaña del navegador navega su propia secuencia sin interferir con otras.Alcance de la foto: la pestaña activa de un ListController amplía la foto una página antes y otra después con una consulta ligera (solo la clave primaria, mismo where/order). El resto de pestañas y las vistas de listado dentro de paneles cosechan el cursor ya cargado, sin coste SQL adicional.
Solo registros propios: la foto se genera únicamente cuando el enlace de la fila abre el propio registro (
rowCodeIsPrimaryKey()). Listados cuyas filas enlazan a otro modelo (líneas de documentos, joins de líneas) no generan navegación, evitando secuencias sin sentido o colisiones de identificadores.Documentos incluidos:
getNavigation()vive en PanelController, por lo que también funcionan facturas, albaranes, pedidos, presupuestos (ventas y compras) y asientos. El JavaScript de guardado de esos formularios propaga el token al recargar.Cambios realizados
ListView:saveNavigation(),navigationCodes()yrowCodeIsPrimaryKey(); constanteNAVIGATION_TOKENSy propiedadnavToken. Setting de vistanavigation(activado pordefecto en
BaseView) para poder desactivarlo por vista.ListControlleryPanelController: generación de la foto tras cargar datos (todas laspestañas de listado, salvo acciones sin render como export/megasearch).
PanelController::getNavigation(): consumo de la foto en cualquier controlador de panel.Master/ListView.html.twig:navfromen los enlaces de fila.Master/PanelController.html.twigyMaster/PanelControllerTop.html.twig: botones denavegación (Bottom y LeftBottom los heredan).
Tab/SalesDocument.html.twig,Tab/PurchasesDocument.html.twigyTab/AccountingEntry.html.twig: propagación del token al guardar.Cómo probar
navega siguiendo el orden del listado; al volver, el listado sigue igual.
dentro de un panel (pestaña de facturas de EditCliente): cada contexto navega su lista.
la navegación.
navega su propia secuencia.
botones (comportamiento esperado).