push rasad front on new repo

This commit is contained in:
2026-01-18 14:32:49 +03:30
commit 4fe6e70525
2139 changed files with 303150 additions and 0 deletions

4
.dockerignore Normal file
View File

@@ -0,0 +1,4 @@
node_modules;
npm - debug.log.git.gitignore;
README.md.env.nyc_output;
coverage.DS_Store;

13
.eslintignore Normal file
View File

@@ -0,0 +1,13 @@
node_modules
build
dist
*.config.js
vite.config.js
serviceWorkerRegistration.js
service-worker.js
reportWebVitals.js
setupTests.js
public
.cursor
coverage

37
.eslintrc.json Normal file
View File

@@ -0,0 +1,37 @@
{
"env": {
"browser": true,
"es2021": true,
"node": true
},
"extends": [
"eslint:recommended",
"plugin:react/recommended",
"plugin:react-hooks/recommended",
"plugin:prettier/recommended"
],
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module",
"ecmaFeatures": {
"jsx": true
}
},
"settings": {
"react": {
"version": "detect"
}
},
"rules": {
"react/react-in-jsx-scope": "off",
"react-hooks/exhaustive-deps": "off",
"react/prop-types": "off",
"react-hooks/set-state-in-effect": "off",
"react-hooks/immutability": "off",
"no-unused-vars": "error",
"no-console": "off",
"eqeqeq": ["error", "always"],
"prefer-const": "warn",
"no-var": "error"
}
}

28
.gitignore vendored Normal file
View File

@@ -0,0 +1,28 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# production
/build
/dist
# Vite
.vite
# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
/logs.txt

3
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,3 @@
{
"workbench.editor.enablePreviewFromCodeNavigation": true
}

17
Dockerfile Normal file
View File

@@ -0,0 +1,17 @@
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --force
COPY . .
RUN npm run build
RUN ls -la
EXPOSE 3000
CMD ["npx", "vite", "preview", "--host", "0.0.0.0", "--port", "3000"]

1
README.md Normal file
View File

@@ -0,0 +1 @@
# Rasadyar_System

9
docker-compose.yml Normal file
View File

@@ -0,0 +1,9 @@
version: "3.8"
services:
rasaddam:
build: .
image: wixarm/rasadyar:latest
ports:
- "3000:3000"
restart: unless-stopped

37
index.html Normal file
View File

@@ -0,0 +1,37 @@
<!DOCTYPE html>
<html lang="fa" dir="rtl">
<head>
<meta charset="utf-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
<meta
http-equiv="Cache-Control"
content="no-cache, no-store, must-revalidate"
/>
<meta name="enamad" content="551859" />
<meta name="theme-color" content="#000000" />
<meta name="description" content="سایت جامع معاملات مرغ گوشتی کشور" />
<link rel="apple-touch-icon" href="/logo192.png" />
<link rel="manifest" href="/manifest.json" />
<title>رصدیار، سامانه رصد و پایش کالای اساسی</title>
<!-- <script type="text/javascript">
window.RAYCHAT_TOKEN = "f9f4ad4f-9393-4c95-ae11-cfd6fe8d5f7f";
(function () {
d = document;
s = d.createElement("script");
s.src = "https://widget-react.raychat.io/install/widget.js";
s.async = 1;
d.getElementsByTagName("head")[0].appendChild(s);
})();
</script> -->
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<script type="module" src="/src/index.js"></script>
</body>
</html>

4
liara.json Normal file
View File

@@ -0,0 +1,4 @@
{
"app": "rasadyaarapp",
"platform": "react"
}

11572
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

105
package.json Normal file
View File

