746 lines
22 KiB
React
746 lines
22 KiB
React
|
|
"use client";
|
|||
|
|
|
|||
|
|
import React, { useContext, useEffect, useRef, useState } from "react";
|
|||
|
|
import { BottomSheet } from "react-spring-bottom-sheet";
|
|||
|
|
import Input from "plugins/Input/page";
|
|||
|
|
import AppContext from "@ctx/AppContext";
|
|||
|
|
import SimpleReactValidator from "simple-react-validator";
|
|||
|
|
import { toast } from "react-toastify";
|
|||
|
|
import Buttonbriz from "plugins/Buttonbriz/page";
|
|||
|
|
import { useRouter } from "next/navigation";
|
|||
|
|
import DatePickerIran from "plugins/DatePickerIran/page";
|
|||
|
|
import moment from "jalali-moment";
|
|||
|
|
import Chapar from "plugins/Chapar";
|
|||
|
|
|
|||
|
|
const BottomSheetCreateTask = (props) => {
|
|||
|
|
const CTX = useContext(AppContext);
|
|||
|
|
|
|||
|
|
const router = useRouter();
|
|||
|
|
|
|||
|
|
const [routinesSelectData, setRoutinesSelectData] = useState([]);
|
|||
|
|
const [routineForTaskCurrent, setRoutineForTaskCurrent] = useState([]);
|
|||
|
|
|
|||
|
|
const [positionsSelectData, setPositionsSelectData] = useState([]);
|
|||
|
|
const [positionsForTaskCurrent, setPositionsForTaskCurrent] = useState([]);
|
|||
|
|
|
|||
|
|
const [shiftsSelectData, setShiftsSelectData] = useState([]);
|
|||
|
|
const [shiftsForTaskCurrent, setShiftsForTaskCurrent] = useState([]);
|
|||
|
|
|
|||
|
|
const [title, setTitle] = useState("");
|
|||
|
|
const [description, setDescription] = useState("");
|
|||
|
|
const [scheduleType, setScheduleType] = useState(1);
|
|||
|
|
|
|||
|
|
const [birthDateTimeStamp, setBirthDateTimeStamp] = useState(0);
|
|||
|
|
|
|||
|
|
const [shiftsDaysSelectData, setShiftsDaysSelectData] = useState(null);
|
|||
|
|
const [shiftsDaysCurrent, setShiftsDaysCurrent] = useState(null);
|
|||
|
|
|
|||
|
|
const [, forceUpdate] = useState();
|
|||
|
|
|
|||
|
|
const routinesData = CTX.state.routinesData;
|
|||
|
|
const positionsData = CTX.state.positionsData;
|
|||
|
|
const shiftsData = CTX.state.shiftsData;
|
|||
|
|
const routineForTaskChoose = CTX.state.routineForTaskChoose;
|
|||
|
|
const positionsForTaskChoose = CTX.state.positionsForTaskChoose;
|
|||
|
|
const shiftsForTaskChoose = CTX.state.shiftsForTaskChoose;
|
|||
|
|
const shiftsDaysChoose = CTX.state.shiftsDaysChoose;
|
|||
|
|
const goToEditTask = CTX.state.goToEditTask;
|
|||
|
|
const taskData = CTX.state.taskData;
|
|||
|
|
const idEditTask = CTX.state.idEditTask;
|
|||
|
|
|
|||
|
|
const schedule = [
|
|||
|
|
{ key: "هفتگی", value: 1 },
|
|||
|
|
{ key: "روزانه", value: 0 },
|
|||
|
|
{ key: "مخصوص یک روز ", value: 2 },
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
const week = [
|
|||
|
|
{ key: "شنبه", value: 6 },
|
|||
|
|
{ key: "یکشنبه", value: 0 },
|
|||
|
|
{ key: "دوشنبه", value: 1 },
|
|||
|
|
{ key: "سه شنبه", value: 2 },
|
|||
|
|
{ key: "چهار شنبه", value: 3 },
|
|||
|
|
{ key: "پنج شنبه", value: 4 },
|
|||
|
|
{ key: "جمعه", value: 5 },
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
const validator = useRef(
|
|||
|
|
new SimpleReactValidator({
|
|||
|
|
messages: {
|
|||
|
|
required: "پر کردن این فیلد الزامی میباشد",
|
|||
|
|
},
|
|||
|
|
element: (message) => (
|
|||
|
|
<>
|
|||
|
|
<div className="text-right px-1 ">
|
|||
|
|
<small className="text-red-600 t-ig-small ">{message}</small>
|
|||
|
|
</div>
|
|||
|
|
</>
|
|||
|
|
),
|
|||
|
|
})
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
const body = {
|
|||
|
|
title,
|
|||
|
|
description,
|
|||
|
|
routines: routineForTaskChoose,
|
|||
|
|
positions: positionsForTaskChoose,
|
|||
|
|
shifts: shiftsForTaskChoose,
|
|||
|
|
scheduleType,
|
|||
|
|
setFor:
|
|||
|
|
birthDateTimeStamp &&
|
|||
|
|
moment
|
|||
|
|
.utc(
|
|||
|
|
[
|
|||
|
|
birthDateTimeStamp.year,
|
|||
|
|
birthDateTimeStamp.month,
|
|||
|
|
birthDateTimeStamp.day,
|
|||
|
|
],
|
|||
|
|
"jYYYY-jMM-jDDTHH"
|
|||
|
|
)
|
|||
|
|
.unix(),
|
|||
|
|
days: shiftsDaysChoose,
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
const bodyUpdate = {
|
|||
|
|
title,
|
|||
|
|
description,
|
|||
|
|
routines: routineForTaskChoose,
|
|||
|
|
positions: positionsForTaskChoose,
|
|||
|
|
shifts: shiftsForTaskChoose,
|
|||
|
|
scheduleType,
|
|||
|
|
setFor:
|
|||
|
|
birthDateTimeStamp &&
|
|||
|
|
moment
|
|||
|
|
.utc(
|
|||
|
|
[
|
|||
|
|
birthDateTimeStamp.year,
|
|||
|
|
birthDateTimeStamp.month,
|
|||
|
|
birthDateTimeStamp.day,
|
|||
|
|
],
|
|||
|
|
"jYYYY-jMM-jDDTHH"
|
|||
|
|
)
|
|||
|
|
.unix(),
|
|||
|
|
days: shiftsDaysChoose,
|
|||
|
|
id: idEditTask,
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
const clear = () => {
|
|||
|
|
setPositionsForTaskCurrent([]);
|
|||
|
|
// setPositionsSelectData([]);
|
|||
|
|
setRoutineForTaskCurrent([]);
|
|||
|
|
// setRoutinesSelectData([]);
|
|||
|
|
setBirthDateTimeStamp(0);
|
|||
|
|
setScheduleType([]);
|
|||
|
|
setDescription("");
|
|||
|
|
setTitle("");
|
|||
|
|
setShiftsForTaskCurrent([]);
|
|||
|
|
// setShiftsSelectData([]);
|
|||
|
|
setShiftsDaysCurrent([]);
|
|||
|
|
// setShiftsDaysSelectData([]);
|
|||
|
|
CTX.setRoutineForTaskChoose([]);
|
|||
|
|
CTX.setPositionsForTaskChoose([]);
|
|||
|
|
CTX.setShiftsForTaskChoose([]);
|
|||
|
|
CTX.setShiftsDaysChoose([]);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
const CreateTask = async (body) => {
|
|||
|
|
CTX.setLoading(true);
|
|||
|
|
try {
|
|||
|
|
const data = await Chapar.post(
|
|||
|
|
`${process.env.NEXT_PUBLIC_API_URL}/task`,
|
|||
|
|
JSON.stringify(body),
|
|||
|
|
{
|
|||
|
|
headers: {
|
|||
|
|
Authorization: "Bearer " + localStorage.getItem("token"),
|
|||
|
|
},
|
|||
|
|
}
|
|||
|
|
);
|
|||
|
|
toast.success(`فعالیت ساخته شد`, {
|
|||
|
|
position: "bottom-right",
|
|||
|
|
closeOnClick: true,
|
|||
|
|
});
|
|||
|
|
clear();
|
|||
|
|
CTX.setBottomSheetCreateTaskOpen(false);
|
|||
|
|
CTX.setLoading(false);
|
|||
|
|
} catch ({ error, status }) {
|
|||
|
|
toast.error(`${error?.response?.data?.message}`, {
|
|||
|
|
position: "bottom-right",
|
|||
|
|
closeOnClick: true,
|
|||
|
|
});
|
|||
|
|
CTX.setLoading(false);
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
const UpdateTask = async (body) => {
|
|||
|
|
CTX.setLoading(true);
|
|||
|
|
try {
|
|||
|
|
const data = await Chapar.put(
|
|||
|
|
`${process.env.NEXT_PUBLIC_API_URL}/task`,
|
|||
|
|
body,
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
headers: {
|
|||
|
|
Authorization: "Bearer " + localStorage.getItem("token"),
|
|||
|
|
},
|
|||
|
|
}
|
|||
|
|
);
|
|||
|
|
toast.success(`فعالیت ویرایش شد`, {
|
|||
|
|
position: "bottom-right",
|
|||
|
|
closeOnClick: true,
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// router->
|
|||
|
|
|
|||
|
|
CTX.setLoading(false);
|
|||
|
|
|
|||
|
|
CTX.setStopGetTasks(false);
|
|||
|
|
CTX.setPageGetTasks(0);
|
|||
|
|
CTX.setBottomSheetCreateTaskOpen(false);
|
|||
|
|
} catch ({ error, status }) {
|
|||
|
|
toast.error(`${error?.response?.data?.message}`, {
|
|||
|
|
position: "bottom-right",
|
|||
|
|
closeOnClick: true,
|
|||
|
|
});
|
|||
|
|
setLoading(false);
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
const handleCreateTask = (update) => {
|
|||
|
|
if (scheduleType == 0) {
|
|||
|
|
validator.current.message("shiftsDaysChoose", true, "required");
|
|||
|
|
validator.current.message("birthDateTimeStamp", true, "required");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (scheduleType == 1) {
|
|||
|
|
validator.current.message("birthDateTimeStamp", true, "required");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (scheduleType == 2) {
|
|||
|
|
validator.current.message("shiftsDaysChoose", true, "required");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (validator.current.allValid()) {
|
|||
|
|
if (update == "UPDATE") {
|
|||
|
|
UpdateTask(bodyUpdate);
|
|||
|
|
} else {
|
|||
|
|
CreateTask(body);
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
toast.error("پرکردن همه ی فیلد ها واجب است", {
|
|||
|
|
position: "bottom-right",
|
|||
|
|
autoClose: 2000,
|
|||
|
|
hideProgressBar: false,
|
|||
|
|
closeOnClick: true,
|
|||
|
|
pauseOnHover: true,
|
|||
|
|
draggable: true,
|
|||
|
|
progress: undefined,
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
validator.current.showMessages();
|
|||
|
|
forceUpdate(1);
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
const deleteRoutineForTask = (value) => {
|
|||
|
|
CTX.setRoutineForTaskChoose(
|
|||
|
|
routineForTaskChoose.filter((el) => el !== value)
|
|||
|
|
);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
const deletePositionForTask = (value) => {
|
|||
|
|
CTX.setPositionsForTaskChoose(
|
|||
|
|
positionsForTaskChoose.filter((el) => el !== value)
|
|||
|
|
);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
const deleteShiftForTask = (value) => {
|
|||
|
|
CTX.setShiftsForTaskChoose(
|
|||
|
|
shiftsForTaskChoose.filter((el) => el !== value)
|
|||
|
|
);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
const deleteShiftsDaysForTask = (value) => {
|
|||
|
|
CTX.setShiftsDaysChoose(shiftsDaysChoose.filter((el) => el !== value));
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
const handleBottomSheetCreateTaskOpen = (e) => {
|
|||
|
|
if (e.type == "OPEN") {
|
|||
|
|
CTX.GetRoutines();
|
|||
|
|
CTX.GetPositions();
|
|||
|
|
} else if (e.type == "CLOSE") {
|
|||
|
|
clear();
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
useEffect(() => {
|
|||
|
|
setRoutinesSelectData(
|
|||
|
|
routinesData?.map((item) => ({
|
|||
|
|
key: item?.name,
|
|||
|
|
value: item?.id,
|
|||
|
|
}))
|
|||
|
|
);
|
|||
|
|
}, [routinesData]);
|
|||
|
|
|
|||
|
|
useEffect(() => {
|
|||
|
|
setPositionsSelectData(
|
|||
|
|
positionsData?.map((item) => ({
|
|||
|
|
key: item?.name,
|
|||
|
|
value: item?.id,
|
|||
|
|
}))
|
|||
|
|
);
|
|||
|
|
}, [positionsData]);
|
|||
|
|
|
|||
|
|
useEffect(() => {
|
|||
|
|
setShiftsSelectData(
|
|||
|
|
shiftsData?.map((item) => ({
|
|||
|
|
key: item?.title,
|
|||
|
|
value: item?.id,
|
|||
|
|
}))
|
|||
|
|
);
|
|||
|
|
}, [shiftsData]);
|
|||
|
|
|
|||
|
|
useEffect(() => {
|
|||
|
|
setShiftsDaysSelectData(
|
|||
|
|
shiftsForTaskChoose?.length > 0 &&
|
|||
|
|
shiftsData
|
|||
|
|
?.find((e) => e?.id == shiftsForTaskChoose[0])
|
|||
|
|
?.days?.map((item) => ({
|
|||
|
|
key: week?.find((e) => e.value == item)?.key,
|
|||
|
|
value: item,
|
|||
|
|
}))
|
|||
|
|
);
|
|||
|
|
}, [shiftsForTaskChoose]);
|
|||
|
|
|
|||
|
|
useEffect(() => {
|
|||
|
|
switch (scheduleType) {
|
|||
|
|
case 0:
|
|||
|
|
setBirthDateTimeStamp(0);
|
|||
|
|
CTX.setShiftsDaysChoose([]);
|
|||
|
|
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
setBirthDateTimeStamp(0);
|
|||
|
|
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
CTX.setShiftsDaysChoose([]);
|
|||
|
|
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}, [scheduleType]);
|
|||
|
|
|
|||
|
|
useEffect(() => {
|
|||
|
|
if (goToEditTask) {
|
|||
|
|
// const date = moment
|
|||
|
|
// .unix(taskData.birthDateTimeStamp)
|
|||
|
|
// .locale("fa")
|
|||
|
|
// .format("YYYY/MM/DD")
|
|||
|
|
// .split("/");
|
|||
|
|
|
|||
|
|
// setBirthDateTimeStamp({
|
|||
|
|
// day: parseInt(date[2]),
|
|||
|
|
// month: parseInt(date[1]),
|
|||
|
|
// year: parseInt(date[0]),
|
|||
|
|
// });
|
|||
|
|
setScheduleType(taskData.scheduleType);
|
|||
|
|
setDescription(taskData.description);
|
|||
|
|
setTitle(taskData.title);
|
|||
|
|
CTX.setRoutineForTaskChoose(
|
|||
|
|
taskData.routines?.map((item) => item.routineId)
|
|||
|
|
);
|
|||
|
|
CTX.setPositionsForTaskChoose(
|
|||
|
|
taskData.positions?.map((item) => item.positionId)
|
|||
|
|
);
|
|||
|
|
CTX.setShiftsDaysChoose(taskData.days?.map((item) => item.dayOfWeek));
|
|||
|
|
CTX.setShiftsForTaskChoose(taskData.shifts?.map((item) => item.shiftId));
|
|||
|
|
}
|
|||
|
|
}, [taskData]);
|
|||
|
|
|
|||
|
|
return (
|
|||
|
|
<BottomSheet
|
|||
|
|
onSpringStart={(e) => handleBottomSheetCreateTaskOpen(e)}
|
|||
|
|
open={CTX.state.BottomSheetCreateTaskOpen}
|
|||
|
|
onDismiss={() => CTX.setBottomSheetCreateTaskOpen(false)}
|
|||
|
|
blocking={true}
|
|||
|
|
>
|
|||
|
|
<div className="text-center py-2 bg-secondary-950 ">
|
|||
|
|
<p className="mb-0 text-primary-300 relative top-[-5px]">
|
|||
|
|
افزودن تسک جدید{" "}
|
|||
|
|
</p>
|
|||
|
|
</div>
|
|||
|
|
<div className="bg-white overflow-hidden p-5 rtl">
|
|||
|
|
<div>
|
|||
|
|
<div className="">
|
|||
|
|
<Input
|
|||
|
|
lable="عنوان فعالیت"
|
|||
|
|
theme={1}
|
|||
|
|
mt={6}
|
|||
|
|
id="title-id"
|
|||
|
|
name="title"
|
|||
|
|
type={"text"}
|
|||
|
|
value={title}
|
|||
|
|
inputEvent={(e) => {
|
|||
|
|
setTitle(e.target.value);
|
|||
|
|
validator.current.showMessageFor("title");
|
|||
|
|
}}
|
|||
|
|
style="text-right"
|
|||
|
|
validator={true}
|
|||
|
|
validatorData={validator.current.message(
|
|||
|
|
"title",
|
|||
|
|
title,
|
|||
|
|
"required"
|
|||
|
|
)}
|
|||
|
|
/>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<div className="">
|
|||
|
|
<Input
|
|||
|
|
lable=" توضیحات"
|
|||
|
|
theme={1}
|
|||
|
|
mt={6}
|
|||
|
|
id="description-id"
|
|||
|
|
name="description"
|
|||
|
|
type={"text"}
|
|||
|
|
value={description}
|
|||
|
|
inputEvent={(e) => {
|
|||
|
|
setDescription(e.target.value);
|
|||
|
|
}}
|
|||
|
|
textarea={true}
|
|||
|
|
style="text-right"
|
|||
|
|
/>
|
|||
|
|
</div>
|
|||
|
|
{/* ===========routine=============== */}
|
|||
|
|
|
|||
|
|
<div className="">
|
|||
|
|
<Input
|
|||
|
|
lable="روتین فعالیت"
|
|||
|
|
theme={1}
|
|||
|
|
mt={6}
|
|||
|
|
id="routines-id"
|
|||
|
|
name="routines"
|
|||
|
|
type={"text"}
|
|||
|
|
value={setRoutineForTaskCurrent}
|
|||
|
|
inputEvent={(e) => {
|
|||
|
|
setRoutineForTaskCurrent(e.target.value);
|
|||
|
|
validator.current.showMessageFor("routines");
|
|||
|
|
|
|||
|
|
if (!!routineForTaskChoose.find((b) => b == e.target.value)) {
|
|||
|
|
toast.error("روز تکراری است", {
|
|||
|
|
position: "bottom-right",
|
|||
|
|
closeOnClick: true,
|
|||
|
|
});
|
|||
|
|
} else {
|
|||
|
|
CTX.setRoutineForTaskChoose(() => [e.target.value]);
|
|||
|
|
}
|
|||
|
|
}}
|
|||
|
|
style="text-right"
|
|||
|
|
validator={true}
|
|||
|
|
validatorData={validator.current.message(
|
|||
|
|
"routines",
|
|||
|
|
routineForTaskChoose,
|
|||
|
|
["required", { min: 1 }]
|
|||
|
|
)}
|
|||
|
|
select={true}
|
|||
|
|
selectData={routinesSelectData}
|
|||
|
|
defaultValue={"انتخاب کنید"}
|
|||
|
|
/>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<div className="flex flex-wrap rtl">
|
|||
|
|
{routineForTaskChoose &&
|
|||
|
|
routineForTaskChoose.map((e, index) => (
|
|||
|
|
<div
|
|||
|
|
className="flex bg-gray-300 p-1 rounded-full m-1 justify-start mt-3"
|
|||
|
|
key={index}
|
|||
|
|
>
|
|||
|
|
{/* <div
|
|||
|
|
className="w-[30px] h-[30px] rounded-full bg-gray-400 "
|
|||
|
|
onClick={() => deleteRoutineForTask(e)}
|
|||
|
|
></div> */}
|
|||
|
|
|
|||
|
|
<div>
|
|||
|
|
<p className="mb-0 px-3 text-sm">
|
|||
|
|
{routinesData?.find((b) => b.id == e)?.name}
|
|||
|
|
</p>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
))}
|
|||
|
|
</div>
|
|||
|
|
{/* ===========position=============== */}
|
|||
|
|
|
|||
|
|
<div className="">
|
|||
|
|
<Input
|
|||
|
|
lable="پوزیشن فعالیت"
|
|||
|
|
theme={1}
|
|||
|
|
mt={6}
|
|||
|
|
id="positions-id"
|
|||
|
|
name="positions"
|
|||
|
|
value={setPositionsForTaskCurrent}
|
|||
|
|
type={"text"}
|
|||
|
|
inputEvent={(e) => {
|
|||
|
|
setPositionsForTaskCurrent(e.target.value);
|
|||
|
|
validator.current.showMessageFor("positions");
|
|||
|
|
|
|||
|
|
if (positionsForTaskChoose.length >= 1) {
|
|||
|
|
toast.error("شما فقط یک پوزیشن را میتوانید انتخاب کنید", {
|
|||
|
|
position: "bottom-right",
|
|||
|
|
closeOnClick: true,
|
|||
|
|
});
|
|||
|
|
} else {
|
|||
|
|
if (
|
|||
|
|
!!positionsForTaskChoose.find((b) => b == e.target.value)
|
|||
|
|
) {
|
|||
|
|
toast.error("پوزیشن تکراری است", {
|
|||
|
|
position: "bottom-right",
|
|||
|
|
closeOnClick: true,
|
|||
|
|
});
|
|||
|
|
} else {
|
|||
|
|
CTX.setPositionsForTaskChoose((current) => [
|
|||
|
|
...current,
|
|||
|
|
e.target.value,
|
|||
|
|
]);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}}
|
|||
|
|
style="text-right"
|
|||
|
|
validatorData={validator.current.message(
|
|||
|
|
"positions",
|
|||
|
|
positionsForTaskChoose,
|
|||
|
|
["required", { min: 1 }]
|
|||
|
|
)}
|
|||
|
|
select={true}
|
|||
|
|
selectData={positionsSelectData}
|
|||
|
|
defaultValue={"انتخاب کنید"}
|
|||
|
|
/>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<div className="flex flex-wrap rtl">
|
|||
|
|
{positionsForTaskChoose &&
|
|||
|
|
positionsForTaskChoose.map((e, index) => (
|
|||
|
|
<div
|
|||
|
|
className="flex bg-gray-300 p-1 rounded-full m-1 justify-start mt-3"
|
|||
|
|
key={index}
|
|||
|
|
>
|
|||
|
|
<div
|
|||
|
|
className="w-[20px] h-[20px] rounded-full bg-gray-400 "
|
|||
|
|
onClick={() => deletePositionForTask(e)}
|
|||
|
|
></div>
|
|||
|
|
|
|||
|
|
<div>
|
|||
|
|
<p className="mb-0 px-3 text-sm ">
|
|||
|
|
{positionsData?.find((b) => b.id == e)?.name}
|
|||
|
|
</p>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
))}
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
{/* ===========shifts=============== */}
|
|||
|
|
<div className="">
|
|||
|
|
<Input
|
|||
|
|
lable="شیفت فعالیت"
|
|||
|
|
theme={1}
|
|||
|
|
mt={6}
|
|||
|
|
id="shifts-id"
|
|||
|
|
name="shifts"
|
|||
|
|
type={"text"}
|
|||
|
|
value={setShiftsForTaskCurrent}
|
|||
|
|
inputEvent={(e) => {
|
|||
|
|
setShiftsForTaskCurrent(e.target.value);
|
|||
|
|
validator.current.showMessageFor("shifts");
|
|||
|
|
|
|||
|
|
if (!!shiftsForTaskChoose.find((b) => b == e.target.value)) {
|
|||
|
|
toast.error("روز تکراری است", {
|
|||
|
|
position: "bottom-right",
|
|||
|
|
closeOnClick: true,
|
|||
|
|
});
|
|||
|
|
} else {
|
|||
|
|
CTX.setShiftsForTaskChoose(() => [e.target.value]);
|
|||
|
|
}
|
|||
|
|
}}
|
|||
|
|
style="text-right"
|
|||
|
|
validatorData={validator.current.message(
|
|||
|
|
"shifts",
|
|||
|
|
shiftsForTaskChoose,
|
|||
|
|
["required", { min: 1 }]
|
|||
|
|
)}
|
|||
|
|
select={true}
|
|||
|
|
selectData={shiftsSelectData}
|
|||
|
|
defaultValue={"انتخاب کنید"}
|
|||
|
|
/>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<div className="flex flex-wrap rtl">
|
|||
|
|
{shiftsForTaskChoose &&
|
|||
|
|
shiftsForTaskChoose.map((e, index) => (
|
|||
|
|
<div
|
|||
|
|
className="flex bg-gray-300 p-1 rounded-full m-1 justify-start mt-3"
|
|||
|
|
key={index}
|
|||
|
|
>
|
|||
|
|
{/* <div
|
|||
|
|
className="w-[20px] h-[20px] rounded-full bg-gray-400 "
|
|||
|
|
onClick={() => deleteShiftForTask(e)}
|
|||
|
|
></div> */}
|
|||
|
|
|
|||
|
|
<div>
|
|||
|
|
<p className="mb-0 px-3 text-sm ">
|
|||
|
|
{shiftsData?.find((b) => b?.id == e)?.title}
|
|||
|
|
</p>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
))}
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
{/* ===========scheduleType=============== */}
|
|||
|
|
|
|||
|
|
<div className="">
|
|||
|
|
<Input
|
|||
|
|
lable="تکرار پذیری فعالیت"
|
|||
|
|
id="scheduleType-id"
|
|||
|
|
theme={1}
|
|||
|
|
mt={6}
|
|||
|
|
name="scheduleType"
|
|||
|
|
type={"text"}
|
|||
|
|
value={scheduleType}
|
|||
|
|
inputEvent={(e) => {
|
|||
|
|
setScheduleType(parseInt(e.target.value));
|
|||
|
|
validator.current.showMessageFor("scheduleType");
|
|||
|
|
}}
|
|||
|
|
style="text-right"
|
|||
|
|
validator={true}
|
|||
|
|
validatorData={validator.current.message(
|
|||
|
|
"scheduleType",
|
|||
|
|
scheduleType,
|
|||
|
|
["required"]
|
|||
|
|
)}
|
|||
|
|
select={true}
|
|||
|
|
selectData={[
|
|||
|
|
{ key: "هفتگی", value: 1 },
|
|||
|
|
{ key: "روزانه", value: 0 },
|
|||
|
|
{ key: "مخصوص یک روز ", value: 2 },
|
|||
|
|
]}
|
|||
|
|
defaultValue={"انتخاب کنید"}
|
|||
|
|
/>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
{/* <div className="flex flex-wrap mt-3 rtl">
|
|||
|
|
<div className="flex bg-gray-300 p-1 rounded-full m-1 justify-start">
|
|||
|
|
<div>
|
|||
|
|
<p className="mb-0 px-3 text-sm mt-1">
|
|||
|
|
{schedule?.find((b) => b.value == scheduleType)?.key}
|
|||
|
|
</p>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</div> */}
|
|||
|
|
|
|||
|
|
{/* ===========scheduleType setFor=============== */}
|
|||
|
|
|
|||
|
|
{scheduleType == 2 && (
|
|||
|
|
<DatePickerIran
|
|||
|
|
title="تاریخ مورد نظر فعالیت"
|
|||
|
|
name="birthDateTimeStamp"
|
|||
|
|
datePickerEvent={(e) => {
|
|||
|
|
setBirthDateTimeStamp(e);
|
|||
|
|
validator.current.showMessageFor("birthDateTimeStamp");
|
|||
|
|
}}
|
|||
|
|
date={birthDateTimeStamp}
|
|||
|
|
zindex="z-[101]"
|
|||
|
|
validator={true}
|
|||
|
|
validatorData={validator.current.message(
|
|||
|
|
"birthDateTimeStamp",
|
|||
|
|
birthDateTimeStamp,
|
|||
|
|
["required"]
|
|||
|
|
)}
|
|||
|
|
/>
|
|||
|
|
)}
|
|||
|
|
</div>
|
|||
|
|
{/* ===========shiftsDaysTask=============== */}
|
|||
|
|
{scheduleType == 1 && (
|
|||
|
|
<>
|
|||
|
|
<div className="">
|
|||
|
|
<Input
|
|||
|
|
lable="انتخاب روزهای این فعالیت در هفته"
|
|||
|
|
theme={1}
|
|||
|
|
mt={6}
|
|||
|
|
id="shiftsDaysChoose-id"
|
|||
|
|
name="shiftsDaysChoose"
|
|||
|
|
type={"text"}
|
|||
|
|
value={setShiftsDaysCurrent}
|
|||
|
|
inputEvent={(e) => {
|
|||
|
|
setShiftsDaysCurrent(e.target.value);
|
|||
|
|
validator.current.showMessageFor("shiftsDaysChoose");
|
|||
|
|
|
|||
|
|
if (!!shiftsDaysChoose.find((b) => b == e.target.value)) {
|
|||
|
|
toast.error("روز تکراری است", {
|
|||
|
|
position: "bottom-right",
|
|||
|
|
closeOnClick: true,
|
|||
|
|
});
|
|||
|
|
} else {
|
|||
|
|
CTX.setShiftsDaysChoose((current) => [
|
|||
|
|
...current,
|
|||
|
|
parseInt(e.target.value),
|
|||
|
|
]);
|
|||
|
|
}
|
|||
|
|
}}
|
|||
|
|
validator={true}
|
|||
|
|
validatorData={validator.current.message(
|
|||
|
|
"shiftsDaysChoose",
|
|||
|
|
shiftsDaysChoose,
|
|||
|
|
["required", { min: 1 }]
|
|||
|
|
)}
|
|||
|
|
style="text-right"
|
|||
|
|
select={true}
|
|||
|
|
selectData={shiftsDaysSelectData}
|
|||
|
|
defaultValue={"انتخاب کنید"}
|
|||
|
|
/>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<div className="flex flex-wrap mt-3 rtl">
|
|||
|
|
{shiftsDaysChoose &&
|
|||
|
|
shiftsDaysChoose.map((e, index) => (
|
|||
|
|
<div
|
|||
|
|
className="flex bg-gray-300 p-1 rounded-full m-1 justify-start"
|
|||
|
|
key={index}
|
|||
|
|
>
|
|||
|
|
<div
|
|||
|
|
className="w-[20px] h-[20px] rounded-full bg-gray-400 "
|
|||
|
|
onClick={() => deleteShiftsDaysForTask(e)}
|
|||
|
|
></div>
|
|||
|
|
|
|||
|
|
<div>
|
|||
|
|
<p className="mb-0 px-3 text-sm ">
|
|||
|
|
{week?.find((b) => b.value == e).key}
|
|||
|
|
</p>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
))}
|
|||
|
|
</div>
|
|||
|
|
</>
|
|||
|
|
)}
|
|||
|
|
{goToEditTask ? (
|
|||
|
|
<Buttonbriz
|
|||
|
|
title="ویرایش فعالبت"
|
|||
|
|
color="INFO"
|
|||
|
|
icon="CHECK"
|
|||
|
|
buttonEvent={() => handleCreateTask("UPDATE")}
|
|||
|
|
subButton={true}
|
|||
|
|
subButtonTitle="حذف فعالیت"
|
|||
|
|
subButtonEvent={() => CTX.DeleteTask(idEditTask)}
|
|||
|
|
/>
|
|||
|
|
) : (
|
|||
|
|
<Buttonbriz
|
|||
|
|
title="ثبت فعالیت"
|
|||
|
|
color="PRIMARY"
|
|||
|
|
icon="CHECK"
|
|||
|
|
buttonEvent={() => handleCreateTask()}
|
|||
|
|
/>
|
|||
|
|
)}{" "}
|
|||
|
|
</div>
|
|||
|
|
</BottomSheet>
|
|||
|
|
);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
export default BottomSheetCreateTask;
|