/* eslint-disable @typescript-eslint/no-explicit-any */ import React, { useState, useEffect } from "react"; import moment from "moment-timezone"; import { useAppSelector } from "@/Redux/Hooks"; import { useDispatch } from "react-redux"; import { saveStepData } from "@/Redux/Reducers/CreateOrderSlice"; import DatePicker from "react-datepicker"; import "react-datepicker/dist/react-datepicker.css"; import { getPickupTimeSlots, TimeSlot } from "../../utlits/PickupTimes"; import { isServiceAvailable } from "../../../lib/Helper"; // Same Day // Booking Time - 00:00 to 12:00 // Pickup Time - 8:00 to 13:00 // Express // Booking Time - 00:00 to 16:00 // Pickup Time - 8:00 to 18:00 // Next day // Booking Time - 00:00 to 19:00 // Pickup Time - 8:00 to 21:00 const PickupForm = ({ serviceType, errors, setErrors, selectedDate, setSelectedDate, selectedTime, setSelectedTime, disabled }: any) => { const completeOrder: any = useAppSelector((state) => state.createOrder); const dispatch = useDispatch(); const timezone = process.env.TZ || "UTC"; const [isCustomDate, setIsCustomDate] = useState(false); const [showDatePicker, setShowDatePicker] = useState(false); const [showDateError, setShowDateError] = useState(false); const [showTimeError, setShowTimeError] = useState(false); const [savedData, setSavedData] = useState<{ date: string | null; time: number; }>({ date: completeOrder?.makePayment?.date ?? null, time: completeOrder?.makePayment?.time ?? "", }); // Only dispatch when the selected date or time is different from the saved data useEffect(() => { if (selectedDate !== savedData.date || selectedTime !== savedData.time) { const updatedCompleteOrder: any = { ...completeOrder?.step3, makePayment: { date: selectedDate, time: selectedTime, }, }; // Dispatch to update Redux store dispatch(saveStepData({ step: "step3", data: updatedCompleteOrder })); // Update the saved data to reflect the new values setSavedData({ date: selectedDate, time: selectedTime, }); } }, [selectedDate, selectedTime, completeOrder, dispatch, savedData]); function getDayAfterTomorrow() { return moment().tz(timezone).add(2, "days").format("YYYY-MM-DD"); } const handleCheckboxChange = (event: React.ChangeEvent) => { const { id, checked } = event.target; // Uncheck all checkboxes before setting the new state if (checked) { if (id === "check13") { setSelectedDate(moment().format("YYYY-MM-DD")); setErrors({ ...errors, pickupDate: "" }) setIsCustomDate(false); setShowDatePicker(false); } else if (id === "check14") { setSelectedDate(moment().add(1, "days").format("YYYY-MM-DD")); setErrors({ ...errors, pickupDate: "" }) setIsCustomDate(false); setShowDatePicker(false); } else if (id === "check15") { setErrors({ ...errors, pickupDate: "" }) setIsCustomDate(true); setShowDatePicker(true); } // Uncheck all other checkboxes if (id !== "check13") document.getElementById("check13")?.setAttribute("checked", "false"); if (id !== "check14") document.getElementById("check14")?.setAttribute("checked", "false"); if (id !== "check15") document.getElementById("check15")?.setAttribute("checked", "false"); } else { // If unchecking any checkbox, reset the date and time setSelectedDate(null); setIsCustomDate(false); setShowDatePicker(false); } }; const handleDateChange = (date: Date | null) => { if (date) { setSelectedDate(moment(date).format("YYYY-MM-DD")); setErrors({ ...errors, pickupDate: "" }) setShowDatePicker(false); setShowDateError(false); } }; const handleTimeChange = (time: number) => { setSelectedTime(time); setErrors({ ...errors, pickupTime: "" }) setShowTimeError(false); }; const timeSlots: TimeSlot[] = getPickupTimeSlots(serviceType, selectedDate); return ( <>
Pickup Date *
{showDateError && (

Please select a pickup date

)}
{isServiceAvailable(serviceType?.name || "") ? (
{/* */}
) : ''}
{/* */}
{/* */}
{errors.pickupDate && (
{errors.pickupDate}
)}
{/* Selected Date Display */} {selectedDate && (

Selected Date:{" "} {moment(selectedDate).format("MMMM D, YYYY")}

)} {/* Date Input Popup */} {showDatePicker && (
Select Pickup Date
)}
{/* Time of Day Selection */}
Pickup Time *
{showTimeError && (

Please select a pickup time

)} {/*

{selectedTime === 1 ? `09:00 AM - 12:00 PM` : selectedTime === 2 ? `04:00 PM - 06:00 PM` : selectedTime === 3 ? `04:00 PM - 07:00 PM` : ``}

*/}
{timeSlots.map((slot) => { const timeLabel = slot?.mainLabel; const iconClass = slot?.icon; return (
handleTimeChange(slot.value)} checked={selectedTime === slot.value} />
); })} {errors.pickupTime && (
{errors.pickupTime}
)}
{selectedDate && (

Selected Time Slot:{" "} {selectedTime === 1 ? `09:00 AM - 12:00 PM` : selectedTime === 2 ? `04:00 PM - 06:00 PM` : selectedTime === 3 ? `04:00 PM - 07:00 PM` : ``}

)}
); }; export default PickupForm;