"use client"; import React, { useContext, useEffect, useState } from "react"; import moment from "jalali-moment"; import "moment/locale/fa"; // Set the locale to Farsi (Persian) import AppHeader from "@comp/AppHeader/page"; import { Swiper, SwiperSlide } from "swiper/react"; import PersianNumber from "plugins/PersianNumber"; import { PersianD, PersianDay, PersianM, holidays } from "datacalender"; import AppContext from "@ctx/AppContext"; import Input from "plugins/Input/page"; import { toast } from "react-toastify"; import Avatar from "boring-avatars"; import BottomManageShift from "plugins/BottomSheet/BottomManageShift"; import BottomSheetAddUserToPositionShiftPlan from "plugins/BottomSheet/BottomSheetAddUserToPositionShiftPlan"; import Buttonbriz from "plugins/Buttonbriz/page"; const Calendar = () => { const CTX = useContext(AppContext); const shiftsData = CTX.state.shiftsData; const searchUserChoose = CTX.state.searchUserChoose; const usersData = CTX.state.usersData; const routinesData = CTX.state.routinesData; const routineShiftPlan = CTX.state.routineShiftPlan; const positionsData = CTX.state.positionsData; const [daysUntilWeek, setDaysUntilWeek] = useState([]); const [selectDay, setSelectDay] = useState(null); const [selectShift, setselectShift] = useState(-1); const [selectRoutine, setSelectRoutine] = useState(-1); const [shiftsPlan, setShiftsPlan] = useState([]); const [manageShiftEmployeesData, setManageShiftEmployeesData] = useState([]); const [shiftPlanSteps, setShiftPlanSteps] = useState(0); const [positionSelectNameBottomSheet, setPositionSelectNameBottomSheet] = useState([]); const [positionSelectIdBottomSheet, setPositionSelectIdBottomSheet] = useState([]); const [userAndPositionIds, setUserAndPositionIds] = useState([]); const week = [ { key: "شنبه", value: 6 }, { key: "یکشنبه", value: 0 }, { key: "دوشنبه", value: 1 }, { key: "سه شنبه", value: 2 }, { key: "چهار شنبه", value: 3 }, { key: "پنج شنبه", value: 4 }, { key: "جمعه", value: 5 }, ]; const today = moment().format("jYYYY/jM/jD"); // Get the current Jalali date const daysInCurrentMonth = moment(today, "jYYYY/jM/jD") .endOf("jMonth") .jDate(); const daysEndOfMonth = () => { const daysOfWeek = []; const startOfNextWeek = moment(today, "jYYYY/jM/jD") .startOf("jWeek") .add(7, "days"); // Iterate from شنبه (Saturday) to جمعه (Friday) and add each day to the array for (let i = 0; i < 7; i++) { const currentDay = startOfNextWeek.clone().add(i, "days"); const isToday = currentDay.isSame(today, "day"); const dayOfWeekName = week[i].key; // Get the day name from the week array daysOfWeek.push({ checkDay: currentDay.format("jYYYY/jM/jD"), date: currentDay.format("jD / jM"), dayOfWeek: dayOfWeekName, today: isToday, value: week[i].value, }); } return setDaysUntilWeek(daysOfWeek); }; const handleManageShiftEmployeesOpen = (e) => { setManageShiftEmployeesData( usersData.map((item) => ({ key: item.firstName + " " + item.lastName + "( " + item.roleNames[0] + " )", value: item.userId, })) ); }; const body = { planDate: daysUntilWeek[selectDay]?.checkDay && moment.utc(daysUntilWeek[selectDay].checkDay, "jYYYY-jMM-jDDTHH").unix(), shiftId: shiftsPlan && shiftsPlan[selectShift]?.id, routineId: routinesData && routinesData[selectRoutine]?.id, userAndPositionIds, }; const handleRoutineShiftPlan = (index, id) => { setSelectRoutine(index); CTX.GetRoutineShiftPlan(id); setShiftPlanSteps(1); }; const handleCreateShiftPlan = (update) => { if (update == "UPDATE") { // CTX.UpdateShiftPlan(bodyUpdate); } else { CTX.CreateShifPlan(body); } }; useEffect(() => { CTX.GetRoutines(); daysEndOfMonth(); setSelectDay(-1); CTX.GetShifts(); CTX.GetPositions(); }, []); useEffect(() => { handleManageShiftEmployeesOpen(); }, [usersData]); useEffect(() => { setShiftsPlan( routineShiftPlan?.find((e) => e?.day == daysUntilWeek[selectDay]?.value) ?.shifts ); setselectShift(-1); }, [selectDay]); return (
{routinesData?.map((e, index) => (
{ if (shiftPlanSteps >= 1) { toast.error("برای تغییر روتین باید رفرش کنید", { position: "bottom-right", autoClose: 2000, hideProgressBar: false, closeOnClick: true, pauseOnHover: true, draggable: true, progress: undefined, }); } else { handleRoutineShiftPlan(index, e.id); } }} >

{e.name}

))}
{shiftPlanSteps >= 1 && ( console.log("slide change")} onSwiper={(swiper) => console.log(swiper)} > {daysUntilWeek?.map((e, index) => (
{ setSelectDay(index); setShiftPlanSteps(2); console.log(index); }} >

b.date == e.checkDay ) ? "text-red-500" : "" } `} />

b.date == e.checkDay) ? "bg-transparent text-red-500" : "bg-white text-gray-500" }`} >

{/* {PersianD.find((i) => i == e.dayOfWeek)} */} {e.dayOfWeek}

))}
)}
{shiftPlanSteps >= 2 && (
<> {!!routineShiftPlan?.find( (e) => e?.day == daysUntilWeek[selectDay]?.value ) && shiftsData.length > 0 ? (
{shiftsPlan?.map((e, index) => (
{ setselectShift(index); setShiftPlanSteps(3); }} >

{e?.title}

))}
) : (

شما شیفتی دراین روز ندارید

)}
)} {shiftPlanSteps >= 3 && (

ویرایش برای{" "} {shiftsPlan && shiftsPlan[selectShift]?.title} {" "} تاریخ{" "} {" "} میباشد

{positionsData.map((e) => (

{e.name}

{ setPositionSelectIdBottomSheet(e.id); setPositionSelectNameBottomSheet(e.name); CTX.setBottomSheetAddUserToPositionShiftPlanOpen(true); }} >

کاربران +

{/*
{ setSearchUserCurrntData(e.target.value); if (!!searchUserChoose.find((b) => b == e.target.value)) { toast.error("نقش تکراری است", { position: "bottom-right", closeOnClick: true, }); } else { CTX.setSearchUserChoose((current) => [ ...current, e.target.value, ]); } }} style="text-right" select={true} selectData={manageShiftEmployeesData} theme={1} defaultValue={"انتخاب کنید"} />
*/}
0 ? "" : "justify-center" }`} > {userAndPositionIds?.length > 0 ? ( userAndPositionIds?.map((item) => ( <> {e.id == item.key && (
deleteSearchUser(e)} > b?.userId == item?.value) ?.firstName } variant="beam" colors={["#9d9f88", "#83af96", "#b2de93"]} />

{ usersData.find((b) => b.userId == item?.value) ?.firstName }

)} )) ) : (
چیزی یافت نشد
)}
))}
handleCreateShiftPlan()} />
)}
); }; export default Calendar;