npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

table-advanced

v1.0.29

Published

Componentes generales, para su uso y configuración de forma externa, creado a partir de create-react-library.

Downloads

84

Readme

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.

presentation

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. | Array[String] | []/ ['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

  1. Importar el componente
import {FormCustom} from 'table_advanced';
  1. 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

  1. Importar el componente
import {InboxCustom} from 'table_advanced';
  1. 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

  1. Importar el componente
import {PaginationCustom} from 'table_advanced';
  1. Usar el componente
function App() {
  return (
    <PaginationCustom
        onChange={onChangePagination}
        total={{ total: 20, title: 'Total de registros' }}
    >
    </PaginationCustom>
  );
}