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 Buka', 'opening_hours') ->data(fn ($value, $row) => normalizeOpeningHours($row->opening_hours)) ->outputFormat( fn ($index, $value) => " ".ucfirst($index).': ' .(($value['open'] === null && $value['close'] === null) ? 'Tutup' : "{$value['open']} - {$value['close']}") .' ' ) ->flexCol(['class' => 'gap-2 flex-wrap']), ArrayColumn::make('Fasilitas', 'facilities') ->data(fn ($value, $row) => $row->facilities) ->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; }) ->searchable(function ($query, $searchTerm) { $query->orWhere('landmark', 'like', "%{$searchTerm}%") ->orWhere('address', 'like', "%{$searchTerm}%"); }) ->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', 'opening_hours', 'facilities', 'opened_date', 'closed_date', 'status'); } }