again n again

This commit is contained in:
Randa Firman Putra
2025-11-06 18:31:44 +07:00
parent 133ec36510
commit c77321bc8a
36 changed files with 6363 additions and 185 deletions

View File

@@ -3,7 +3,7 @@
import { useState, useEffect } from 'react';
import { useRouter } from 'next/navigation';
import { ThemeToggle } from '@/components/theme-toggle';
import { Menu, ChevronDown, BarChart, Database, GraduationCap, BookOpen, Award, LogOut, User, Users } from 'lucide-react';
import { Menu, ChevronDown, BarChart, Database, GraduationCap, BookOpen, Award, LogOut, User, Users, BookOpenText } from 'lucide-react';
import { Button } from '@/components/ui/button';
import { Sheet, SheetContent, SheetTrigger } from '@/components/ui/sheet';
import {
@@ -220,6 +220,18 @@ const Navbar = () => {
Dosen
</Link>
</DropdownMenuItem>
<DropdownMenuItem asChild>
<Link href="/keloladata/matakuliah" className="flex items-center gap-2 w-full">
<BookOpen className="h-4 w-4" />
Mata Kuliah
</Link>
</DropdownMenuItem>
<DropdownMenuItem asChild>
<Link href="/keloladata/nilaimahasiswa" className="flex items-center gap-2 w-full">
<BookOpenText className="h-4 w-4" />
Nilai Mahasiswa
</Link>
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
)}
@@ -339,6 +351,14 @@ const MobileNavContent = ({ user, onLogout }: MobileNavContentProps) => {
<Users className="h-4 w-4" />
Dosen
</Link>
<Link href="/keloladata/matakuliah" className="flex items-center gap-2 px-3 py-2 text-sm hover:bg-accent hover:text-accent-foreground rounded-md transition-colors">
<BookOpen className="h-4 w-4" />
Mata Kuliah
</Link>
<Link href="/keloladata/nilaimahasiswa" className="flex items-center gap-2 px-3 py-2 text-sm hover:bg-accent hover:text-accent-foreground rounded-md transition-colors">
<BookOpenText className="h-4 w-4" />
Nilai Mahasiswa
</Link>
</div>
)}

View File

@@ -0,0 +1,52 @@
'use client';
import { useState, useEffect } from 'react';
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
interface Props {
selectedDosen: string;
onDosenChange: (dosen: string) => void;
}
export default function FilterNamaDosen({ selectedDosen, onDosenChange }: Props) {
const [dosenList, setDosenList] = useState<string[]>([]);
useEffect(() => {
const fetchDosenList = async () => {
try {
const response = await fetch('/api/dosen/list');
if (!response.ok) {
throw new Error('Failed to fetch dosen list');
}
const data = await response.json();
setDosenList(data);
} catch (error) {
console.error('Error fetching dosen list:', error);
}
};
fetchDosenList();
}, []);
return (
<div className="flex items-center gap-2">
<span className="text-sm font-medium dark:text-white">Filter Dosen:</span>
<Select value={selectedDosen} onValueChange={onDosenChange}>
<SelectTrigger className="w-[250px] focus:outline-none focus:ring-0 focus:ring-offset-0 dark:text-white">
<SelectValue placeholder="Pilih Nama Dosen" />
</SelectTrigger>
<SelectContent>
<SelectItem value="all">Semua Dosen</SelectItem>
{dosenList.map((dosen) => (
<SelectItem
key={dosen}
value={dosen}
>
{dosen}
</SelectItem>
))}
</SelectContent>
</Select>
</div>
);
}