diff --git a/app/Livewire/Projects/FeatureTable.php b/app/Livewire/Projects/FeatureTable.php new file mode 100644 index 0000000..85e724e --- /dev/null +++ b/app/Livewire/Projects/FeatureTable.php @@ -0,0 +1,92 @@ +setPrimaryKey('id') + ->setDefaultSort('name', 'asc') + ->setSortingPillsEnabled(false) + ->setAdditionalSelects(['features.id as id', 'features.layer_id as layer_id']); + } + + public function builder(): Builder + { + $user = Auth::user(); + abort_unless( + $user->can('manage all') || + Project::whereKey($this->projectId)->whereHas('users', fn ($q) => $q->where('user_id', $user->id))->exists(), + 403 + ); + + return Feature::query() + ->whereHas('layer.phase', fn ($q) => $q->where('project_id', $this->projectId)) + ->with(['layer.phase']); + } + + public function columns(): array + { + return [ + Column::make('Elemento', 'name') + ->sortable() + ->searchable() + ->format(fn ($value) => '' . e($value) . '') + ->html(), + + Column::make('Capa') + ->label(fn ($row) => e($row->layer?->name ?? '—')), + + Column::make('Fase') + ->label(fn ($row) => e($row->layer?->phase?->name ?? '—')), + + Column::make('Progreso', 'progress') + ->sortable() + ->format(function ($value) { + $cls = $value >= 100 ? 'badge-success' : ($value > 0 ? 'badge-warning' : 'badge-ghost'); + return '' . (int) $value . '%'; + }) + ->html(), + + Column::make('Acciones') + ->label(fn ($row) => + '
| {{ __('Feature') }} | -{{ __('Layer') }} | -{{ __('Phase') }} | -{{ __('Progress') }} | -- |
|---|---|---|---|---|
| {{ $feature->name }} | -{{ $feature->layer?->name ?? '—' }} | -{{ $feature->layer?->phase?->name ?? '—' }} | -- {{ $feature->progress }}% - | -
- |
-
{{ __('No elements in this project') }}
-| {{ __('Date') }} | -{{ __('Feature') }} | -{{ __('Template') }} | -{{ __('User') }} | -- |
|---|---|---|---|---|
| {{ $inspection->created_at?->format('d/m/Y') ?? '—' }} | -{{ $inspection->feature?->name ?? '—' }} | -{{ $inspection->template?->name ?? '—' }} | -{{ $inspection->user?->name ?? '—' }} | -- - | -
{{ __('No inspections registered') }}
-