diff --git a/src/pages/homepage/index.tsx b/src/pages/homepage/index.tsx index e11aa04..920a078 100644 --- a/src/pages/homepage/index.tsx +++ b/src/pages/homepage/index.tsx @@ -4,7 +4,7 @@ import { PiCheckCircleFill, PiWarningCircleFill, PiXCircleFill, - PiCalendarPlusFill + PiCalendarPlusFill, } from "react-icons/pi"; import pelindoLogo from "@/assets/logos/Logo_Baru_Pelindo_(2021).png"; import dephubLogo from "@/assets/logos/LOGO_KEMENTERIAN_PERHUBUNGAN_REPUBLIK_INDONESIA.png"; @@ -40,11 +40,16 @@ export function Index() { const [clock, setClock] = useState("00:00:00"); const [date, setDate] = useState(""); const [currentScheduleIndex, setCurrentScheduleIndex] = useState(0); - const [grouppedSchedules, setGrouppedSchedules] = useState<{ + const [grouppedSchedules, setGrouppedSchedules] = useState< + { key: string; items: Schedule[]; - }[][]>([]); - const [companyInfo, setCompanyInfo] = useState>(importCompanyInfo); + }[][] + >([]); + const [companyInfo, setCompanyInfo] = + useState>( + importCompanyInfo + ); const [data, setData] = useState<{ harbor: { @@ -65,48 +70,75 @@ export function Index() { }; const groupDepartureDatetimes = (data: Schedule[], chunkSize = 5) => { - const sortDates = data.sort((x, y) => dayjs(x.departure_datetime).unix() - dayjs(y.departure_datetime).unix()) + const sortDates = data.sort( + (x, y) => + dayjs(x.departure_datetime).unix() - dayjs(y.departure_datetime).unix() + ); const scheduleChunks = chunkArray(sortDates, chunkSize); const tempResult = []; const todayDatetime = dayjs(); - const tomorrowDatetime = dayjs().add(1, 'days'); + const tomorrowDatetime = dayjs().add(1, "days"); - for(const scheduleChunk of scheduleChunks){ - const tempHolder: Record = {} - for(const schedule of scheduleChunk){ - const parseDatetime = dayjs(schedule.departure_datetime).diff(dayjs(), 'days') - if(parseDatetime == 0){ - if(!(`(Hari Ini) - ${todayDatetime.format("DD MMMM YYYY")}|1` in tempHolder)) - tempHolder[`(Hari Ini) - ${todayDatetime.format("DD MMMM YYYY")}|1`] = []; - tempHolder[`(Hari Ini) - ${todayDatetime.format("DD MMMM YYYY")}|1`].push(schedule); + for (const scheduleChunk of scheduleChunks) { + const tempHolder: Record = {}; + for (const schedule of scheduleChunk) { + const parseDatetime = dayjs(schedule.departure_datetime).diff( + dayjs(), + "days" + ); + if (parseDatetime == 0) { + if ( + !( + `(Hari Ini) - ${todayDatetime.format("DD MMMM YYYY")}|1` in + tempHolder + ) + ) + tempHolder[ + `(Hari Ini) - ${todayDatetime.format("DD MMMM YYYY")}|1` + ] = []; + tempHolder[ + `(Hari Ini) - ${todayDatetime.format("DD MMMM YYYY")}|1` + ].push(schedule); } - if(parseDatetime == 1){ - if(!(`(Besok) - ${tomorrowDatetime.format("DD MMMM YYYY")}|2` in tempHolder)) - tempHolder[`(Besok) - ${tomorrowDatetime.format("DD MMMM YYYY")}|2`] = []; - tempHolder[`(Besok) - ${tomorrowDatetime.format("DD MMMM YYYY")}|2`].push(schedule); + if (parseDatetime == 1) { + if ( + !( + `(Besok) - ${tomorrowDatetime.format("DD MMMM YYYY")}|2` in + tempHolder + ) + ) + tempHolder[ + `(Besok) - ${tomorrowDatetime.format("DD MMMM YYYY")}|2` + ] = []; + tempHolder[ + `(Besok) - ${tomorrowDatetime.format("DD MMMM YYYY")}|2` + ].push(schedule); } - if(parseDatetime > 1){ - if(!(`Mendatang|3` in tempHolder)) - tempHolder[`Mendatang|3`] = []; + if (parseDatetime > 1) { + if (!(`Mendatang|3` in tempHolder)) tempHolder[`Mendatang|3`] = []; tempHolder[`Mendatang|3`].push(schedule); } } - tempResult.push(tempHolder) + tempResult.push(tempHolder); } - const finaleResult = []; - - for(const groupped of tempResult){ + + for (const groupped of tempResult) { const temporaryFinale = []; - const sortItAgain = Object.keys(groupped).sort((idA, idB) => (( (idA.split("|")[1]! as unknown as number) > (idB.split("|")[1]! as unknown as number) ? 1 : -1))) - for(const key of sortItAgain){ - temporaryFinale.push({key: key.split("|")[0], items: groupped[key]}) + const sortItAgain = Object.keys(groupped).sort((idA, idB) => + (idA.split("|")[1]! as unknown as number) > + (idB.split("|")[1]! as unknown as number) + ? 1 + : -1 + ); + for (const key of sortItAgain) { + temporaryFinale.push({ key: key.split("|")[0], items: groupped[key] }); } - finaleResult.push(temporaryFinale) + finaleResult.push(temporaryFinale); } return finaleResult; @@ -140,196 +172,194 @@ export function Index() { */ setInterval(() => { const _clock = dayjs().format("HH:mm:ss"); - const _date = dayjs().format("DD MMMM YYYY"); + const _date = dayjs().format("DD MMM YYYY"); setClock(_clock); setDate(_date); }, 1000); - setGrouppedSchedules(groupDepartureDatetimes(data.schedules, 6)); + setGrouppedSchedules(groupDepartureDatetimes(data.schedules, 5)); }, []); useEffect(() => { - if(grouppedSchedules.length != 0){ + if (grouppedSchedules.length != 0) { setInterval(() => { - setCurrentScheduleIndex(current => (current + 1) % grouppedSchedules.length) + setCurrentScheduleIndex( + (current) => (current + 1) % grouppedSchedules.length + ); }, 10000); } }, [grouppedSchedules]); return ( -
-
-
-
-

- KEBERANGKATAN -

- -
- - - - - - - - - - - { - grouppedSchedules[currentScheduleIndex] != undefined && grouppedSchedules[currentScheduleIndex].map((x, i) => <> - - - - { - x.items.map((y, j) => - - - - - ) - } - ) - } - -
- Kapal - - Tujuan - - Wkt. Keberangkatan - - Status -
-
- - - {x.key} - -
-
-
-
- -
-
-

- {y.ship_name} -

-
{y.dock_name}
-
-
-
-

- {y.destination} -

-
- { - x.key == "Mendatang" &&

- {dayjs(y.departure_datetime).format("DD-MMM-YYYY")} -

- } -

- {dayjs(y.departure_datetime).format("HH:mm")} {timezone} -

-
-
- { - y.status == ScheduleStatus.NOT_AVAILABLE && <> - -

Belum tersedia

- - } - { - y.status == ScheduleStatus.SCHEDULED && <> - -

Dijadwalkan

- - } - { - y.status == ScheduleStatus.AVAILABLE && <> - -

Tersedia

- - } - { - y.status == ScheduleStatus.PREPARE_TO_DEPART && <> - -

Bersiap Berangkat

- - } - { - y.status == ScheduleStatus.CANCELED && <> - -

Dibatalkan

- - } -
-
+ <> +
+
+
+
+ +

+ FERINESIA +

+
+

+ PELABUHAN BASTIONG +

+
+
+

+ {date} {clock} {timezone} +

+
-
-
-

- {data.harbor.name} -

-

- {data.harbor.address} -

+
+
+
+

+ KEBERANGKATAN +

-
-
- -

{date}

-

- {clock} {timezone} -

-
- {/*
- -

- Hujan Cerah, 30°C -

-
*/} -
- -
-
- -
-
- -
-
- - - -

didukung oleh Ferinesia

+
+ + + + + + + + + + + {grouppedSchedules[currentScheduleIndex] != undefined && + grouppedSchedules[currentScheduleIndex].map((x, i) => ( + <> + + + + {x.items.map((y, j) => ( + + + + + + + ))} + + ))} + +
+ JAM + + KAPAL + + TUJUAN + + STATUS +
+
+ + + {x.key} + +
+
+

+ {x.key == "Mendatang" ? dayjs(y.departure_datetime).format("DD-MMM-YYYY") : dayjs(y.departure_datetime).format("HH:mm ") + timezone} + +

+
+
+
+ +
+
+

+ {y.ship_name} +

+
+
+
+

+ {y.destination} +

+
+
+ {y.status == ScheduleStatus.NOT_AVAILABLE && ( + <> + +

+ Belum tersedia +

+ + )} + {y.status == ScheduleStatus.SCHEDULED && ( + <> + +

Dijadwalkan

+ + )} + {y.status == ScheduleStatus.AVAILABLE && ( + <> + +

Tersedia

+ + )} + {y.status == + ScheduleStatus.PREPARE_TO_DEPART && ( + <> + +

+ Bersiap Berangkat +

+ + )} + {y.status == ScheduleStatus.CANCELED && ( + <> + +

Dibatalkan

+ + )} +
+
-
- -
+

INFORMASI

@@ -343,6 +373,7 @@ export function Index() {
-
+
+ ); }