searchable(), Column::make('Nomor Telepon', 'phone_number')->searchable(), Column::make('Alamat') ->label(function ($row) { return <<
{$row->landmark}
{$row->address}
HTML; }) ->searchable(function ($query, $searchTerm) { $query->orWhere('landmark', 'like', "%{$searchTerm}%") ->orWhere('address', 'like', "%{$searchTerm}%"); }) ->html(), ArrayColumn::make('Jam Operasioanl') ->data( fn ($value, $row) => $row->openingHours ->mapWithKeys(fn ($hour) => [ Str::lower(Day::from($hour->day->value)->label()) => [ 'open' => formatTime($hour->open_time), 'close' => formatTime($hour->close_time), ], ]) ) ->outputFormat( fn ($index, $value) => " ".Str::ucfirst($index).': '.( ($value['open'] === null && $value['close'] === null) ? 'Tutup' : "{$value['open']} - {$value['close']}" ).' ' ) ->flexCol(['class' => 'gap-2 flex-wrap']), ArrayColumn::make('Fasilitas') ->data(fn ($value, $row) => $row->facilities->pluck('name')->toArray()) ->outputFormat(fn ($index, $value) => Blade::render(''.$value.'')) ->flexRow(['class' => 'gap-2 flex-wrap']), Column::make('Tanggal Operasi') ->label(function ($row) { $openedDate = formatDate($row->opened_date); $openedAgo = timeAgo($row->opened_date); $closedDate = formatDate($row->closed_date); $closedAgo = timeAgo($row->closed_date); return <<
Tgl Buka: {$openedDate} ({$openedAgo})
Tgl Tutup: {$closedDate} ({$closedAgo})
HTML; }) ->html(), Column::make('Status', 'status') ->format(fn ($value) => Blade::render(''.$value->label().'')) ->html(), Column::make('Aksi') ->label(function ($row) { $actions = ''; $actions .= view('components.datatables.edit', [ 'id' => $row->id, 'editRoute' => route('studio.master.outlet.edit', $row->id), ])->render(); $actions .= view('components.datatables.delete', [ 'id' => $row->id, 'deleteRoute' => route('studio.master.outlet.delete', $row->id), ])->render(); return $actions; }) ->html(), ]; } public function builder(): Builder { return Outlet::select('id', 'name', 'phone_number', 'landmark', 'address', 'opened_date', 'closed_date', 'status')->with(['openingHours', 'facilities']); } public function filters(): array { return [ MultiSelectFilter::make('Status') ->options( collect(OutletStatus::cases()) ->mapWithKeys(fn ($case) => [$case->value => $case->label()]) ->toArray() ) ->filter(function (Builder $builder, array $values) { $builder->whereIn('status', $values); }), ]; } }