fix bugs , add swip activity and task , pagination activity and task , etc..

main
حسین معصومی پور 2023-12-27 12:31:56 +03:30
parent 6bd5804028
commit 3e22d4cc2e
24 changed files with 315 additions and 254 deletions

1
.env
View File

@ -3,6 +3,7 @@ NODE_ENV="development"
NEXT_PUBLIC_SERVER_URL=http://192.168.88.12:32769
NEXT_PUBLIC_PUBLIC_URL=http://192.168.88.12:32769
NEXT_PUBLIC_API_URL=http://192.168.88.12:32769/api
# SECURE_LOCAL_STORAGE_HASH_KEY=f1da2b2c7a4c446934267fea631102ec389b5b99
# NEXT_PUBLIC_API_URL_IMAGE=https://192.168.88.12:49154/Files/ReportImages
# NEXT_PUBLIC_API_URL_BackUp=https://192.168.88.12:49154/Files/BackUps

View File

@ -33,7 +33,7 @@ const UsersEmployees = () => {
<div className="bg-white rounded-l-full p-2 flex justify-between w-full h-fit pr-5 mt-2 relative left-[12px]">
<div>
<h4 className="text-sm font-bold text-primary-300">
{e.firstName}{" "}
{e.firstName} {e.lastName}
</h4>
<p className="mb-0 text-[11px]">
{e.roleNames.length > 0

View File

@ -12,9 +12,6 @@ const TasksCard = ({ tasksData, permissions }) => {
const CTX = useContext(AppContext);
const router = useRouter();
const [showAllTasks, setShowAllTasks] = useState(false);
const [showJust5TasksData, setShowJust5TasksData] = useState(null);
const goToEditTask = (id) => {
if (!!HasPermission("ManageTasks", permissions)) {
CTX.setGoToEditTask(true);
@ -24,149 +21,38 @@ const TasksCard = ({ tasksData, permissions }) => {
}
};
useEffect(() => {
if (tasksData.length > 5) {
setShowJust5TasksData(tasksData.slice(0, 5));
} else {
setShowJust5TasksData(tasksData);
}
}, [tasksData]);
return (
<>
{showAllTasks ? (
<div className="grid grid-cols-2 gap-3">
{tasksData.map((e) => (
<div
className=" bg-white p-1 rounded-3xl overflow-hidden relative mt-5"
onClick={() => goToEditTask(e.id)}
>
<div className="flex mx-2">
<div className="bg-secondaryLighter-100 w-fit relative px-2 text-[12px] my-2 mx-1 rounded-3xl text-secondary-200">
{e?.scheduleType == 0
? "روزانه"
: e?.scheduleType == 1
? "هفتگی"
: e?.scheduleType == 2
? "مخصوص"
: ""}
</div>
</div>
<div className=" relative m-2 text-white">
<div className="text-right">
<h4 className="mb-0 text-primary-300 font-semibold text-sm">
{e?.title}{" "}
</h4>
</div>
</div>
<div className="flex">
{e?.scheduleType == 2 && (
<div className=" w-fit relative text-[12px] my-2 pr-1 rounded-3xl text-primary-200">
<PersianNumber
number={moment(e?.setFor).format("jYYYY/jM/jD")}
/>{" "}
</div>
)}
<div className="bg-primary-100 w-fit relative px-2 text-[12px] my-2 mx-1 rounded-3xl text-primary-300">
{e?.shifts[0]}
</div>
</div>
{tasksData?.map((e) => (
<div
className=" bg-white p-1 rounded-3xl overflow-hidden relative mt-5"
onClick={() => {
goToEditTask(e.id);
}}
>
<div className="flex mx-2">
<div className="bg-secondaryLighter-100 w-fit relative px-2 text-[12px] my-2 mx-1 rounded-3xl text-secondary-200">
{e?.scheduleType == 0
? "روزانه"
: e?.scheduleType == 1
? "هفتگی"
: e?.scheduleType == 2
? "مخصوص"
: ""}
</div>
))}
<div className="bg-secondaryLighter-100 w-fit relative px-2 text-[12px] my-2 mx-1 rounded-3xl text-secondary-200">
{e?.shifts[0]}
</div>
</div>
<div className=" relative m-2 text-white">
<div className="text-right h-[45px] overflow-hidden">
<h4 className="mb-0 text-primary-300 font-semibold text-sm ">
{e?.title}{" "}
</h4>
</div>
</div>
</div>
) : (
<Swiper spaceBetween={20} slidesPerView={1.6}>
{showJust5TasksData?.map((e) => (
<SwiperSlide>
<div
className=" bg-white p-1 rounded-3xl overflow-hidden relative mt-5"
onClick={() => {
goToEditTask(e.id);
}}
>
{HasPermission("ManageTasks") && <div> salam</div>}
<div className="flex mx-2">
<div className="bg-secondaryLighter-100 w-fit relative px-2 text-[12px] my-2 mx-1 rounded-3xl text-secondary-200">
{e?.scheduleType == 0
? "روزانه"
: e?.scheduleType == 1
? "هفتگی"
: e?.scheduleType == 2
? "مخصوص"
: ""}
</div>
<div className="bg-secondaryLighter-100 w-fit relative px-2 text-[12px] my-2 mx-1 rounded-3xl text-secondary-200">
{e?.shifts[0]}
</div>
</div>
<div className=" relative m-2 text-white">
<div className="text-right h-[45px] overflow-hidden">
<h4 className="mb-0 text-primary-300 font-semibold text-sm ">
{e?.title}{" "}
</h4>
</div>
<div className="flex">
<div className="flex rtl mt-2 w-full">
<div className="absolute right-[0px] bg-red-900 w-[40px] h-[40px] rounded-full border-2 z-[1]"></div>
<div className="absolute right-[13px] bg-green-900 w-[40px] h-[40px] rounded-full border-2 z-[2]"></div>
<div className="absolute right-[26px] bg-sky-900 w-[40px] h-[40px] rounded-full border-2 z-[3]"></div>
</div>
<div className="relative w-full">
<p className="text-black text-sm mt-4">
+
<strong className="mx-1">
<PersianNumber number={3} />
</strong>
نفر دیگر
</p>
</div>
</div>
<div className="flex mt-6 relative">
<div>
<svg
width="20"
height="20"
viewBox="0 0 14 14"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M11.0833 2.33332H9.91667V1.74999C9.91667 1.59528 9.85522 1.44691 9.74582 1.33751C9.63642 1.22811 9.48805 1.16666 9.33334 1.16666C9.17863 1.16666 9.03026 1.22811 8.92086 1.33751C8.81146 1.44691 8.75001 1.59528 8.75001 1.74999V2.33332H5.25001V1.74999C5.25001 1.59528 5.18855 1.44691 5.07915 1.33751C4.96975 1.22811 4.82138 1.16666 4.66667 1.16666C4.51196 1.16666 4.36359 1.22811 4.25419 1.33751C4.1448 1.44691 4.08334 1.59528 4.08334 1.74999V2.33332H2.91667C2.45254 2.33332 2.00742 2.5177 1.67923 2.84589C1.35105 3.17408 1.16667 3.61919 1.16667 4.08332V11.0833C1.16667 11.5475 1.35105 11.9926 1.67923 12.3208C2.00742 12.6489 2.45254 12.8333 2.91667 12.8333H11.0833C11.5475 12.8333 11.9926 12.6489 12.3208 12.3208C12.649 11.9926 12.8333 11.5475 12.8333 11.0833V4.08332C12.8333 3.61919 12.649 3.17408 12.3208 2.84589C11.9926 2.5177 11.5475 2.33332 11.0833 2.33332ZM11.6667 11.0833C11.6667 11.238 11.6052 11.3864 11.4958 11.4958C11.3864 11.6052 11.238 11.6667 11.0833 11.6667H2.91667C2.76196 11.6667 2.61359 11.6052 2.50419 11.4958C2.3948 11.3864 2.33334 11.238 2.33334 11.0833V6.99999H11.6667V11.0833ZM11.6667 5.83332H2.33334V4.08332C2.33334 3.92861 2.3948 3.78024 2.50419 3.67084C2.61359 3.56145 2.76196 3.49999 2.91667 3.49999H4.08334V4.08332C4.08334 4.23803 4.1448 4.38641 4.25419 4.4958C4.36359 4.6052 4.51196 4.66666 4.66667 4.66666C4.82138 4.66666 4.96975 4.6052 5.07915 4.4958C5.18855 4.38641 5.25001 4.23803 5.25001 4.08332V3.49999H8.75001V4.08332C8.75001 4.23803 8.81146 4.38641 8.92086 4.4958C9.03026 4.6052 9.17863 4.66666 9.33334 4.66666C9.48805 4.66666 9.63642 4.6052 9.74582 4.4958C9.85522 4.38641 9.91667 4.23803 9.91667 4.08332V3.49999H11.0833C11.238 3.49999 11.3864 3.56145 11.4958 3.67084C11.6052 3.78024 11.6667 3.92861 11.6667 4.08332V5.83332Z"
fill="#888888"
/>
</svg>
</div>
<p className="mb-0 text-textMain-100 text-sm opacity-70 mr-1">
<PersianNumber
number={moment(e?.setFor).format("jYYYY/jM/jD")}
/>
</p>
</div>
</div>
</div>
</SwiperSlide>
))}
<SwiperSlide>
{tasksData.length > 5 && (
<div
className=" bg-white p-1 rounded-3xl overflow-hidden h-[180px] mt-5 w-4/12"
onClick={() => setShowAllTasks(true)}
>
<div className="pt-[60px]">
<p className="mb-0 text-sm text-center text-primary-300 font-bold">
مشاهده بیشتر
</p>
</div>
</div>
)}
</SwiperSlide>
</Swiper>
)}
))}
</>
);
};

View File

@ -4,7 +4,7 @@ import PersianNumber from "../plugins/PersianNumber";
import Link from "next/link";
const UnderDevelopeTimer = () => {
const targetTimestamp = 1698635992 * 1000; // Convert to milliseconds
const targetTimestamp = 1704170967 * 1000; // Convert to milliseconds
const [timeRemaining, setTimeRemaining] = useState({
days: 0,
@ -46,7 +46,7 @@ const UnderDevelopeTimer = () => {
}, []);
return (
<div className="flex justify-center ">
<div className="flex justify-center ">
<div className="mx-2 mt-4">
<div className="w-[50px] h-[50px] rounded-full bg-sky-800">
<p className="mb-0 text-2xl text-white font-bold pt-2">

View File

@ -1,6 +1,6 @@
{
"name": "brizco",
"version": "0.1.8",
"version": "0.1.9",
"private": true,
"scripts": {
"dev": "next dev",
@ -18,12 +18,14 @@
"core-util-is": "^1.0.3",
"framer-motion": "^10.16.1",
"jalali-moment": "^3.3.11",
"lodash": "^4.17.21",
"next": "13.4.19",
"postcss": "8.4.28",
"rc-slider": "^10.5.0",
"react": "18.2.0",
"react-chartjs-2": "^5.2.0",
"react-dom": "18.2.0",
"react-infinite-scroll-component": "^6.1.0",
"react-modern-calendar-datepicker": "^3.1.6",
"react-spring-bottom-sheet": "^3.4.1",
"react-toastify": "^9.1.3",

View File

@ -75,6 +75,7 @@ const BottomSheetAddUserToPositionShiftPlan = ({
},
]);
}
CTX.setBottomSheetAddUserToPositionShiftPlanOpen(false);
}}
>
<div className="flex rtl justify-between p-3">

View File

@ -91,7 +91,7 @@ const BottomSheetCreateEmployees = (props) => {
setLastName("");
setPhoneNumber("");
// setNationalId("");
setGender("");
setGender(parseInt(0));
// setBirthDate("");
setRoleSelectCurrntData("");
setRoleSelectData([]);
@ -346,7 +346,7 @@ const BottomSheetCreateEmployees = (props) => {
<div>
<p className="mb-0 px-3 text-sm mt-1">
{rolesData?.find((b) => b.id == e).persianName}
{rolesData?.find((b) => b.id == e)?.persianName}
</p>
</div>
</div>

View File

@ -91,7 +91,6 @@ const BottomSheetCreatePosition = (props) => {
}))
);
if (e.type == "OPEN") {
CTX.GetSections();
if (goToEditPosition) {
CTX.GetPosition(idEditPosition);
}
@ -158,16 +157,16 @@ const BottomSheetCreatePosition = (props) => {
value={description}
inputEvent={(e) => {
setDescription(e.target.value);
validator.current.showMessageFor("description");
// validator.current.showMessageFor("description");
}}
textarea={true}
style="text-right"
validator={true}
validatorData={validator.current.message(
"description",
description,
"required"
)}
// validator={true}
// validatorData={validator.current.message(
// "description",
// description,
// "required"
// )}
/>
</div>

View File

@ -136,16 +136,16 @@ const BottomSheetCreateRoutine = (props) => {
value={description}
inputEvent={(e) => {
setDescription(e.target.value);
validator.current.showMessageFor("description");
// validator.current.showMessageFor("description");
}}
textarea={true}
style="text-right"
validator={true}
validatorData={validator.current.message(
"description",
description,
"required"
)}
// validator={true}
// validatorData={validator.current.message(
// "description",
// description,
// "required"
// )}
/>
</div>

View File

@ -134,16 +134,16 @@ const BottomSheetCreateSection = (props) => {
value={description}
inputEvent={(e) => {
setDescription(e.target.value);
validator.current.showMessageFor("description");
// validator.current.showMessageFor("description");
}}
textarea={true}
style="text-right"
validator={true}
validatorData={validator.current.message(
"description",
description,
"required"
)}
// validator={true}
// validatorData={validator.current.message(
// "description",
// description,
// "required"
// )}
/>
</div>

View File

@ -144,6 +144,8 @@ const BottomSheetCreateShifts = (props) => {
}
}, [shiftData]);
console.log("----------------------------------", CTX.state.startAtTimeShift);
return (
<BottomSheet
onSpringStart={(e) => handleBottomSheetCreateShift(e)}
@ -185,7 +187,7 @@ const BottomSheetCreateShifts = (props) => {
id="startAtTimeShift-id"
name="startAtTimeShift"
type={"text"}
value={startAtTimeShift}
value={startAtTimeShift[0] + ":" + startAtTimeShift[1]}
inputEvent={(e) => {
validator.current.showMessageFor("startAt");
}}
@ -219,7 +221,7 @@ const BottomSheetCreateShifts = (props) => {
id="endAtTimeShift-id"
name="endAtTimeShift"
type={"text"}
value={endAtTimeShift}
value={endAtTimeShift[0] + ":" + endAtTimeShift[1]}
inputEvent={(e) => {
validator.current.showMessageFor("startAt");
}}

View File

@ -33,7 +33,7 @@ Chapar.interceptors.response.use(
if (error.response.status === 401) {
localStorage.removeItem("token");
window.location.href = "/";
window.location.href = "/login";
}
return Promise.reject({ error, status: error?.response?.status });

View File

@ -0,0 +1,8 @@
import { useRouter } from "next/navigation";
const GoBack = () => {
// console.log(history);
return history.back();
};
export default GoBack;

View File

@ -37,6 +37,7 @@ const Input = ({
readOnly={readOnly ? true : false}
value={value}
onChange={inputEvent}
id={id}
/>
) : select ? (
<select

View File

@ -42,9 +42,10 @@ const TimePicker = () => {
setSecondSelect(e);
setTime([hureSelect, e]);
};
return (
<div className="fixed w-full top-0 z-[120]">
<div className="bg-BigPlus h-screen content-center ">
<div className="bg-BigPlus h-screen content-center ">
<div className="flex justify-center">
<div className="mx-5 ">
<h2 className="mb-0 text-white text-lg font-bold py-2 text-center ">

View File

@ -32,6 +32,9 @@ dependencies:
jalali-moment:
specifier: ^3.3.11
version: 3.3.11
lodash:
specifier: ^4.17.21
version: 4.17.21
next:
specifier: 13.4.19
version: 13.4.19(react-dom@18.2.0)(react@18.2.0)
@ -50,6 +53,9 @@ dependencies:
react-dom:
specifier: 18.2.0
version: 18.2.0(react@18.2.0)
react-infinite-scroll-component:
specifier: ^6.1.0
version: 6.1.0(react@18.2.0)
react-modern-calendar-datepicker:
specifier: ^3.1.6
version: 3.1.6(react-dom@18.2.0)(react@18.2.0)
@ -1563,6 +1569,15 @@ packages:
scheduler: 0.23.0
dev: false
/react-infinite-scroll-component@6.1.0(react@18.2.0):
resolution: {integrity: sha512-SQu5nCqy8DxQWpnUVLx7V7b7LcA37aM7tvoWjTLZp1dk6EJibM5/4EJKzOnl07/BsM1Y40sKLuqjCwwH/xV0TQ==}
peerDependencies:
react: '>=16.0.0'
dependencies:
react: 18.2.0
throttle-debounce: 2.3.0
dev: false
/react-is@16.13.1:
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
dev: false
@ -1936,6 +1951,11 @@ packages:
any-promise: 1.3.0
dev: false
/throttle-debounce@2.3.0:
resolution: {integrity: sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ==}
engines: {node: '>=8'}
dev: false
/through@2.3.8:
resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
dev: false

View File

@ -9,6 +9,7 @@ import { toast } from "react-toastify";
import SimpleReactValidator from "simple-react-validator";
import DatePickerIran from "plugins/DatePickerIran/page";
import { useLongPress } from "@uidotdev/usehooks";
import GoBack from "plugins/GoBack/page";
const page = () => {
const CTX = useContext(AppContext);
@ -62,7 +63,10 @@ const page = () => {
sub={profile?.selectedComplexName}
icon2={true}
iconName2="ARROW"
iconHref2="/home"
iconHref2="#"
iconEvent2={() => {
GoBack();
}}
logOut={true}
/>

View File

@ -18,6 +18,7 @@ import PersianNumber from "plugins/PersianNumber";
import React, { useContext, useEffect, useState } from "react";
import ShiftsEmployees from "@comp/EmployeesComponent/Shifts/page";
import ParseJwt from "plugins/ParseJwt/page";
import GoBack from "plugins/GoBack/page";
// import second from "@img/test.png";
@ -46,6 +47,7 @@ const Employees = (props) => {
case 2:
if (activeSection != num) {
CTX.GetPositions();
CTX.GetSections();
}
break;
case 3:
@ -75,9 +77,9 @@ const Employees = (props) => {
sub=" هسته اصلی تنظیمات مجموعه"
icon2={true}
iconName2="ARROW"
iconHref2="/home"
iconHref2="#"
iconEvent2={() => {
return undefined;
GoBack();
}}
/>

View File

@ -123,13 +123,17 @@ export default function RootLayout({ children }) {
const [positionsForTaskChoose, setPositionsForTaskChoose] = useState([]);
const [shiftsForTaskChoose, setShiftsForTaskChoose] = useState([]);
const [shiftsDaysChoose, setShiftsDaysChoose] = useState([]);
const [tasksData, setTasksData] = useState([null]);
const [taskData, setTaskData] = useState([null]);
const [tasksData, setTasksData] = useState([]);
const [taskData, setTaskData] = useState([]);
const [goToEditTask, setGoToEditTask] = useState(false);
const [idEditTask, setIdEditTask] = useState(null);
const [pageGetTasks, setPageGetTasks] = useState(0);
const [stopGetTasks, setStopGetTasks] = useState(false);
// activity
const [activitiesData, setActivitiesData] = useState([null]);
const [activitiesData, setActivitiesData] = useState([]);
const [pageGetActivity, setPageGetActivity] = useState(0);
const [stopGetActivities, setStopGetActivities] = useState(false);
// shift manage-shift
const [searchUserChoose, setSearchUserChoose] = useState([]);
@ -963,7 +967,6 @@ export default function RootLayout({ children }) {
position: "bottom-right",
closeOnClick: true,
});
router.push("/shifts");
} catch ({ error, status }) {
toast.error(`${error?.response?.data?.message}`, {
position: "bottom-right",
@ -1142,7 +1145,7 @@ export default function RootLayout({ children }) {
// router->
setLoading(false);
GetTasks();
GetTasks(0);
router.push("/tasks");
} catch ({ error, status }) {
@ -1174,7 +1177,7 @@ export default function RootLayout({ children }) {
// router->
setLoading(false);
GetTasks();
GetTasks(0);
router.push("/tasks");
} catch ({ error, status }) {
toast.error(`${error?.response?.data?.message}`, {
@ -1184,19 +1187,27 @@ export default function RootLayout({ children }) {
setLoading(false);
}
};
const GetTasks = async () => {
const GetTasks = async (page) => {
setLoading(true);
try {
const data = await Chapar.get(
`${process.env.NEXT_PUBLIC_API_URL}/task?page=0`,
`${process.env.NEXT_PUBLIC_API_URL}/task?page=${page}`,
{
headers: {
Authorization: getToken(),
},
}
);
setTasksData(data);
if (data.length < 14) {
setStopGetTasks(true);
}
if (page == 0) {
setTasksData(data);
} else {
setTasksData((prevData) => [...prevData, ...data]);
}
setLoading(false);
} catch ({ error, status }) {
toast.error(`${error?.response?.data?.message}`, {
@ -1253,11 +1264,11 @@ export default function RootLayout({ children }) {
}
};
const GetActivity = async (date, shift) => {
const GetActivity = async (date, shift, page) => {
setLoading(true);
try {
const data = await Chapar.get(
`${process.env.NEXT_PUBLIC_API_URL}/activity?page=0${
`${process.env.NEXT_PUBLIC_API_URL}/activity?page=${page}${
date ? `&selectedDate=${date}` : ""
}${shift ? `&selectedShift=${shift}` : ""}`,
@ -1267,7 +1278,17 @@ export default function RootLayout({ children }) {
},
}
);
setActivitiesData(data);
if (data.length < 14) {
setStopGetActivities(true);
}
if (page == 0) {
setActivitiesData(data);
} else {
setActivitiesData((prevData) => [...prevData, ...data]);
}
setLoading(false);
} catch ({ error, status }) {
toast.error(`${error?.response?.data?.message}`, {
@ -1501,6 +1522,10 @@ export default function RootLayout({ children }) {
activitiesData,
completeActivities,
shiftPlanData,
stopGetTasks,
pageGetTasks,
stopGetActivities,
pageGetActivity,
},
setBottomSheetCreateRoleOpen,
setBottomSheetCreateEmployeesOpen,
@ -1612,6 +1637,10 @@ export default function RootLayout({ children }) {
setShiftPlanData,
GetShiftPlan,
UpdateShiftPlan,
setStopGetTasks,
setPageGetTasks,
setStopGetActivities,
setPageGetActivity,
}}
>
<html lang="en">

View File

@ -5,9 +5,11 @@ import ActivityCardCloseShift from "@comp/TaskPage/ActivityCardCloseShift/page";
import AppContext from "@ctx/AppContext";
import moment from "jalali-moment";
import Buttonbriz from "plugins/Buttonbriz/page";
import GoBack from "plugins/GoBack/page";
import PersianNumber from "plugins/PersianNumber";
import Slider from "rc-slider";
import React, { useContext, useEffect, useState } from "react";
import InfiniteScroll from "react-infinite-scroll-component";
import { toast } from "react-toastify";
const CompleteShift = () => {
@ -20,6 +22,8 @@ const CompleteShift = () => {
const siftsData = CTX.state.shiftsData;
const activitiesData = CTX.state.activitiesData;
const stopGetActivities = CTX.state.stopGetActivities;
const pageGetActivity = CTX.state.pageGetActivity;
const circularHandleStyle = {
backgroundColor: "green",
@ -89,12 +93,21 @@ const CompleteShift = () => {
if (selectDayForShift == 0) {
CTX.GetActivity(
moment().locale("fa").subtract(1, "day").unix() * 1000,
id
id,
0
);
} else if (selectDayForShift == 1) {
CTX.GetActivity(moment().locale("fa").startOf("day").unix() * 1000, id);
CTX.GetActivity(
moment().locale("fa").startOf("day").unix() * 1000,
id,
0
);
} else if (selectDayForShift == 2) {
CTX.GetActivity(moment().locale("fa").add(1, "day").unix() * 1000, id);
CTX.GetActivity(
moment().locale("fa").add(1, "day").unix() * 1000,
id,
0
);
}
}
};
@ -137,6 +150,15 @@ const CompleteShift = () => {
}
}, [activitiesData]);
const handleInfiniteNextFetchActivity = () => {
CTX.setPageGetActivity((e) => e + 1);
CTX.GetActivity(
moment().locale("fa").startOf("day").unix() * 1000,
null,
pageGetActivity + 1
);
};
return (
<div className="pb-20">
<AppHeader
@ -144,7 +166,10 @@ const CompleteShift = () => {
sub="عملیات بستن شیفت برای بررسی تکمیل وظایف"
icon2={true}
iconName2="ARROW"
iconHref2="/home"
iconHref2="#"
iconEvent2={() => {
GoBack();
}}
/>
<div className="bg-body-100 relative top-[-30px] rounded-t-3xl overflow-hidden p-4 rtl">
@ -238,9 +263,15 @@ const CompleteShift = () => {
</div>
{activeShifPlan == index && (
<>
{activitiesData?.map((e) => (
<ActivityCardCloseShift data={e} />
))}
<InfiniteScroll
dataLength={activitiesData.length}
next={handleInfiniteNextFetchActivity}
hasMore={!stopGetActivities}
>
{activitiesData?.map((e) => (
<ActivityCardCloseShift data={e} />
))}
</InfiniteScroll>
<div className=" mt-5">
<div className=" p-3 relative top-[20px] ">

View File

@ -14,6 +14,7 @@ import Avatar from "boring-avatars";
import BottomManageShift from "plugins/BottomSheet/BottomManageShift";
import BottomSheetAddUserToPositionShiftPlan from "plugins/BottomSheet/BottomSheetAddUserToPositionShiftPlan";
import Buttonbriz from "plugins/Buttonbriz/page";
import GoBack from "plugins/GoBack/page";
const Calendar = () => {
const CTX = useContext(AppContext);
@ -208,7 +209,10 @@ const Calendar = () => {
`}
icon2={true}
iconName2="ARROW"
iconHref2="/home"
iconHref2="#"
iconEvent2={() => {
GoBack();
}}
/>
<div className="bg-body-100 relative top-[-30px] rounded-t-3xl overflow-hidden p-4 rtl">
@ -377,19 +381,19 @@ const Calendar = () => {
<div className="flex justify-between bg-gray-200 rounded-2xl">
<div className="flex p-2">
<div className="m-2">
<h4 className="text-base font-bold">{e.name} </h4>
<h4 className="text-base font-bold mt-[2px]">{e.name} </h4>
</div>
</div>
<div
className=" bg-gray-600 shadow-sm rounded-xl m-[15px] h-fit relative "
className=" bg-gray-600 shadow-sm rounded-xl m-[15px] p-1 relative "
onClick={() => {
setPositionSelectIdBottomSheet(e.id);
setPositionSelectNameBottomSheet(e.name);
CTX.setBottomSheetAddUserToPositionShiftPlanOpen(true);
}}
>
<p className="mb-0 text-sm text-white px-2 ">کاربران +</p>
<p className="mb-0 text-sm text-white px-2 mt-1">کاربران +</p>
</div>
</div>

View File

@ -6,16 +6,11 @@ import Image from "next/image";
import Link from "next/link";
import { useRouter } from "next/navigation";
import BottomSheetCreateShifts from "plugins/BottomSheet/BottomSheetCreateShifts";
import PersianNumber from "plugins/PersianNumber";
import React, { useContext, useEffect, useState } from "react";
import Slider, { Range } from "rc-slider";
import Buttonbriz from "plugins/Buttonbriz/page";
import moment from "jalali-moment";
import ActivityCard from "@comp/TaskPage/ActivityCard/page";
const Shifts = (props) => {
const CTX = useContext(AppContext);
const router = useRouter();
return (
<>
@ -31,9 +26,9 @@ const Shifts = (props) => {
// }}
icon2={true}
iconName2="ARROW"
iconHref2="/home"
iconHref2="#"
iconEvent2={() => {
return undefined;
return router.back();
}}
/>

View File

@ -11,6 +11,7 @@ import { toast } from "react-toastify";
import SimpleReactValidator from "simple-react-validator";
import moment from "jalali-moment";
import { useRouter, useSearchParams } from "next/navigation";
import GoBack from "plugins/GoBack/page";
const AddTask = () => {
const CTX = useContext(AppContext);
@ -131,7 +132,7 @@ const AddTask = () => {
setRoutinesSelectData([]);
setBirthDateTimeStamp(0);
setScheduleType([]);
setDescription([]);
setDescription("");
setTitle("");
setShiftsForTaskCurrent([]);
setShiftsSelectData([]);
@ -305,7 +306,10 @@ const AddTask = () => {
sub=" قابلیت افزودن فعالیت جدید مختلف"
icon2={true}
iconName2="ARROW"
iconHref2="/home"
iconHref2="#"
iconEvent2={() => {
GoBack();
}}
/>
<div className="bg-body-100 relative top-[-30px] rounded-t-3xl overflow-hidden p-4 rtl">
@ -340,7 +344,6 @@ const AddTask = () => {
value={description}
inputEvent={(e) => {
setDescription(e.target.value);
validator.current.showMessageFor("description");
}}
textarea={true}
style="text-right"

View File

@ -4,13 +4,16 @@ import AppHeader from "@comp/AppHeader/page";
import AppContext from "@ctx/AppContext";
import BottomSheetCreateRoutine from "plugins/BottomSheet/BottomSheetCreateRoutine";
import PersianNumber from "plugins/PersianNumber";
import React, { useContext, useEffect } from "react";
import React, { useContext, useEffect, useState } from "react";
import Link from "next/link";
import { useRouter } from "next/navigation";
import ActivityCard from "@comp/TaskPage/ActivityCard/page";
import TasksCard from "@comp/TaskPage/TasksCard/page";
import moment from "jalali-moment";
import HasPermission from "plugins/HasPermission/page";
import GoBack from "plugins/GoBack/page";
import InfiniteScroll from "react-infinite-scroll-component";
import Loading from "plugins/Loading/page";
const page = () => {
const CTX = useContext(AppContext);
@ -19,15 +22,43 @@ const page = () => {
const activities = CTX.state.activitiesData;
const tasksData = CTX.state.tasksData;
const permissions = CTX.state.profile?.permissions;
const pageGetTasks = CTX.state.pageGetTasks;
const pageGetActivity = CTX.state.pageGetActivity;
const stopGetTasks = CTX.state.stopGetTasks;
const stopGetActivities = CTX.state.stopGetActivities;
const [typeTask, setTypeTask] = useState(1);
console.log("pageGetTasks", pageGetTasks);
useEffect(() => {
CTX.GetTasks();
CTX.GetActivity(moment().locale("fa").startOf("day").unix() * 1000);
CTX.GetTasks(pageGetTasks);
CTX.GetActivity(
moment().locale("fa").startOf("day").unix() * 1000,
null,
pageGetActivity
);
}, []);
const handleInfiniteNextFetchTask = () => {
CTX.setPageGetTasks((e) => e + 1);
CTX.GetTasks(pageGetTasks + 1);
};
const handleInfiniteNextFetchActivity = () => {
CTX.setPageGetActivity((e) => e + 1);
CTX.GetActivity(
moment().locale("fa").startOf("day").unix() * 1000,
null,
pageGetActivity + 1
);
};
console.log(activities.length);
return (
<div className="pb-20">
<AppHeader
title=" تسک های مجموعه"
title=" مدیریت فعالیت مجموعه"
sub=" مدیریت فعالیت ها"
icon1={!!HasPermission("ManageTasks", permissions) ? true : false}
iconName1="PLUS"
@ -39,14 +70,47 @@ const page = () => {
}}
icon2={true}
iconName2="ARROW"
iconHref2="/home"
iconHref2="#"
iconEvent2={() => {
return undefined;
GoBack();
}}
/>
<div className="bg-body-100 relative top-[-30px] rounded-t-3xl overflow-hidden p-5 rtl ">
<div className="flex justify-between ">
{!!HasPermission("ManageTasks", permissions) && (
<div className="flex mb-6 ">
<div
className={` p-2 w-full rounded-3xl tr03 ${
typeTask == 0 ? "bg-secondary-100" : ""
} `}
onClick={() => setTypeTask(0)}
>
<p
className={`mb-0 text-center text-base ${
typeTask == 0 ? "text-white " : "opacity-70"
}`}
>
تسک های روزانه
</p>
</div>
<div
className={` p-2 w-full rounded-3xl tr03 ${
typeTask == 1 ? "bg-secondary-100" : ""
} `}
onClick={() => setTypeTask(1)}
>
<p
className={`mb-0 text-center text-base ${
typeTask == 1 ? "text-white " : "opacity-70"
}`}
>
اکتیویتی های روزانه
</p>
</div>
</div>
)}
{/* <div className="flex justify-between ">
<div>
<h4 className="text-base font-bold ">تسک های هفتگی مجموعه</h4>
<p className="mb-0 text-sm">
@ -73,43 +137,51 @@ const page = () => {
/>
</svg>
</div>
</div>
<TasksCard tasksData={tasksData} permissions={permissions} />
</div> */}
<div className="flex justify-between mt-7 sticky top-0">
<div>
<h4 className="text-base font-bold">تسک های امروز</h4>
<p className="mb-0 text-sm">
امروز
<strong className="mx-1 text-primary-300">
<PersianNumber number={24} />
</strong>
تسک فعال دارید
</p>
{typeTask == 0 ? (
<>
{tasksData.length != 0 ? (
<InfiniteScroll
dataLength={tasksData.length}
next={handleInfiniteNextFetchTask}
hasMore={!stopGetTasks}
>
<TasksCard
tasksData={tasksData}
permissions={permissions}
pageGetTasks={pageGetTasks}
/>
</InfiniteScroll>
) : (
<div className="flex justify-center py-5">
<div className="bg-white shadow mt-5 w-fit rounded-full p-4">
چیزی یافت نشد
</div>
</div>
)}
</>
) : (
<div className=" mt-3">
{activities.length != 0 ? (
<InfiniteScroll
dataLength={activities.length}
next={handleInfiniteNextFetchActivity}
hasMore={!stopGetActivities}
>
{activities?.map((e) => (
<ActivityCard data={e} />
))}
</InfiniteScroll>
) : (
<div className="flex justify-center py-5">
<div className="bg-white shadow mt-5 w-fit rounded-full p-4">
چیزی یافت نشد
</div>
</div>
)}
</div>
<div className="w-[40px] h-[40px] bg-white shadow-sm rounded-xl">
<svg
width="23"
height="27"
viewBox="0 0 16 20"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="mx-auto mt-[6px]"
>
<path
d="M5 3.00001C4.73478 3.00001 4.48043 3.10537 4.29289 3.2929C4.10536 3.48044 4 3.73479 4 4.00001C4 4.26523 4.10536 4.51958 4.29289 4.70712C4.48043 4.89465 4.73478 5.00001 5 5.00001C5.26522 5.00001 5.51957 4.89465 5.70711 4.70712C5.89464 4.51958 6 4.26523 6 4.00001C6 3.73479 5.89464 3.48044 5.70711 3.2929C5.51957 3.10537 5.26522 3.00001 5 3.00001ZM2.17 3.00001C2.3766 2.41448 2.75974 1.90744 3.2666 1.5488C3.77346 1.19015 4.37909 0.997559 5 0.997559C5.62091 0.997559 6.22654 1.19015 6.7334 1.5488C7.24026 1.90744 7.6234 2.41448 7.83 3.00001H15C15.2652 3.00001 15.5196 3.10537 15.7071 3.2929C15.8946 3.48044 16 3.73479 16 4.00001C16 4.26523 15.8946 4.51958 15.7071 4.70712C15.5196 4.89465 15.2652 5.00001 15 5.00001H7.83C7.6234 5.58554 7.24026 6.09258 6.7334 6.45122C6.22654 6.80986 5.62091 7.00246 5 7.00246C4.37909 7.00246 3.77346 6.80986 3.2666 6.45122C2.75974 6.09258 2.3766 5.58554 2.17 5.00001H1C0.734784 5.00001 0.48043 4.89465 0.292893 4.70712C0.105357 4.51958 0 4.26523 0 4.00001C0 3.73479 0.105357 3.48044 0.292893 3.2929C0.48043 3.10537 0.734784 3.00001 1 3.00001H2.17ZM11 9.00001C10.7348 9.00001 10.4804 9.10537 10.2929 9.2929C10.1054 9.48044 10 9.73479 10 10C10 10.2652 10.1054 10.5196 10.2929 10.7071C10.4804 10.8947 10.7348 11 11 11C11.2652 11 11.5196 10.8947 11.7071 10.7071C11.8946 10.5196 12 10.2652 12 10C12 9.73479 11.8946 9.48044 11.7071 9.2929C11.5196 9.10537 11.2652 9.00001 11 9.00001ZM8.17 9.00001C8.3766 8.41448 8.75974 7.90744 9.2666 7.5488C9.77346 7.19015 10.3791 6.99756 11 6.99756C11.6209 6.99756 12.2265 7.19015 12.7334 7.5488C13.2403 7.90744 13.6234 8.41448 13.83 9.00001H15C15.2652 9.00001 15.5196 9.10537 15.7071 9.2929C15.8946 9.48044 16 9.73479 16 10C16 10.2652 15.8946 10.5196 15.7071 10.7071C15.5196 10.8947 15.2652 11 15 11H13.83C13.6234 11.5855 13.2403 12.0926 12.7334 12.4512C12.2265 12.8099 11.6209 13.0025 11 13.0025C10.3791 13.0025 9.77346 12.8099 9.2666 12.4512C8.75974 12.0926 8.3766 11.5855 8.17 11H1C0.734784 11 0.48043 10.8947 0.292893 10.7071C0.105357 10.5196 0 10.2652 0 10C0 9.73479 0.105357 9.48044 0.292893 9.2929C0.48043 9.10537 0.734784 9.00001 1 9.00001H8.17ZM5 15C4.73478 15 4.48043 15.1054 4.29289 15.2929C4.10536 15.4804 4 15.7348 4 16C4 16.2652 4.10536 16.5196 4.29289 16.7071C4.48043 16.8947 4.73478 17 5 17C5.26522 17 5.51957 16.8947 5.70711 16.7071C5.89464 16.5196 6 16.2652 6 16C6 15.7348 5.89464 15.4804 5.70711 15.2929C5.51957 15.1054 5.26522 15 5 15ZM2.17 15C2.3766 14.4145 2.75974 13.9074 3.2666 13.5488C3.77346 13.1902 4.37909 12.9976 5 12.9976C5.62091 12.9976 6.22654 13.1902 6.7334 13.5488C7.24026 13.9074 7.6234 14.4145 7.83 15H15C15.2652 15 15.5196 15.1054 15.7071 15.2929C15.8946 15.4804 16 15.7348 16 16C16 16.2652 15.8946 16.5196 15.7071 16.7071C15.5196 16.8947 15.2652 17 15 17H7.83C7.6234 17.5855 7.24026 18.0926 6.7334 18.4512C6.22654 18.8099 5.62091 19.0025 5 19.0025C4.37909 19.0025 3.77346 18.8099 3.2666 18.4512C2.75974 18.0926 2.3766 17.5855 2.17 17H1C0.734784 17 0.48043 16.8947 0.292893 16.7071C0.105357 16.5196 0 16.2652 0 16C0 15.7348 0.105357 15.4804 0.292893 15.2929C0.48043 15.1054 0.734784 15 1 15H2.17Z"
fill="#666666"
/>
</svg>
</div>
</div>
<div className=" mt-3">
{activities?.map((e) => (
<ActivityCard data={e} />
))}
</div>
)}
</div>
<BottomSheetCreateRoutine />