107 lines
4.0 KiB
PHP
107 lines
4.0 KiB
PHP
<?php
|
|
|
|
namespace App\Livewire;
|
|
|
|
use Rappasoft\LaravelLivewireTables\DataTableComponent;
|
|
use Rappasoft\LaravelLivewireTables\Views\Column;
|
|
use Rappasoft\LaravelLivewireTables\Views\Columns\{BooleanColumn, ButtonGroupColumn, LinkColumn, ImageColumn};
|
|
use Rappasoft\LaravelLivewireTables\Views\Filters\{DateFilter, MultiSelectFilter, SelectFilter};
|
|
|
|
use App\Models\Project;
|
|
|
|
class ProjectTable extends DataTableComponent
|
|
{
|
|
protected $model = Project::class;
|
|
|
|
public function configure(): void
|
|
{
|
|
$this->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 '
|
|
<div class="flex space-x-2">
|
|
<a href="'.route('projects.edit', $row->id).'" class="btn btn-sm">'.__('Edit').'</a>
|
|
<form action="'.route('projects.destroy', $row->id).'" method="POST" onsubmit="return confirm(\''.$confirm.'\');">
|
|
'.csrf_field().'
|
|
<input type="hidden" name="_method" value="DELETE">
|
|
<button type="submit" class="btn btn-sm">'.__('Delete').'</button>
|
|
</form>
|
|
</div>';
|
|
})
|
|
->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 [];
|
|
}
|
|
} |