diff --git a/app/Http/Controllers/KatalogController.php b/app/Http/Controllers/KatalogController.php new file mode 100644 index 0000000..8f11d3a --- /dev/null +++ b/app/Http/Controllers/KatalogController.php @@ -0,0 +1,36 @@ + $request->query('search'), + 'kategori' => $request->query('kategori'), + 'tahun' => $request->query('tahun'), + 'penulis' => $request->query('penulis'), + ]; + + if ($tipe) { + $filters['tipe'] = $tipe; + } + + $semuaBuku = DummyDataService::getKatalogBuku($filters); + + $filterOptions = DummyDataService::getFilterOptions(); + + return view('katalog', [ + 'semuaBuku' => $semuaBuku, + 'filterOptions' => $filterOptions, + 'input' => $filters, + 'tipe' => $tipe, + ]); + } +} + diff --git a/app/Services/DummyDataService.php b/app/Services/DummyDataService.php index 1916ea9..1e096d5 100644 --- a/app/Services/DummyDataService.php +++ b/app/Services/DummyDataService.php @@ -124,44 +124,152 @@ public static function getStatistikBulanan(): array } /** - * Data untuk buku pinjam offline + * Master list untuk semua buku + * @return \Illuminate\Support\Collection */ - public static function getBukuPinjamOffline(): array + private static function getAllBooks() { - return [ + return collect([ [ - 'judul' => 'Modul Belajar Sosiologi', - 'penulis' => 'Tim Cendekia', + 'id' => 1, + 'judul' => 'Modul Ajar IPAS', + 'penulis' => 'Tim Kemdikbud Ristek', + 'cover' => 'images/covers/ipas.jpg', + 'kategori' => 'Sains', + 'tahun' => 2022, + 'status' => 'Tersedia', + 'is_new' => true, + 'tipe_akses' => 'online', + 'progress' => 75, + ], + [ + 'id' => 2, + 'judul' => 'Modul Ajar Pendidikan Pancasila', + 'penulis' => 'Tim Guru Pancasila', + 'cover' => 'images/covers/pancasila.jpg', + 'kategori' => 'Pendidikan', + 'tahun' => 2023, + 'status' => 'Tersedia', + 'is_new' => false, + 'tipe_akses' => 'online', + 'progress' => 100, + ], + [ + 'id' => 3, + 'judul' => 'Modul Belajar Sosiologi', + 'penulis' => 'Tim Cendekia', + 'cover' => 'images/covers/sosiologi.jpg', + 'kategori' => 'Sosial', + 'tahun' => 2021, + 'status' => 'Dipinjam', + 'is_new' => false, + 'tipe_akses' => 'offline', 'sisa_hari' => 8, - 'cover' => 'images/covers/sosiologi.jpg' ], [ - 'judul' => 'Modul Pembelajaran Seni Budaya', - 'penulis' => 'Cahya Wulan, S.Pd.', + 'id' => 4, + 'judul' => 'Modul Pembelajaran Seni Budaya', + 'penulis' => 'Cahya Wulan, S.Pd.', + 'cover' => 'images/covers/senbud.jpg', + 'kategori' => 'Seni', + 'tahun' => 2022, + 'status' => 'Dipinjam', + 'is_new' => false, + 'tipe_akses' => 'offline', 'sisa_hari' => 14, - 'cover' => 'images/covers/senbud.jpg' ], - ]; + [ + 'id' => 5, + 'judul' => 'Yuk, Mari SEKOLAH', + 'penulis' => 'Dr. Budi Santoso', + 'cover' => 'images/covers/ipas.jpg', + 'kategori' => 'Fiksi', + 'tahun' => 2022, + 'status' => 'Tersedia', + 'is_new' => false, + 'tipe_akses' => null, + ], + [ + 'id' => 6, + 'judul' => 'Yuk, Mari SEKOLAH', + 'penulis' => 'Dr. Budi Santoso', + 'cover' => 'images/covers/ipas.jpg', + 'kategori' => 'Fiksi', + 'tahun' => 2022, + 'status' => 'Tersedia', + 'is_new' => false, + 'tipe_akses' => 'offline', + 'sisa_hari' => 13 + ], + ]); } /** - * Data untuk baca buku online + * Data untuk buku pinjam offline (Diringkas) + */ + public static function getBukuPinjamOffline(): array + { + return self::getAllBooks() + ->where('tipe_akses', 'offline') + ->map(fn($buku) => [ + 'judul' => $buku['judul'], + 'penulis' => $buku['penulis'], + 'sisa_hari' => $buku['sisa_hari'], + 'cover' => $buku['cover'], + ]) + ->values() + ->all(); + } + + /** + * Data untuk baca buku online (Diringkas) */ public static function getBacaBukuOnline(): array { + return self::getAllBooks() + ->where('tipe_akses', 'online') + ->map(fn($buku) => [ + 'judul' => $buku['judul'], + 'penulis' => $buku['penulis'], + 'progress' => $buku['progress'], + 'cover' => $buku['cover'], + ]) + ->values() + ->all(); + } + + /** + * Mengambil daftar buku untuk katalog dengan filter. + */ + public static function getKatalogBuku(array $filters = []): \Illuminate\Support\Collection + { + $buku = self::getAllBooks(); + + $buku = $buku->when($filters['search'] ?? null, function ($query, $search) { + return $query->filter(fn($item) => str_contains(strtolower($item['judul']), strtolower($search))); + })->when($filters['kategori'] ?? null, function ($query, $kategori) { + return $query->where('kategori', $kategori); + })->when($filters['tahun'] ?? null, function ($query, $tahun) { + return $query->where('tahun', $tahun); + })->when($filters['penulis'] ?? null, function ($query, $penulis) { + return $query->where('penulis', $penulis); + })->when($filters['tipe'] ?? null, function ($query, $tipe) { + return $query->where('tipe_akses', $tipe); + }); + + return $buku; + } + + /** + * Method baru untuk mengambil daftar unik untuk dropdown filter + */ + public static function getFilterOptions(): array + { + $buku = self::getAllBooks(); return [ - [ - 'judul' => 'Modul Ajar IPAS', - 'penulis' => 'Tim Kemdikbud Ristek', - 'progress' => 75, - 'cover' => 'images/covers/ipas.jpg' - ], - [ - 'judul' => 'Modul Ajar Pendidikan Pancasila', - 'penulis' => 'Tim Guru Pancasila', - 'progress' => 100, - 'cover' => 'images/covers/pancasila.jpg' - ], + 'kategori' => $buku->pluck('kategori')->unique()->sort()->values(), + 'tahun' => $buku->pluck('tahun')->unique()->sortDesc()->values(), + 'penulis' => $buku->pluck('penulis')->unique()->sort()->values(), ]; } } diff --git a/resources/views/dashboard.blade.php b/resources/views/dashboard.blade.php index 9af3476..b6be156 100644 --- a/resources/views/dashboard.blade.php +++ b/resources/views/dashboard.blade.php @@ -165,6 +165,8 @@ class="badge bg-{{ $item['type'] }}-soft text-{{ $item['type'] }} rounded-pill p
{{ $buku['penulis'] }}
+Tidak ada buku yang cocok dengan kriteria filter Anda. Coba reset atau ubah filter.
+