UDA-EJIE / udaRUP

RUP components repository
Other
13 stars 10 forks source link

Rup Datatable Inline #181

Closed oierjim closed 3 years ago

oierjim commented 3 years ago

Hola. En los datatables utilizando el plugin inline que editas en la misma tabla. Si tienes columnas ocultas como la primary key o así no funciona bien los campos que se ponene editable o no.

Es decir, para ocultar una columna del datatable hay que utilizar el plugin si o si columnDefs poniendo la columna que se quiere en visible:false, esto lo que hace es que ni pinta la columna en la tabla, el datatable tiene la info pero el td no aparece. Antes yo creo que en la jqgrid ponia en disable:none pero el td estaba.

Y para que sean editables las columnas hay que utilizar colModel poniendo editable:true, tambien aqui esta el hidden:false o true pero esto ya no sirve para nada.

Con esta casiustica llega al metodo que recorre las columnas a editar y trae los tds correspondientes (que en la version vieja traeria todo el conjunto visibles o no) en este caso solo los visibles. function _recorrerCeldas(ctx,$fila,$celdas,cont){

var cellColModel = colModel[cont];

Al recorrer el colmodel pero el cont no hace referencia a la columna que es pues no pone bien los campos editables que se quiere.

Para pasar del paso, en esa linea la variable colmodel elimino las columnas hidden:true para que el cont este a la par que con el array. Pero no se si en todos lo casos o en mas sitios podría fallar.

oierjim commented 3 years ago

Otra incidencia de css dentro de la edición inline. Al crear un elemento rup_combo como en el ejemplo de demo de la última columna. Sí aparece correctamente, pero al dar a paginar, cada vez que se pasa de página el combo al abrirse se ve cada vez más pequeño. Me he fijado y se está creando muchas veces el mismo id del combo. No sé muy bien como arreglarlo y es importante para la usabilidad de los usuarios, ya que a veces ni se ve el valor.

Solo pasa si le das a paginar mientras se ha quedado en modo edición la linea, por lo que no se ha cerrado como debería restableciendo lo que tenga que hacer. Tampoco vale la opción de cancelar cuando esta abierto la edición, porque lo que lanza es un filter y no restaura la fila.

Si editas y clicas en otra fila se restaura, y vuelves a abrir funciona bien. Antes de hacer la opción cancelar, paginar, u otra en la que recargue la pantalla, supongo que el filtrar de nuevo haría fallar también. Hay que restaurar la fila y luego hacer lo demás.

En el metodo init del rup_datatable le he metido esto y me funciona, no se si será la mejor opción pero de momento:

tabla.on('preDraw', function (e, settingsTable) { var dt = $('#' + options.id).DataTable(); var ctx = dt.context[0]; if (ctx.oInit.inlineEdit !== undefined){ DataTable.Api().inlineEdit.restaurarFila(ctx, true); } });

Menos el boton cancelar que el restaurar ahi que meterlo en el action del cancelar.

hmartinez85 commented 3 years ago

Hola, el primer caso si no te entendido mal, es normal que no deja edición en la PK, aunque si me puedes poner el js, tu jsp , la versión de UDA que usas y un pantallazo, porque no veo claramente el error.

El asegunda parte del css, he probado varias cosas y no me pasa esa casuística. adjunto gif. ![Uploading inline.gif…]()

hmartinez85 commented 3 years ago

inline

oierjim commented 3 years ago

Hola: El primer caso. En vuestro ejemplo teneis el ID visible. Pero digo en un ejemplo que el id no se quiera ver y se ponga invisible la primera columna: "columnDefs": [ { "targets": [ 0 ], "visible": false }]; A la hora de poner los inputs a editable el método _recorrerCeldas(ctx,$fila,$celdas,cont){ en la linea var cellColModel = colModel[cont]; ahi el colModel y el cont no van a la par porque la ceda puesta como invisible no existe en el html por la forma que tiene el datatable. Y los campos input pueden no aparecer los que deberian.

Y la segunda, en el gif te falta cuando le das a editar, abrir la ultima columna que es el combo. El problema es con los combos. Cuando editas abres el combo y todo lo que hace el gif miras como va quedando el combo.

image Esto es porque no se restaura. Le he puesto el restaurar, en el boton cancelar, y en el preDraw del datatable (que engloba el filter, clean, y paginacion)

hmartinez85 commented 3 years ago

Hola, he probado y para que lo haga correcto, sería así: plugins.columnDefs = [{ "targets": [ 1,2 ], "visible": false, "className" : "never" }]; en la siguiente versión vamos a eliminar el className y dejar solo el visible, además tendría que ir en consonancia con el colModel, es decir quitar ese campo. De todas formas en la edición en linea, no tiene sentido ocultar campos, ya que solo permitimos modificar campos que YA aparezcan, no se si tu caso es ese o simplemente era una prueba?. Una vez funciona esto, el restaurar debería funcionar sin problemas, por lo que al paginar la linea deja de ser editable, si tiene alguna duda me dices. Un saludo.

oierjim commented 3 years ago

Son dos cosas diferentes lo del combo lo puede probar y se acorta cuando al editar abres el combo y luego le das a paginar vuelves a editar y abres el combo en esa combinación ya se ve.

Lo de ocultar si efectivamente así es como oculto y yo oculto la primary key porque el usuario no tiene porque verla, y al hacer esto los campos editables ya no concuerdan porque hay un bug.

Pero bueno yo en mi caso ya me lo he arreglado sobreescribiendo el inline. sin mas.

hmartinez85 commented 3 years ago

Buenas, en el caso del combo, puedes hacerme un gif para verlo es que en mi caso no consigo reproducirlo. En teoría como está ahora si tu le das a paginar automáticamente la edición en linea se terminar, y al volver sería un combo nuevo por lo que no tendría que pasar ese error. Gracias.

oierjim commented 3 years ago

Como has hecho un gif para poder importarlo aqui? que herramienta uso? solo se hacer pantallazos xD

hmartinez85 commented 3 years ago

con este programa : https://www.screentogif.com/

oierjim commented 3 years ago

Vale, a partir de ahora usaré esto que es más fácil para explicar. Aparte del boton filtrar, con el limpiar, paginar falla (que con el preDraw era la misma opcion) y el cancelar tambien otra opcion aprte. combo inline