Manuales de desarrollo de YeboYebo
Hemos creado distintos componentes para homogeneizar las páginas de quimera y ahorrar trabajo de desarrollo.
Representa un campo de formulario. Según el tipo dibujará uno u otro control. El valor que muestra se toma según este orden de prioridad:
Mejora de rendimiento:
En el caso de fields de tipo Float o Int, si no necesitamos usar el useState para obtener el valor del field porque lo pasamos por una propiedad value que nunca es undefined y lo gestionamos en nuestro propio onChange, el campo renderiza más rápido (menos veces) al no usar el contexto de useState.
Cuando un QBox es el principal elemento de la pantalla podemos usar el props maxWidth para controlar el tamaño de la pantalla, por defecto esta a 800px
Crea una lista de items de tipo ItemComponent basada en una estructura (data) que contiene un diccionario y un array.
La propiedad modelName se usa para generar nombres de acciones a llamar (p.e. onModelNameItemChanged).
<QListModel data={pedidos} modelName='pedidos' ItemComponent={ListItemMisPedidos}
>
Para poder realizar acciones en una tabla utilizamos un componente Column.Action, en la propiedad value podemos obtener el objeto linea y el indice de la linea(idx) Este indice es un autonumerico y podemos utilizarlo para enviarlo como index al Field editable ya que este campo es obligatorio. Tambien podemos utilizar su valor para el id ya que es obligatorio para poder editar correctamente el campo.
<Column.Action
id="aenviar"
header="Cantidad"
width={80}
value={(linea, idx) => (
<Field.Float
id={`cantidad/${idx}`}
field="cantidad"
value=linea.cantidad)}
index={idx}
onClick={event => event.target.select()}
onKeyPress={event => onKeyCantidadPressed(event, linea)}
/>
)}
/>
Para campos editables con Field.Select necesitamos tambien indicar el campo index, pero este caso podemos utilizar como index un campo de la linea para poder tener acceso desde el payload.
<Field.Select
getOptions={getOptions}
options={options}
id={linea/codUbicacionArticulo}
index={linea.idlinea}
noOptionsText="Indica el código de ubicación"
{...props}
async
/>
Este campo lanzara on on{id}Changed, en este caso onLineaChanged, podemos capturar este evento y comprobar si el campo que esta cambiando es el que nos interesa para poder hacer la edicion a mano
onLineaChanged:
- _type: setItem
condition:
operator: A = B
A:
payloadPath: field
B:
const: "codUbicacionArticulo"
path: lineas.dict
key:
payloadPath: index
prop: codUbicacionArticulo
value:
payloadPath: value
- _type: patch
condition:
operator: A is defined
A:
payloadPath: value
schema: lineasPedidoCli
action: cambiar_ubicacion_articulo
....