UNPKG

innoboxrr-vue-datatable

Version:
199 lines (148 loc) 5.14 kB
# InnoboxRR Vue DataTable **InnoboxRR Vue DataTable** es un paquete avanzado para manejar tablas de datos en aplicaciones Vue 3, con soporte para filtros, ordenación, paginación, personalización de columnas y componentes dinámicos. Este README incluye instrucciones detalladas para configurar tanto el entorno Vue como los archivos de configuración necesarios. --- ## Índice 1. [Instalación](#instalación) 2. [Configuración en Vue](#configuración-en-vue) 3. [Archivo de Configuración](#archivo-de-configuración) 4. [Uso de DataTable](#uso-de-datatable) 5. [Personalización](#personalización) 6. [CRUD y Políticas](#crud-y-políticas) 7. [Ejemplo Completo](#ejemplo-completo) --- ## Instalación ### Paso 1: Instalar el paquete ```bash npm install innoboxrr-vue-datatable innoboxrr-http-request ``` --- ## Configuración en Vue 1. **Registrar el paquete:** ```javascript // main.js import { createApp } from 'vue'; import App from './App.vue'; import DataTable from 'innoboxrr-vue-datatable'; const app = createApp(App); app.component('DataTable', DataTable); app.mount('#app'); ``` 2. **Registrar los componentes globales necesarios:** ```javascript // main.js import ClipboardInput from './components/ClipboardInput.vue'; app.component('ClipboardInput', ClipboardInput); ``` --- ## Archivo de Configuración Crea un archivo de configuración, por ejemplo, `dataTableConfig.js`, para centralizar la lógica asociada a tus tablas y modelos. ```javascript import makeHttpRequest from 'innoboxrr-http-request'; import ClipboardInput from '@components/ClipboardInput.vue'; export const API_ROUTE_PREFIX = 'api.example.'; export const CSRF_TOKEN = document.querySelector('meta[name="csrf-token"]').getAttribute('content'); export let filters = {}; export const strings = { crudActions: { create: { name: 'Create', icon: 'fa-plus' }, export: { name: 'Export', icon: 'fa-download' }, }, }; export const setFilters = (newFilters = {}) => { filters = { ...filters, ...newFilters }; return filters; }; export const getFilters = () => filters; export const crudActions = () => [ { id: 'create', name: strings.crudActions.create.name, callback: 'createModel', icon: strings.crudActions.create.icon, route: true, params: { to: { name: 'CreateExample', params: {} } }, }, ]; export const dataTableComponents = () => ({ ClipboardInput, }); export const dataTableHead = () => [ { id: 'id', value: 'ID', sortable: true }, { id: 'name', value: 'Name', sortable: true }, { id: 'description', value: 'Description', sortable: false }, { id: 'link', value: 'Link', component: 'ClipboardInput', parser: (value) => ({ value }) }, ]; export const dataTableSort = () => ({ id: 'asc', name: 'asc', }); export const indexModel = (filters = {}) => makeHttpRequest('get', route(API_ROUTE_PREFIX + 'index'), { _token: CSRF_TOKEN, ...filters }); export const createModel = (data) => makeHttpRequest('post', route(API_ROUTE_PREFIX + 'create'), { _token: CSRF_TOKEN, ...data }); ``` --- ## Uso de DataTable ```vue <template> <data-table title="Example Table" :data-url="dataUrl" data-method="get" :model="model" :external-filters="externalFilters" :form-filters="formFilters" :extra-params="extraParams" :hide-columns="hideColumns" :has-actions="true" :has-filter="true" > <template v-slot:filterForm> <filter-form @submit="updateFormFilters" /> </template> </data-table> </template> <script> import DataTable from 'innoboxrr-vue-datatable'; import FilterForm from './FilterForm.vue'; import * as model from './dataTableConfig'; export default { components: { DataTable, FilterForm }, data() { return { dataUrl: '/api/example', model, externalFilters: {}, formFilters: {}, extraParams: {}, hideColumns: [], }; }, methods: { updateFormFilters(filters) { this.formFilters = filters; }, }, }; </script> ``` --- ## Personalización 1. **Cabezeras de tabla (dataTableHead):** Define las columnas de la tabla en el archivo de configuración. 2. **Filtros externos e internos:** Usa `formFilters` para los filtros internos y `externalFilters` para filtros definidos fuera del componente. 3. **Componentes personalizados:** Registra componentes como `ClipboardInput` para columnas dinámicas. --- ## CRUD y Políticas 1. **Definir acciones CRUD (crudActions):** Asigna iconos, nombres y rutas a las acciones. 2. **Petición de datos:** Usa funciones como `indexModel` y `createModel` para interactuar con el backend. 3. **Políticas:** Integra validaciones de acceso por políticas usando rutas predefinidas. --- ## Ejemplo Completo Revisa la sección de ejemplos en los apartados anteriores. Para más información, consulta la [documentación oficial del paquete](https://github.com/innoboxrr/vue-datatable).