innoboxrr-vue-datatable
Version:
Datatable para vue3
199 lines (148 loc) • 5.14 kB
Markdown
# 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).