table-advanced v1.0.25
Plantilla Bandejas de Datos ANTD DESIGN
1. Descripción
Plantilla para la construcción de bandejas y formularios a traves de componentes de antd design parametrizados.
2. Componentes
- FormCustom
- InboxCustom
- PaginationCustom
2.1 FormCustom
Este componente genera un formulario de acuerdo a un json con la estructura de los campos que se necesitan. Los parámetros de configuración son los siguientes:
Nombre | Descripción | Tipo | Valor |
---|---|---|---|
schema | Estructura json con la información de los campos en el formulario | Json | Esquema formulario |
catalogs | Estructura json con los catálogos requerido para usarse en el formulario, para un select o radio group. | json | { dataCatalogo1, dataCatalogo2 } (Catalogos) |
okCols | Estructura json de las columnas para situar el botón Ok en alguna posición. | Json | { span: 2, offset: 10 }, {xs:{span: 2, offset: 10 }} |
okText | String de texto para el botón ok | String | '', 'Guardar' |
cancelCols | Estructura json de las columnas para situar el botón Cancelar en alguna posición. | Json | { span: 2, offset: 10 }, {xs:{span: 2, offset: 10 }} |
initialValues | Estructura json con los nombres de los campos como propiedades y el valor inicial definido | Json | {nombre: 'usuario',apellido: 'apellido',tipo: 2,cargo: 1, 'segundo-apellido': 'pérez',Checkbox: true} |
disabledForm | Valor verdadero o falso si se requiere o no deshabilitar la edición del formulario | Boolean | true, false |
onValuesChangeForm | Función que devulve todos los valores del formulario cuando sufre un cambio y los valores modificados del mismo. | function(data){} | - |
onFinishForm | Función que ejecuta el onFinish del formulario antd y devulve un json con los valores obtenidos en el formulario. | function(data){} | - |
onCancelForm | Función que ejecuta el cancelar del formulario, no se recupera ningún dato. | function (){} | - |
nativeProps | Estructra que define el tamaño del formulario 'small', 'default', '' y una propiedad para hacer scroll al primer error que tenga el formulario. | Json | {size:'default',scrollToFirstError:true} |
2.2 InboxCustom
Este componente genera una bandeja de información de acuerdo con los parámetros que se establezcan. Los parámetros de configuración son los siguientes:
Nombre | Descripción | Tipo | Valor |
---|---|---|---|
type | Define si la bandeja es de tipo tabla o de tipo lista. | String | table/list |
columns | Define las columnas que se van a mostrar en la bandeja. | Json | Columnas |
actions | Define los botones mostrados en la columa de acciones a realizar con la información. | Json | Acciones |
dataSource | Información mostrada en la bandeja. | Json | {} |
initialValuesCheck | Parámetro con la definición de los valores seleccionados en caso de contar con checkbox en cada registro. | Json | {} |
initialFilters | Información de los filtros inicialmente seleccionados. | Json | {} |
propCheckDisabled | Nombre del atributo de la información que define si el registro está deshabilitado. | String | undefined/null/'' |
initialColumnOrder | Define los valores iniciales aplicados en el ordenamiento de la información. | ArrayString | []/ 'PROP1 DESC', 'PROP2 ASC' |
catalogs | Objeto con los catálogos a mostrar en los filtros de la bandeja. | Catalogos | |
total | Número total de registros | Number | null/0/n |
onChangeCheckBox | Función que cacha los elementos seleccionados, ignorados y seleccionados todos. | function(checkAll, selected, ignored) {} | - |
onChangeCustomSort | Función que cacha las columnas aplicadas para el ordenamiento de la información. | function(sortedColumns) {} | - |
executeAction | Función que cacha la acción que se está ejecutando de acuerdo con la columna Acciones. | function(action) {} | - |
onValuesChangeForm | Devuelve el nombre y valor del campo que cambió. | function(data) {} | - |
onChangeHeaderFilter | Devuelve los valores filtrados en la bandeja. | function(filters) {} | - |
2.3 PaginationCustom
El componente de paginado es utilizado para mostrar las páginas generadas por el numero total de registros existententes y el número de registros por página. Se configura a partir de los siguientes parámetros:
Nombre | Descripción | Tipo | Valor |
---|---|---|---|
total | Valor que determina el total en el universo de registros. | Integer | 10 |
first | Valor que determina el número de la pagina. | Integer | 1 |
next | Valor que determina el número de registros por página. | Integer | 10 |
onChange | Función que devuleve los valores first y next actuales al cambiar de página o registros por página. | function (data){} | - |
3. Configuración tipos de dato
Tipos de dato
[]=array
{}=objeto
3.1 Esquema de formulario
El esquema es una estructura json que contiene un arreglo de objetos, mismo que se definen como los campos pertenecientes al formulario.
A continuación se enlistan las propiedades que debe contener cada campo dentro del formulario:
3.1.1 Tipo campo
Nombre | Descripción | Tipo | Valor | Aplica campo |
---|---|---|---|---|
title | Definición del la etiqueta a mostrar en el campo | String | '' | Todos |
name | Identificador único del campo dentro del formulario | String | '' | Todos |
placeholder | Nombre o descripción del campo | String | '' | Input,Select,TextArea,DatePicker |
type | Valor que define el tipo de campo | String | Input, Select, Radio, CheckBox, TextArea, DatePicker. | Todos |
rules | Definición de las reglas del campo | Array | [Regla] | Todos |
cols | Definición json de las columnas para ubicar el campo en una posición | Json | {} | Todos |
options | Nombre del catálogo que proporcionará las opciones en el select. (El catálogo se tomará de acuerdo a su nombre dentro de la propiedad "catalogs" del formulario) | String | '' | Select, Radio |
propsOptions | Definición de los nombres a tomar como id y valor en cada opción del select o radio. | String | 'id,descripción' | Select, Radio |
showCount | Valor que define si será visible el contador de caracteres. | Boolean | true/false | TextArea |
rows | Valor que define el número de renglones visibles en un campo de texto. | Integer | 4 | TextArea |
maxLength | Valor que define el valor máximo de caracteres en el campo. | Integer | 600 | TextArea |
autoSize | Valor que define el valor máximo y mínimo de renglones en el campo. | Json | {"minRows": 4, "maxRows": 4} | TextArea |
3.1 Regla
Las reglas están definidas por una estructura json tienen un tipo y un mensaje que se muestra en la validación de ellas. Los tipos son los siguientes:
Tipo | Descripción | Estructura |
---|---|---|
len | Valida la longitud de una cadena, número o array. | {"len":10,"message":"Se requieren 10 caracteres."} |
max | type requerido: valida longitud máxima de string, number,array. | {"max":10,"message":"Máximo 10 caracteres."} |
min | type requerido: valida longitud mínima de string, number,array | {"min":10,"message":"Mínimo 10 caracteres."} |
pattern | Valida la expresión regula o patrón que debe serguir un campo. | [{"pattern":'^(a-zA-Z0-9áéíóúÁÉÍÓÚñÑäëïöüÄËÏÖÜ.()\s_-)+$', "message": 'Formato inválido'}] |
required | Valida que el campo es obligatorio | {"pattern":'A-Za-z{3}', "message": 'Dato requerido'} |
3.2 Catálogos
La propiedad requiere un json con los catálogos usados en el formulario, es decir si en el formulario tiene un campo de tipo Select o Radio, éstos deben mostrar opciones, por lo que cada uno requiere un catálogo que los alimente.
Para ello es necesario que los catálogos compartidos sean arreglos de objetos json como opciones y que sus atributos se apeguen a lo establecido en las propiedades options y propsOptions para que se puedan interpretar correctamente.
3.3 Columnas
Las columnas son un arreglo json, donde cada elemento define la columna que se va a mostrar dentro de la bandeja.
En seguida se enlistan las propiedades definidas para cada columna:
Nombre | Descripción | Tipo | Valor |
---|---|---|---|
idColumn | Identificador único de la columna | Integer | - |
dataIndex | Index identificador de la columna | String | - |
key | Clave única de esta columna | String | - |
title | Nombre que se visualiza en la columna | Stirng | '' |
width | Tamaño en pixeles de la columna.(Es usado para las bandejas de tipo table) | Integer | null |
percent | Tamño en pordentaje que ocupa una columna en la bandeja. | String | '5%' |
cols | Definición de las columnas antd (grid) que ocupa la columna en la bandeja. | Json | {xs:{span:1,offset:0}} |
showActions | Define si la columna va a mostrar acciones por cada registro. | Boolean | true/false |
status | Valor que define si la columna es de tipo estatus | Boolean | true/false |
statusIcon | Valor que define los íconos a mostrar de acuerdo al estatus de la columna | String | '' |
sorter | Valor que define si la columna tiene ordenamiento o si el ordenamiento es múltiple. | Integer | -1 Ordenamiento de 1, 0 No tiene ordenamiento, 1 Ordenamiento múltiple. |
filterType | Valor que define el tipo del filtro, Ninguno, Normal ó Dropdow. | Integer | 0 None,1 Normal, 2 Dropdown |
fixed | Valor que define si la columna está fija a la derecha a la izquierda o nunguno. | Integer | 1 none, 2 right, 3 left |
radio | Valor que define si la columna toma la forma circular de un radio. | Boolean | true/false |
checkbox | Valor que define si la columna es de la forma checkbox. | Boolean | true/false |
oneSelection | Valor que define si la columa permite selecionar un registro a la vez | Boolean | true/false |
selectAll | Valor que define si la columna permite seleccionar todos los registros a la vez | Boolean | true/false |
field | Define el tipo de campo mostrado en el filtro de la columna. | Json | Json de tipo campo |
3.4 Acciones
Las acciones son un arreglo json en el que cada objeto define una acción a mostrar dentro de la bandeja.
A continuación se presentan las propiedades para la configuración de una acción:
Nombre | Descripción | Tipo | Valor |
---|---|---|---|
idAction | Identificador único de la acción. | Integer | - |
actionText | |||
tooltip | Valor que define si el botón de la acción tiene un tooltip. | Booelan | true/false |
tooltipText | Texto que se muestra en el tootlip de la acción. | String | '' |
icon | Nombre del ícono antd a mostrar en el botón de la acción | String | ej. "SearchOutlined" |
popConfirm | Valor que define si el botón de la acción requiere confirmación. | Boolean | true/false |
popConfirmText | Valor que muestra la confirmación de la acción. | String | '' |
nameAction | Nombre de la acción. | String | '' |
4. Instalación
En el directorio del proyecto instalar:
1. yarn install table-advanced / npm install table-advanced
5.Ejemplo de implementación
5.1 Formulario
- Importar el componente
import {FormCustom} from 'table_advanced';
- Usar el componente
function App() {
const onValuesChangeForm =(data) =>{
console.log(data)
//Devuelve el nombre y valor del campo que cambió.
}
const onFinishForm =(data) => {
console.log(data)
//Devuelve los valores del formulario, al presionar el submit.
}
const onCancelForm = () => {
//onCancelForm
console.log('onCancelForm')
}
return (
<FormCustom
nativeProps={
description:'Formulario'
size:'default'
scrollToFirstError:{true}
}
schema = [{
title='Nombre'
type='Input'
name='nombre'
rules={[{required:true, message:'Dato requerido'}]}
cols={xs:{span:8,offset:0},sm:{span:8,offset:0},md:{span:8,offset:0},lg:{span:8,offset:0},xl:{span:8,offset:0}}
},
{
title='Catálogo'
type='Select'
name='catalogo'
options:'dataCatalogoSelect'
propsOptions:'idCatalogo,descripcion'
rules={[{required:true, message:'Dato requerido'}]}
cols={xs:{span:8,offset:0},sm:{span:8,offset:0},md:{span:8,offset:0},lg:{span:8,offset:0},xl:{span:8,offset:0}}
},
{
title='Tipo'
type='Radio'
name='tipo'
options:'dataCatalogoRadio'
propsOptions:'idRadio,descripcion'
rules={[{required:true, message:'Dato requerido'}]}
cols={xs:{span:8,offset:0},sm:{span:8,offset:0},md:{span:8,offset:0},lg:{span:8,offset:0},xl:{span:8,offset:0}}
},
{
title='Checkbox'
type='Checkbox'
name='checkbox'
rules={[{required:true, message:'Dato requerido'}]}
cols={xs:{span:8,offset:0},sm:{span:8,offset:0},md:{span:8,offset:0},lg:{span:8,offset:0},xl:{span:8,offset:0}}
},
{
title: 'TextArea',
type: 'TextArea',
name: 'textArea',
showCount: true,
rows: 4,
maxLength: 600,
placeholder: 'Cantidad máxima de caracteres 600',
autoSize: {minRows: 4, maxRows: 4},
cols={xs:{span:8,offset:0},sm:{span:8,offset:0},md:{span:8,offset:0},lg:{span:8,offset:0},xl:{span:8,offset:0}}
},
{
title: 'Upload',
name: 'upload',
type: 'Upload',
maxCount:2,
accept:'.pdf,.xls,.png,.jpg,.bmp',
listType:'picture',
cols: {"span": 24, "offset": 0},
titleButton:'Selecciona un archivo con extensión .xlsx no mayor a 10MB'
}]
cancelText={null}
cancelCols={null}
okText={'Filtrar'}
okCols={{ span: 2, offset: 10 }}
catalogs={
{
dataCatalogo1:[{idCatalogo:1, descripcion: 'Opción 1'},{idCatalogo:2, descripcion: 'Opción 2'}],
dataCatalogo2::[{idRadio:1, descripcion: 'Radio 1'},{idRadio:2, descripcion: 'Radio 2'}],
}
}
initialValues={
nombre: 'usuario',
tipo: 2,
catalogo: 1,
Checkbox: true
}
onValuesChangeForm={onValuesChangeForm}
onFinishForm={onFinishForm}
onCancelForm={onCancelForm}
disabledForm={false}
>
</FormCustom>
);
}
5.2 Bandeja
- Importar el componente
import {InboxCustom} from 'table_advanced';
- Usar el componente
function App() {
const initialCheck = {
selected: [],
ignored: [],
checkAll: false,
};
const initialColumnOrder = ['AREA_ADSCRIPCION DESC', 'CARGO_PUESTO ASC'];
const ejecutarAccion = (data) => {
console.log(data);
//Devuele la acción ejecutada.
}
const onChangeHeaderFilter = (data) => {
console.log(data)
setInitialFilters(data);
//Devuelve los valores filtrados en la bandeja.
}
const onChangeCheckBox = (checkAll, selected, ignored) => {
//Devuleve los valores:
//checkAll: Si se seleccionó todo
//selected: Los registros seleccionados
//ignored: Los valores ignorados
console.log('checkAll', checkAll);
console.log('selected', selected);
console.log('ignored', ignored);
}
//para obtener el ordenamiento de columnas cuando hay un input con el ordenadomiento del lado derecho
const onChangeCustomSort =(sortedColumns) => {
console.log(sortedColumns)
}
return (
<InboxCustom
type='table'
totalWithPagination={false}
nativeProps={{
idList: 1,
name: "Personas evaluadas: Nueva solicitud",
description: "Bandeja con el listado de personas evaluadas en el registro de una nueva solicitud de revisión.",
type: "table",
scroll: {
multiple: null,
x: null,
y: null
},
rowKey: 'idBandeja',
totalWithPagination: true,
componentsOrder: 'form,tableList,totals,pagination'
}}
columns={[
{
idColumn: 1,
dataIndex: 'idBandeja',
key: 'identificador',
title: 'Identificador',
width: null,
percent: '5%',
cols: {
xs: null,
sm: null,
md: null,
lg: null
},
showActions: false,
status: false,
statusIcon: null,
sorter: null,
filterType: 'None',
fixed: 'none',
radio: false,
checkbox: true,
oneSelection: false,
selectAll: true,
},
{
idColumn: 2,
dataIndex: 'nombre',
key: 'NOMBRE',
title: 'Nombre',
width: 200,
percent: null,
cols: {
xs: null,
sm: null,
md: null,
lg: null
},
showActions: false,
status: false,
statusIcon: null,
sorter: {
multiple: 3,
x: null,
y: null
},
filterType: 'Normal',
fixed: 'none',
radio: false,
checkbox: false,
oneSelection: false,
selectAll: false,
field: {
type: 'Select',
maxLength: 10,
placeHolder: 'PlaceHolder',
options: 'dataCatalogo2',
propsOptions: 'idCatalogo,descripcion',
allowClear: false,
size: 'large'
}
},
{
idColumn: 3,
dataIndex: 'descripcion',
key: 'DESCRIPCION',
title: 'Descripción',
width: 200,
percent: null,
cols: {
xs: null,
sm: null,
md: null,
lg: null
},
showActions: false,
status: false,
statusIcon: null,
sorter: {
multiple: 3,
x: null,
y: null
},
filterType: 'Normal',
fixed: 'none',
radio: false,
checkbox: false,
oneSelection: false,
selectAll: false,
field: {
type: 'Input',
maxLength: 10,
placeHolder: 'Adscripción',
rules: [{ pattern: '^([a-zA-Z0-9áéíóúÁÉÍÓÚñÑäëïöüÄËÏÖÜ.()\\s_-])+$', message: 'Dato requerido' }],
options: 'dataCatalogo2',
propsOptions: 'idCatalogo,descripcion',
allowClear: false,
size: 'large'
}
},
{
idColumn: 4,
dataIndex: 'acciones',
key: 'ACCION',
title: 'Acciones',
width: 100,
showActions: true,
}
]}
actions={[
{
idAction: 73,
actionText: 'Algo',
tooltip: true,
tooltipText: "Consultar",
icon: "SearchOutlined",
popConfirm: false,
popConfirmText: null,
nameAction: "consultar"
},
{
idAction: 72,
actionText: null,
tooltip: true,
tooltipText: "Editar",
icon: "EditOutlined",
popConfirm: false,
popConfirmText: null,
nameAction: "editar"
},
{
idAction: 74,
actionText: null,
tooltip: true,
tooltipText: "Eliminar",
icon: "DeleteOutlined",
popConfirm: true,
popConfirmText: "¿Desea eliminar la solicitud?",
nameAction: "eliminar"
}]}
dataSource={[{
idBandeja: '1',
nombre: 'Nombre del registro',
descripcion: 'Descripción del registro'
}]}
initialFilters={initialFilters}
initialValuesCheck={initialCheck}
initialColumnOrder={initialColumnOrder}
propCheckDisabled={'disabled'}
propCheckAllDisabled={true}
onChangeCheckBox={onChangeCheckBox}
onChangeCustomSort={onChangeCustomSort}
executeAction={ejecutarAccion}
onValuesChangeForm={onValuesChangeForm}
onChangeHeaderFilter={onChangeHeaderFilter}
catalogs={
{
dataCatalogo1: [{ idCatalogo: 1, descripcion: 'Filtro número 1' }, { idCatalogo: 2, descripcion: 'Filtro número 2' }],
dataCatalogo2: [{ idCatalogo: 1, descripcion: 'Filtro número 1' }, { idCatalogo: 2, descripcion: 'Filtro número 2' }],
}
}
>
</InboxCustom>
);
}
5.3 Paginación
- Importar el componente
import {PaginationCustom} from 'table_advanced';
- Usar el componente
function App() {
return (
<PaginationCustom
onChange={onChangePagination}
total={{ total: 20, title: 'Total de registros' }}
>
</PaginationCustom>
);
}
5 days ago
5 months ago
5 months ago
6 months ago
9 months ago
10 months ago
10 months ago
8 months ago
8 months ago
1 year ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago