From a28cb708b5334e247a04095351e4376f0273a72f Mon Sep 17 00:00:00 2001 From: bipproduction Date: Thu, 11 Dec 2025 20:52:33 +0800 Subject: [PATCH] tambahan --- src/pages/shalat/shalat_page.tsx | 466 ++++++++++++++++--------------- 1 file changed, 242 insertions(+), 224 deletions(-) diff --git a/src/pages/shalat/shalat_page.tsx b/src/pages/shalat/shalat_page.tsx index d6659db..afbd12f 100644 --- a/src/pages/shalat/shalat_page.tsx +++ b/src/pages/shalat/shalat_page.tsx @@ -4,6 +4,7 @@ import { Box, Card, Container, + Divider, Flex, Group, Loader, @@ -152,6 +153,7 @@ export default function AdhanPage() { return { cells, daysInMonth, startWeekday }; }, [year, month]); + // ========== Prayer cards (per waktu) ========== const prayerList = useMemo(() => { // adhan.adhan is expected: { fajr, sunrise, dhuhr, asr, maghrib, isha } @@ -213,117 +215,122 @@ export default function AdhanPage() { ); } + const landscapeGradient = + "linear-gradient(135deg, #091622ff, #475b71ff, #706420ff, #0d3e0cff)"; return ( - - - - - navigate("/")} - /> - - Jadwal Sholat & Imam - - - {dayjs(date).locale("id").format("dddd, DD MMMM YYYY")} - - - - - {JadwalHariIni(prayerList, formatCountdown)} - - - {JadwalImamHariIni(date, daily, adhan)} - - - - - Pilih Tanggal - - ( - - {dayjs(d).format("DD")} - - )} - minDate={date || undefined} - maxDate={dayjs().add(40, "year").toDate()} - defaultDate={date || undefined} - onChange={setDate as any} - onYearSelect={setDate as any} - onMonthSelect={setDate as any} - + + + + + + navigate("/")} /> + + Jadwal Sholat & Imam + + + {dayjs(date).locale("id").format("dddd, DD MMMM YYYY")} + - - + - {CalendarTable(date, monthGrid, isHoliday, monthly, setDate, holidays)} + {JadwalHariIni(prayerList, formatCountdown)} - {RingkasanBulalan(monthly, year, month, isHoliday)} - {FullYearHoliday(year, holidays)} - - + + {JadwalImamHariIni(date, daily, adhan)} + + + + + Pilih Tanggal + + ( + + {dayjs(d).format("DD")} + + )} + minDate={dayjs("2025-01-01").toDate()} + maxDate={dayjs().add(40, "year").toDate()} + // defaultDate={date || undefined} + onChange={(date) => setDate(dayjs(date).toDate())} + onYearSelect={(year) => setDate(dayjs(year).toDate())} + onMonthSelect={(month) => setDate(dayjs(month).toDate())} + + /> + + + + + {CalendarTable(date, monthGrid, isHoliday, monthly, setDate, holidays)} + + {RingkasanBulalan(monthly, year, month, isHoliday)} + {FullYearHoliday(year, holidays)} + + + ); } function JadwalImamHariIni(date: Date | null, daily: any, adhan: any) { return ( - - - - - Jadwal Imam Hari Ini - - + + + + + + Jadwal Imam Hari Ini + + - - {dayjs(date).format("dddd, DD MMMM YYYY")} - + + {dayjs(date).format("dddd, DD MMMM YYYY")} + + - - } - color="blue" - variant="light" - > - {daily.data.imam || "-"} - - } - color="grape" - variant="light" - > - {daily.data.ikomah || "-"} - - + + + + + {daily.data.imam || "-"} + + Imam + + + + + + {daily.data.ikomah || "-"} + + Ikomah + + -
- - Waktu Adhan - + Waktu Adhan + {Object.entries(adhan.adhan).map(([k, v]) => ( @@ -360,132 +367,132 @@ function CalendarTable( overflowX: "scroll", }} > - - + + - - + <IconLayoutGrid size={"2rem"} /> + <Text size={"2rem"} fw={700}> Kalender {dayjs(date).format("MMMM YYYY")} - + Klik tanggal untuk lihat detail - + - {/* weekday headers */} - - {["Min", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab"].map((w) => ( -
{w}
- ))} -
+ + + {["Min", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab"].map((w) => ( + {w} + ))} + - {/* month grid */} - - {monthGrid.cells.map((cell, idx) => { - if (!cell.date) { - return
; - } - const d = cell.date; - const dayNum = d.date(); - const iso = d.format("YYYY-MM-DD"); - const today = d.isSame(dayjs(), "day"); - const holiday = isHoliday(iso); - const hasImam = Boolean( - monthly.data.imam && monthly.data.imam[String(dayNum)], - ); - return ( - { - setDate(d.toDate()); - }} - > - + {monthGrid.cells.map((cell, idx) => { + if (!cell.date) { + return
; + } + const d = cell.date; + const dayNum = d.date(); + const iso = d.format("YYYY-MM-DD"); + const today = d.isSame(dayjs(), "day"); + const holiday = isHoliday(iso); + const hasImam = Boolean( + monthly.data.imam && monthly.data.imam[String(dayNum)], + ); + return ( + { + setDate(d.toDate()); + }} > - - { - - } - - - - {dayNum} - - -
-
+ + { + + } + + + - {d.format("dddd")} -
-
- {holiday - ? holidays.find( - (h) => dayjs(h.date).format("YYYY-MM-DD") === iso, - )?.name - : ""} -
-
-
- + {dayNum} + - {/* small footer area */} -
-
- ); - })} - +
+
+ {d.format("dddd")} +
+
+ {holiday + ? holidays.find( + (h) => dayjs(h.date).format("YYYY-MM-DD") === iso, + )?.name + : ""} +
+
+ + + + {/* small footer area */} +
+ + ); + })} + + ); @@ -499,11 +506,11 @@ function RingkasanBulalan( ) { return ( - + - - Ringkasan Bulanan + + Ringkasan Bulanan @@ -526,7 +533,9 @@ function RingkasanBulalan( radius="xl" key={d} p={"md"} - c={holiday ? "red" : isToday ? "blue" : "white"} + c={holiday ? "red.9" : isToday ? "cyan" : "grey.9"} + bg={"dark.9"} + withBorder > @@ -560,13 +569,13 @@ function FullYearHoliday(year: number, holidays: HolidaysTypes.Holiday[]) { - - + <IconGift size={"2rem"} /> + <Title size={"2rem"} order={4} fw={700}> Hari Libur Nasional Tahun {year} {holidays.length > 0 && ( - + { const Icon = p.Icon; return ( - + - + {p.isPast ? "Sudah lewat" : formatCountdown(p.dt)} @@ -669,11 +687,11 @@ function UserList() { {data?.data?.data?.map((u) => { if (u.active === false) return null; return ( - - - - {u.name} - + + + + {u.name} + ); })}