diff --git a/app/Services/Admin/AcademicClasses/MaterialService.php b/app/Services/Admin/AcademicClasses/MaterialService.php index 39ccc06..0c2057f 100644 --- a/app/Services/Admin/AcademicClasses/MaterialService.php +++ b/app/Services/Admin/AcademicClasses/MaterialService.php @@ -20,8 +20,10 @@ public function __construct( public function paginated(User $user, int $perPage = 25, string $search = '', ?int $courseClassId = null): LengthAwarePaginator { return Material::query() - ->select(['id', 'course_class_id', 'title', 'description', 'meeting_number']) - ->with('courseClass.course:id,code,name') + ->with([ + 'courseClass.course:id,code,name', + 'courseClass.lecturer.user.profile', + ]) ->when($search, fn ($q) => $q->where('title', 'like', "%{$search}%")) ->when($courseClassId, fn ($q) => $q->where('course_class_id', $courseClassId)) ->when($user->hasRole(UserRole::Dosen->value), fn ($q) => $q->whereHas('courseClass', fn ($q) => $q->where('lecturer_id', $user->lecturer?->id))) @@ -32,7 +34,7 @@ public function paginated(User $user, int $perPage = 25, string $search = '', ?i }); })) ->latest() - ->paginate($perPage); + ->paginate($perPage, ['id', 'course_class_id', 'title', 'description', 'meeting_number', 'created_at']); } public function create(array $data, ?UploadedFile $file): Material diff --git a/resources/js/pages/admin/academic-classes/materials/card.tsx b/resources/js/pages/admin/academic-classes/materials/card.tsx index 5cb91d2..05b063e 100644 --- a/resources/js/pages/admin/academic-classes/materials/card.tsx +++ b/resources/js/pages/admin/academic-classes/materials/card.tsx @@ -1,6 +1,23 @@ -import { Pencil, Trash2 } from 'lucide-react'; +import { format } from 'date-fns'; +import { + BookOpen, + CalendarDays, + FileIcon, + FileX, + Pencil, + Trash2, + User, +} from 'lucide-react'; import { AttachmentPreviewDialog } from '@/components/attachment-preview-dialog'; import { RowActions } from '@/components/row-actions'; +import { + Attachment, + AttachmentActions, + AttachmentContent, + AttachmentDescription, + AttachmentMedia, + AttachmentTitle, +} from '@/components/ui/attachment'; import { Badge } from '@/components/ui/badge'; import type { Material } from '@/types/material'; @@ -16,60 +33,100 @@ export function createMaterialCard(params: CreateCardParams) { return function MaterialCard(material: Material) { const courseClass = material.course_class; + const lecturerName = + courseClass?.lecturer?.user?.profile?.full_name ?? null; return ( -
+ {material.title} +
++ {courseClass + ? `${courseClass.course?.code ?? ''} · ${courseClass.course?.name ?? ''}` + : '-'} +
+ {lecturerName && ( +
+
+ {material.description} +
+ )} + + {material.file_url && material.file_name ? ( +{material.title}
- {material.description && ( -- {material.description} -
- )} -- {courseClass - ? `${courseClass.course?.code ?? ''} ${courseClass.course?.name ?? ''}` - : '-'} -