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

namespace App\Livewire;

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

class WithdrawalTable extends LivewireTableComponent
{
    protected $model = Withdrawal::class;
    protected $listeners = ['refresh' => '$refresh'];
    public bool $showButtonOnHeader = true;
    public string $buttonComponent = 'user-settings.affiliationWithdraw.withdraw-button';

    public function configure(): void
    {
        $this->setPrimaryKey('id');
        $this->setPageName('withdrawal-table');
        $this->setDefaultSort('created_at','desc');
        $this->setColumnSelectStatus(false);
        $this->setQueryStringStatus(false);
        $this->resetPage('withdrawal-table');

        $this->setThAttributes(function (Column $column) {
            if ($column->isField('id')) {
                return [
                    'class' => 'd-flex justify-content-center',
                ];
            }

            return [];
        });
    }

    public function columns(): array
    {
        return [
            Column::make(__('messages.common.user'), 'user_id')
                ->sortable(function (Builder $query, $direction) {
                    return $query->orderBy(
                        User::select('first_name')->whereColumn(
                            'withdrawals.user_id',
                            'users.id'
                        ),
                        $direction
                    );
                })->searchable(function (Builder $query, $direction) {
                    if (!isAdmin()) {
                        return $query->whereHas('user', function (Builder $q) use ($direction) {
                            $q->whereRaw(
                                "TRIM(CONCAT(first_name, ' ', last_name)) like '%{$direction}%'"
                            );
                        });
                    }
                })->hideIf(isAdmin())->view('sadmin.affiliationWithdraw.columns.user'),
            Column::make(__('messages.subscription.amount'), 'amount')
                ->sortable()->searchable()->view('sadmin.affiliationWithdraw.columns.amount'),
            Column::make(__('messages.affiliation.approval_status'), 'is_approved')
                ->sortable()->view('sadmin.affiliationWithdraw.columns.approval_status'),
            Column::make(__('messages.date'), 'created_at')
                ->sortable()->view('sadmin.affiliationWithdraw.columns.date'),
            Column::make(__('messages.common.action'), 'id')->view('sadmin.affiliationWithdraw.columns.action'),
        ];
    }

    public function builder(): Builder
    {
        $query = Withdrawal::with('user');

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

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

}