@@ -0,0 +1,105 @@
{
"name": "my-app",
"version": "0.1.1",
"private": true,
"type": "module",
"dependencies": {
"@date-io/date-fns-jalali": "^2.15.0",
"@date-io/jalaali": "^2.15.0",
"@emotion/react": "^11.10.4",
"@emotion/styled": "^11.10.4",
"@mui/icons-material": "^5.10.3",
"@mui/lab": "^5.0.0-alpha.99",
"@mui/material": "^5.10.4",
"@mui/x-date-pickers": "^5.0.2",
"@reactour/tour": "^3.1.6",
"@reduxjs/toolkit": "^1.8.5",
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
"@vitejs/plugin-react": "^4.3.1",
"axios": "^0.27.2",
"camelize": "^1.0.0",
"chart.js": "^4.2.1",
"chartjs-plugin-annotation": "^3.1.0",
"chartjs-plugin-datalabels": "^2.2.0",
"date-fns": "^2.29.3",
"date-fns-jalali": "^2.29.2-0",
"echarts": "^5.6.0",
"echarts-for-react": "^3.0.2",
"eslint": "8.22.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-jest-dom": "^4.0.2",
"eslint-plugin-prettier": "^4.2.1",
"formik": "^2.2.9",
"framer-motion": "^7.3.5",
"html2canvas": "^1.4.1",
"lottie-react": "^2.3.1",
"material-react-table": "^2.1.0",
"moment": "^2.29.4",
"mui-datatables": "^4.2.2",
"num2persian": "^3.2.2",
"persian-date": "^1.1.0",
"prettier": "^2.7.1",
"react": "^18.2.0",
"react-chartjs-2": "^5.2.0",
"react-data-table-component": "^7.5.3",
"react-dom": "^18.2.0",
"react-error-boundary": "^3.1.4",
"react-icons": "^4.8.0",
"react-images-uploading": "^3.1.7",
"react-number-format": "^5.1.2",
"react-redux": "^8.0.2",
"react-router-dom": "^6.3.0",
"react-to-print": "^2.14.15",
"reactour": "^1.18.7",
"redux-persist": "^6.0.0",
"styled-components": "^4.0.0",
"stylis": "^4.1.2",
"stylis-plugin-rtl": "2.0.2",
"use-react-screenshot": "^3.0.0",
"vite": "^5.4.2",
"vite-plugin-pwa": "^0.20.1",
"vitest": "^2.0.5",
"web-vitals": "^2.1.4",
"workbox-background-sync": "^6.5.4",
"workbox-broadcast-update": "^6.5.4",
"workbox-cacheable-response": "^6.5.4",
"workbox-core": "^6.5.4",
"workbox-expiration": "^6.5.4",
"workbox-google-analytics": "^6.5.4",
"workbox-navigation-preload": "^6.5.4",
"workbox-precaching": "^6.5.4",
"workbox-range-requests": "^6.5.4",
"workbox-routing": "^6.5.4",
"workbox-strategies": "^6.5.4",
"workbox-streams": "^6.5.4",
"yup": "^0.32.11"
},
"scripts": {
"dev": "vite",
"start": "vite",
"build": "vite build",
"preview": "vite preview",
"test": "vitest",
"lint": "eslint src --ext .js,.jsx",
"lint:fix": "eslint src --ext .js,.jsx --fix"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^7.0.0",
"eslint-plugin-testing-library": "^7.13.3"
}
}

BIN
public/OIG e(1).png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 335 KiB

BIN
public/apple-touch-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

BIN
public/favicon-16x16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

BIN
public/favicon-32x32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

BIN
public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

BIN
public/logo192.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

BIN
public/logo512.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 369 KiB

20
public/manifest.json Normal file
View File

