label( fn ($row) => <<
{$row->full_name}
{$row->code} HTML ) ->searchable( fn ($query, $searchTerm) => $query->where('full_name', 'like', "%{$searchTerm}%") ->orWhere('code', 'like', "%{$searchTerm}%") ) ->html(), Column::make('Kredensial') ->label( fn ($row) => <<
{$row?->user?->email}
{$row?->user?->username} HTML ) ->searchable( fn ($query, $searchTerm) => $query->whereHas( 'user', fn ($q) => $q->where('email', 'like', "%{$searchTerm}%") ->orWhere('username', 'like', "%{$searchTerm}%") ) ) ->html(), Column::make('Nomor Telepon', 'phone_number')->searchable(), Column::make('Jenis Kelamin', 'gender') ->format(fn ($value) => Blade::render( '' .$value->label() .'' )) ->html(), Column::make('Kode Referral', 'user.referralCode.code') ->format( fn ($value) => $value ? Blade::render(''.$value.'') : '' ) ->html(), Column::make('Gaji Pokok', 'base_salary') ->searchable() ->sortable() ->format(fn ($value) => currency($value, 'Rp')), Column::make('Alamat', 'address')->searchable(), Column::make('Tanggal') ->label(function ($row) { $birthdate = formatDate($row->birthdate); $birthAgo = getAge($row->birthdate); $hireDate = formatDate($row?->user?->hire_date); $openedAgo = timeAgo($row?->user?->hire_date); $resigndate = formatDate($row?->user?->resign_date); $resignAgo = timeAgo($row?->user?->resign_date); return <<
Tgl Lahir: {$birthdate} ({$birthAgo})
Tgl Bergabung: {$hireDate} ({$openedAgo})
Tgl Resign: {$resigndate} ({$resignAgo})
HTML; }) ->html(), Column::make('Status', 'user.status') ->format( fn ($value) => Blade::render(''.UserStatus::tryFrom($value)->label().'') ) ->html(), Column::make('Aksi') ->label(function ($row) { $actions = ''; if (auth()->id() !== $row?->user?->id) { if (auth()->user()->can('update user')) { $actions .= view('components.datatables.edit', [ 'id' => $row->id, 'editRoute' => route('studio.master.user.edit', $row->id), ])->render(); } if (auth()->user()->can('delete user')) { $actions .= view('components.datatables.delete', [ 'id' => $row->id, 'deleteRoute' => route('studio.master.user.delete', $row->id), ])->render(); } } return $actions; }) ->html(), ]; } public function builder(): Builder { return Employee::query() ->select( 'employees.id', 'employees.user_id', 'employees.code', 'employees.full_name', 'employees.phone_number', 'employees.gender', 'employees.birthdate', 'employees.base_salary', 'employees.address' ) ->with([ 'user', 'user.referralCode', ]); } public function filters(): array { return [ MultiSelectFilter::make('Status') ->options( collect(UserStatus::cases()) ->mapWithKeys(fn ($case) => [$case->value => $case->label()]) ->toArray() ) ->filter(function (Builder $builder, array $values) { $builder->whereHas( 'user', fn ($q) => $q->whereIn('status', $values) ); }), ]; } }