Current File : /home/getxxhzo/app.genicards.com/app/Livewire/AffiliateUserTable.php
<?php

namespace App\Livewire;

use App\Models\User;
use App\Models\AffiliateUser;
use Illuminate\Database\Eloquent\Builder;
use Rappasoft\LaravelLivewireTables\Views\Column;
use Rappasoft\LaravelLivewireTables\DataTableComponent;

class AffiliateUserTable extends LivewireTableComponent
{
    protected $model = AffiliateUser::class;

    public bool $showButtonOnHeader = true;
    public string $buttonComponent = 'sadmin.affiliateUsers.columns.guide';
    public function configure(): void
    {
        $this->setPrimaryKey('id');
        $this->setPageName('affiliate-user-table');
        $this->setDefaultSort('created_at', 'desc');
        $this->setColumnSelectStatus(false);
        $this->setQueryStringStatus(false);
        $this->resetPage('affiliate-user-table');
    }

    public function columns(): array
    {
        return [
            Column::make(__('messages.affiliation.affiliated_by'), "affiliated_by")
            ->sortable(function (Builder $query, $direction) {
                return $query->orderBy(User::select('first_name')->whereColumn('affiliate_users.affiliated_by',
                    'users.id'),
                    $direction);
            })->hideIf(isAdmin())->view('sadmin.affiliateUsers.columns.affilated_by'),
            Column::make(__('messages.common.user'), "user_id")
            ->sortable(function (Builder $query, $direction) {
                return $query->orderBy(User::select('first_name')->whereColumn('affiliate_users.user_id',
                    'users.id'),
                    $direction);
            })->searchable(function (Builder $query, $direction) {
                return $query->whereHas('user', function (Builder $q) use ($direction) {
                    $q->whereRaw(
                        "TRIM(CONCAT(first_name, ' ', last_name)) like '%{$direction}%'"
                    );
                });
            })->view('sadmin.affiliateUsers.columns.user'),
            Column::make(__('messages.setting.affiliation_amount'), "amount")
                ->sortable()->searchable()->view('sadmin.affiliateUsers.columns.affilation_amount'),
            Column::make(__('messages.date'), "created_at")
                ->sortable()->view('sadmin.affiliateUsers.columns.date'),

        ];
    }


    public function builder(): Builder
    {
        $query = AffiliateUser::with('user', 'affiliated_by_user');

        if (isAdmin()) {
            $query->whereAffiliatedBy(getLogInUserId());
        }

        return $query;
    }
    public function placeholder()
    {
        return view('lazy_loading.without-listing-skelecton');
    }


}