'id', // Campo por defecto para ordenar 'exportFileName' => 'Listado', // Nombre de archivo para exportar 'showFullscreen' => false, 'showPaginationSwitch'=> false, 'showRefresh' => false, 'pagination' => false, // Agrega aquí cualquier otra configuración por defecto que uses ]; } /** * Se ejecuta al montar el componente Livewire. * Configura $tagName, $singularName, $formId y $bt_datatable. * * @return void */ public function mount(): void { // Obtenemos el modelo $model = $this->model(); if (is_string($model)) { // Si se retornó la clase en abstract protected function model(), // instanciamos manualmente $model = new $model; } // Usamos las propiedades definidas en el modelo // (tagName, singularName, etc.), si existen en el modelo. // Ajusta nombres según tu convención. $this->tagName = $model->tagName ?? Str::snake(class_basename($model)); $this->singularName = $model->singularName ?? class_basename($model); $this->formId = Str::kebab($this->tagName) . '-form'; // Inicia la configuración principal de la tabla $this->setupDataTable(); } /** * Combina la configuración base de la tabla con las columnas y formatos * definidos en las clases hijas. * * @return void */ protected function setupDataTable(): void { $baseConfig = $this->bootstraptableConfig(); $this->bt_datatable = array_merge($baseConfig, [ 'header' => $this->columns(), 'format' => $this->format(), ]); } /** * Renderiza la vista definida en viewPath(). * * @return \Illuminate\View\View */ public function render() { return view($this->viewPath()); } /** * Ejemplo de método para la lógica de filtrado que podrías sobreescribir en la clase hija. * * @param array $criteria * @return \Illuminate\Database\Eloquent\Builder */ protected function applyFilters($criteria = []) { // Aplica tu lógica de filtros, búsquedas, etc. // La clase hija podría sobrescribir este método o llamarlo desde su propia lógica. $query = $this->model()::query(); // Por ejemplo: /* if (!empty($criteria['store_id'])) { $query->where('store_id', $criteria['store_id']); } */ return $query; } }