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'); } }