Seeder Menu Lingkungan dan Pendidikan

Fix Jam Operasional Kantor Desa Darmasaba
This commit is contained in:
2026-02-03 16:53:15 +08:00
parent 6c36a15290
commit 358ff14efe
28 changed files with 847 additions and 833 deletions

View File

@@ -99,7 +99,7 @@ function Page() {
}}
>
<Image
src={v.image.link}
src={v.image?.link || "/no-image.jpg"}
alt={v.name}
fit="cover"
loading="lazy"

View File

@@ -214,14 +214,15 @@ export default function Page() {
{paginatedNews.map((item) => (
<Card key={item.id} shadow="sm" p="lg" radius="md" withBorder>
<Card.Section>
<Image
src={item.image?.link || '/images/placeholder-small.jpg'}
height={200}
alt={item.judul}
fit="cover"
loading="lazy"
radius={"md"}
/>
<Box h={160} w="100%" style={{ overflow: 'hidden' }}>
<Image
src={item.image?.link || '/images/placeholder-small.jpg'}
alt={item.judul}
fit="cover"
loading="lazy"
radius={"md"}
/>
</Box>
</Card.Section>
<Badge color="blue" variant="light" mt="md">

View File

@@ -119,7 +119,13 @@ export default function DetailBukuUser() {
<ModalPeminjaman
opened={opened}
onClose={() => setOpened(false)}
buku={data}
buku={{
id: data.id,
judul: data.judul,
deskripsi: data.deskripsi,
image: data.image ? { link: data.image.link } : undefined,
kategori: data.kategori ? { name: data.kategori.name } : undefined,
}}
/>
</Box>
);

View File

@@ -223,7 +223,13 @@ export default function Content() {
fullWidth
leftSection={<IconBook2 size={20} />}
onClick={() => {
setSelectedBook(v);
setSelectedBook({
id: v.id,
judul: v.judul,
deskripsi: v.deskripsi,
image: v.image ? { link: v.image.link } : undefined,
kategori: v.kategori ? { name: v.kategori.name } : undefined,
});
setOpened(true);
}}
>

View File

@@ -36,8 +36,67 @@ const getCurrentTime = () => {
return `${hours}:${minutes}`;
};
const isWorkingHours = (currentTime: string): boolean => {
const [openTime, closeTime] = ["08:00", "17:00"];
// Fungsi untuk mendapatkan tanggal hari ini dalam format YYYY-MM-DD
const getTodayDate = (): string => {
const today = new Date();
const year = today.getFullYear();
const month = String(today.getMonth() + 1).padStart(2, '0');
const day = String(today.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
};
// Fungsi untuk memeriksa apakah tanggal tertentu adalah hari libur nasional
// Daftar hari libur nasional Indonesia (bisa diperbarui sesuai tahun berjalan)
const isNationalHoliday = (date: string): boolean => {
// Format tanggal harus dalam bentuk YYYY-MM-DD
const holidays = [
// Tahun 2026
'2026-01-01', // Tahun Baru Masehi
'2026-02-17', // Isra Mikraj Nabi Muhammad SAW
'2026-03-08', // Hari Raya Nyepi Tahun Baru Saka 1948
'2026-04-03', // Wafat Isa Almasih
'2026-05-01', // Hari Buruh Internasional
'2026-05-20', // Kenaikan Isa Almasih
'2026-06-01', // Hari Lahir Pancasila
'2026-06-05', // Hari Raya Idul Adha
'2026-08-17', // Hari Kemerdekaan RI
'2026-09-21', // Tahun Baru Islam 1448 H
'2026-10-02', // Maulid Nabi Muhammad SAW
'2026-12-25', // Hari Raya Natal
// Hari raya besar lainnya
'2026-04-06', // Hari Raya Idul Fitri
'2026-04-07', // Hari Raya Idul Fitri
// Hari libur pengganti
'2026-04-08', // Hari Libur Pengganti Idul Fitri
'2026-04-09', // Hari Libur Pengganti Idul Fitri
];
return holidays.includes(date);
};
const isWorkingHours = (day: string, currentTime: string): boolean => {
// Cek apakah hari ini hari libur nasional
if (isNationalHoliday(getTodayDate())) {
return false;
}
let openTime = "";
let closeTime = "";
// Atur jam kerja berdasarkan hari
if (["Senin", "Selasa", "Rabu", "Kamis"].includes(day)) {
openTime = "07:30";
closeTime = "15:30";
} else if (day === "Jumat") {
openTime = "07:30";
closeTime = "12:00";
} else {
// Sabtu dan Minggu tutup
return false;
}
const compareTimes = (time1: string, time2: string) => {
const [hour1, minute1] = time1.split(":").map(Number);
const [hour2, minute2] = time2.split(":").map(Number);
@@ -45,18 +104,33 @@ const isWorkingHours = (currentTime: string): boolean => {
if (hour1 > hour2) return false;
return minute1 <= minute2;
};
return compareTimes(currentTime, closeTime) && !compareTimes(currentTime, openTime);
};
const getWorkStatus = (day: string, currentTime: string): { status: string; message: string } => {
// Cek apakah hari ini hari libur nasional
if (isNationalHoliday(getTodayDate())) {
return { status: "Tutup", message: "Hari Libur Nasional" };
}
const workingDays = ["Senin", "Selasa", "Rabu", "Kamis", "Jumat"];
if (!workingDays.includes(day)) {
return { status: "Tutup", message: "Libur Akhir Pekan" };
}
const isOpen = isWorkingHours(currentTime);
const isOpen = isWorkingHours(day, currentTime);
let workHoursMessage = "";
if (["Senin", "Selasa", "Rabu", "Kamis"].includes(day)) {
workHoursMessage = "07:30 - 15:10";
} else if (day === "Jumat") {
workHoursMessage = "07:30 - 12:00";
}
return isOpen
? { status: "Buka", message: "08:00 - 17:00" }
: { status: "Tutup", message: "08:00 - 17:00" };
? { status: "Buka", message: workHoursMessage }
: { status: "Tutup", message: workHoursMessage };
};
// 🟦 Skeleton component untuk Social Media