55 lines
1.2 KiB
PHP
55 lines
1.2 KiB
PHP
<?php
|
|
|
|
namespace App\Livewire\Admin;
|
|
|
|
use App\Models\News as NewsModel;
|
|
use Livewire\Component;
|
|
use Livewire\WithPagination;
|
|
use Masmerise\Toaster\Toaster;
|
|
use Illuminate\Support\Facades\Storage;
|
|
|
|
class News extends Component
|
|
{
|
|
use WithPagination;
|
|
|
|
public $search = '';
|
|
|
|
// Reset halaman jika pencarian berubah
|
|
public function updatedSearch()
|
|
{
|
|
$this->resetPage();
|
|
}
|
|
|
|
public function togglePublish($id)
|
|
{
|
|
$news = NewsModel::findOrFail($id);
|
|
$news->is_published = !$news->is_published;
|
|
$news->save();
|
|
|
|
Toaster::info('Status publikasi berhasil diubah.');
|
|
}
|
|
|
|
public function delete($id)
|
|
{
|
|
$news = NewsModel::findOrFail($id);
|
|
|
|
// Hapus file fisik gambar jika ada
|
|
if ($news->image) {
|
|
Storage::disk('public')->delete($news->image);
|
|
}
|
|
|
|
$news->delete();
|
|
Toaster::error('Berita telah dihapus permanen.');
|
|
}
|
|
|
|
public function render()
|
|
{
|
|
return view('livewire.admin.news.news', [
|
|
'news' => NewsModel::with('category')
|
|
->where('title', 'like', '%' . $this->search . '%')
|
|
->latest()
|
|
->paginate(10)
|
|
]);
|
|
}
|
|
}
|