MIF_E31222307/resources/views/admin/rekomendasi-ahli-list.blade...

191 lines
6.9 KiB
PHP

@extends('layout.app')
@section('title', 'Daftar Rekomendasi Ahli')
@include('admin.shared.admin-styles')
@section('content')
<div class="admin-container container-fluid">
<!-- Page Header -->
<div class="page-header animate-fade-in">
<div class="row align-items-center">
<div class="col-12">
<div class="d-flex flex-column flex-md-row justify-content-between align-items-md-center gap-3">
<div>
<h3 class="mb-1 text-white d-flex align-items-center">
<i class="fas fa-user-md me-2"></i>Daftar Rekomendasi Ahli
</h3>
<nav aria-label="breadcrumb">
<ol class="breadcrumb mb-0">
<li class="breadcrumb-item"><a href="{{ route('admindash') }}" class="text-white-50">Dashboard</a></li>
<li class="breadcrumb-item active text-white" aria-current="page">Rekomendasi Ahli</li>
</ol>
</nav>
</div>
<div class="d-flex gap-2">
<button class="admin-btn btn-primary" onclick="window.location.reload()">
<i class="fas fa-sync-alt me-1"></i>Refresh
</button>
</div>
</div>
</div>
</div>
</div>
<!-- Card per Hari -->
<div class="d-flex overflow-auto gap-4 flex-nowrap px-2" id="cardsContainer">
@foreach($daftarHari as $hari)
<div class="recommendation-card flex-shrink-0" style="min-width: 360px;">
<div class="card-header bg-gradient-primary d-flex justify-content-between align-items-center">
<h5 class="mb-0 text-truncate">
<i class="fas fa-calendar-day me-2"></i>{{ $hari }}
</h5>
<a href="{{ route('rekomendasi_ahli.create', ['hari' => $hari]) }}" class="btn btn-sm btn-light" title="Tambah Rekomendasi">
<i class="fas fa-plus"></i>
</a>
</div>
<div class="card-body">
@if(isset($rekomendasiByHari[$hari]) && $rekomendasiByHari[$hari]->count())
@foreach(
$rekomendasiByHari[$hari]
->sortBy('waktuMakan.urutan') // pastikan ada kolom 'urutan' di waktu_makan
->groupBy('waktu_makan_id') as $waktuMakanId => $groupByWaktu
)
<div class="mb-3">
<span class="badge bg-info mb-1">
{{ $groupByWaktu->first()->waktuMakan->nama ?? '-' }}
</span>
<div class="components-container">
@foreach(
collect($groupByWaktu->groupBy('komponen_id'))
->sortBy(function ($item, $key) {
$order = ['Karbohidrat', 'Protein', 'Sayur', 'Buah', 'Susu', 'Snack'];
return array_search(optional($item->first()->komponen)->nama, $order);
}) as $komponenId => $groupByKomponen
)
<div class="mb-2">
<span class="component-badge">
{{ $groupByKomponen->first()->komponen->nama ?? '-' }}
</span>
<ul class="mb-0 ps-3">
@foreach($groupByKomponen as $rekomendasi)
<li class="d-flex align-items-center justify-content-between">
<span>{{ $rekomendasi->makanan->nama ?? '-' }}</span>
<form action="{{ route('rekomendasi_ahli.destroy', $rekomendasi->id) }}" method="POST" class="ms-2 d-inline-block" onsubmit="return confirm('Yakin ingin menghapus rekomendasi ini?')">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-sm btn-danger" title="Hapus">
<i class="fas fa-trash"></i>
</button>
</form>
</li>
@endforeach
</ul>
</div>
@endforeach
</div>
</div>
@endforeach
@else
<div class="text-muted">Tidak ada rekomendasi untuk hari ini.</div>
@endif
</div>
</div>
@endforeach
</div>
</div>
<style>
@import url('https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@400;700&display=swap');
#cardsContainer {
scroll-snap-type: x mandatory;
padding-bottom: 1rem;
}
.recommendation-card {
scroll-snap-align: start;
width: 360px;
flex-shrink: 0;
}
.stats-overview {
margin-bottom: 2rem;
}
.stat-card {
padding: 1.5rem;
border-radius: 1rem;
color: white;
height: 100%;
display: flex;
align-items: center;
gap: 1.5rem;
transition: transform 0.3s ease;
}
.stat-card:hover {
transform: translateY(-5px);
}
.stat-icon {
font-size: 2.5rem;
opacity: 0.9;
}
.stat-details {
flex-grow: 1;
}
.stat-value {
font-size: 1.75rem;
font-weight: 600;
margin-bottom: 0.25rem;
}
.stat-label {
margin-bottom: 0;
opacity: 0.9;
font-size: 0.9rem;
}
.recommendation-card {
background: white;
border-radius: 1rem;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
transition: all 0.3s ease;
height: 100%;
display: flex;
flex-direction: column;
overflow: hidden;
}
.recommendation-card:hover {
transform: translateY(-5px);
box-shadow: 0 8px 15px rgba(0, 0, 0, 0.15);
}
.card-header {
padding: 1.25rem;
color: white;
}
.bg-gradient-primary {
background: linear-gradient(45deg, #2196f3, #64b5f6);
}
.card-body {
padding: 1.25rem;
flex-grow: 1;
}
.section-title {
font-size: 1rem;
font-weight: 600;
margin-bottom: 1rem;
color: #333;
}
.components-container {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.component-badge {
background: #e3f2fd;
color: #1976d2;
padding: 0.35rem 0.75rem;
border-radius: 2rem;
font-size: 0.875rem;
margin-bottom: 0.25rem;
display: inline-block;
}
</style>
@endsection