feat(header): tambahkan fitur notifikasi pada header

- Menambahkan dropdown untuk menampilkan notifikasi yang belum dibaca.
- Menampilkan informasi notifikasi termasuk judul dan pesan.
- Menyediakan tombol untuk menandai semua notifikasi sebagai dibaca.
This commit is contained in:
Daeng Deni Mardaeni 2025-04-22 13:57:05 +07:00
parent 99f8aeffc3
commit b3ce06e03c

View File

@ -5,7 +5,7 @@
<div class="container-fluid flex justify-between items-stretch lg:gap-4" id="header_container">
<div class="flex gap-1 lg:hidden items-center -ml-1">
<a class="shrink-0" href="{{ url('/') }}">
<img class="max-h-[25px] w-full" src="assets/media/app/logo-agi-mini.png"/>
<img class="max-h-[25px] w-full" src="assets/media/app/logo-agi-mini.png" />
</a>
<div class="flex items-center">
<button class="btn btn-icon btn-light btn-clear btn-sm" data-drawer-toggle="#sidebar">
@ -47,6 +47,43 @@
</div>
<div class="border-b border-b-gray-200">
</div>
<div class="flex flex-col">
<div class="scrollable-y-auto" data-scrollable="true" data-scrollable-dependencies="#header"
data-scrollable-max-height="auto" data-scrollable-offset="200px">
<div class="flex flex-col gap-5 py-5 divider-y divider-gray-200">
@foreach (auth()->user()->unreadNotifications as $notification)
<div class="flex items-center grow gap-2.5 px-5">
<div
class="flex items-center justify-center size-8 bg-success-light rounded-full border border-success-clarity">
<i class="ki-filled ki-check text-lg text-success">
</i>
</div>
<div class="flex flex-col gap-1">
<span class="text-2sm font-medium text-gray-700">
{{ formatNotifikasi($notification)['title'] }}<br>
{{ formatNotifikasi($notification)['message'] }}<br>
</span>
<span class="font-medium text-gray-500 text-2xs">
{{ $notification->created_at->diffForHumans() }}
</span>
</div>
</div>
@if(!$loop->last)
<div class="border-b border-b-gray-200"></div>
@endif
@endforeach
</div>
</div>
<div class="border-b border-b-gray-200">
</div>
<div class="grid grid-cols-2 p-5 gap-2.5" id="notifications_all_footer">
<button class="btn btn-sm btn-light justify-center">
Mark all as read
</button>
</div>
</div>
</div>
</div>
<div class="menu" data-menu="true">
@ -54,12 +91,12 @@
data-menu-item-toggle="dropdown" data-menu-item-trigger="click|lg:click">
<div class="menu-toggle btn btn-icon rounded-full">
<img alt="" class="size-9 rounded-full border-2 border-success shrink-0"
src="assets/media/avatars/300-2.png"/>
src="assets/media/avatars/300-2.png" />
</div>
<div class="menu-dropdown menu-default light:border-gray-300 w-full max-w-[350px]">
<div class="flex items-start justify-between px-5 py-1.5 gap-1.5">
<div class="flex items-start gap-2">
<img alt="" class="size-9 rounded-full border-2 border-success" src="assets/media/avatars/300-2.png"/>
<img alt="" class="size-9 rounded-full border-2 border-success" src="assets/media/avatars/300-2.png" />
<div class="flex flex-col gap-1.5">
<span class="text-sm text-gray-800 font-semibold leading-none">
{{ Auth::user()->name }}
@ -101,7 +138,7 @@
Dark Mode
</span>
<label class="switch switch-sm">
<input data-theme-state="dark" data-theme-toggle="true" name="check" type="checkbox" value="1"/>
<input data-theme-state="dark" data-theme-toggle="true" name="check" type="checkbox" value="1" />
</label>
</div>
</div>