setPrimaryKey('id') ->setAdditionalSelects(['documents.id as id']) /*->setConfigurableAreas([ 'toolbar-left-start' => ['includes.areas.toolbar-left-start', ['param1' => 'Default', 'param2' => ['param2' => 2]]], ])*/ ->setPaginationEnabled() ->setPaginationMethod('simple') ->setPaginationVisibilityEnabled() //->setReorderEnabled() ->setHideReorderColumnUnlessReorderingEnabled() ->setSecondaryHeaderTrAttributes(function ($rows) { return ['class' => 'bg-gray-100']; }) ->setSecondaryHeaderTdAttributes(function (Column $column, $rows) { if ($column->isField('id')) { return ['class' => 'text-red-100']; } return ['default' => true]; }) ->setFooterTrAttributes(function ($rows) { return ['class' => 'bg-gray-100']; }) ->setFooterTdAttributes(function (Column $column, $rows) { if ($column->isField('name')) { return ['class' => 'text-green-500']; } return ['default' => true]; }) ->setHideBulkActionsWhenEmptyEnabled() ->setUseHeaderAsFooterEnabled() ->setPaginationEnabled() ->setPaginationVisibilityEnabled() //->setToolsDisabled() //->setToolBarDisabled() // Configuración de paginación ->setPerPage(25) // Número de elementos por página ->setPerPageAccepted([10, 25, 50, 100]) // Opciones de elementos por página ->setPaginationEnabled() // Asegurar que la paginación esté habilitada ->setPaginationVisibilityStatus(true); // Hacer visible el paginador ; } public function mount($projectId = null, $folderId = null) { $this->projectId = $projectId; $this->folderId = $folderId; } public function columns(): array { return [ Column::make("Código", "code") ->sortable() ->searchable() ->secondaryHeaderFilter('code') // Filtro para esta columna ->format( fn($value, $row, Column $column) => ''.$value.'' )->html(), Column::make("Nombre", "name") ->sortable() ->searchable() ->secondaryHeaderFilter('name') // Filtro para esta columna ->format( fn($value, $row, Column $column) => '
'.\App\Helpers\FileHelper::getFileIconSvg($value).' '.$value.'
' )->html(), Column::make("Estado", "status") ->sortable() ->searchable() ->secondaryHeaderFilter('status') // Filtro para esta columna ->format( fn($value, $row, Column $column) => ''. $value.'' )->html(), Column::make("Revisión", "revision") ->sortable() ->searchable(), Column::make("Versión", "version") ->sortable() ->searchable(), Column::make("Área", "area") ->sortable() ->searchable() ->secondaryHeaderFilter('area'), // Filtro para esta columna Column::make("Disciplina", "discipline") ->sortable() ->searchable() ->secondaryHeaderFilter('discipline'), // Filtro para esta columna Column::make("Tipo", "document_type") ->sortable() ->searchable() ->secondaryHeaderFilter('type'), // Filtro para esta columna Column::make("Fecha Entrada", "entry_date") ->sortable() ->searchable() ->format( fn($value, $row, Column $column) => $value ? \Carbon\Carbon::parse($value)->format('d/m/Y') : '-' ), Column::make("Actualizado", "updated_at") ->sortable() ->searchable() ->format( fn($value, $row, Column $column) => $value ? \Carbon\Carbon::parse($value)->diffForHumans() : '-' ), ]; } public function filters(): array { return [ TextFilter::make('Código', 'code') // Agregar clave 'code' ->config([ 'placeholder' => 'Buscar por código', ]) ->filter(function (Builder $builder, string $value) { $builder->where('documents.code', 'like', '%'.$value.'%'); }), TextFilter::make('Nombre', 'name') // Agregar clave 'name' ->config([ 'placeholder' => 'Buscar por nombre', ]) ->filter(function (Builder $builder, string $value) { $builder->where('documents.name', 'like', '%'.$value.'%'); }), SelectFilter::make('Estado', 'status') // Agregar clave 'status' ->options([ '' => 'Todos', 'active' => 'Activo', 'pending' => 'Pendiente', 'inactive' => 'Inactivo', ]) ->filter(function (Builder $builder, string $value) { if ($value) { $builder->where('documents.status', $value); } }), SelectFilter::make('Disciplina', 'discipline') // Agregar clave 'discipline' ->options( collect(['Estructural', 'Arquitectura', 'Eléctrica', 'Mecánica', 'Civil', 'Otros']) ->prepend('Todas', '') ->toArray() ) ->filter(function (Builder $builder, string $value) { if ($value) { $builder->where('documents.discipline', $value); } }), SelectFilter::make('Area', 'area') // Agregar clave 'area' ->options( collect(['Estructural', 'Arquitectura', 'Eléctrica', 'Mecánica', 'Civil', 'Otros']) ->prepend('Todas', '') ->toArray() ) ->filter(function (Builder $builder, string $value) { if ($value) { $builder->where('documents.area', $value); } }), SelectFilter::make('Tipo', 'type') // Agregar clave 'document_type' ->options( collect(['Estructural', 'Arquitectura', 'Eléctrica', 'Mecánica', 'Civil', 'Otros']) ->prepend('Todas', '') ->toArray() ) ->filter(function (Builder $builder, string $value) { if ($value) { $builder->where('documents.document_type', $value); } }), ]; } public function builder(): Builder { $query = Document::query()->where('project_id', $this->projectId); if ($this->folderId) { $query->where('folder_id', $this->folderId); } else { $query->whereNull('folder_id'); } return $query->with('user'); } public function bulkActions(): array { return [ 'activate' => 'Activar', 'deactivate' => 'Desactivar', 'export' => 'Exportar', ]; } public function export() { $documents = $this->getSelected(); $this->clearSelected(); return Excel::download(new DocumentsExport($documents), 'documentos.xlsx'); } public function activate() { Document::whereIn('id', $this->getSelected())->update(['status' => 'active']); $this->clearSelected(); $this->dispatch('documents-updated'); } public function deactivate() { Document::whereIn('id', $this->getSelected())->update(['status' => 'inactive']); $this->clearSelected(); $this->dispatch('documents-updated'); } }