<?php namespace App\Http\Livewire; use Rappasoft\LaravelLivewireTables\DataTableComponent; use Rappasoft\LaravelLivewireTables\Views\Column; use App\Models\User; use App\Models\Link; class UsersTable extends DataTableComponent { protected $model = User::class; protected $listeners = ['refresh' => '$refresh']; public function configure(): void { $this->setPrimaryKey('id'); $this->setDefaultSort('created_at', 'asc'); $this->setPerPageAccepted([50, 100, 250, 500, 1000, -1]); $this->setColumnSelectEnabled(); $attributes = [ 'default' => false, 'default-colors' => true, 'default-styling' => false, ]; $this->setTableAttributes(['class' => 'table table-striped']); $this->setTrAttributes(fn($row, $index) => $attributes); $this->setTheadAttributes($attributes); $this->setTbodyAttributes($attributes); $this->setTrAttributes(fn($row, $index) => $attributes); } public function rendered() { $this->dispatch('table-loaded'); } public function columns(): array { return [ Column::make(__('messages.ID'), "id") ->sortable() ->searchable(), Column::make(__('messages.Name'), "name") ->sortable() ->searchable(), Column::make(__('messages.E-Mail'), "email") ->sortable() ->searchable(), Column::make(__('messages.Page'), "littlelink_name") ->sortable() ->searchable() ->format(function ($value, $row, Column $column) { if (!$row->littlelink_name == NULL) { return "<a href='" . url('') . "/@" . htmlspecialchars($row->littlelink_name) . "' target='_blank' class='text-info'><i class='bi bi-box-arrow-up-right'></i> " . htmlspecialchars($row->littlelink_name) . " </a>"; } else { return 'N/A'; } }) ->html(), Column::make(__('messages.Role'), "role") ->sortable() ->searchable(), Column::make(__('messages.Links'), "id") ->format(function ($value, $row) { $linkCount = Link::where('user_id', $row->id)->count(); return $linkCount; }), Column::make(__('messages.Clicks'), "id") ->format(function ($value, $row) { $clicksSum = Link::where('user_id', $row->id)->sum('click_number'); return $clicksSum; }), Column::make(__('messages.E-Mail'), "email_verified_at") ->hideIf(env('REGISTER_AUTH') === 'auth') ->sortable() ->format(function ($value, $row, Column $column) { if ($row->role == 'admin' && $row->email_verified_at != '') { return '<div class="text-center">-</div>'; } else { if($row->email_verified_at == ''){ $verifyLinkBool = 'true'; } else { $verifyLinkBool = 'false'; } $verifyLink = route('verifyUser', [ 'verify' => $verifyLinkBool, 'id' => $row->id ]); if ($row->email_verified_at == '') { return '<div class="text-center"><a style="cursor:pointer" data-id="'.$verifyLink.'" class="user-email text-danger"><span class="badge bg-danger">' . __('messages.Pending') . '</span></a></div>'; } else { return '<div class="text-center"><a style="cursor:pointer" data-id="'.$verifyLink.'" class="user-email text-danger"><span class="badge bg-success">' . __('messages.Verified') . '</span></a></div>'; } } })->html(), Column::make(__('messages.Status'), "block") ->sortable() ->format(function ($value, $row, Column $column) { if ($row->role === 'admin' && $row->id === 1) { return '<div class="text-center">-</div>'; } else { $route = route('blockUser', ['block' => $row->block, 'id' => $row->id]); if ($row->block === 'yes') { $badge = '<div class="text-center"><a style="cursor:pointer" data-id="'.$route.'" class="user-block text-danger"><span class="badge bg-danger">'.__('messages.Pending').'</span></a></div>'; } elseif ($row->block === 'no') { $badge = '<div class="text-center"><a style="cursor:pointer" data-id="'.$route.'" class="user-block text-danger"><span class="badge bg-success">'.__('messages.Approved').'</span></a></div>'; } return "<a href=\"$route\">$badge</a>"; } }) ->html(), Column::make(__('messages.Created at'), "created_at") ->sortable() ->format(function ($value) { if ($value) { return $value->format('d/m/y'); } else { return ''; } }), Column::make(__('messages.Last seen'), "updated_at") ->sortable() ->format(function ($value) { $now = now(); $diff = $now->diff($value); if ($diff->d < 1 && $diff->h < 1) { return 'Now'; } elseif ($diff->d < 1 && $diff->h < 24) { return $diff->h . ' hours ago'; } elseif ($diff->d < 365) { return $diff->d . ' days ago'; } else { return $diff->y . ' years ago'; } }), Column::make(__('messages.Action'), "id") ->format(function ($value, $row, Column $column) { return view('components.table-components.action', ['user' => $row]); }), ]; } }