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