setPrimaryKey('id') ->setDefaultSort('created_at', 'desc') ->setTableAttributes(['class' => 'table-auto w-full']); $this->setThAttributes(function(Column $column) { return ['class' => 'px-4 py-2 text-left text-xs font-medium text-gray-500 uppercase tracking-wider']; }); $this->setTdAttributes(function(Column $column) { return ['class' => 'px-4 py-2 whitespace-nowrap text-sm text-gray-900']; }); } public function columns(): array { return [ Column::make(__('ID'), 'id') ->sortable() ->searchable(), Column::make(__('Project Name'), 'name') ->sortable() ->searchable(), Column::make(__('Address'), 'address') ->sortable() ->searchable(), Column::make(__('Status'), 'status') ->sortable(), Column::make(__('Start Date'), 'start_date') ->sortable() ->format(fn ($value, $row, $column) => $value ? $value->format('Y-m-d') : ''), Column::make(__('Estimated End Date'), 'end_date_estimated') ->sortable() ->format(fn ($value, $row, $column) => $value ? $value->format('Y-m-d') : ''), Column::make(__('Actions')) ->label(function ($row) { $confirm = __('Are you sure you want to delete this project?'); return '
'; }) ->html(), ButtonGroupColumn::make(__('Actions')) ->attributes(function($row) { return [ 'class' => 'space-x-2', ]; }) ->buttons([ LinkColumn::make('Edit') ->title(fn($row) => __('Edit')) ->location(fn($row) => route('projects.edit', $row->id)) ->attributes(function($row) { return [ 'target' => '_blank', 'class' => 'text-blue-500 hover:underline', ]; }), LinkColumn::make('View') // make() has no effect in this case but needs to be set anyway ->title(fn($row) => __('View')) ->location(fn($row) => route('projects.map', $row->id)) ->attributes(function($row) { return [ 'class' => 'text-blue-500 hover:underline', ]; }), ]), ]; } public function filters(): array { return []; } }