fix bugs 31 ordibehesht
|
@ -6,6 +6,8 @@ import Buttonbriz from "plugins/Buttonbriz/page";
|
||||||
import Input from "plugins/Input/page";
|
import Input from "plugins/Input/page";
|
||||||
import React, { useContext, useRef, useState } from "react";
|
import React, { useContext, useRef, useState } from "react";
|
||||||
import SimpleReactValidator from "simple-react-validator";
|
import SimpleReactValidator from "simple-react-validator";
|
||||||
|
import PersianNumber from "plugins/PersianNumber";
|
||||||
|
import moment from "jalali-moment";
|
||||||
|
|
||||||
const ActivityCard = ({ data }) => {
|
const ActivityCard = ({ data }) => {
|
||||||
const CTX = useContext(AppContext);
|
const CTX = useContext(AppContext);
|
||||||
|
@ -83,6 +85,15 @@ const ActivityCard = ({ data }) => {
|
||||||
<div className=" w-fit relative text-[11px] rounded-full bg-gray-300 text-black px-2 h-fit">
|
<div className=" w-fit relative text-[11px] rounded-full bg-gray-300 text-black px-2 h-fit">
|
||||||
{data?.userFullName}
|
{data?.userFullName}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{data?.doneAt !== "0001-01-01T00:00:00" && (
|
||||||
|
<div className=" w-fit relative text-[11px] rounded-full bg-primary-100 text-primary-300 px-2 h-fit mr-1 mt-[-1px]">
|
||||||
|
<PersianNumber
|
||||||
|
number={moment(data?.doneAt).locale("fa").format("HH:mm")}
|
||||||
|
style={"!text-[11px]"}
|
||||||
|
/>{" "}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,24 @@
|
||||||
/** @type {import('next').NextConfig} */
|
/** @type {import('next').NextConfig} */
|
||||||
const nextConfig = {}
|
|
||||||
|
|
||||||
module.exports = nextConfig
|
const withPWA = require("@ducanh2912/next-pwa").default({
|
||||||
|
cacheOnFrontEndNav: true,
|
||||||
|
aggressiveFrontEndNavCaching: true,
|
||||||
|
reloadOnOnline: true,
|
||||||
|
swcMinify: true,
|
||||||
|
dest: "public",
|
||||||
|
fallbacks: {
|
||||||
|
//image: "/static/images/fallback.png",
|
||||||
|
document: "/offline", // if you want to fallback to a custom page rather than /_offline
|
||||||
|
// font: '/static/font/fallback.woff2',
|
||||||
|
// audio: ...,
|
||||||
|
// video: ...,
|
||||||
|
},
|
||||||
|
workboxOptions: {
|
||||||
|
disableDevLogs: true,
|
||||||
|
},
|
||||||
|
// ... other options you like
|
||||||
|
});
|
||||||
|
|
||||||
|
const nextConfig = {};
|
||||||
|
|
||||||
|
module.exports = withPWA(nextConfig);
|
||||||
|
|
17
package.json
|
@ -9,7 +9,11 @@
|
||||||
"lint": "next lint"
|
"lint": "next lint"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@ducanh2912/next-pwa": "^10.2.7",
|
||||||
|
"@emailjs/browser": "^3.11.0",
|
||||||
"@hassanmojab/react-modern-calendar-datepicker": "^3.1.7",
|
"@hassanmojab/react-modern-calendar-datepicker": "^3.1.7",
|
||||||
|
"@react-three/drei": "^9.88.11",
|
||||||
|
"@react-three/fiber": "^8.15.9",
|
||||||
"@uidotdev/usehooks": "^2.4.0",
|
"@uidotdev/usehooks": "^2.4.0",
|
||||||
"autoprefixer": "10.4.15",
|
"autoprefixer": "10.4.15",
|
||||||
"axios": "^1.5.1",
|
"axios": "^1.5.1",
|
||||||
|
@ -19,6 +23,7 @@
|
||||||
"framer-motion": "^10.16.1",
|
"framer-motion": "^10.16.1",
|
||||||
"jalali-moment": "^3.3.11",
|
"jalali-moment": "^3.3.11",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
|
"maath": "^0.10.4",
|
||||||
"next": "13.4.19",
|
"next": "13.4.19",
|
||||||
"postcss": "8.4.28",
|
"postcss": "8.4.28",
|
||||||
"rc-slider": "^10.5.0",
|
"rc-slider": "^10.5.0",
|
||||||
|
@ -27,18 +32,14 @@
|
||||||
"react-dom": "18.2.0",
|
"react-dom": "18.2.0",
|
||||||
"react-infinite-scroll-component": "^6.1.0",
|
"react-infinite-scroll-component": "^6.1.0",
|
||||||
"react-modern-calendar-datepicker": "^3.1.6",
|
"react-modern-calendar-datepicker": "^3.1.6",
|
||||||
|
"react-router-dom": "^6.18.0",
|
||||||
"react-spring-bottom-sheet": "^3.4.1",
|
"react-spring-bottom-sheet": "^3.4.1",
|
||||||
|
"react-tilt": "^1.0.2",
|
||||||
"react-toastify": "^9.1.3",
|
"react-toastify": "^9.1.3",
|
||||||
|
"react-vertical-timeline-component": "^3.6.0",
|
||||||
"simple-react-validator": "^1.6.2",
|
"simple-react-validator": "^1.6.2",
|
||||||
"swiper": "^10.2.0",
|
"swiper": "^10.2.0",
|
||||||
"tailwindcss": "3.3.3",
|
"tailwindcss": "3.3.3"
|
||||||
"@emailjs/browser": "^3.11.0",
|
|
||||||
"@react-three/drei": "^9.88.11",
|
|
||||||
"@react-three/fiber": "^8.15.9",
|
|
||||||
"maath": "^0.10.4",
|
|
||||||
"react-router-dom": "^6.18.0",
|
|
||||||
"react-tilt": "^1.0.2",
|
|
||||||
"react-vertical-timeline-component": "^3.6.0"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"css-loader": "^6.8.1",
|
"css-loader": "^6.8.1",
|
||||||
|
|
|
@ -10,6 +10,7 @@ import Buttonbriz from "plugins/Buttonbriz/page";
|
||||||
import { toast } from "react-toastify";
|
import { toast } from "react-toastify";
|
||||||
import moment from "jalali-moment";
|
import moment from "jalali-moment";
|
||||||
import HasPermission from "plugins/HasPermission/page";
|
import HasPermission from "plugins/HasPermission/page";
|
||||||
|
import PersianNumber from "plugins/PersianNumber";
|
||||||
|
|
||||||
const BottomFilterActivities = (props) => {
|
const BottomFilterActivities = (props) => {
|
||||||
const CTX = useContext(AppContext);
|
const CTX = useContext(AppContext);
|
||||||
|
@ -22,6 +23,8 @@ const BottomFilterActivities = (props) => {
|
||||||
const handleChangeFilter = () => {
|
const handleChangeFilter = () => {
|
||||||
CTX.GetActivity(null, null, 0, typeFilter);
|
CTX.GetActivity(null, null, 0, typeFilter);
|
||||||
CTX.setBottomFilterActivitiesOpen(false);
|
CTX.setBottomFilterActivitiesOpen(false);
|
||||||
|
CTX.setStopGetActivities(false);
|
||||||
|
CTX.setPageGetActivity(0);
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -36,13 +39,41 @@ const BottomFilterActivities = (props) => {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="bg-body-100 p-3 ">
|
<div className="bg-body-100 p-3 ">
|
||||||
|
<div
|
||||||
|
className={`rounded-xl border-[1px] border-gray-200 p-5 m-2 tr03 ${
|
||||||
|
typeFilter == 3 ? " bg-primary-100" : "bg-gray-100 "
|
||||||
|
}`}
|
||||||
|
onClick={() => handleFilterActivity(3)}
|
||||||
|
>
|
||||||
|
<p className="mb-0 text-right">
|
||||||
|
اکتیویتی های دیروز
|
||||||
|
<small className="mr-2">
|
||||||
|
<PersianNumber
|
||||||
|
number={moment()
|
||||||
|
.locale("fa")
|
||||||
|
.subtract(1, "day")
|
||||||
|
.format("D MMMM YYYY")}
|
||||||
|
style="mx-1 text-sm !text-gray-600"
|
||||||
|
/>
|
||||||
|
</small>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
className={`rounded-xl border-[1px] border-gray-200 p-5 m-2 tr03 ${
|
className={`rounded-xl border-[1px] border-gray-200 p-5 m-2 tr03 ${
|
||||||
typeFilter == 0 ? " bg-primary-100" : "bg-gray-100 "
|
typeFilter == 0 ? " bg-primary-100" : "bg-gray-100 "
|
||||||
}`}
|
}`}
|
||||||
onClick={() => handleFilterActivity(0)}
|
onClick={() => handleFilterActivity(0)}
|
||||||
>
|
>
|
||||||
<p className="mb-0 text-right">اکتیویتی های امروز</p>
|
<p className="mb-0 text-right">
|
||||||
|
اکتیویتی های امروز
|
||||||
|
<small className="mr-2">
|
||||||
|
<PersianNumber
|
||||||
|
number={moment().locale("fa").format("D MMMM YYYY")}
|
||||||
|
style="mx-1 text-sm !text-gray-600"
|
||||||
|
/>
|
||||||
|
</small>
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
@ -51,7 +82,18 @@ const BottomFilterActivities = (props) => {
|
||||||
}`}
|
}`}
|
||||||
onClick={() => handleFilterActivity(1)}
|
onClick={() => handleFilterActivity(1)}
|
||||||
>
|
>
|
||||||
<p className="mb-0 text-right">اکتیویتی های فردا</p>
|
<p className="mb-0 text-right">
|
||||||
|
اکتیویتی های فردا
|
||||||
|
<small className="mr-2">
|
||||||
|
<PersianNumber
|
||||||
|
number={moment()
|
||||||
|
.locale("fa")
|
||||||
|
.add(1, "day")
|
||||||
|
.format("D MMMM YYYY")}
|
||||||
|
style="mx-1 text-sm !text-gray-600"
|
||||||
|
/>
|
||||||
|
</small>
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|
|
@ -66,15 +66,43 @@ const BottomSheetReportManageShift = (props) => {
|
||||||
// Sort the groupedArray by the planFor date
|
// Sort the groupedArray by the planFor date
|
||||||
groupedArray.sort((a, b) => new Date(a.planFor) - new Date(b.planFor));
|
groupedArray.sort((a, b) => new Date(a.planFor) - new Date(b.planFor));
|
||||||
|
|
||||||
console.log(groupedArray);
|
|
||||||
setShiftplans(groupedArray);
|
setShiftplans(groupedArray);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const formatShiftPlans = () => {
|
||||||
|
let formattedText = "";
|
||||||
|
|
||||||
|
shiftplans.forEach((e, dayIndex) => {
|
||||||
|
if (dayIndex > 0) {
|
||||||
|
formattedText += "\n\n\n"; // Add three newlines between each day
|
||||||
|
}
|
||||||
|
|
||||||
|
formattedText += `${moment(e.planFor)
|
||||||
|
.locale("fa")
|
||||||
|
.format("dddd، jD jMMMM jYYYY")}\n\n`;
|
||||||
|
|
||||||
|
e.data.forEach((shift, shiftIndex) => {
|
||||||
|
if (shiftIndex > 0) {
|
||||||
|
formattedText += "\n"; // Add one newline between each shift
|
||||||
|
}
|
||||||
|
formattedText += `${shift.shiftTitle}\n`;
|
||||||
|
|
||||||
|
shift.users.forEach((user) => {
|
||||||
|
formattedText += `${user.positionName} : ${user.userFullName}\n`;
|
||||||
|
});
|
||||||
|
|
||||||
|
formattedText += `سوپروایزر : ${shift.supervisorFullName}\n`;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
return formattedText.trim(); // Trim the final result to remove any leading/trailing newlines
|
||||||
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
groupObjectsByPlanFor(shiftplansData);
|
groupObjectsByPlanFor(shiftplansData);
|
||||||
}, [shiftplansData]);
|
}, [shiftplansData]);
|
||||||
|
|
||||||
console.log(shiftplans);
|
console.log("shiftplans", shiftplans);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<BottomSheet
|
<BottomSheet
|
||||||
|
@ -90,53 +118,45 @@ const BottomSheetReportManageShift = (props) => {
|
||||||
<div className="px-3 pt-10 ">
|
<div className="px-3 pt-10 ">
|
||||||
<p id="MYTEXT" className="mb-0 text-center text-sm font-light">
|
<p id="MYTEXT" className="mb-0 text-center text-sm font-light">
|
||||||
{shiftplans?.map((e, index) => (
|
{shiftplans?.map((e, index) => (
|
||||||
<>
|
<div key={index} className="mb-4 h-fit mb-10">
|
||||||
<div className={`h-fit mb-10`}>
|
<div className="flex justify-between rtl mb-2">
|
||||||
<div className={`flex justify-between rtl`}>
|
<div className="flex">
|
||||||
<div className="flex">
|
<PersianNumber
|
||||||
<PersianNumber
|
number={moment(e.planFor)
|
||||||
number={moment(e.planFor).format("jYYYY/jM/jD")}
|
.locale("fa")
|
||||||
/>
|
.format("dddd، jD jMMMM jYYYY")}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{e.data.map((shift, shiftIndex) => (
|
||||||
|
<div key={shiftIndex} className="rtl mb-3">
|
||||||
|
<div className="flex justify-between mb-2">
|
||||||
|
<div className="ml-2 rounded-xl">
|
||||||
|
<p className="text-sm mb-0 text-gray-700 font-medium">
|
||||||
|
{shift.shiftTitle}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="flex flex-wrap mb-2">
|
||||||
|
{shift.users.map((user, userIndex) => (
|
||||||
|
<div
|
||||||
|
key={userIndex}
|
||||||
|
className="flex p-1 rounded-full w-fit"
|
||||||
|
>
|
||||||
|
<p className="mb-0 text-[12px] font-medium">
|
||||||
|
{user.positionName} : {user.userFullName}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
<div className="flex p-1 rounded-full w-fit">
|
||||||
|
<p className="mb-0 text-[12px] font-medium text-red-600">
|
||||||
|
سوپروایزر : {shift.supervisorFullName}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
))}
|
||||||
<>
|
</div>
|
||||||
{e.data.map((e) => (
|
|
||||||
<div className=" rtl">
|
|
||||||
<div className="flex justify-between">
|
|
||||||
<div className="ml-2 rounded-xl ">
|
|
||||||
<p className="text-sm mb-0 text-gray-700 font-medium">
|
|
||||||
{" "}
|
|
||||||
{e.shiftTitle}
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="flex flex-wrap">
|
|
||||||
{e.users.map((i) => (
|
|
||||||
<div className="flex p-1 rounded-full w-fit ">
|
|
||||||
<p className="mb-0 text-[12px] font-medium">
|
|
||||||
{i.positionName} :{" "}
|
|
||||||
</p>{" "}
|
|
||||||
<p className="mb-0 text-[12px] mr-1">
|
|
||||||
{i.userFullName}
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
))}
|
|
||||||
<div className="flex p-1 rounded-full w-fit ">
|
|
||||||
<p className="mb-0 text-[12px] font-medium text-red-600 ">
|
|
||||||
سوپروایزر :{" "}
|
|
||||||
</p>{" "}
|
|
||||||
<p className="mb-0 text-[12px] mr-1 font-medium text-red-600 ">
|
|
||||||
{e.supervisorFullName}
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
))}
|
|
||||||
</>
|
|
||||||
</div>
|
|
||||||
</>
|
|
||||||
))}
|
))}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
@ -147,13 +167,13 @@ const BottomSheetReportManageShift = (props) => {
|
||||||
color="INFO"
|
color="INFO"
|
||||||
icon="CHECK"
|
icon="CHECK"
|
||||||
buttonEvent={() => {
|
buttonEvent={() => {
|
||||||
var text = document.getElementById("MYTEXT").innerText;
|
const text = formatShiftPlans();
|
||||||
var elem = document.createElement("textarea");
|
navigator.clipboard
|
||||||
document.body.appendChild(elem);
|
.writeText(text)
|
||||||
elem.value = text;
|
.then(() => {
|
||||||
elem.select();
|
toast.success("کپی شد");
|
||||||
document.execCommand("copy");
|
})
|
||||||
document.body.removeChild(elem);
|
.catch((err) => {});
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
After Width: | Height: | Size: 4.4 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 3.7 KiB |
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<browserconfig>
|
||||||
|
<msapplication>
|
||||||
|
<tile>
|
||||||
|
<square150x150logo src="/mstile-150x150.png"/>
|
||||||
|
<TileColor>#da532c</TileColor>
|
||||||
|
</tile>
|
||||||
|
</msapplication>
|
||||||
|
</browserconfig>
|
|
@ -0,0 +1,102 @@
|
||||||
|
/*
|
||||||
|
* ATTENTION: An "eval-source-map" devtool has been used.
|
||||||
|
* This devtool is neither made for production nor for readable output files.
|
||||||
|
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
|
||||||
|
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
||||||
|
* or disable the default devtool with "devtool: false".
|
||||||
|
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
||||||
|
*/
|
||||||
|
/******/ (function() { // webpackBootstrap
|
||||||
|
/******/ "use strict";
|
||||||
|
/******/ var __webpack_modules__ = ({
|
||||||
|
|
||||||
|
/***/ "./node_modules/@ducanh2912/next-pwa/dist/fallback.js":
|
||||||
|
/*!************************************************************!*\
|
||||||
|
!*** ./node_modules/@ducanh2912/next-pwa/dist/fallback.js ***!
|
||||||
|
\************************************************************/
|
||||||
|
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
||||||
|
|
||||||
|
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\nself.fallback = async (_)=>{\n let { destination: e, url: A } = _, s = {\n document: \"/offline\",\n image: false,\n audio: false,\n video: false,\n font: false\n }[e];\n return s ? caches.match(s, {\n ignoreSearch: !0\n }) : \"\" === e && false && 0 ? 0 : Response.error();\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGR1Y2FuaDI5MTIvbmV4dC1wd2EvZGlzdC9mYWxsYmFjay5qcyIsIm1hcHBpbmdzIjoiO0FBQUE7QUFDQSxVQUFVLHlCQUF5QjtBQUNuQyxrQkFBa0IsVUFBcUM7QUFDdkQsZUFBZSxLQUFrQztBQUNqRCxlQUFlLEtBQWtDO0FBQ2pELGVBQWUsS0FBa0M7QUFDakQsY0FBYyxLQUFpQztBQUMvQyxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUssZ0JBQWdCLEtBQWlDLElBQUksQ0FBd0MsR0FBRyxDQUUvRjtBQUNOIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9AZHVjYW5oMjkxMi9uZXh0LXB3YS9kaXN0L2ZhbGxiYWNrLmpzP2NlNGIiXSwic291cmNlc0NvbnRlbnQiOlsic2VsZi5mYWxsYmFjayA9IGFzeW5jIChfKT0+e1xuICAgIGxldCB7IGRlc3RpbmF0aW9uOiBlLCB1cmw6IEEgfSA9IF8sIHMgPSB7XG4gICAgICAgIGRvY3VtZW50OiBwcm9jZXNzLmVudi5fX1BXQV9GQUxMQkFDS19ET0NVTUVOVF9fLFxuICAgICAgICBpbWFnZTogcHJvY2Vzcy5lbnYuX19QV0FfRkFMTEJBQ0tfSU1BR0VfXyxcbiAgICAgICAgYXVkaW86IHByb2Nlc3MuZW52Ll9fUFdBX0ZBTExCQUNLX0FVRElPX18sXG4gICAgICAgIHZpZGVvOiBwcm9jZXNzLmVudi5fX1BXQV9GQUxMQkFDS19WSURFT19fLFxuICAgICAgICBmb250OiBwcm9jZXNzLmVudi5fX1BXQV9GQUxMQkFDS19GT05UX19cbiAgICB9W2VdO1xuICAgIHJldHVybiBzID8gY2FjaGVzLm1hdGNoKHMsIHtcbiAgICAgICAgaWdub3JlU2VhcmNoOiAhMFxuICAgIH0pIDogXCJcIiA9PT0gZSAmJiBwcm9jZXNzLmVudi5fX1BXQV9GQUxMQkFDS19EQVRBX18gJiYgQS5tYXRjaCgvXFwvX25leHRcXC9kYXRhXFwvLitcXC8uK1xcLmpzb24kL2kpID8gY2FjaGVzLm1hdGNoKHByb2Nlc3MuZW52Ll9fUFdBX0ZBTExCQUNLX0RBVEFfXywge1xuICAgICAgICBpZ25vcmVTZWFyY2g6ICEwXG4gICAgfSkgOiBSZXNwb25zZS5lcnJvcigpO1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@ducanh2912/next-pwa/dist/fallback.js\n"));
|
||||||
|
|
||||||
|
/***/ })
|
||||||
|
|
||||||
|
/******/ });
|
||||||
|
/************************************************************************/
|
||||||
|
/******/ // The require scope
|
||||||
|
/******/ var __webpack_require__ = {};
|
||||||
|
/******/
|
||||||
|
/************************************************************************/
|
||||||
|
/******/ /* webpack/runtime/make namespace object */
|
||||||
|
/******/ !function() {
|
||||||
|
/******/ // define __esModule on exports
|
||||||
|
/******/ __webpack_require__.r = function(exports) {
|
||||||
|
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
||||||
|
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
||||||
|
/******/ }
|
||||||
|
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
||||||
|
/******/ };
|
||||||
|
/******/ }();
|
||||||
|
/******/
|
||||||
|
/******/ /* webpack/runtime/trusted types policy */
|
||||||
|
/******/ !function() {
|
||||||
|
/******/ var policy;
|
||||||
|
/******/ __webpack_require__.tt = function() {
|
||||||
|
/******/ // Create Trusted Type policy if Trusted Types are available and the policy doesn't exist yet.
|
||||||
|
/******/ if (policy === undefined) {
|
||||||
|
/******/ policy = {
|
||||||
|
/******/ createScript: function(script) { return script; }
|
||||||
|
/******/ };
|
||||||
|
/******/ if (typeof trustedTypes !== "undefined" && trustedTypes.createPolicy) {
|
||||||
|
/******/ policy = trustedTypes.createPolicy("nextjs#bundler", policy);
|
||||||
|
/******/ }
|
||||||
|
/******/ }
|
||||||
|
/******/ return policy;
|
||||||
|
/******/ };
|
||||||
|
/******/ }();
|
||||||
|
/******/
|
||||||
|
/******/ /* webpack/runtime/trusted types script */
|
||||||
|
/******/ !function() {
|
||||||
|
/******/ __webpack_require__.ts = function(script) { return __webpack_require__.tt().createScript(script); };
|
||||||
|
/******/ }();
|
||||||
|
/******/
|
||||||
|
/******/ /* webpack/runtime/react refresh */
|
||||||
|
/******/ !function() {
|
||||||
|
/******/ if (__webpack_require__.i) {
|
||||||
|
/******/ __webpack_require__.i.push(function(options) {
|
||||||
|
/******/ var originalFactory = options.factory;
|
||||||
|
/******/ options.factory = function(moduleObject, moduleExports, webpackRequire) {
|
||||||
|
/******/ var hasRefresh = typeof self !== "undefined" && !!self.$RefreshInterceptModuleExecution$;
|
||||||
|
/******/ var cleanup = hasRefresh ? self.$RefreshInterceptModuleExecution$(moduleObject.id) : function() {};
|
||||||
|
/******/ try {
|
||||||
|
/******/ originalFactory.call(this, moduleObject, moduleExports, webpackRequire);
|
||||||
|
/******/ } finally {
|
||||||
|
/******/ cleanup();
|
||||||
|
/******/ }
|
||||||
|
/******/ }
|
||||||
|
/******/ })
|
||||||
|
/******/ }
|
||||||
|
/******/ }();
|
||||||
|
/******/
|
||||||
|
/******/ /* webpack/runtime/compat */
|
||||||
|
/******/
|
||||||
|
/******/
|
||||||
|
/******/ // noop fns to prevent runtime errors during initialization
|
||||||
|
/******/ if (typeof self !== "undefined") {
|
||||||
|
/******/ self.$RefreshReg$ = function () {};
|
||||||
|
/******/ self.$RefreshSig$ = function () {
|
||||||
|
/******/ return function (type) {
|
||||||
|
/******/ return type;
|
||||||
|
/******/ };
|
||||||
|
/******/ };
|
||||||
|
/******/ }
|
||||||
|
/******/
|
||||||
|
/************************************************************************/
|
||||||
|
/******/
|
||||||
|
/******/ // startup
|
||||||
|
/******/ // Load entry module and return exports
|
||||||
|
/******/ // This entry module can't be inlined because the eval-source-map devtool is used.
|
||||||
|
/******/ var __webpack_exports__ = {};
|
||||||
|
/******/ __webpack_modules__["./node_modules/@ducanh2912/next-pwa/dist/fallback.js"](0, __webpack_exports__, __webpack_require__);
|
||||||
|
/******/
|
||||||
|
/******/ })()
|
||||||
|
;
|
After Width: | Height: | Size: 739 B |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 15 KiB |
|
@ -0,0 +1,24 @@
|
||||||
|
{
|
||||||
|
"name": "brizco",
|
||||||
|
"short_name": "briz",
|
||||||
|
"description": "harmonious Routine Management",
|
||||||
|
"start_url": "/",
|
||||||
|
"display": "standalone",
|
||||||
|
"background_color": "#ffffff",
|
||||||
|
"theme_color": "#356859",
|
||||||
|
"orientation": "any",
|
||||||
|
"scope": "/",
|
||||||
|
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"src": "../public/images/logo2.png",
|
||||||
|
"sizes": "192x192",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "../public/images/logo2.png",
|
||||||
|
"sizes": "512x512",
|
||||||
|
"type": "image/png"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
After Width: | Height: | Size: 3.2 KiB |
|
@ -1 +0,0 @@
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 394 80"><path fill="#000" d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7z"/><path fill="#000" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8z"/></svg>
|
|
Before Width: | Height: | Size: 1.3 KiB |
|
@ -0,0 +1,20 @@
|
||||||
|
<?xml version="1.0" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||||
|
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||||
|
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="1891.000000pt" height="1891.000000pt" viewBox="0 0 1891.000000 1891.000000"
|
||||||
|
preserveAspectRatio="xMidYMid meet">
|
||||||
|
<metadata>
|
||||||
|
Created by potrace 1.14, written by Peter Selinger 2001-2017
|
||||||
|
</metadata>
|
||||||
|
<g transform="translate(0.000000,1891.000000) scale(0.100000,-0.100000)"
|
||||||
|
fill="#000000" stroke="none">
|
||||||
|
<path d="M3167 13028 c15 -28 273 -506 573 -1062 l546 -1011 49 2 c28 0 2596
|
||||||
|
185 5708 409 l5657 409 0 652 0 653 -6281 0 -6280 0 28 -52z"/>
|
||||||
|
<path d="M3140 9454 l0 -1407 48 7 c39 5 12275 1471 12455 1492 l57 7 0 342 0
|
||||||
|
343 -92 7 c-94 6 -12410 615 -12448 615 l-20 0 0 -1406z"/>
|
||||||
|
<path d="M9645 8159 c-179 -24 -352 -90 -501 -189 -108 -72 -265 -235 -333
|
||||||
|
-344 -293 -473 -216 -1075 186 -1457 209 -199 448 -301 740 -316 734 -38 1316
|
||||||
|
614 1198 1343 -77 475 -438 850 -914 949 -94 19 -285 27 -376 14z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1013 B |
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
"name": "briz",
|
||||||
|
"short_name": "briz",
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"src": "/android-chrome-192x192.png",
|
||||||
|
"sizes": "192x192",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "/android-chrome-512x512.png",
|
||||||
|
"sizes": "512x512",
|
||||||
|
"type": "image/png"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"theme_color": "#ffffff",
|
||||||
|
"background_color": "#ffffff",
|
||||||
|
"display": "standalone"
|
||||||
|
}
|
|
@ -0,0 +1,115 @@
|
||||||
|
/**
|
||||||
|
* Copyright 2018 Google Inc. All Rights Reserved.
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// If the loader is already loaded, just stop.
|
||||||
|
if (!self.define) {
|
||||||
|
let registry = {};
|
||||||
|
|
||||||
|
// Used for `eval` and `importScripts` where we can't get script URL by other means.
|
||||||
|
// In both cases, it's safe to use a global var because those functions are synchronous.
|
||||||
|
let nextDefineUri;
|
||||||
|
|
||||||
|
const singleRequire = (uri, parentUri) => {
|
||||||
|
uri = new URL(uri + ".js", parentUri).href;
|
||||||
|
return registry[uri] || (
|
||||||
|
|
||||||
|
new Promise(resolve => {
|
||||||
|
if ("document" in self) {
|
||||||
|
const script = document.createElement("script");
|
||||||
|
script.src = uri;
|
||||||
|
script.onload = resolve;
|
||||||
|
document.head.appendChild(script);
|
||||||
|
} else {
|
||||||
|
nextDefineUri = uri;
|
||||||
|
importScripts(uri);
|
||||||
|
resolve();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
.then(() => {
|
||||||
|
let promise = registry[uri];
|
||||||
|
if (!promise) {
|
||||||
|
throw new Error(`Module ${uri} didn’t register its module`);
|
||||||
|
}
|
||||||
|
return promise;
|
||||||
|
})
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
self.define = (depsNames, factory) => {
|
||||||
|
const uri = nextDefineUri || ("document" in self ? document.currentScript.src : "") || location.href;
|
||||||
|
if (registry[uri]) {
|
||||||
|
// Module is already loading or loaded.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let exports = {};
|
||||||
|
const require = depUri => singleRequire(depUri, uri);
|
||||||
|
const specialDeps = {
|
||||||
|
module: { uri },
|
||||||
|
exports,
|
||||||
|
require
|
||||||
|
};
|
||||||
|
registry[uri] = Promise.all(depsNames.map(
|
||||||
|
depName => specialDeps[depName] || require(depName)
|
||||||
|
)).then(deps => {
|
||||||
|
factory(...deps);
|
||||||
|
return exports;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}
|
||||||
|
define(['./workbox-1e54d6fe'], (function (workbox) { 'use strict';
|
||||||
|
|
||||||
|
importScripts("/fallback-development.js");
|
||||||
|
self.skipWaiting();
|
||||||
|
workbox.clientsClaim();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The precacheAndRoute() method efficiently caches and responds to
|
||||||
|
* requests for URLs in the manifest.
|
||||||
|
* See https://goo.gl/S9QRab
|
||||||
|
*/
|
||||||
|
workbox.precacheAndRoute([{
|
||||||
|
"url": "/offline",
|
||||||
|
"revision": "development"
|
||||||
|
}], {
|
||||||
|
"ignoreURLParametersMatching": [/^utm_/, /^fbclid$/, /ts/]
|
||||||
|
});
|
||||||
|
workbox.cleanupOutdatedCaches();
|
||||||
|
workbox.registerRoute("/", new workbox.NetworkFirst({
|
||||||
|
"cacheName": "start-url",
|
||||||
|
plugins: [{
|
||||||
|
cacheWillUpdate: async ({
|
||||||
|
response: e
|
||||||
|
}) => e && "opaqueredirect" === e.type ? new Response(e.body, {
|
||||||
|
status: 200,
|
||||||
|
statusText: "OK",
|
||||||
|
headers: e.headers
|
||||||
|
}) : e
|
||||||
|
}, {
|
||||||
|
handlerDidError: async ({
|
||||||
|
request: e
|
||||||
|
}) => "undefined" != typeof self ? self.fallback(e) : Response.error()
|
||||||
|
}]
|
||||||
|
}), 'GET');
|
||||||
|
workbox.registerRoute(/.*/i, new workbox.NetworkOnly({
|
||||||
|
"cacheName": "dev",
|
||||||
|
plugins: [{
|
||||||
|
handlerDidError: async ({
|
||||||
|
request: e
|
||||||
|
}) => "undefined" != typeof self ? self.fallback(e) : Response.error()
|
||||||
|
}]
|
||||||
|
}), 'GET');
|
||||||
|
self.__WB_DISABLE_DEV_LOGS = true;
|
||||||
|
|
||||||
|
}));
|
||||||
|
//# sourceMappingURL=sw.js.map
|
|
@ -0,0 +1,102 @@
|
||||||
|
/*
|
||||||
|
* ATTENTION: An "eval-source-map" devtool has been used.
|
||||||
|
* This devtool is neither made for production nor for readable output files.
|
||||||
|
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
|
||||||
|
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
||||||
|
* or disable the default devtool with "devtool: false".
|
||||||
|
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
||||||
|
*/
|
||||||
|
/******/ (function() { // webpackBootstrap
|
||||||
|
/******/ "use strict";
|
||||||
|
/******/ var __webpack_modules__ = ({
|
||||||
|
|
||||||
|
/***/ "./node_modules/@ducanh2912/next-pwa/dist/sw-entry-worker.js":
|
||||||
|
/*!*******************************************************************!*\
|
||||||
|
!*** ./node_modules/@ducanh2912/next-pwa/dist/sw-entry-worker.js ***!
|
||||||
|
\*******************************************************************/
|
||||||
|
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
||||||
|
|
||||||
|
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\nself.onmessage = async (e)=>{\n switch(e.data.type){\n case \"__START_URL_CACHE__\":\n {\n let t = e.data.url, a = await fetch(t);\n if (!a.redirected) return (await caches.open(\"start-url\")).put(t, a);\n return Promise.resolve();\n }\n case \"__FRONTEND_NAV_CACHE__\":\n {\n let t = e.data.url, a = await caches.open(\"pages\");\n if (await a.match(t, {\n ignoreSearch: !0\n })) return;\n let s = await fetch(t);\n if (!s.ok) return;\n if (a.put(t, s.clone()), e.data.shouldCacheAggressively && s.headers.get(\"Content-Type\")?.includes(\"text/html\")) try {\n let e = await s.text(), t = [], a = await caches.open(\"static-style-assets\"), r = await caches.open(\"next-static-js-assets\"), c = await caches.open(\"static-js-assets\");\n for (let [s, r] of e.matchAll(/<link.*?href=['\"](.*?)['\"].*?>/g))/rel=['\"]stylesheet['\"]/.test(s) && t.push(a.match(r).then((e)=>e ? Promise.resolve() : a.add(r)));\n for (let [, a] of e.matchAll(/<script.*?src=['\"](.*?)['\"].*?>/g)){\n let e = /\\/_next\\/static.+\\.js$/i.test(a) ? r : c;\n t.push(e.match(a).then((t)=>t ? Promise.resolve() : e.add(a)));\n }\n return await Promise.all(t);\n } catch {}\n return Promise.resolve();\n }\n default:\n return Promise.resolve();\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGR1Y2FuaDI5MTIvbmV4dC1wd2EvZGlzdC9zdy1lbnRyeS13b3JrZXIuanMiLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQGR1Y2FuaDI5MTIvbmV4dC1wd2EvZGlzdC9zdy1lbnRyeS13b3JrZXIuanM/NmM4NCJdLCJzb3VyY2VzQ29udGVudCI6WyJzZWxmLm9ubWVzc2FnZSA9IGFzeW5jIChlKT0+e1xuICAgIHN3aXRjaChlLmRhdGEudHlwZSl7XG4gICAgICAgIGNhc2UgXCJfX1NUQVJUX1VSTF9DQUNIRV9fXCI6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBlLmRhdGEudXJsLCBhID0gYXdhaXQgZmV0Y2godCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhLnJlZGlyZWN0ZWQpIHJldHVybiAoYXdhaXQgY2FjaGVzLm9wZW4oXCJzdGFydC11cmxcIikpLnB1dCh0LCBhKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJfX0ZST05URU5EX05BVl9DQUNIRV9fXCI6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBlLmRhdGEudXJsLCBhID0gYXdhaXQgY2FjaGVzLm9wZW4oXCJwYWdlc1wiKTtcbiAgICAgICAgICAgICAgICBpZiAoYXdhaXQgYS5tYXRjaCh0LCB7XG4gICAgICAgICAgICAgICAgICAgIGlnbm9yZVNlYXJjaDogITBcbiAgICAgICAgICAgICAgICB9KSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGxldCBzID0gYXdhaXQgZmV0Y2godCk7XG4gICAgICAgICAgICAgICAgaWYgKCFzLm9rKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKGEucHV0KHQsIHMuY2xvbmUoKSksIGUuZGF0YS5zaG91bGRDYWNoZUFnZ3Jlc3NpdmVseSAmJiBzLmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpPy5pbmNsdWRlcyhcInRleHQvaHRtbFwiKSkgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGUgPSBhd2FpdCBzLnRleHQoKSwgdCA9IFtdLCBhID0gYXdhaXQgY2FjaGVzLm9wZW4oXCJzdGF0aWMtc3R5bGUtYXNzZXRzXCIpLCByID0gYXdhaXQgY2FjaGVzLm9wZW4oXCJuZXh0LXN0YXRpYy1qcy1hc3NldHNcIiksIGMgPSBhd2FpdCBjYWNoZXMub3BlbihcInN0YXRpYy1qcy1hc3NldHNcIik7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IFtzLCByXSBvZiBlLm1hdGNoQWxsKC88bGluay4qP2hyZWY9WydcIl0oLio/KVsnXCJdLio/Pi9nKSkvcmVsPVsnXCJdc3R5bGVzaGVldFsnXCJdLy50ZXN0KHMpICYmIHQucHVzaChhLm1hdGNoKHIpLnRoZW4oKGUpPT5lID8gUHJvbWlzZS5yZXNvbHZlKCkgOiBhLmFkZChyKSkpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBbLCBhXSBvZiBlLm1hdGNoQWxsKC88c2NyaXB0Lio/c3JjPVsnXCJdKC4qPylbJ1wiXS4qPz4vZykpe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGUgPSAvXFwvX25leHRcXC9zdGF0aWMuK1xcLmpzJC9pLnRlc3QoYSkgPyByIDogYztcbiAgICAgICAgICAgICAgICAgICAgICAgIHQucHVzaChlLm1hdGNoKGEpLnRoZW4oKHQpPT50ID8gUHJvbWlzZS5yZXNvbHZlKCkgOiBlLmFkZChhKSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbCh0KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoICB7fVxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@ducanh2912/next-pwa/dist/sw-entry-worker.js\n"));
|
||||||
|
|
||||||
|
/***/ })
|
||||||
|
|
||||||
|
/******/ });
|
||||||
|
/************************************************************************/
|
||||||
|
/******/ // The require scope
|
||||||
|
/******/ var __webpack_require__ = {};
|
||||||
|
/******/
|
||||||
|
/************************************************************************/
|
||||||
|
/******/ /* webpack/runtime/make namespace object */
|
||||||
|
/******/ !function() {
|
||||||
|
/******/ // define __esModule on exports
|
||||||
|
/******/ __webpack_require__.r = function(exports) {
|
||||||
|
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
||||||
|
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
||||||
|
/******/ }
|
||||||
|
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
||||||
|
/******/ };
|
||||||
|
/******/ }();
|
||||||
|
/******/
|
||||||
|
/******/ /* webpack/runtime/trusted types policy */
|
||||||
|
/******/ !function() {
|
||||||
|
/******/ var policy;
|
||||||
|
/******/ __webpack_require__.tt = function() {
|
||||||
|
/******/ // Create Trusted Type policy if Trusted Types are available and the policy doesn't exist yet.
|
||||||
|
/******/ if (policy === undefined) {
|
||||||
|
/******/ policy = {
|
||||||
|
/******/ createScript: function(script) { return script; }
|
||||||
|
/******/ };
|
||||||
|
/******/ if (typeof trustedTypes !== "undefined" && trustedTypes.createPolicy) {
|
||||||
|
/******/ policy = trustedTypes.createPolicy("nextjs#bundler", policy);
|
||||||
|
/******/ }
|
||||||
|
/******/ }
|
||||||
|
/******/ return policy;
|
||||||
|
/******/ };
|
||||||
|
/******/ }();
|
||||||
|
/******/
|
||||||
|
/******/ /* webpack/runtime/trusted types script */
|
||||||
|
/******/ !function() {
|
||||||
|
/******/ __webpack_require__.ts = function(script) { return __webpack_require__.tt().createScript(script); };
|
||||||
|
/******/ }();
|
||||||
|
/******/
|
||||||
|
/******/ /* webpack/runtime/react refresh */
|
||||||
|
/******/ !function() {
|
||||||
|
/******/ if (__webpack_require__.i) {
|
||||||
|
/******/ __webpack_require__.i.push(function(options) {
|
||||||
|
/******/ var originalFactory = options.factory;
|
||||||
|
/******/ options.factory = function(moduleObject, moduleExports, webpackRequire) {
|
||||||
|
/******/ var hasRefresh = typeof self !== "undefined" && !!self.$RefreshInterceptModuleExecution$;
|
||||||
|
/******/ var cleanup = hasRefresh ? self.$RefreshInterceptModuleExecution$(moduleObject.id) : function() {};
|
||||||
|
/******/ try {
|
||||||
|
/******/ originalFactory.call(this, moduleObject, moduleExports, webpackRequire);
|
||||||
|
/******/ } finally {
|
||||||
|
/******/ cleanup();
|
||||||
|
/******/ }
|
||||||
|
/******/ }
|
||||||
|
/******/ })
|
||||||
|
/******/ }
|
||||||
|
/******/ }();
|
||||||
|
/******/
|
||||||
|
/******/ /* webpack/runtime/compat */
|
||||||
|
/******/
|
||||||
|
/******/
|
||||||
|
/******/ // noop fns to prevent runtime errors during initialization
|
||||||
|
/******/ if (typeof self !== "undefined") {
|
||||||
|
/******/ self.$RefreshReg$ = function () {};
|
||||||
|
/******/ self.$RefreshSig$ = function () {
|
||||||
|
/******/ return function (type) {
|
||||||
|
/******/ return type;
|
||||||
|
/******/ };
|
||||||
|
/******/ };
|
||||||
|
/******/ }
|
||||||
|
/******/
|
||||||
|
/************************************************************************/
|
||||||
|
/******/
|
||||||
|
/******/ // startup
|
||||||
|
/******/ // Load entry module and return exports
|
||||||
|
/******/ // This entry module can't be inlined because the eval-source-map devtool is used.
|
||||||
|
/******/ var __webpack_exports__ = {};
|
||||||
|
/******/ __webpack_modules__["./node_modules/@ducanh2912/next-pwa/dist/sw-entry-worker.js"](0, __webpack_exports__, __webpack_require__);
|
||||||
|
/******/
|
||||||
|
/******/ })()
|
||||||
|
;
|
|
@ -1 +0,0 @@
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 283 64"><path fill="black" d="M141 16c-11 0-19 7-19 18s9 18 20 18c7 0 13-3 16-7l-7-5c-2 3-6 4-9 4-5 0-9-3-10-7h28v-3c0-11-8-18-19-18zm-9 15c1-4 4-7 9-7s8 3 9 7h-18zm117-15c-11 0-19 7-19 18s9 18 20 18c6 0 12-3 16-7l-8-5c-2 3-5 4-8 4-5 0-9-3-11-7h28l1-3c0-11-8-18-19-18zm-10 15c2-4 5-7 10-7s8 3 9 7h-19zm-39 3c0 6 4 10 10 10 4 0 7-2 9-5l8 5c-3 5-9 8-17 8-11 0-19-7-19-18s8-18 19-18c8 0 14 3 17 8l-8 5c-2-3-5-5-9-5-6 0-10 4-10 10zm83-29v46h-9V5h9zM37 0l37 64H0L37 0zm92 5-27 48L74 5h10l18 30 17-30h10zm59 12v10l-3-1c-6 0-10 4-10 10v15h-9V17h9v9c0-5 6-9 13-9z"/></svg>
|
|
Before Width: | Height: | Size: 629 B |
|
@ -934,62 +934,7 @@ export default function RootLayout({ children }) {
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
// const UpdateShiftPlan = async (body, id) => {
|
|
||||||
// setLoading(true);
|
|
||||||
// try {
|
|
||||||
// const data = await Chapar.put(
|
|
||||||
// `${process.env.NEXT_PUBLIC_API_URL}/shift/plan`,
|
|
||||||
// body,
|
|
||||||
|
|
||||||
// {
|
|
||||||
// headers: {
|
|
||||||
// Authorization: "Bearer " + localStorage.getItem("token"),
|
|
||||||
// },
|
|
||||||
// }
|
|
||||||
// );
|
|
||||||
// toast.success(`شیفت ویرایش شد`, {
|
|
||||||
// position: "bottom-right",
|
|
||||||
// closeOnClick: true,
|
|
||||||
// });
|
|
||||||
|
|
||||||
// setLoading(false);
|
|
||||||
// setShiftPlanData(id);
|
|
||||||
// router.push("/shifts");
|
|
||||||
// } catch ({ error, status }) {
|
|
||||||
// toast.error(`${error?.response?.data?.message}`, {
|
|
||||||
// position: "bottom-right",
|
|
||||||
// closeOnClick: true,
|
|
||||||
// });
|
|
||||||
// setLoading(false);
|
|
||||||
// }
|
|
||||||
// };
|
|
||||||
// const CreateShifPlan = async (body) => {
|
|
||||||
// setLoading(true);
|
|
||||||
// try {
|
|
||||||
// const data = await Chapar.post(
|
|
||||||
// `${process.env.NEXT_PUBLIC_API_URL}/shift/plan`,
|
|
||||||
// JSON.stringify(body),
|
|
||||||
// {
|
|
||||||
// headers: {
|
|
||||||
// Authorization: "Bearer " + localStorage.getItem("token"),
|
|
||||||
// },
|
|
||||||
// }
|
|
||||||
// );
|
|
||||||
// toast.success(`مدیریت شیفت ساخته شد`, {
|
|
||||||
// position: "bottom-right",
|
|
||||||
// closeOnClick: true,
|
|
||||||
// });
|
|
||||||
|
|
||||||
// router.push("/shifts");
|
|
||||||
|
|
||||||
// } catch ({ error, status }) {
|
|
||||||
// toast.error(`${error?.response?.data?.message}`, {
|
|
||||||
// position: "bottom-right",
|
|
||||||
// closeOnClick: true,
|
|
||||||
// });
|
|
||||||
// setLoading(false);
|
|
||||||
// }
|
|
||||||
// };
|
|
||||||
const GetShifPlans = async (page, dataFilter) => {
|
const GetShifPlans = async (page, dataFilter) => {
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
try {
|
try {
|
||||||
|
@ -1307,7 +1252,7 @@ export default function RootLayout({ children }) {
|
||||||
const data = await Chapar.get(
|
const data = await Chapar.get(
|
||||||
`${process.env.NEXT_PUBLIC_API_URL}/activity?page=${page}${
|
`${process.env.NEXT_PUBLIC_API_URL}/activity?page=${page}${
|
||||||
date ? `&selectedDate=${date}` : ""
|
date ? `&selectedDate=${date}` : ""
|
||||||
}${shift ? `&selectedShift=${shift}` : ""}${
|
}${shift ? `&selectedShiftPlanId=${shift}` : ""}${
|
||||||
dateQueryFilter != null ? `&dateQueryFilter=${dateQueryFilter}` : ""
|
dateQueryFilter != null ? `&dateQueryFilter=${dateQueryFilter}` : ""
|
||||||
}`,
|
}`,
|
||||||
|
|
||||||
|
@ -1545,7 +1490,7 @@ export default function RootLayout({ children }) {
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
try {
|
try {
|
||||||
const data = await Chapar.get(
|
const data = await Chapar.get(
|
||||||
`${process.env.NEXT_PUBLIC_API_URL}/page/dashboard/app`,
|
`${process.env.NEXT_PUBLIC_API_URL}/page/app/dashboard`,
|
||||||
|
|
||||||
{
|
{
|
||||||
headers: {
|
headers: {
|
||||||
|
|
|
@ -98,19 +98,19 @@ const CompleteShift = () => {
|
||||||
if (selectDayForShift == 0) {
|
if (selectDayForShift == 0) {
|
||||||
CTX.GetActivity(
|
CTX.GetActivity(
|
||||||
moment().locale("fa").subtract(1, "day").unix() * 1000,
|
moment().locale("fa").subtract(1, "day").unix() * 1000,
|
||||||
id,
|
siftsData[index].currentShiftPlanId,
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
} else if (selectDayForShift == 1) {
|
} else if (selectDayForShift == 1) {
|
||||||
CTX.GetActivity(
|
CTX.GetActivity(
|
||||||
moment().locale("fa").startOf("day").unix() * 1000,
|
moment().locale("fa").startOf("day").unix() * 1000,
|
||||||
id,
|
siftsData[index].currentShiftPlanId,
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
} else if (selectDayForShift == 2) {
|
} else if (selectDayForShift == 2) {
|
||||||
CTX.GetActivity(
|
CTX.GetActivity(
|
||||||
moment().locale("fa").add(1, "day").unix() * 1000,
|
moment().locale("fa").add(1, "day").unix() * 1000,
|
||||||
id,
|
siftsData[index].currentShiftPlanId,
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -178,19 +178,19 @@ const CompleteShift = () => {
|
||||||
if (selectDayForShift == 0) {
|
if (selectDayForShift == 0) {
|
||||||
CTX.GetActivity(
|
CTX.GetActivity(
|
||||||
moment().locale("fa").subtract(1, "day")?.unix() * 1000,
|
moment().locale("fa").subtract(1, "day")?.unix() * 1000,
|
||||||
siftsData[activeShifPlan].id,
|
siftsData[activeShifPlan].currentShiftPlanId,
|
||||||
pageGetActivity + 1
|
pageGetActivity + 1
|
||||||
);
|
);
|
||||||
} else if (selectDayForShift == 1) {
|
} else if (selectDayForShift == 1) {
|
||||||
CTX.GetActivity(
|
CTX.GetActivity(
|
||||||
moment().locale("fa").startOf("day").unix() * 1000,
|
moment().locale("fa").startOf("day").unix() * 1000,
|
||||||
siftsData[activeShifPlan].id,
|
siftsData[activeShifPlan].currentShiftPlanId,
|
||||||
pageGetActivity + 1
|
pageGetActivity + 1
|
||||||
);
|
);
|
||||||
} else if (selectDayForShift == 2) {
|
} else if (selectDayForShift == 2) {
|
||||||
CTX.GetActivity(
|
CTX.GetActivity(
|
||||||
moment().locale("fa").add(1, "day").unix() * 1000,
|
moment().locale("fa").add(1, "day").unix() * 1000,
|
||||||
siftsData[activeShifPlan].id,
|
siftsData[activeShifPlan].currentShiftPlanId,
|
||||||
pageGetActivity + 1
|
pageGetActivity + 1
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -271,7 +271,12 @@ const CompleteShift = () => {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
<p className="mb-0">{e?.title} </p>
|
<p className="mb-0 font-medium text-sm mt-1 pr-2">
|
||||||
|
{e?.title}{" "}
|
||||||
|
<small className="text-red-900">
|
||||||
|
({e?.currentSupervisorFullName})
|
||||||
|
</small>{" "}
|
||||||
|
</p>
|
||||||
<div className="flex">
|
<div className="flex">
|
||||||
<div
|
<div
|
||||||
className={`bg-gray-400 rounded-full mr-1 ${
|
className={`bg-gray-400 rounded-full mr-1 ${
|
||||||
|
@ -280,23 +285,22 @@ const CompleteShift = () => {
|
||||||
: ""
|
: ""
|
||||||
}`}
|
}`}
|
||||||
>
|
>
|
||||||
<p className="mb-0 text-sm p-1 text-white ">
|
<p className="mb-0 text-[12px] p-1 text-white ">
|
||||||
{" "}
|
{" "}
|
||||||
<PersianNumber
|
<PersianNumber
|
||||||
number={e?.totalActivitiesCount}
|
number={e?.totalActivitiesCount}
|
||||||
style="mx-1 text-base"
|
style="mx-1 !text-[12px]"
|
||||||
/>
|
/>
|
||||||
{!e?.isCompleted && "فعالیت"}
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{e?.undoneActivitiesCount != 0 && (
|
{e?.undoneActivitiesCount != 0 && (
|
||||||
<div className="bg-red-700 w-[30px] h-[30px] rounded-full mr-1">
|
<div className="bg-red-700 w-[30px] h-[30px] rounded-full mr-1">
|
||||||
<p className="mb-0 text-sm p-1 text-white text-center mt-[2px]">
|
<p className="mb-0 text-[12px] p-1 text-white text-center mt-[2px]">
|
||||||
{" "}
|
{" "}
|
||||||
<PersianNumber
|
<PersianNumber
|
||||||
number={e?.undoneActivitiesCount}
|
number={e?.undoneActivitiesCount}
|
||||||
style="mx-1 text-base"
|
style="mx-1 !text-[12px]"
|
||||||
/>
|
/>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
@ -304,7 +308,7 @@ const CompleteShift = () => {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className={` ${e?.isCompleted ? "w-[170px]" : ""}`}>
|
<div className={` ${e?.isCompleted ? "" : ""}`}>
|
||||||
{e?.isCompleted && (
|
{e?.isCompleted && (
|
||||||
<div
|
<div
|
||||||
className="bg-sky-600 w-fit px-2 h-[30px] rounded-full mr-1 !z-50 relative"
|
className="bg-sky-600 w-fit px-2 h-[30px] rounded-full mr-1 !z-50 relative"
|
||||||
|
@ -312,9 +316,9 @@ const CompleteShift = () => {
|
||||||
handleGoToReport(e.title, e.currentShiftPlanId)
|
handleGoToReport(e.title, e.currentShiftPlanId)
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
<p className="mb-0 text-sm p-1 text-white text-center mt-[2px]">
|
<p className="mb-0 text-[12px] p-1 text-white text-center mt-[2px]">
|
||||||
{" "}
|
{" "}
|
||||||
گزارش شیفت{" "}
|
گزارش{" "}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
|
@ -19,24 +19,23 @@ import Chapar from "plugins/Chapar";
|
||||||
|
|
||||||
const Calendar = () => {
|
const Calendar = () => {
|
||||||
const CTX = useContext(AppContext);
|
const CTX = useContext(AppContext);
|
||||||
const shiftsData = CTX.state.shiftsData;
|
|
||||||
const searchUserChoose = CTX.state.searchUserChoose;
|
const searchUserChoose = CTX.state.searchUserChoose;
|
||||||
const usersData = CTX.state.usersData;
|
const usersData = CTX.state.usersData;
|
||||||
const routinesData = CTX.state.routinesData;
|
const routinesData = CTX.state.routinesData;
|
||||||
const routineShiftPlan = CTX.state.routineShiftPlan;
|
|
||||||
const positionsData = CTX.state.positionsData;
|
const positionsData = CTX.state.positionsData;
|
||||||
const shiftPlanData = CTX.state.shiftPlanData;
|
const shiftPlanData = CTX.state.shiftPlanData;
|
||||||
|
const shiftplansData = CTX.state.shiftPlansData;
|
||||||
|
|
||||||
const [daysUntilWeek, setDaysUntilWeek] = useState([]);
|
const [daysUntilWeek, setDaysUntilWeek] = useState([]);
|
||||||
const [selectDay, setSelectDay] = useState(null);
|
const [selectDay, setSelectDay] = useState(null);
|
||||||
const [selectShift, setselectShift] = useState(-1);
|
const [selectShift, setselectShift] = useState(-1);
|
||||||
const [selectRoutine, setSelectRoutine] = useState(-1);
|
const [selectRoutine, setSelectRoutine] = useState(-1);
|
||||||
const [shiftsPlan, setShiftsPlan] = useState([]);
|
const [shiftsCurrentDaysData, setShiftsCurrentDaysData] = useState([]);
|
||||||
const [manageShiftEmployeesData, setManageShiftEmployeesData] = useState([]);
|
const [daysManageShiftData, setDaysManageShiftData] = useState([]);
|
||||||
|
|
||||||
const [editManageShift, setEditManageShift] = useState(false);
|
const [editManageShift, setEditManageShift] = useState(false);
|
||||||
const [superId, setSuperId] = useState(null);
|
const [superId, setSuperId] = useState(null);
|
||||||
const [superData, setSuperData] = useState(false);
|
const [superData, setSuperData] = useState(false);
|
||||||
|
|
||||||
const [shiftPlanSteps, setShiftPlanSteps] = useState(0);
|
const [shiftPlanSteps, setShiftPlanSteps] = useState(0);
|
||||||
|
|
||||||
const [positionSelectNameBottomSheet, setPositionSelectNameBottomSheet] =
|
const [positionSelectNameBottomSheet, setPositionSelectNameBottomSheet] =
|
||||||
|
@ -47,63 +46,47 @@ const Calendar = () => {
|
||||||
const [idRoutineShiftPlan, setIdRoutineShiftPlan] = useState(null);
|
const [idRoutineShiftPlan, setIdRoutineShiftPlan] = useState(null);
|
||||||
const [currentShiftPlanId, setCurrentShiftPlanId] = useState(null);
|
const [currentShiftPlanId, setCurrentShiftPlanId] = useState(null);
|
||||||
|
|
||||||
const week = [
|
const transformData = (responseArray) => {
|
||||||
{ key: "شنبه", value: 6 },
|
console.log("responseArray", responseArray);
|
||||||
{ 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 today = moment();
|
|
||||||
const lastDayOfNextWeek = today.clone().add(1, "week").endOf("week");
|
|
||||||
|
|
||||||
const daysArray = [];
|
const daysArray = [];
|
||||||
let currentDate = today.clone();
|
return responseArray.map((item) => {
|
||||||
|
const date = moment(item.dateTime).locale("fa");
|
||||||
while (currentDate.isBefore(lastDayOfNextWeek, "day")) {
|
const isToday = date.isSame(moment(), "day");
|
||||||
const shamsiDate = currentDate.format("jYYYY/jM/jD");
|
|
||||||
const dayOfWeek = week.find((day) => day.value === currentDate.day()).key;
|
|
||||||
const isToday = currentDate.isSame(moment(), "day");
|
|
||||||
const value = currentDate.day();
|
|
||||||
|
|
||||||
daysArray.push({
|
daysArray.push({
|
||||||
checkDay: shamsiDate,
|
checkDay: date.format("jYYYY/jM/jD"),
|
||||||
date: currentDate.format("jD / jM"),
|
date: date.format("jD / jM"),
|
||||||
dayOfWeek,
|
dayOfWeek: date.format("dddd"),
|
||||||
isToday,
|
isToday: isToday,
|
||||||
value,
|
totalShiftPercent: (item.totalShiftPlans / item.totalShifts) * 100,
|
||||||
});
|
});
|
||||||
|
|
||||||
currentDate.add(1, "day");
|
return setDaysUntilWeek(daysArray);
|
||||||
}
|
});
|
||||||
console.log(daysArray);
|
|
||||||
|
|
||||||
return setDaysUntilWeek(daysArray);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleManageShiftEmployeesOpen = (e) => {
|
const GetListDaysWithShiftByRoutine = async (id) => {
|
||||||
setManageShiftEmployeesData(
|
try {
|
||||||
usersData.map((item) => ({
|
const data = await Chapar.get(
|
||||||
key:
|
`${process.env.NEXT_PUBLIC_API_URL}/page/app/shifting?routineId=${id}`,
|
||||||
item.firstName +
|
|
||||||
" " +
|
|
||||||
item.lastName +
|
|
||||||
"( " +
|
|
||||||
item.roleNames[0] +
|
|
||||||
" )",
|
|
||||||
|
|
||||||
value: item.userId,
|
{
|
||||||
}))
|
headers: {
|
||||||
);
|
Authorization: "Bearer " + localStorage.getItem("token"),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
setDaysManageShiftData(data);
|
||||||
|
transformData(data);
|
||||||
|
} catch ({ error, status }) {
|
||||||
|
toast.error(`${error?.response?.data?.message}`, {
|
||||||
|
position: "bottom-right",
|
||||||
|
closeOnClick: true,
|
||||||
|
});
|
||||||
|
setLoading(false);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const body = {
|
const body = {
|
||||||
|
@ -111,7 +94,7 @@ const Calendar = () => {
|
||||||
daysUntilWeek[selectDay]?.checkDay &&
|
daysUntilWeek[selectDay]?.checkDay &&
|
||||||
moment.utc(daysUntilWeek[selectDay].checkDay, "jYYYY-jMM-jDDTHH").unix() *
|
moment.utc(daysUntilWeek[selectDay].checkDay, "jYYYY-jMM-jDDTHH").unix() *
|
||||||
1000,
|
1000,
|
||||||
shiftId: shiftsPlan && shiftsPlan[selectShift]?.id,
|
shiftId: shiftPlanData && shiftPlanData.shiftId,
|
||||||
routineId: routinesData && routinesData[selectRoutine]?.id,
|
routineId: routinesData && routinesData[selectRoutine]?.id,
|
||||||
supervisionUserId: superId,
|
supervisionUserId: superId,
|
||||||
userAndPositionIds,
|
userAndPositionIds,
|
||||||
|
@ -122,7 +105,7 @@ const Calendar = () => {
|
||||||
daysUntilWeek[selectDay]?.checkDay &&
|
daysUntilWeek[selectDay]?.checkDay &&
|
||||||
moment.utc(daysUntilWeek[selectDay].checkDay, "jYYYY-jMM-jDDTHH").unix() *
|
moment.utc(daysUntilWeek[selectDay].checkDay, "jYYYY-jMM-jDDTHH").unix() *
|
||||||
1000,
|
1000,
|
||||||
shiftId: shiftsPlan && shiftsPlan[selectShift]?.id,
|
shiftId: shiftPlanData && shiftPlanData.shiftId,
|
||||||
routineId: routinesData && routinesData[selectRoutine]?.id,
|
routineId: routinesData && routinesData[selectRoutine]?.id,
|
||||||
userAndPositionIds,
|
userAndPositionIds,
|
||||||
supervisionUserId: superId,
|
supervisionUserId: superId,
|
||||||
|
@ -133,20 +116,37 @@ const Calendar = () => {
|
||||||
setSelectRoutine(index);
|
setSelectRoutine(index);
|
||||||
setShiftPlanSteps(1);
|
setShiftPlanSteps(1);
|
||||||
setIdRoutineShiftPlan(id);
|
setIdRoutineShiftPlan(id);
|
||||||
|
GetListDaysWithShiftByRoutine(id);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleRoutineShiftPlanWithDay = (index) => {
|
const handleRoutineShiftPlanWithDay = (index) => {
|
||||||
setSelectDay(index);
|
setSelectDay(index);
|
||||||
setShiftPlanSteps(2);
|
setShiftPlanSteps(2);
|
||||||
|
setShiftsCurrentDaysData(daysManageShiftData[index]?.shifts);
|
||||||
|
setselectShift(-1);
|
||||||
|
|
||||||
CTX.GetRoutineShiftPlan(
|
// CTX.GetRoutineShiftPlan(
|
||||||
idRoutineShiftPlan,
|
// idRoutineShiftPlan,
|
||||||
moment(daysUntilWeek[index]?.checkDay, "jYYYY-jM-jD").unix() * 1000
|
// moment(daysUntilWeek[index]?.checkDay, "jYYYY-jM-jD").unix() * 1000
|
||||||
);
|
// );
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleSelectShift = (index) => {
|
||||||
|
console.log("usersData.length", usersData.length);
|
||||||
|
setselectShift(index);
|
||||||
|
setShiftPlanSteps(3);
|
||||||
|
if (usersData.length <= 0) {
|
||||||
|
// User data is not in state, send request to get user
|
||||||
|
CTX.GetUsers();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (positionsData.length <= 0) {
|
||||||
|
CTX.GetPositions();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const UpdateShiftPlan = async (body, id) => {
|
const UpdateShiftPlan = async (body, id) => {
|
||||||
setLoading(true);
|
CTX.setLoading(true);
|
||||||
try {
|
try {
|
||||||
const data = await Chapar.put(
|
const data = await Chapar.put(
|
||||||
`${process.env.NEXT_PUBLIC_API_URL}/shift/plan`,
|
`${process.env.NEXT_PUBLIC_API_URL}/shift/plan`,
|
||||||
|
@ -163,11 +163,17 @@ const Calendar = () => {
|
||||||
closeOnClick: true,
|
closeOnClick: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
CTX.setLoading(false);
|
|
||||||
CTX.setShiftPlanData(id);
|
CTX.setShiftPlanData(id);
|
||||||
router.push("/shifts");
|
|
||||||
|
setSelectDay(null);
|
||||||
|
setSuperId(null);
|
||||||
|
setUserAndPositionIds([]);
|
||||||
|
setShiftPlanSteps(1);
|
||||||
|
GetListDaysWithShiftByRoutine(idRoutineShiftPlan);
|
||||||
|
|
||||||
|
CTX.setLoading(false);
|
||||||
} catch ({ error, status }) {
|
} catch ({ error, status }) {
|
||||||
toast.error(`${error?.response?.data?.message}`, {
|
toast.error(`${error?.response?.data?.message}dsdsdsds`, {
|
||||||
position: "bottom-right",
|
position: "bottom-right",
|
||||||
closeOnClick: true,
|
closeOnClick: true,
|
||||||
});
|
});
|
||||||
|
@ -192,10 +198,10 @@ const Calendar = () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
setSelectDay(null);
|
setSelectDay(null);
|
||||||
setShiftsPlan([]);
|
|
||||||
setSuperId(null);
|
setSuperId(null);
|
||||||
setUserAndPositionIds([]);
|
setUserAndPositionIds([]);
|
||||||
setShiftPlanSteps(1);
|
setShiftPlanSteps(1);
|
||||||
|
GetListDaysWithShiftByRoutine(idRoutineShiftPlan);
|
||||||
CTX.setLoading(false);
|
CTX.setLoading(false);
|
||||||
|
|
||||||
// router.push("/shifts");
|
// router.push("/shifts");
|
||||||
|
@ -216,50 +222,38 @@ const Calendar = () => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handleDeleteUser = (id) => {
|
||||||
|
const updatedUsers = userAndPositionIds.filter((user) => user.key !== id);
|
||||||
|
setUserAndPositionIds(updatedUsers);
|
||||||
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
CTX.GetRoutines();
|
CTX.GetRoutines();
|
||||||
daysEndOfMonth();
|
|
||||||
setSelectDay(-1);
|
setSelectDay(-1);
|
||||||
CTX.GetShifts();
|
|
||||||
CTX.GetPositions();
|
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
handleManageShiftEmployeesOpen();
|
// console.log("11111", shiftsPlan && shiftsPlan[selectShift]);
|
||||||
}, [usersData]);
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
setShiftsPlan(
|
|
||||||
routineShiftPlan?.find((e) => e?.day == daysUntilWeek[selectDay]?.value)
|
|
||||||
?.shifts
|
|
||||||
);
|
|
||||||
|
|
||||||
setselectShift(-1);
|
|
||||||
}, [routineShiftPlan]);
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
console.log("11111", shiftsPlan && shiftsPlan[selectShift]);
|
|
||||||
setEditManageShift(false);
|
setEditManageShift(false);
|
||||||
CTX.setShiftPlanData(null);
|
CTX.setShiftPlanData(null);
|
||||||
if (shiftsPlan && shiftsPlan[selectShift]?.hasCurrentShiftPlan) {
|
if (
|
||||||
|
shiftsCurrentDaysData &&
|
||||||
|
shiftsCurrentDaysData[selectShift]?.hasCurrentShiftPlan
|
||||||
|
) {
|
||||||
setEditManageShift(true);
|
setEditManageShift(true);
|
||||||
setCurrentShiftPlanId(shiftsPlan[selectShift]?.currentShiftPlanId);
|
setCurrentShiftPlanId(
|
||||||
CTX.GetShiftPlan(shiftsPlan[selectShift]?.currentShiftPlanId);
|
shiftsCurrentDaysData[selectShift]?.currentShiftPlanId
|
||||||
}
|
);
|
||||||
|
CTX.GetShiftPlan(shiftsCurrentDaysData[selectShift]?.currentShiftPlanId);
|
||||||
if (!!usersData.length <= 0) {
|
|
||||||
// User data is not in state, send request to get user
|
|
||||||
CTX.GetUsers();
|
|
||||||
}
|
}
|
||||||
}, [selectShift]);
|
}, [selectShift]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
console.log(
|
|
||||||
"shiftPlanDataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
||||||
shiftPlanData
|
|
||||||
);
|
|
||||||
setUserAndPositionIds(
|
setUserAndPositionIds(
|
||||||
shiftPlanData?.users?.map((e) => ({ key: e.positionId, value: e.userId }))
|
shiftPlanData?.users?.map((e) => ({
|
||||||
|
key: e.positionId,
|
||||||
|
value: e.userId,
|
||||||
|
}))
|
||||||
);
|
);
|
||||||
|
|
||||||
setSuperId(shiftPlanData?.supervisorId);
|
setSuperId(shiftPlanData?.supervisorId);
|
||||||
|
@ -278,18 +272,16 @@ const Calendar = () => {
|
||||||
);
|
);
|
||||||
}, [usersData]);
|
}, [usersData]);
|
||||||
|
|
||||||
console.log(superData, usersData);
|
console.log("shiftPlanData", shiftPlanData);
|
||||||
|
console.log(
|
||||||
|
"hiftsCurrentDaysData[selectShift]",
|
||||||
|
shiftsCurrentDaysData[selectShift]
|
||||||
|
);
|
||||||
return (
|
return (
|
||||||
<div className="pb-20">
|
<div className="pb-20">
|
||||||
<AppHeader
|
<AppHeader
|
||||||
title=" شیفت بندی های هفتگی"
|
title=" شیفت بندی های هفتگی"
|
||||||
sub={`شیفت بندی
|
sub={`شیفت بندی`}
|
||||||
تا
|
|
||||||
${daysInCurrentMonth}
|
|
||||||
${PersianM(moment().format("jM"))}
|
|
||||||
|
|
||||||
`}
|
|
||||||
icon2={true}
|
icon2={true}
|
||||||
iconName2="ARROW"
|
iconName2="ARROW"
|
||||||
iconHref2="#"
|
iconHref2="#"
|
||||||
|
@ -300,7 +292,7 @@ const Calendar = () => {
|
||||||
|
|
||||||
<div className="bg-body-100 relative top-[-30px] rounded-t-3xl overflow-hidden px-4 rtl ">
|
<div className="bg-body-100 relative top-[-30px] rounded-t-3xl overflow-hidden px-4 rtl ">
|
||||||
<div className="font-medium text-right mt-5">
|
<div className="font-medium text-right mt-5">
|
||||||
<p className="mb-0">روتین را انتخاب کنید</p>
|
<p className="mb-0 text-sm">روتین را انتخاب کنید</p>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
className="flex overflow-auto whitespace-nowrap mb-5"
|
className="flex overflow-auto whitespace-nowrap mb-5"
|
||||||
|
@ -335,11 +327,11 @@ const Calendar = () => {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{shiftPlanSteps >= 0 && (
|
{shiftPlanSteps >= 1 && (
|
||||||
<div className="bg-body-100 relative top-[-40px] rounded-t-3xl overflow-hidden px-4 rtl ">
|
<div className="bg-body-100 relative top-[-40px] rounded-t-3xl overflow-hidden px-4 rtl ">
|
||||||
<>
|
<>
|
||||||
<div className="font-medium text-right mt-3 pb-2">
|
<div className="font-medium text-right mt-5 pb-2">
|
||||||
<p className="mb-0">تاریخ را انتخاب کنید</p>
|
<p className="mb-0 text-sm">تاریخ را انتخاب کنید</p>
|
||||||
</div>
|
</div>
|
||||||
<Swiper
|
<Swiper
|
||||||
spaceBetween={10}
|
spaceBetween={10}
|
||||||
|
@ -350,7 +342,7 @@ const Calendar = () => {
|
||||||
{daysUntilWeek?.map((e, index) => (
|
{daysUntilWeek?.map((e, index) => (
|
||||||
<SwiperSlide>
|
<SwiperSlide>
|
||||||
<div
|
<div
|
||||||
className={`h-[70px] tr03 ${
|
className={`h-[75px] tr03 ${
|
||||||
selectDay == index
|
selectDay == index
|
||||||
? "bg-white rounded-xl"
|
? "bg-white rounded-xl"
|
||||||
: " opacity-70"
|
: " opacity-70"
|
||||||
|
@ -367,7 +359,7 @@ const Calendar = () => {
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<div className="py-2">
|
<div className="pt-3">
|
||||||
<p className="mb-0 text-center ">
|
<p className="mb-0 text-center ">
|
||||||
<PersianNumber
|
<PersianNumber
|
||||||
number={e.date}
|
number={e.date}
|
||||||
|
@ -390,7 +382,7 @@ const Calendar = () => {
|
||||||
? "bg-secondary-100 text-gray-100"
|
? "bg-secondary-100 text-gray-100"
|
||||||
: !!holidays.y1402?.find((b) => b.date == e.checkDay)
|
: !!holidays.y1402?.find((b) => b.date == e.checkDay)
|
||||||
? "bg-transparent text-red-500"
|
? "bg-transparent text-red-500"
|
||||||
: "bg-white text-gray-500"
|
: " text-gray-600"
|
||||||
}`}
|
}`}
|
||||||
>
|
>
|
||||||
<p className="mb-0 text-center text-sm ">
|
<p className="mb-0 text-center text-sm ">
|
||||||
|
@ -398,6 +390,40 @@ const Calendar = () => {
|
||||||
{e.dayOfWeek}
|
{e.dayOfWeek}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div
|
||||||
|
className={`mt-5 relative w-8/12 mx-auto ${
|
||||||
|
selectDay == index ? " hidden" : "block"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
<div className="absolute w-full mt-[-10px]">
|
||||||
|
<div className="bg-gray-300 p-1 rounded-full "></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div
|
||||||
|
className={`absolute ${
|
||||||
|
e.totalShiftPercent === 0
|
||||||
|
? "w-0"
|
||||||
|
: e.totalShiftPercent > 0 &&
|
||||||
|
e.totalShiftPercent < 50
|
||||||
|
? "w-5/12"
|
||||||
|
: e.totalShiftPercent === 50
|
||||||
|
? "w-1/2"
|
||||||
|
: e.totalShiftPercent > 50 &&
|
||||||
|
e.totalShiftPercent < 100
|
||||||
|
? "w-9/12"
|
||||||
|
: e.totalShiftPercent === 100
|
||||||
|
? "w-full"
|
||||||
|
: `w-[${e.totalShiftPercent}%]`
|
||||||
|
} mt-[-10px]`}
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
className={`bg-green-500 ${
|
||||||
|
e.totalShiftPercent !== 0 ? "p-1" : ""
|
||||||
|
} rounded-full `}
|
||||||
|
></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</SwiperSlide>
|
</SwiperSlide>
|
||||||
))}
|
))}
|
||||||
|
@ -405,30 +431,32 @@ const Calendar = () => {
|
||||||
</>
|
</>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
{shiftPlanSteps >= 0 && (
|
|
||||||
|
{shiftPlanSteps > 1 && (
|
||||||
<>
|
<>
|
||||||
<div className="bg-body-100 relative top-[-40px] rounded-t-3xl overflow-hidden px-4 rtl">
|
<div className="bg-body-100 relative top-[-40px] rounded-t-3xl overflow-hidden px-4 rtl">
|
||||||
<>
|
<>
|
||||||
<div className="font-medium text-right mt-3">
|
<div className="font-medium text-right mt-5">
|
||||||
<p className="mb-0">شیفت را انتخاب کنید</p>
|
<p className="mb-0 text-sm">شیفت را انتخاب کنید</p>
|
||||||
</div>
|
</div>
|
||||||
{!!routineShiftPlan?.find(
|
{shiftsCurrentDaysData.length > 0 ? (
|
||||||
(e) => e?.day == daysUntilWeek[selectDay]?.value
|
|
||||||
) && shiftsData.length > 0 ? (
|
|
||||||
<div
|
<div
|
||||||
className="flex overflow-auto whitespace-nowrap"
|
className="flex overflow-auto whitespace-nowrap"
|
||||||
id="swich-shifts"
|
id="swich-shifts"
|
||||||
>
|
>
|
||||||
{shiftsPlan?.map((e, index) => (
|
{shiftsCurrentDaysData?.map((e, index) => (
|
||||||
<div
|
<div
|
||||||
className={` shadow-sm relative block max-w-fit mx-2 rounded-full mt-2 px-4 py-2 tr03 ${
|
className={` shadow-sm relative block max-w-fit mx-2 rounded-full mt-2 px-4 py-2 tr03 ${
|
||||||
selectShift == index
|
selectShift == index
|
||||||
? "!bg-secondary-100 text-white w-full"
|
? "!bg-secondary-100 text-white w-full"
|
||||||
: " opacity-60 "
|
: " "
|
||||||
}${e.hasCurrentShiftPlan ? "bg-yellow-200" : "bg-white"}`}
|
}${
|
||||||
|
e.hasCurrentShiftPlan
|
||||||
|
? "bg-green-500 text-white"
|
||||||
|
: "bg-white"
|
||||||
|
}`}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
setselectShift(index);
|
handleSelectShift(index);
|
||||||
setShiftPlanSteps(3);
|
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<p className="mb-0 text-sm">{e?.title}</p>
|
<p className="mb-0 text-sm">{e?.title}</p>
|
||||||
|
@ -456,7 +484,7 @@ const Calendar = () => {
|
||||||
<p className="mb-0 text-right text-sm rtl opacity-80">
|
<p className="mb-0 text-right text-sm rtl opacity-80">
|
||||||
ویرایش برای{" "}
|
ویرایش برای{" "}
|
||||||
<small className=" text-sm font-bold">
|
<small className=" text-sm font-bold">
|
||||||
{shiftsPlan && shiftsPlan[selectShift]?.title}
|
{shiftsCurrentDaysData[selectShift]?.title}
|
||||||
</small>{" "}
|
</small>{" "}
|
||||||
تاریخ{" "}
|
تاریخ{" "}
|
||||||
<small className=" text-sm font-bold text-primary-300 bg-white px-2 rounded-full">
|
<small className=" text-sm font-bold text-primary-300 bg-white px-2 rounded-full">
|
||||||
|
@ -501,7 +529,10 @@ const Calendar = () => {
|
||||||
? userAndPositionIds?.map((item) => (
|
? userAndPositionIds?.map((item) => (
|
||||||
<>
|
<>
|
||||||
{e.id == item.key && (
|
{e.id == item.key && (
|
||||||
<div className="flex bg-gray-100 p-1 rounded-full m-1 justify-start mb-7 ">
|
<div
|
||||||
|
className="flex bg-gray-100 p-1 rounded-full m-1 justify-start mb-7 "
|
||||||
|
onClick={() => handleDeleteUser(item.key)}
|
||||||
|
>
|
||||||
<div
|
<div
|
||||||
className="w-[30px] h-[30px] rounded-full bg-gray-400 "
|
className="w-[30px] h-[30px] rounded-full bg-gray-400 "
|
||||||
// onClick={() => deleteSearchUser(e)}
|
// onClick={() => deleteSearchUser(e)}
|
||||||
|
|
|
@ -111,6 +111,8 @@ const Shifts = (props) => {
|
||||||
|
|
||||||
console.log(shiftplans[0]?.data[0]?.users);
|
console.log(shiftplans[0]?.data[0]?.users);
|
||||||
|
|
||||||
|
console.log("shiftplans555", shiftplans);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<div className="pb-20">
|
<div className="pb-20">
|
||||||
|
|
|
@ -55,8 +55,6 @@ const page = () => {
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
console.log(activities.length);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="pb-20">
|
<div className="pb-20">
|
||||||
<AppHeader
|
<AppHeader
|
||||||
|
|