112 lines
5.2 KiB
PHP
112 lines
5.2 KiB
PHP
<?php
|
|
|
|
namespace App\Livewire;
|
|
|
|
use Rappasoft\LaravelLivewireTables\DataTableComponent;
|
|
use Rappasoft\LaravelLivewireTables\Views\Column;
|
|
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'])
|
|
->setThAttributes(['class' => 'px-4 py-2 text-left text-xs font-medium text-gray-500 uppercase tracking-wider'])
|
|
->setTdAttributes(['class' => 'px-4 py-2 whitespace-nowrap text-sm text-gray-900']);
|
|
|
|
$this->addColumn('name', __('Project Name'))
|
|
->setSortable()
|
|
->setSearchable();
|
|
|
|
$this->addColumn('address', __('Address'))
|
|
->setSortable()
|
|
->setSearchable();
|
|
|
|
$this->addColumn('status', __('Status'))
|
|
->setSortable()
|
|
->setFilterable([
|
|
'planning' => __('Planning'),
|
|
'in_progress' => __('In progress'),
|
|
'paused' => __('Paused'),
|
|
'completed' => __('Completed'),
|
|
])
|
|
->setLabel(fn ($value, $row, $column, $component) =>
|
|
match ($value) {
|
|
'planning' => '<span class="badge badge-primary">'.__('Planning').'</span>',
|
|
'in_progress' => '<span class="badge badge-success">'.__('In progress').'</span>',
|
|
'paused' => '<span class="badge badge-warning">'.__('Paused').'</span>',
|
|
'completed' => '<span class="badge badge-secondary">'.__('Completed').'</span>',
|
|
default => $value
|
|
}
|
|
);
|
|
|
|
$this->addColumn('start_date', __('Start Date'))
|
|
->setSortable()
|
|
->setFormat(fn ($value, $row, $column) => $value ? $value->format('Y-m-d') : '');
|
|
|
|
$this->addColumn('end_date_estimated', __('Estimated End Date'))
|
|
->setSortable()
|
|
->setFormat(fn ($value, $row, $column) => $value ? $value->format('Y-m-d') : '');
|
|
|
|
$this->addColumn('actions', __('Actions'))
|
|
->setLabel(fn ($row) => '<div class="flex space-x-2">
|
|
<a href="'.route('projects.edit', $row->id).'" class="btn btn-sm btn-primary">'.__('Edit').'</a>
|
|
<form action="'.route('projects.destroy', $row->id).'" method="POST" onsubmit="return confirm(__('Are you sure you want to delete this project?'));">
|
|
'.csrf_field().'
|
|
<input type="hidden" name="_method" value="DELETE">
|
|
<button type="submit" class="btn btn-sm btn-error">'.__('Delete').'</button>
|
|
</form>
|
|
</div>')
|
|
->setHtmlAttribute(['class' => 'text-right']);
|
|
}
|
|
|
|
public function columns(): array
|
|
{
|
|
return [
|
|
Column::make(__('Project Name'), 'name')
|
|
->sortable()
|
|
->searchable(),
|
|
Column::make(__('Address'), 'address')
|
|
->sortable()
|
|
->searchable(),
|
|
Column::make(__('Status'), 'status')
|
|
->sortable()
|
|
->filterable([
|
|
'planning' => __('Planning'),
|
|
'in_progress' => __('In progress'),
|
|
'paused' => __('Paused'),
|
|
'completed' => __('Completed'),
|
|
])
|
|
->label(fn ($value, $row, $column) =>
|
|
match ($value) {
|
|
'planning' => '<span class="badge badge-primary">'.__('Planning').'</span>',
|
|
'in_progress' => '<span class="badge badge-success">'.__('In progress').'</span>',
|
|
'paused' => '<span class="badge badge-warning">'.__('Paused').'</span>',
|
|
'completed' => '<span class="badge badge-secondary">'.__('Completed').'</span>',
|
|
default => $value
|
|
}
|
|
),
|
|
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(fn ($row) => '<div class="flex space-x-2">
|
|
<a href="'.route('projects.edit', $row->id).'" class="btn btn-sm btn-primary">'.__('Edit').'</a>
|
|
<form action="'.route('projects.destroy', $row->id).'" method="POST" onsubmit="return confirm(__('Are you sure you want to delete this project?'));">
|
|
'.csrf_field().'
|
|
<input type="hidden" name="_method" value="DELETE">
|
|
<button type="submit" class="btn btn-sm btn-error">'.__('Delete').'</button>
|
|
</form>
|
|
</div>')
|
|
->htmlAttribute(['class' => 'text-right']),
|
|
];
|
|
}
|
|
}
|