@@ -0,0 +1,20 @@
{
"short_name": "سامانه رصدیار",
"name": "سامانه رصدیار",
"icons": [
{
"src": "/android-chrome-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/android-chrome-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}

3
public/robots.txt Normal file
View File

@@ -0,0 +1,3 @@
# https://www.robotstxt.org/robotstxt.html
User-agent: *
Disallow:

44
src/App-oldd.js Normal file
View File

@@ -0,0 +1,44 @@
import React from "react";
const App = () => {
const containerStyle = {
backgroundColor: "#f0f0f0",
fontFamily: "Arial, sans-serif",
textAlign: "center",
};
const headerStyle = {
backgroundColor: "#3498db",
color: "#fff",
padding: "20px",
};
const addressStyle = {
fontSize: "24px",
fontWeight: "bold",
color: "#3498db",
};
const textStyle = {
fontSize: "18px",
};
return (
<div style={containerStyle}>
<div style={headerStyle}>
<h1>سامانه رصدیار به آدرس زیر انتقال یافت!</h1>
</div>
<div style={{ margin: "20px" }}>
<p style={textStyle}>آدرس جدید سامانه:</p>
<p style={addressStyle}>
<a href="https://sha.rasadyaar.ir/">sha.rasadyaar.ir</a>
</p>
</div>
<div style={{ margin: "20px" }}>
<p style={textStyle}>برای انتقال بر روی لینک کلیک کنید.</p>
</div>
</div>
);
};
export default App;

158
src/App.css Normal file
View File

@@ -0,0 +1,158 @@
a {
text-decoration: none;
}
.App {
text-align: center;
}
html::-webkit-scrollbar {
width: 10px;
}
html::-webkit-scrollbar-thumb {
background: linear-gradient(to bottom, #eaefff, #2247bf);
border-radius: 0px 0px 4px 4px;
}
html::-webkit-scrollbar-track {
background-color: white;
}
.App-logo {
height: 40vmin;
pointer-events: none;
}
.svg-icon-color path {
stroke: #4285f4;
}
@media (prefers-reduced-motion: no-preference) {
.App-logo {
animation: App-logo-spin infinite 20s linear;
}
}
.App-header {
background-color: #282c34;
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: calc(10px + 2vmin);
color: white;
}
.App-link {
color: #61dafb;
}
@keyframes App-logo-spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
.bluehover {
will-change: filter;
transition: filter 300ms;
}
.bluehover:hover {
filter: drop-shadow(0 0 0.5em #cc0a95aa);
}
.marquee {
width: 100%;
line-height: 30px;
color: white;
white-space: nowrap;
overflow: hidden;
box-sizing: border-box;
direction: rtl;
margin-top: -10px !important;
}
.marquee p {
font-size: 15px;
margin: 0;
display: inline-block;
animation: marquee 60s linear infinite;
color: #f9f947;
}
@keyframes marquee {
0% {
transform: translate(-100%, 0);
}
100% {
transform: translate(100%, 0);
}
}
/* .MuiOutlinedInput-notchedOutline,
.MuiButtonBase-root {
border-radius: 15px !important;
} */
.MuiOutlinedInput-notchedOutline {
border-radius: 8px !important;
}
/* .MuiButtonBase-root {
border-radius: 5px !important;
} */
/* .muirtl-1ujnqem-MuiTabs-root {
border-style: solid;
padding: 2px;
border-radius: 15px 15px 0px 0px;
border-width: 1px 0px 0px 0px;
border-color: #a1f1c2;
filter: drop-shadow(0 0 0.75rem crimson);
} */
.insidetabs {
border-style: none !important;
padding: 0px !important;
color: pink !important;
font-size: 10px !important;
}
.header-menu {
font-weight: 800 !important;
}
.muirtl-rpxd6p-MuiButtonBase-root-MuiTab-root.Mui-selected {
background: #eaefff;
font-weight: 800;
}
.path-city {
stroke: #fff;
}
.path-city:hover {
fill: #db5f5f;
}
@media only screen and (max-width: 600px) {
.MuiButtonBase-root-MuiTab-root {
font-size: 0.75rem !important;
}
.muirtl-1sbhvmq {
padding: 12px 16px !important;
}
.muirtl-162ovef {
padding: 4px 8px !important;
}
.MuiChip-root {
height: 24px !important;
}
.MuiChip-label {
padding: 0 6px !important;
}
}

497
src/App.js Normal file
View File

@@ -0,0 +1,497 @@
import React, { Suspense, useEffect, useState } from "react";
import "./App.css";
import { Routes, Route, Navigate, useLocation } from "react-router-dom";
import { guestRouting } from "./routes/guestRouting";
import { getManagerRouting } from "./routes/managerRouting";
import { Box, ThemeProvider } from "@mui/material";
import createCache from "@emotion/cache";
import { prefixer } from "stylis";
import rtlPlugin from "stylis-plugin-rtl";
import { CacheProvider } from "@emotion/react";
import { theme } from "./data/theme";
import axios from "axios";
import { store } from "./lib/redux/store";
import { Loading } from "./components/loading/Loading";
import { useDispatch, useSelector } from "react-redux";
import { avicultureRouting } from "./routes/avicultureRouting";
import { Header } from "./layouts/header/Header";
import AdapterJalali from "@date-io/date-fns-jalali";
import { LocalizationProvider } from "@mui/x-date-pickers";
import { cityRouting } from "./routes/cityRouting";
import { slaughterRouting } from "./routes/slaughterRouting";
import { Modal } from "./components/modal/Modal";
import { provinceFinancialRouting } from "./routes/provinceFinancialRouting";
import { vetFarmRouting } from "./routes/vetFarmRouting";
import Drawer from "./components/drawer/Drawer";
import { generalRouting } from "./routes/generalRouting";
import { StrictModal } from "./components/strict-modal/StrictModal";
import { StrictMissingHallNumber } from "./features/aviculture/components/strict-missing-hall-number/StrictMissingHallNumber";
import { driverRouting } from "./routes/driverRouting";
import { SidebarContextProvider } from "./contexts/SidebarContext";
import { BackDrop } from "./components/backdrop/BackDrop";
import { AppContextProvider } from "./contexts/AppContext";
import { Notif } from "./components/notif/Notif";
import { inspectorRouting } from "./routes/inspectorRouting";
// import bg from "./assets/images/bg.jpg";
import { Fallback } from "./layouts/fallback/Fallback";
import { slaughterHouseVetRouting } from "./routes/slaughterHouseVet";
import { ErrorBoundary } from "react-error-boundary";
import { ErrorFallback } from "./components/error-fallback/ErrorFallback";
import { LOG_OUT } from "./lib/redux/slices/userSlice";
import { adminRouting } from "./routes/adminRouting";
import { SetupAxios } from "./lib/axios/axios";
import { vetSupervisorRouting } from "./routes/vetSupervisorRouting";
import { jahadRouting } from "./routes/jahadRouting";
import { commerceRouting } from "./routes/commerceRouting";
import { cityCommerceRouting } from "./routes/cityCommerceRouting";
import { cityVetRouting } from "./routes/cityVetRouting";
import { cityJihadRouting } from "./routes/cityJihadRouting";
import { observatoryRouting } from "./routes/observatoryRouting";
import { provinceSupervisorRouting } from "./routes/provinceSupervisorRouting";
import { senfRouting } from "./routes/senfRouting";
import versionNumber from "./version.txt";
import { guildRoomRouting } from "./routes/guildRoomRouting";
import { posCompanyRouting } from "./routes/posCompanyRouting";
import { liveStockSupportRouting } from "./routes/liveStockSupportRouting";
import { chainCompanyRouting } from "./routes/chainCompanyRouting";
// import ChatButton from "./components/chat-system/ChatSystem";
import { supporterRouting } from "./routes/supporterRouting";
import { dispenserRouting } from "./routes/dispenserRouting";
import { cityPoultryRouting } from "./routes/cityPoultryRouting";
import { SiteMap } from "./layouts/site-map/SiteMap";
import { getRoleFromUrl } from "./utils/getRoleFromUrl";
import { parentCompanyRouting } from "./routes/parentCompanyRouting";
import { coldHouseStewardRouting } from "./routes/coldHouseStewardRouting";
import { cityGuildRouting } from "./routes/cityGuildRouting";
import { liveStockProvinceJahadRouting } from "./routes/LiveStockProvinceJahadRouting";
import { unionRouting } from "./routes/unionRouting";
import { cooperativeRouting } from "./routes/cooperativeRouting";
import { rancherRouting } from "./routes/rancherRouting";
import { barSquareRouting } from "./routes/barSquareRouting";
import { stewardRouting } from "./routes/stewardRouting";
const AppRouter = () => {
const authToken = useSelector((state) => state.userSlice.authToken);
const role = useSelector((state) => state.userSlice.role);
let routes = [...guestRouting];
let defaultRoute = "/";
// const authToken = true;
// const role = "Poultry";
if (authToken) {
routes = [...generalRouting, ...barSquareRouting];
for (const singleRoleIndex in role) {
if (Object.hasOwnProperty.call(role, singleRoleIndex)) {
const element = role[singleRoleIndex];
switch (element) {
case "Admin":
routes = [...routes, ...adminRouting, ...inspectorRouting];
break;
case "Poultry":
routes = [...routes, ...avicultureRouting];
break;
case "CityOperator":
routes = [...routes, ...cityRouting];
break;
case "KillHouse":
routes = [...routes, ...slaughterRouting];
break;
case "ProvinceOperator":
routes = [...routes, ...getManagerRouting("provinceOperator")];
break;
case "ProvinceFinancial":
routes = [...routes, ...provinceFinancialRouting];
break;
case "ProvinceInspector":
routes = [...routes, ...inspectorRouting];
break;
case "KillHouseVet":
routes = [...routes, ...slaughterHouseVetRouting];
break;
case "VetFarm":
routes = [...routes, ...vetFarmRouting];
break;
case "Driver":
routes = [...routes, ...driverRouting];
break;
case "VetSupervisor":
routes = [...routes, ...vetSupervisorRouting];
break;
case "Jahad":
routes = [...routes, ...jahadRouting];
break;
case "Guilds":
routes = [...routes, ...senfRouting];
break;
case "Steward":
routes = [...routes, ...stewardRouting];
break;
case "Commerce":
routes = [...routes, ...commerceRouting];
break;
case "ProvinceSupervisor":
routes = [...routes, ...provinceSupervisorRouting];
break;
case "CityCommerce":
routes = [...routes, ...cityCommerceRouting];
break;
case "CityVet":
routes = [...routes, ...cityVetRouting];
break;
case "CityJahad":
routes = [...routes, ...cityJihadRouting];
break;
case "Observatory":
routes = [...routes, ...observatoryRouting];
break;
case "GuildRoom":
routes = [...routes, ...guildRoomRouting];
break;
case "PosCompany":
routes = [...routes, ...posCompanyRouting];
break;
case "LiveStockSupport":
routes = [...routes, ...liveStockSupportRouting];
break;
case "SuperAdmin":
routes = [...routes, ...getManagerRouting("SuperAdmin")];
break;
case "ChainCompany":
routes = [...routes, ...chainCompanyRouting];
break;
case "AdminX":
routes = [...routes, ...getManagerRouting("AdminX")];
break;
case "Supporter":
routes = [...routes, ...supporterRouting];
break;
case "Dispenser":
routes = [...routes, ...dispenserRouting];
break;
case "CityPoultry":
routes = [...routes, ...cityPoultryRouting];
break;
case "ParentCompany":
routes = [...routes, ...parentCompanyRouting];
break;
case "ColdHouseSteward":
routes = [...routes, ...coldHouseStewardRouting];
break;
case "cityGuildRouting":
routes = [...routes, ...cityGuildRouting];
break;
case "LiveStockProvinceJahad":
routes = [...routes, ...liveStockProvinceJahadRouting];
break;
case "Union":
routes = [...routes, ...unionRouting];
break;
case "Cooperative":
routes = [...routes, ...cooperativeRouting];
break;
case "Rancher":
routes = [...routes, ...rancherRouting];
break;
default:
}
}
}
}
return (
<Routes>
{routes?.map((route) => {
const { exact, Page, props } = route;
return route.path.map((path) => (
<Route
exact={exact}
path={path}
key={path}
element={
<Suspense fallback={<Fallback />}>
<Box>
<Page {...props} />
</Box>
</Suspense>
}
/>
));
})}
<Route
path="*"
element={<Navigate to={defaultRoute ? defaultRoute : "/"} replace />}
/>
</Routes>
);
};
const cacheRtl = createCache({
key: "muirtl",
stylisPlugins: [prefixer, rtlPlugin],
});
const App = () => {
const dispatch = useDispatch();
const authToken = useSelector((state) => state.userSlice.authToken);
const { pathname } = useLocation();
// useEffect(() => {
// (function () {
// var cache = window.caches;
// cache.keys().then(function (keys) {
// keys.forEach(function (key) {
// cache.delete(key);
// });
// });
// })();
// }, []);
// check for necessary infos
const { profile } = useSelector((state) => state.avicultureSlice);
const [neededInfoMissingHall, setNeededInfoMissingHall] = useState([]);
// const { selectedRoles } = useSelector((state) => state.fileSlice);
// useEffect(() => {
// if (authToken) {
// dispatch(avicultureGetProfile());
// if (!selectedRoles?.length) {
// dispatch(CHANGE_SELECTED_ROLES(role));
// }
// if (isFirstLogin) {
// switch (role[0]) {
// case "Admin":
// break;
// case "Poultry":
// navigate(ROUTE_AVICULTURE_REQUESTS);
// break;
// case "CityOperator":
// navigate(ROUTE_CITY_REQUESTS);
// break;
// case "KillHouse":
// navigate(ROUTE_SLAUGHTER_REQUESTS);
// break;
// case "ProvinceOperator":
// navigate(ROUTE_PROVINCE_REQUESTS);
// break;
// case "ProvinceFinancial":
// navigate(ROUTE_PROVINCE_FINANCIAL_REQUESTS);
// break;
// case "ProvinceInspector":
// break;
// case "KillHouseVet":
// navigate(ROUTE_SLAUGHTER_HOUSE_VET_REQUESTS);
// break;
// case "VetFarm":
// navigate(ROUTE_VETFARM_ROUTE_ALLOCATIONS);
// break;
// case "Driver":
// break;
// case "VetSupervisor":
// navigate(ROUTE_VETـSUPERVISOR_ALLOCATIONS);
// break;
// case "CityVet":
// navigate(ROUTE_CITYVET_ROUTE_ALLOCATIONS);
// break;
// case "Observatory":
// navigate(ROUTE_OBSERVATORY_STATICS);
// break;
// case "Jahad":
// break;
// }
// dispatch(IS_FIRST_LOGIN(false));
// }
// }
// }, [authToken]);
useEffect(() => {
setOpen(false);
if (authToken && profile) {
for (const iterator of profile.aviculture) {
if (!iterator.numberOfHalls) {
setOpen(true);
setNeededInfoMissingHall([
{
title: "NUMBER_OF_HALLS",
data: {
...iterator,
},
},
]);
}
}
}
}, [authToken, profile]);
useEffect(() => {
if (!authToken || profile === null) {
setOpen(false);
}
}, [authToken, profile]);
// useEffect(() => {
// if (authToken) {
// dispatch(provinceGetPolicyAvicultureCommitService());
// }
// }, []);
//buildchange
// useEffect(() => {
// let name = "Arta-System";
// let version = "7";
// const last_version = localStorage.getItem(`${name}-Version`);
// if (last_version !== version) {
// localStorage.setItem(`${name}-Version`, version);
// dispatch(LOG_OUT());
// // window.location.reload(true);
// }
// }, []);
const [visibleSiteMap, setVisibleSiteMap] = useState(false);
useEffect(() => {
setVisibleSiteMap(authToken && getRoleFromUrl());
}, [window.location.href, window.location.pathname, pathname]);
useEffect(() => {
if (
window.location.search.includes("refresh") &&
!window.location.search.includes("finalAmount")
) {
window.location.href = window.location.pathname;
}
}, []);
const hardRefresh = () => {
const currentUrl = window.location.href;
const newUrl = `${currentUrl}?refresh=${new Date().getTime()}`;
window.location.href = newUrl;
};
useEffect(() => {
const uniqueQueryParam = `?v=${new Date().getTime()}`;
fetch(`${versionNumber}${uniqueQueryParam}`)
.then((response) => response.text())
.then((numberText) => {
const numberFromTxt = numberText.toString();
const lastVersion = localStorage.getItem("AppVersion");
console.log("compare versions", numberFromTxt, lastVersion);
if (
!lastVersion ||
lastVersion.toString() !== numberFromTxt.toString()
) {
localStorage.setItem("AppVersion", numberFromTxt.toString());
if ("caches" in window) {
caches.keys().then((names) => {
names.forEach((name) => {
caches.delete(name);
});
});
hardRefresh();
// dispatch(
// OPEN_MODAL({
// title: "ورژن جدید در دسترس است",
// content: (
// <>
// <Grid container gap={SPACING.SMALL} justifyContent="center">
// <Typography variant="body2">
// جهت بهره مندی از امکانات جدید لطفا مرورگر خود را با زدن
// کلیدهای CTRL و F5 مجددا بارگزاری کنید.
// </Typography>
// <Button
// variant="outlined"
// onClick={() => {
// dispatch(CLOSE_MODAL());
// }}
// >
// متوجه شدم
// </Button>
// </Grid>
// </>
// ),
// })
// );
}
}
})
.catch((error) => {
console.error("Error:", error);
});
}, [window.location.pathname]);
const [open, setOpen] = React.useState(false);
// const handleOpen = () => setOpen(true);
const handleClose = () => setOpen(false);
return (
<CacheProvider value={cacheRtl}>
<ThemeProvider theme={theme}>
<LocalizationProvider dateAdapter={AdapterJalali}>
<ErrorBoundary
FallbackComponent={ErrorFallback}
onReset={() => {
dispatch(LOG_OUT());
}}
>
<Suspense fallback={<Fallback />}>
<AppContextProvider>
<div
className="App"
style={
{
// background: !authToken ? `url("${bg}")` : null,
// height: !authToken ? "100vh" : "auto",
}
}
>
<SidebarContextProvider>
{authToken && <Header />}
{visibleSiteMap && <SiteMap />}
{/* {authToken && <ChatButton />} */}
<BackDrop />
<Notif />
</SidebarContextProvider>
<AppRouter />
</div>
{neededInfoMissingHall.map((item, i) => {
let modalTitle = "";
const modalContent = (
<StrictMissingHallNumber
avicultureKey={item.data?.key}
name={item.data?.unitName}
id={item.data?.breedingUniqueId}
handleClose={handleClose}
/>
);
if (item.title === "NUMBER_OF_HALLS") {
modalTitle = "ثبت تعداد سالن ها";
}
return (
<StrictModal
key={"modal" + i}
title={modalTitle}
content={modalContent}
open={open}
/>
);
})}
<Drawer />
<Modal />
<Loading />
</AppContextProvider>
</Suspense>
</ErrorBoundary>
</LocalizationProvider>
</ThemeProvider>
</CacheProvider>
);
};
SetupAxios(axios, store);
export default App;

9
src/App.test.js Normal file
View File

@@ -0,0 +1,9 @@
import React from "react";
import { render, screen } from "@testing-library/react";
import App from "./App";
test("renders learn react link", () => {
render(<App />);
const linkElement = screen.getByText(/learn react/i);
expect(linkElement).toBeInTheDocument();
});

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,78 @@
@font-face {
font-family: IRANSans;
font-style: normal;
font-weight: 900;
src: url("../fonts/eot/IRANSansWeb_Black.eot");
src: url("../fonts/eot/IRANSansWeb_Black.eot?#iefix")
format("embedded-opentype"),
/* IE6-8 */ url("../fonts/woff2/IRANSansWeb_Black.woff2") format("woff2"),
/* FF39+,Chrome36+, Opera24+*/ url("../fonts/woff/IRANSansWeb_Black.woff")
format("woff"),
/* FF3.6+, IE9, Chrome6+, Saf5.1+*/
url("../fonts/ttf/IRANSansWeb_Black.ttf") format("truetype");
}
@font-face {
font-family: IRANSans;
font-style: normal;
font-weight: bold;
src: url("../fonts/eot/IRANSansWeb_Bold.eot");
src: url("../fonts/eot/IRANSansWeb_Bold.eot?#iefix")
format("embedded-opentype"),
/* IE6-8 */ url("../fonts/woff2/IRANSansWeb_Bold.woff2") format("woff2"),
/* FF39+,Chrome36+, Opera24+*/ url("../fonts/woff/IRANSansWeb_Bold.woff")
format("woff"),
/* FF3.6+, IE9, Chrome6+, Saf5.1+*/ url("../fonts/ttf/IRANSansWeb_Bold.ttf")
format("truetype");
}
@font-face {
font-family: IRANSans;
font-style: normal;
font-weight: 500;
src: url("../fonts/eot/IRANSansWeb_Medium.eot");
src: url("../fonts/eot/IRANSansWeb_Medium.eot?#iefix")
format("embedded-opentype"),
/* IE6-8 */ url("../fonts/woff2/IRANSansWeb_Medium.woff2") format("woff2"),
/* FF39+,Chrome36+, Opera24+*/ url("../fonts/woff/IRANSansWeb_Medium.woff")
format("woff"),
/* FF3.6+, IE9, Chrome6+, Saf5.1+*/
url("../fonts/ttf/IRANSansWeb_Medium.ttf") format("truetype");
}
@font-face {
font-family: IRANSans;
font-style: normal;
font-weight: 300;
src: url("../fonts/eot/IRANSansWeb_Light.eot");
src: url("../fonts/eot/IRANSansWeb_Light.eot?#iefix")
format("embedded-opentype"),
/* IE6-8 */ url("../fonts/woff2/IRANSansWeb_Light.woff2") format("woff2"),
/* FF39+,Chrome36+, Opera24+*/ url("../fonts/woff/IRANSansWeb_Light.woff")
format("woff"),
/* FF3.6+, IE9, Chrome6+, Saf5.1+*/
url("../fonts/ttf/IRANSansWeb_Light.ttf") format("truetype");
}
@font-face {
font-family: IRANSans;
font-style: normal;
font-weight: 200;
src: url("../fonts/eot/IRANSansWeb_UltraLight.eot");
src: url("../fonts/eot/IRANSansWeb_UltraLight.eot?#iefix")
format("embedded-opentype"),
/* IE6-8 */ url("../fonts/woff2/IRANSansWeb_UltraLight.woff2")
format("woff2"),
/* FF39+,Chrome36+, Opera24+*/
url("../fonts/woff/IRANSansWeb_UltraLight.woff") format("woff"),
/* FF3.6+, IE9, Chrome6+, Saf5.1+*/
url("../fonts/ttf/IRANSansWeb_UltraLight.ttf") format("truetype");
}
@font-face {
font-family: IRANSans;
font-style: normal;
font-weight: normal;
src: url("../fonts/eot/IRANSansWeb.eot");
src: url("../fonts/eot/IRANSansWeb.eot?#iefix") format("embedded-opentype"),
/* IE6-8 */ url("../fonts/woff2/IRANSansWeb.woff2") format("woff2"),
/* FF39+,Chrome36+, Opera24+*/ url("../fonts/woff/IRANSansWeb.woff")
format("woff"),
/* FF3.6+, IE9, Chrome6+, Saf5.1+*/ url("../fonts/ttf/IRANSansWeb.ttf")
format("truetype");
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

147
src/assets/fonts/fonts.css Normal file
View File

@@ -0,0 +1,147 @@
/**
*
* Name: IRANYekan Font
* Version: 3.0
* Author: Moslem Ebrahimi (moslemebrahimi.com)
* Created on: Dec 20, 2018
* Updated on: Dec 20, 2018
* Website: http://fontiran.com
* Copyright: Commercial/Proprietary Software
--------------------------------------------------------------------------------------
فونت ایران یکان یک نرم افزار مالکیتی محسوب می شود. جهت آگاهی از قوانین استفاده از این فونت ها لطفا به وب سایت (فونت ایران دات کام) مراجعه نمایید
--------------------------------------------------------------------------------------
IRANYekan fonts are considered a proprietary software. To gain information about the laws regarding the use of these fonts, please visit www.fontiran.com
--------------------------------------------------------------------------------------
This set of fonts are used in this project under the license: (.....)
--------------------------------------------------------------------------------------
*
**/
@font-face {
font-family: iranyekan;
font-style: normal;
font-weight: bold;
src: url("./eot/iranyekanwebboldfanum.eot");
src: url("./eot/iranyekanwebboldfanum.eot?#iefix") format("embedded-opentype"),
/* IE6-8 */ url("./woff/iranyekanwebboldfanum.woff") format("woff"),
/* FF3.6+, IE9, Chrome6+, Saf5.1+*/ url("./ttf/iranyekanwebboldfanum.ttf")
format("truetype");
}
@font-face {
font-family: iranyekan;
font-style: normal;
font-weight: 100;
src: url("./eot/iranyekanwebthinfanum.eot");
src: url("./eot/iranyekanwebthinfanum.eot?#iefix") format("embedded-opentype"),
/* IE6-8 */ url("./woff/iranyekanwebthinfanum.woff") format("woff"),
/* FF3.6+, IE9, Chrome6+, Saf5.1+*/ url("./ttf/iranyekanwebthinfanum.ttf")
format("truetype");
}
@font-face {
font-family: iranyekan;
font-style: normal;
font-weight: 300;
src: url("./eot/iranyekanweblightfanum.eot");
src: url("./eot/iranyekanweblightfanum.eot?#iefix")
format("embedded-opentype"),
/* IE6-8 */ url("./woff/iranyekanweblightfanum.woff") format("woff"),
/* FF3.6+, IE9, Chrome6+, Saf5.1+*/ url("./ttf/iranyekanweblightfanum.ttf")
format("truetype");
}
@font-face {
font-family: iranyekan;
font-style: normal;
font-weight: normal;
src: url("./eot/iranyekanwebregularfanum.eot");
src: url("./eot/iranyekanwebregularfanum.eot?#iefix")
format("embedded-opentype"),
/* IE6-8 */ url("./woff/iranyekanwebregularfanum.woff") format("woff"),
/* FF3.6+, IE9, Chrome6+, Saf5.1+*/
url("./ttf/iranyekanwebregularfanum.ttf") format("truetype");
}
@font-face {
font-family: iranyekan;
font-style: normal;
font-weight: 500;
src: url("./eot/iranyekanwebmediumfanum.eot");
src: url("./eot/iranyekanwebmediumfanum.eot?#iefix")
format("embedded-opentype"),
/* IE6-8 */ url("./woff/iranyekanwebmediumfanum.woff") format("woff"),
/* FF3.6+, IE9, Chrome6+, Saf5.1+*/ url("./ttf/iranyekanwebmediumfanum.ttf")
format("truetype");
}
@font-face {
font-family: iranyekan;
font-style: normal;
font-weight: 800;
src: url("./eot/iranyekanwebextraboldfanum.eot");
src: url("./eot/iranyekanwebextraboldfanum.eot?#iefix")
format("embedded-opentype"),
/* IE6-8 */ url("./woff/iranyekanwebextraboldfanum.woff") format("woff"),
/* FF3.6+, IE9, Chrome6+, Saf5.1+*/
url("./ttf/iranyekanwebextraboldfanum.ttf") format("truetype");
}
@font-face {
font-family: iranyekan;
font-style: normal;
font-weight: 850;
src: url("./eot/iranyekanwebblackfanum.eot");
src: url("./eot/iranyekanwebblackfanum.eot?#iefix")
format("embedded-opentype"),
/* IE6-8 */ url("./woff/iranyekanwebblackfanum.woff") format("woff"),
/* FF3.6+, IE9, Chrome6+, Saf5.1+*/ url("./ttf/iranyekanwebblackfanum.ttf")
format("truetype");
}
@font-face {
font-family: iranyekan;
font-style: normal;
font-weight: 900;
src: url("./eot/iranyekanwebextrablackfanum.eot");
src: url("./eot/iranyekanwebextrablackfanum.eot?#iefix")
format("embedded-opentype"),
/* IE6-8 */ url("./woff/iranyekanwebextrablackfanum.woff") format("woff"),
/* FF3.6+, IE9, Chrome6+, Saf5.1+*/
url("./ttf/iranyekanwebextrablackfanum.ttf") format("truetype");
}
@font-face {
font-family: "nazanin";
src: local("nazanin"), url("./ttf/B-NAZANIN.TTF") format("truetype");
font-weight: bold;
}
@font-face {
font-family: "titr";
src: local("titr"), url("./ttf/Titr.ttf") format("truetype");
font-weight: bold;
}
/* @font-face {
font-family: "vazir";
src: local("vazir"), url("./ttf/Vazir-Medium.ttf") format("truetype");
font-weight: bold;
}
@font-face {
font-family: "nima";
src: local("vazir"), url("./ttf/Nima.ttf") format("truetype");
font-weight: bold;
}
@font-face {
font-family: "sharif";
src: local("vazir"), url("./ttf/Sharif.ttf") format("truetype");
font-weight: bold;
}
@font-face {
font-family: "azar";
src: local("vazir"), url("./ttf/AzarMehr.ttf") format("truetype");
font-weight: bold;
} */

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 199 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 221 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 201 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 198 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 233 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 222 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 219 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 241 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 413 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

BIN
src/assets/images/arrow.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
src/assets/images/bg.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Some files were not shown because too many files have changed in this diff Show More