"use client"
import Brand from "@/components/Brand";
import CheckInForm from "@/components/CheckInForm";
import { getTodaysDate } from "@/lib/common/helper-methods";
import { useAttendanceRegisterActions, useAttendanceRegisterState } from "@/providers/AttendanceRegisterProvider";
import { ICreateVisitDto, IVisit } from "@/providers/VisitProvider/context";
import { useVisitActions, useVisitState } from "@/providers/VisitProvider";
import { useVisitorActions, useVisitorState } from "@/providers/VisitorProvider";
import { CalendarDays, LogIn } from "lucide-react";
import { useRouter } from "next/navigation";
import { useEffect, useState } from "react";
export default function HomePage() {
const router = useRouter();
const registerState = useAttendanceRegisterState();
const registerActions = useAttendanceRegisterActions();
const visitActions = useVisitActions();
const visitState = useVisitState();
const visitorActions = useVisitorActions();
const visitorState = useVisitorState();
const [checkInOpen, setCheckInOpen] = useState(false);
const registerUnavailable =
registerState.isPending ||
!registerState.attendanceRegister ||
registerState.attendanceRegister.isClosed;
useEffect(() => {
void registerActions.getToday().catch(() => undefined);
}, [registerActions]);
const checkInVisitor = async (payload: ICreateVisitDto) => {
const attendanceRegister = registerState.attendanceRegister;
const attendanceRegisterId = attendanceRegister?.id;
if (!attendanceRegister || !attendanceRegisterId) {
throw new Error("Today's attendance register is not available.");
}
if (attendanceRegister.isClosed) {
throw new Error("Today's attendance register is closed.");
}
const normalizedPayload: ICreateVisitDto = {
...payload,
attendanceRegisterId,
};
if (payload.visitor.id) {
const existingUserPayload : IVisit = {
visitReason: normalizedPayload.visitReason,
otherReason: normalizedPayload.otherReason,
visitorId: payload.visitor.id,
attendanceRegisterId,
}
await visitActions.checkIn(existingUserPayload)
return;
}
const visitor = { ...normalizedPayload.visitor };
delete visitor.id;
await visitActions.create({ ...normalizedPayload, visitor });
};
return (
{getTodaysDate()}
Welcome — check in
Welcome to Moipone. Let us know you've arrived by checking in
below — it takes about a minute and no account is needed.
{registerState.isPending ? (
) : registerState.attendanceRegister?.isClosed ? (
Register closed
) : registerState.attendanceRegister ? (
Register open
) : (
Register being prepared
)}
);
}