diff --git a/jsconfig.json b/jsconfig.json
index f6a30b1..fcd02aa 100644
--- a/jsconfig.json
+++ b/jsconfig.json
@@ -1,8 +1,12 @@
{
"compilerOptions": {
"paths": {
- "@/*": ["./src/*"],
- "&/*": ["./public/*"],
+ "@/*": [
+ "./src/*"
+ ],
+ "&/*": [
+ "./public/*"
+ ]
}
}
}
diff --git a/next.config.js b/next.config.js
index 03fb527..409876a 100644
--- a/next.config.js
+++ b/next.config.js
@@ -1,12 +1,12 @@
/** @type {import('next').NextConfig} */
const nextConfig = {
- reactStrictMode: true,
- i18n: {
- defaultLocale: 'fa',
- locales: ['fa'],
- localeDetection: false,
- },
+ reactStrictMode: true,
+ i18n: {
+ defaultLocale: 'fa',
+ locales: ['fa'],
+ localeDetection: false,
+ },
}
module.exports = nextConfig
diff --git a/public/fontiran.scss b/public/fontiran.scss
index 33b59b4..86d585d 100644
--- a/public/fontiran.scss
+++ b/public/fontiran.scss
@@ -17,145 +17,153 @@ This set of fonts are used in this project under the license: (.....)
*
**/
@font-face {
- font-family: IRANSansFaNum;
- font-style: normal;
- font-weight: 900;
- src: url('./fonts/eot/IRANSansWeb(FaNum)_Black.eot');
- src: url('./fonts/eot/IRANSansWeb(FaNum)_Black.eot?#iefix') format('embedded-opentype'),/* IE6-8 */
- url('./fonts/woff2/IRANSansWeb(FaNum)_Black.woff2') format('woff2'),/* FF39+,Chrome36+, Opera24+*/
- url('./fonts/woff/IRANSansWeb(FaNum)_Black.woff') format('woff'),/* FF3.6+, IE9, Chrome6+, Saf5.1+*/
- url('./fonts/ttf/IRANSansWeb(FaNum)_Black.ttf') format('truetype');
+ font-family: IRANSansFaNum;
+ font-style: normal;
+ font-weight: 900;
+ src: url('./fonts/eot/IRANSansWeb(FaNum)_Black.eot');
+ src: url('./fonts/eot/IRANSansWeb(FaNum)_Black.eot?#iefix') format('embedded-opentype'), /* IE6-8 */
+ url('./fonts/woff2/IRANSansWeb(FaNum)_Black.woff2') format('woff2'), /* FF39+,Chrome36+, Opera24+*/
+ url('./fonts/woff/IRANSansWeb(FaNum)_Black.woff') format('woff'), /* FF3.6+, IE9, Chrome6+, Saf5.1+*/
+ url('./fonts/ttf/IRANSansWeb(FaNum)_Black.ttf') format('truetype');
}
@font-face {
- font-family: IRANSansFaNum;
- font-style: normal;
- font-weight: bold;
- src: url('./fonts/eot/IRANSansWeb(FaNum)_Bold.eot');
- src: url('./fonts/eot/IRANSansWeb(FaNum)_Bold.eot?#iefix') format('embedded-opentype'),/* IE6-8 */
- url('./fonts/woff2/IRANSansWeb(FaNum)_Bold.woff2') format('woff2'),/* FF39+,Chrome36+, Opera24+*/
- url('./fonts/woff/IRANSansWeb(FaNum)_Bold.woff') format('woff'),/* FF3.6+, IE9, Chrome6+, Saf5.1+*/
- url('./fonts/ttf/IRANSansWeb(FaNum)_Bold.ttf') format('truetype');
+ font-family: IRANSansFaNum;
+ font-style: normal;
+ font-weight: bold;
+ src: url('./fonts/eot/IRANSansWeb(FaNum)_Bold.eot');
+ src: url('./fonts/eot/IRANSansWeb(FaNum)_Bold.eot?#iefix') format('embedded-opentype'), /* IE6-8 */
+ url('./fonts/woff2/IRANSansWeb(FaNum)_Bold.woff2') format('woff2'), /* FF39+,Chrome36+, Opera24+*/
+ url('./fonts/woff/IRANSansWeb(FaNum)_Bold.woff') format('woff'), /* FF3.6+, IE9, Chrome6+, Saf5.1+*/
+ url('./fonts/ttf/IRANSansWeb(FaNum)_Bold.ttf') format('truetype');
}
@font-face {
- font-family: IRANSansFaNum;
- font-style: normal;
- font-weight: 500;
- src: url('./fonts/eot/IRANSansWeb(FaNum)_Medium.eot');
- src: url('./fonts/eot/IRANSansWeb(FaNum)_Medium.eot?#iefix') format('embedded-opentype'),/* IE6-8 */
- url('./fonts/woff2/IRANSansWeb(FaNum)_Medium.woff2') format('woff2'),/* FF39+,Chrome36+, Opera24+*/
- url('./fonts/woff/IRANSansWeb(FaNum)_Medium.woff') format('woff'),/* FF3.6+, IE9, Chrome6+, Saf5.1+*/
- url('./fonts/ttf/IRANSansWeb(FaNum)_Medium.ttf') format('truetype');
+ font-family: IRANSansFaNum;
+ font-style: normal;
+ font-weight: 500;
+ src: url('./fonts/eot/IRANSansWeb(FaNum)_Medium.eot');
+ src: url('./fonts/eot/IRANSansWeb(FaNum)_Medium.eot?#iefix') format('embedded-opentype'), /* IE6-8 */
+ url('./fonts/woff2/IRANSansWeb(FaNum)_Medium.woff2') format('woff2'), /* FF39+,Chrome36+, Opera24+*/
+ url('./fonts/woff/IRANSansWeb(FaNum)_Medium.woff') format('woff'), /* FF3.6+, IE9, Chrome6+, Saf5.1+*/
+ url('./fonts/ttf/IRANSansWeb(FaNum)_Medium.ttf') format('truetype');
}
@font-face {
- font-family: IRANSansFaNum;
- font-style: normal;
- font-weight: 300;
- src: url('./fonts/eot/IRANSansWeb(FaNum)_Light.eot');
- src: url('./fonts/eot/IRANSansWeb(FaNum)_Light.eot?#iefix') format('embedded-opentype'),/* IE6-8 */
- url('./fonts/woff2/IRANSansWeb(FaNum)_Light.woff2') format('woff2'),/* FF39+,Chrome36+, Opera24+*/
- url('./fonts/woff/IRANSansWeb(FaNum)_Light.woff') format('woff'),/* FF3.6+, IE9, Chrome6+, Saf5.1+*/
- url('./fonts/ttf/IRANSansWeb(FaNum)_Light.ttf') format('truetype');
+ font-family: IRANSansFaNum;
+ font-style: normal;
+ font-weight: 300;
+ src: url('./fonts/eot/IRANSansWeb(FaNum)_Light.eot');
+ src: url('./fonts/eot/IRANSansWeb(FaNum)_Light.eot?#iefix') format('embedded-opentype'), /* IE6-8 */
+ url('./fonts/woff2/IRANSansWeb(FaNum)_Light.woff2') format('woff2'), /* FF39+,Chrome36+, Opera24+*/
+ url('./fonts/woff/IRANSansWeb(FaNum)_Light.woff') format('woff'), /* FF3.6+, IE9, Chrome6+, Saf5.1+*/
+ url('./fonts/ttf/IRANSansWeb(FaNum)_Light.ttf') format('truetype');
}
@font-face {
- font-family: IRANSansFaNum;
- font-style: normal;
- font-weight: 200;
- src: url('./fonts/eot/IRANSansWeb(FaNum)_UltraLight.eot');
- src: url('./fonts/eot/IRANSansWeb(FaNum)_UltraLight.eot?#iefix') format('embedded-opentype'),/* IE6-8 */
- url('./fonts/woff2/IRANSansWeb(FaNum)_UltraLight.woff2') format('woff2'),/* FF39+,Chrome36+, Opera24+*/
- url('./fonts/woff/IRANSansWeb(FaNum)_UltraLight.woff') format('woff'),/* FF3.6+, IE9, Chrome6+, Saf5.1+*/
- url('./fonts/ttf/IRANSansWeb(FaNum)_UltraLight.ttf') format('truetype');
+ font-family: IRANSansFaNum;
+ font-style: normal;
+ font-weight: 200;
+ src: url('./fonts/eot/IRANSansWeb(FaNum)_UltraLight.eot');
+ src: url('./fonts/eot/IRANSansWeb(FaNum)_UltraLight.eot?#iefix') format('embedded-opentype'), /* IE6-8 */
+ url('./fonts/woff2/IRANSansWeb(FaNum)_UltraLight.woff2') format('woff2'), /* FF39+,Chrome36+, Opera24+*/
+ url('./fonts/woff/IRANSansWeb(FaNum)_UltraLight.woff') format('woff'), /* FF3.6+, IE9, Chrome6+, Saf5.1+*/
+ url('./fonts/ttf/IRANSansWeb(FaNum)_UltraLight.ttf') format('truetype');
}
@font-face {
- font-family: IRANSansFaNum;
- font-style: normal;
- font-weight: normal;
- src: url('./fonts/eot/IRANSansWeb(FaNum).eot');
- src: url('./fonts/eot/IRANSansWeb(FaNum).eot?#iefix') format('embedded-opentype'),/* IE6-8 */
- url('./fonts/woff2/IRANSansWeb(FaNum).woff2') format('woff2'),/* FF39+,Chrome36+, Opera24+*/
- url('./fonts/woff/IRANSansWeb(FaNum).woff') format('woff'),/* FF3.6+, IE9, Chrome6+, Saf5.1+*/
- url('./fonts/ttf/IRANSansWeb(FaNum).ttf') format('truetype');
+ font-family: IRANSansFaNum;
+ font-style: normal;
+ font-weight: normal;
+ src: url('./fonts/eot/IRANSansWeb(FaNum).eot');
+ src: url('./fonts/eot/IRANSansWeb(FaNum).eot?#iefix') format('embedded-opentype'), /* IE6-8 */
+ url('./fonts/woff2/IRANSansWeb(FaNum).woff2') format('woff2'), /* FF39+,Chrome36+, Opera24+*/
+ url('./fonts/woff/IRANSansWeb(FaNum).woff') format('woff'), /* FF3.6+, IE9, Chrome6+, Saf5.1+*/
+ url('./fonts/ttf/IRANSansWeb(FaNum).ttf') format('truetype');
}
+
@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-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-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-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-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-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');
+ 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');
}
+
@font-face {
- font-family: Parastoo;
- font-style: normal;
- font-weight: normal;
- src: url('./fonts/eot/Parastoo.eot');
- src: url('./fonts/eot/Parastoo.eot?#iefix') format('embedded-opentype'), /* IE6-8 */
- url('./fonts/woff/Parastoo.woff') format('woff'), /* FF3.6+, IE9, Chrome6+, Saf5.1+*/
- url('./fonts/ttf/Parastoo.ttf') format('truetype');
+ font-family: Parastoo;
+ font-style: normal;
+ font-weight: normal;
+ src: url('./fonts/eot/Parastoo.eot');
+ src: url('./fonts/eot/Parastoo.eot?#iefix') format('embedded-opentype'), /* IE6-8 */
+ url('./fonts/woff/Parastoo.woff') format('woff'), /* FF3.6+, IE9, Chrome6+, Saf5.1+*/
+ url('./fonts/ttf/Parastoo.ttf') format('truetype');
}
+
@font-face {
- font-family: Parastoo;
- font-style: normal;
- font-weight: bold;
- src: url('./fonts/eot/Parastoo-Bold.eot');
- src: url('./fonts/eot/Parastoo-Bold.eot?#iefix') format('embedded-opentype'), /* IE6-8 */
- url('./fonts/woff/Parastoo-Bold.woff') format('woff'), /* FF3.6+, IE9, Chrome6+, Saf5.1+*/
- url('./fonts/ttf/Parastoo-Bold.ttf') format('truetype');
+ font-family: Parastoo;
+ font-style: normal;
+ font-weight: bold;
+ src: url('./fonts/eot/Parastoo-Bold.eot');
+ src: url('./fonts/eot/Parastoo-Bold.eot?#iefix') format('embedded-opentype'), /* IE6-8 */
+ url('./fonts/woff/Parastoo-Bold.woff') format('woff'), /* FF3.6+, IE9, Chrome6+, Saf5.1+*/
+ url('./fonts/ttf/Parastoo-Bold.ttf') format('truetype');
}
diff --git a/public/images/change-password.svg b/public/images/change-password.svg
index f3b65aa..d940442 100644
--- a/public/images/change-password.svg
+++ b/public/images/change-password.svg
@@ -1 +1,64 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/public/images/dashboard.svg b/public/images/dashboard.svg
index ea3f11b..f7c0340 100644
--- a/public/images/dashboard.svg
+++ b/public/images/dashboard.svg
@@ -1 +1,104 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/public/images/loading_logo.svg b/public/images/loading_logo.svg
index 48fde43..ba14232 100644
--- a/public/images/loading_logo.svg
+++ b/public/images/loading_logo.svg
@@ -1 +1,121 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/public/images/login.svg b/public/images/login.svg
index e2854d2..cd7e24e 100644
--- a/public/images/login.svg
+++ b/public/images/login.svg
@@ -1 +1,60 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/public/images/logo.svg b/public/images/logo.svg
index 5931dd4..eebb9fa 100644
--- a/public/images/logo.svg
+++ b/public/images/logo.svg
@@ -1,10 +1,19 @@
diff --git a/public/locales/fa/datatable.js b/public/locales/fa/datatable.js
index 819a84b..fd43663 100644
--- a/public/locales/fa/datatable.js
+++ b/public/locales/fa/datatable.js
@@ -1,92 +1,92 @@
export const FA_DATATABLE_LOCALIZATION = {
- actions: "عملیات",
- and: "و",
- cancel: "لغو",
- changeFilterMode: "تغییر حالت فیلتر",
- changeSearchMode: "تغییر حالت جستجو",
- clearFilter: "پاک کردن فیلتر",
- clearSearch: "پاک کردن جستجو",
- clearSort: "پاک کردن مرتب سازی",
- clickToCopy: "کلیک برای کپی",
- collapse: "جمع شدن",
- collapseAll: "جمع شدن همه",
- columnActions: "عملیات ستون",
- copiedToClipboard: "کپی شد",
- dropToGroupBy: "رها کردن برای گروه بندی بر اساس {column}",
- edit: "ویرایش",
- expand: "باز شدن",
- expandAll: "باز شدن همه",
- filterArrIncludes: "شامل",
- filterArrIncludesAll: "شامل همه",
- filterArrIncludesSome: "شامل",
- filterBetween: "میان",
- filterBetweenInclusive: "میان با احتساب هر دو",
- filterByColumn: "فیلتر بر اساس {column}",
- filterContains: "شامل",
- filterEmpty: "خالی",
- filterEndsWith: "به پایان میرسد با",
- filterEquals: "برابر",
- filterEqualsString: "برابر",
- filterFuzzy: "نزدیک",
- filterGreaterThan: "بزرگتر از",
- filterGreaterThanOrEqualTo: "بزرگتر یا مساوی",
- filterInNumberRange: "میان",
- filterIncludesString: "شامل",
- filterIncludesStringSensitive: "شامل",
- filterLessThan: "کوچکتر از",
- filterLessThanOrEqualTo: "کوچکتر یا مساوی",
- filterMode: "حالت فیلتر: {filterType}",
- filterNotEmpty: "غیر خالی",
- filterNotEquals: "نا برابر",
- filterStartsWith: "شروع میشود با",
- filterWeakEquals: "برابر",
- filteringByColumn: "فیلتر بر اساس {column} - {filterType} {filterValue}",
- goToFirstPage: "رفتن به صفحه اول",
- goToLastPage: "رفتن به صفحه آخر",
- goToNextPage: "رفتن به صفحه بعدی",
- goToPreviousPage: "رفتن به صفحه قبلی",
- grab: "گرفتن",
- groupByColumn: "گروه بندی بر اساس {column}",
- groupedBy: "گروه بندی شده بر اساس",
- hideAll: "پنهان کردن همه",
- hideColumn: "پنهان کردن ستون {column}",
- max: "حداکثر",
- min: "حداقل",
- move: "انتقال",
- noRecordsToDisplay: "هیچ رکوردی برای نمایش وجود ندارد",
- noResultsFound: "نتیجهای یافت نشد",
- of: "از",
- or: "یا",
- pinToLeft: "چسباندن به سمت چپ",
- pinToRight: "چسباندن به سمت راست",
- resetColumnSize: "بازنشانی اندازه ستون",
- resetOrder: "بازنشانی ترتیب",
- rowActions: "عملیات ردیف",
- rowNumber: "#",
- rowNumbers: "شماره ردیف",
- rowsPerPage: "ردیف در هر صفحه",
- save: "ذخیره",
- search: "جستجو",
- selectedCountOfRowCountRowsSelected:
- "{selectedCount} از {rowCount} ردیف انتخاب شده",
- select: "انتخاب",
- showAll: "نمایش همه",
- showAllColumns: "نمایش همه ستونها",
- showHideColumns: "نمایش/مخفی کردن ستونها",
- showHideFilters: "نمایش/مخفی کردن فیلترها",
- showHideSearch: "نمایش/مخفی کردن جستجو",
- sortByColumnAsc: "مرتب سازی بر اساس {column} صعودی",
- sortByColumnDesc: "مرتب سازی بر اساس {column} نزولی",
- sortedByColumnAsc: "مرتب شده بر اساس {column} صعودی",
- sortedByColumnDesc: "مرتب شده بر اساس {column} نزولی",
- thenBy: "، سپس بر اساس ",
- toggleDensity: "تغییر تراکم",
- toggleFullScreen: "تغییر حالت تمام صفحه",
- toggleSelectAll: "انتخاب/عدم انتخاب همه",
- toggleSelectRow: "انتخاب/عدم انتخاب ردیف",
- toggleVisibility: "تغییر پیدا/پنهان",
- ungroupByColumn: "لغو گروه بندی بر اساس {column}",
- unpin: "رها کردن",
- unpinAll: "رها کردن همه",
- unsorted: "بدون مرتب سازی",
+ actions: "عملیات",
+ and: "و",
+ cancel: "لغو",
+ changeFilterMode: "تغییر حالت فیلتر",
+ changeSearchMode: "تغییر حالت جستجو",
+ clearFilter: "پاک کردن فیلتر",
+ clearSearch: "پاک کردن جستجو",
+ clearSort: "پاک کردن مرتب سازی",
+ clickToCopy: "کلیک برای کپی",
+ collapse: "جمع شدن",
+ collapseAll: "جمع شدن همه",
+ columnActions: "عملیات ستون",
+ copiedToClipboard: "کپی شد",
+ dropToGroupBy: "رها کردن برای گروه بندی بر اساس {column}",
+ edit: "ویرایش",
+ expand: "باز شدن",
+ expandAll: "باز شدن همه",
+ filterArrIncludes: "شامل",
+ filterArrIncludesAll: "شامل همه",
+ filterArrIncludesSome: "شامل",
+ filterBetween: "میان",
+ filterBetweenInclusive: "میان با احتساب هر دو",
+ filterByColumn: "فیلتر بر اساس {column}",
+ filterContains: "شامل",
+ filterEmpty: "خالی",
+ filterEndsWith: "به پایان میرسد با",
+ filterEquals: "برابر",
+ filterEqualsString: "برابر",
+ filterFuzzy: "نزدیک",
+ filterGreaterThan: "بزرگتر از",
+ filterGreaterThanOrEqualTo: "بزرگتر یا مساوی",
+ filterInNumberRange: "میان",
+ filterIncludesString: "شامل",
+ filterIncludesStringSensitive: "شامل",
+ filterLessThan: "کوچکتر از",
+ filterLessThanOrEqualTo: "کوچکتر یا مساوی",
+ filterMode: "حالت فیلتر: {filterType}",
+ filterNotEmpty: "غیر خالی",
+ filterNotEquals: "نا برابر",
+ filterStartsWith: "شروع میشود با",
+ filterWeakEquals: "برابر",
+ filteringByColumn: "فیلتر بر اساس {column} - {filterType} {filterValue}",
+ goToFirstPage: "رفتن به صفحه اول",
+ goToLastPage: "رفتن به صفحه آخر",
+ goToNextPage: "رفتن به صفحه بعدی",
+ goToPreviousPage: "رفتن به صفحه قبلی",
+ grab: "گرفتن",
+ groupByColumn: "گروه بندی بر اساس {column}",
+ groupedBy: "گروه بندی شده بر اساس",
+ hideAll: "پنهان کردن همه",
+ hideColumn: "پنهان کردن ستون {column}",
+ max: "حداکثر",
+ min: "حداقل",
+ move: "انتقال",
+ noRecordsToDisplay: "هیچ رکوردی برای نمایش وجود ندارد",
+ noResultsFound: "نتیجهای یافت نشد",
+ of: "از",
+ or: "یا",
+ pinToLeft: "چسباندن به سمت چپ",
+ pinToRight: "چسباندن به سمت راست",
+ resetColumnSize: "بازنشانی اندازه ستون",
+ resetOrder: "بازنشانی ترتیب",
+ rowActions: "عملیات ردیف",
+ rowNumber: "#",
+ rowNumbers: "شماره ردیف",
+ rowsPerPage: "ردیف در هر صفحه",
+ save: "ذخیره",
+ search: "جستجو",
+ selectedCountOfRowCountRowsSelected:
+ "{selectedCount} از {rowCount} ردیف انتخاب شده",
+ select: "انتخاب",
+ showAll: "نمایش همه",
+ showAllColumns: "نمایش همه ستونها",
+ showHideColumns: "نمایش/مخفی کردن ستونها",
+ showHideFilters: "نمایش/مخفی کردن فیلترها",
+ showHideSearch: "نمایش/مخفی کردن جستجو",
+ sortByColumnAsc: "مرتب سازی بر اساس {column} صعودی",
+ sortByColumnDesc: "مرتب سازی بر اساس {column} نزولی",
+ sortedByColumnAsc: "مرتب شده بر اساس {column} صعودی",
+ sortedByColumnDesc: "مرتب شده بر اساس {column} نزولی",
+ thenBy: "، سپس بر اساس ",
+ toggleDensity: "تغییر تراکم",
+ toggleFullScreen: "تغییر حالت تمام صفحه",
+ toggleSelectAll: "انتخاب/عدم انتخاب همه",
+ toggleSelectRow: "انتخاب/عدم انتخاب ردیف",
+ toggleVisibility: "تغییر پیدا/پنهان",
+ ungroupByColumn: "لغو گروه بندی بر اساس {column}",
+ unpin: "رها کردن",
+ unpinAll: "رها کردن همه",
+ unsorted: "بدون مرتب سازی",
};
diff --git a/src/components/dashboard/change-password/index.jsx b/src/components/dashboard/change-password/index.jsx
index c2b5fd4..4583549 100644
--- a/src/components/dashboard/change-password/index.jsx
+++ b/src/components/dashboard/change-password/index.jsx
@@ -1,184 +1,177 @@
import CenterLayout from "@/layouts/CenterLayout";
import DashboardLayouts from "@/layouts/dashboardLayouts";
-import {
- Button,
- Typography,
- Stack,
- Paper,
- Container,
- Box,
-} from "@mui/material";
+import {Box, Button, Container, Paper, Stack, Typography,} from "@mui/material";
import Image from "next/image";
-import { Formik } from "formik";
+import {Formik} from "formik";
import * as Yup from "yup";
-import { useTranslations } from "next-intl";
+import {useTranslations} from "next-intl";
import PasswordField from "@/core/components/PasswordField";
import StyledForm from "@/core/components/StyledForm";
-import { CHANGE_PASSWORD } from "@/core/data/apiRoutes";
+import {CHANGE_PASSWORD} from "@/core/data/apiRoutes";
import useUser from "@/lib/app/hooks/useUser";
import axios from "axios";
import Notifications from "@/core/components/notifications";
import useDirection from "@/lib/app/hooks/useDirection";
-import { toast } from "react-toastify";
+import {toast} from "react-toastify";
const DashboardChangePasswordComponent = () => {
- const t = useTranslations();
- const { token } = useUser();
- const { directionApp } = useDirection();
+ const t = useTranslations();
+ const {token} = useUser();
+ const {directionApp} = useDirection();
- const handleSubmit = (values, { setSubmitting, resetForm }) => {
- toast.dismiss();
- const pendingToast = toast(t("notifications.pending"), {
- position: directionApp === "ltr" ? "top-left" : "top-right",
- autoClose: false,
- closeOnClick: false,
- draggable: false,
+ const handleSubmit = (values, {setSubmitting, resetForm}) => {
+ toast.dismiss();
+ const pendingToast = toast(t("notifications.pending"), {
+ position: directionApp === "ltr" ? "top-left" : "top-right",
+ autoClose: false,
+ closeOnClick: false,
+ draggable: false,
+ });
+ axios
+ .post(
+ CHANGE_PASSWORD,
+ {
+ current_password: values.current_password,
+ new_password: values.new_password,
+ new_password_confirmation: values.new_password_confirmation,
+ },
+ {
+ headers: {authorization: `Bearer ${token}`},
+ }
+ )
+ .then((response) => {
+ toast.dismiss(pendingToast); // Dismiss the pending toast notification
+ Notifications(directionApp, response, t);
+ resetForm();
+ })
+ .catch((error) => {
+ toast.dismiss(pendingToast); // Dismiss the pending toast notification
+ Notifications(directionApp, error.response, t);
+ })
+ .finally(() => {
+ setSubmitting(false); // Set `setSubmitting` to false after the API request completes
+ });
+ };
+ const initialValues = {
+ current_password: "",
+ new_password: "",
+ new_password_confirmation: "",
+ };
+ const validationSchema = Yup.object().shape({
+ current_password: Yup.string().required(
+ t("ChangePassword.error_message_required")
+ ),
+ new_password: Yup.string()
+ .min(8, t("ChangePassword.error_message_password_length"))
+ .required(t("ChangePassword.error_message_required")),
+ new_password_confirmation: Yup.string()
+ .required(t("ChangePassword.error_message_required"))
+ .test(
+ t("ChangePassword.error_message_password_match"),
+ t("ChangePassword.error_message_password_not_match"),
+ function (value) {
+ return this.parent.new_password === value;
+ }
+ ),
});
- axios
- .post(
- CHANGE_PASSWORD,
- {
- current_password: values.current_password,
- new_password: values.new_password,
- new_password_confirmation: values.new_password_confirmation,
- },
- {
- headers: { authorization: `Bearer ${token}` },
- }
- )
- .then((response) => {
- toast.dismiss(pendingToast); // Dismiss the pending toast notification
- Notifications(directionApp, response, t);
- resetForm();
- })
- .catch((error) => {
- toast.dismiss(pendingToast); // Dismiss the pending toast notification
- Notifications(directionApp, error.response, t);
- })
- .finally(() => {
- setSubmitting(false); // Set `setSubmitting` to false after the API request completes
- });
- };
- const initialValues = {
- current_password: "",
- new_password: "",
- new_password_confirmation: "",
- };
- const validationSchema = Yup.object().shape({
- current_password: Yup.string().required(
- t("ChangePassword.error_message_required")
- ),
- new_password: Yup.string()
- .min(8, t("ChangePassword.error_message_password_length"))
- .required(t("ChangePassword.error_message_required")),
- new_password_confirmation: Yup.string()
- .required(t("ChangePassword.error_message_required"))
- .test(
- t("ChangePassword.error_message_password_match"),
- t("ChangePassword.error_message_password_not_match"),
- function (value) {
- return this.parent.new_password === value;
- }
- ),
- });
- return (
-
-
-
-
- {(props) => (
- {
- e.preventDefault();
- props.handleSubmit();
- }}
- >
-
-
-
+
+
+
-
-
-
- {t("ChangePassword.typography_change_password")}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- )}
-
-
-
-
- );
+ {(props) => (
+ {
+ e.preventDefault();
+ props.handleSubmit();
+ }}
+ >
+
+
+
+
+
+
+ {t("ChangePassword.typography_change_password")}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )}
+
+
+
+
+ );
};
export default DashboardChangePasswordComponent;
diff --git a/src/components/dashboard/edit-profile/index.jsx b/src/components/dashboard/edit-profile/index.jsx
index fa3e2e1..9391754 100644
--- a/src/components/dashboard/edit-profile/index.jsx
+++ b/src/components/dashboard/edit-profile/index.jsx
@@ -2,277 +2,268 @@ import StyledForm from "@/core/components/StyledForm";
import CenterLayout from "@/layouts/CenterLayout";
import DashboardLayouts from "@/layouts/dashboardLayouts";
import useUser from "@/lib/app/hooks/useUser";
-import {
- Box,
- Button,
- Container,
- Grid,
- Paper,
- Stack,
- TextField,
- Typography,
-} from "@mui/material";
+import {Box, Container, Grid, Paper, Stack, TextField, Typography,} from "@mui/material";
import * as Yup from "yup";
-import { Field, Formik } from "formik";
-import { useTranslations } from "next-intl";
+import {Field, Formik} from "formik";
+import {useTranslations} from "next-intl";
import AvatarUpload from "@/core/components/AvatarUpload";
import axios from "axios";
-import { UPDATE_PROFILE, UPDATE_AVATAR } from "@/core/data/apiRoutes";
+import {UPDATE_AVATAR} from "@/core/data/apiRoutes";
import useDirection from "@/lib/app/hooks/useDirection";
import Notifications from "@/core/components/notifications";
import ImageResizer from "@/core/components/ImageConvertor";
const DashboardEditProfile = () => {
- const t = useTranslations();
- const { user, token, getUser, changeUser } = useUser();
- console.log(user);
- const { directionApp } = useDirection();
+ const t = useTranslations();
+ const {user, token, getUser, changeUser} = useUser();
+ console.log(user);
+ const {directionApp} = useDirection();
- const editAvatar = async (avatar) => {
- try {
- const formData = new FormData();
+ const editAvatar = async (avatar) => {
+ try {
+ const formData = new FormData();
- if (avatar != null) {
- var resizedAvatar;
- resizedAvatar = await ImageResizer(avatar);
- formData.append("avatar", resizedAvatar);
- }
+ if (avatar != null) {
+ var resizedAvatar;
+ resizedAvatar = await ImageResizer(avatar);
+ formData.append("avatar", resizedAvatar);
+ }
- await axios.post(UPDATE_AVATAR, formData, {
- headers: {
- authorization: `Bearer ${token}`,
- "Content-Type": "multipart/form-data",
- },
- });
- } catch (error) {
- Notifications(directionApp, error.response, t);
- throw error;
- }
- };
- const handleSubmit = (values, { setSubmitting }) => {
- // const formData = new FormData();
- // formData.append("email", values.expert_email);
- // if (values.change_avatar !== false) {
- // editAvatar(values.expert_avatar)
- // .then(() => {
- // return axios.post(UPDATE_PROFILE, formData, {
- // headers: {
- // authorization: `Bearer ${token}`,
- // "Content-Type": "multipart/form-data",
- // },
- // });
- // })
- // .then((response) => {
- // Notifications(directionApp, response, t);
- // getUser((data) => {
- // changeUser(data);
- // });
- // })
- // .catch((error) => {
- // Notifications(directionApp, error.response, t);
- // })
- // .finally(() => {
- // setSubmitting(false);
- // });
- // } else {
- // axios
- // .post(UPDATE_PROFILE, formData, {
- // headers: {
- // authorization: `Bearer ${token}`,
- // "Content-Type": "multipart/form-data",
- // },
- // })
- // .then((response) => {
- // Notifications(directionApp, response, t);
- // getUser((data) => {
- // changeUser(data);
- // });
- // })
- // .catch((error) => {
- // Notifications(directionApp, error.response, t);
- // })
- // .finally(() => {
- // setSubmitting(false);
- // });
- // }
- };
- const initialValues = {
- expert_avatar: null,
- username: user.username,
- name: user.name,
- email: user.email,
- province_name: user.province_name,
- position: user.position,
- };
- const validationSchema = Yup.object().shape({
- // username: Yup.string().required(t("UpdateProfile.error_message_required")),
- // name: Yup.string().required(t("UpdateProfile.error_message_required")),
- // email: Yup.string()
- // .email(t("UpdateProfile.error_invalid_email"))
- // .required(t("UpdateProfile.error_message_required")),
- // province_name: Yup.string().required(
- // t("UpdateProfile.error_message_required")
- // ),
- // position: Yup.string().required(t("UpdateProfile.error_message_required")),
- });
+ await axios.post(UPDATE_AVATAR, formData, {
+ headers: {
+ authorization: `Bearer ${token}`,
+ "Content-Type": "multipart/form-data",
+ },
+ });
+ } catch (error) {
+ Notifications(directionApp, error.response, t);
+ throw error;
+ }
+ };
+ const handleSubmit = (values, {setSubmitting}) => {
+ // const formData = new FormData();
+ // formData.append("email", values.expert_email);
+ // if (values.change_avatar !== false) {
+ // editAvatar(values.expert_avatar)
+ // .then(() => {
+ // return axios.post(UPDATE_PROFILE, formData, {
+ // headers: {
+ // authorization: `Bearer ${token}`,
+ // "Content-Type": "multipart/form-data",
+ // },
+ // });
+ // })
+ // .then((response) => {
+ // Notifications(directionApp, response, t);
+ // getUser((data) => {
+ // changeUser(data);
+ // });
+ // })
+ // .catch((error) => {
+ // Notifications(directionApp, error.response, t);
+ // })
+ // .finally(() => {
+ // setSubmitting(false);
+ // });
+ // } else {
+ // axios
+ // .post(UPDATE_PROFILE, formData, {
+ // headers: {
+ // authorization: `Bearer ${token}`,
+ // "Content-Type": "multipart/form-data",
+ // },
+ // })
+ // .then((response) => {
+ // Notifications(directionApp, response, t);
+ // getUser((data) => {
+ // changeUser(data);
+ // });
+ // })
+ // .catch((error) => {
+ // Notifications(directionApp, error.response, t);
+ // })
+ // .finally(() => {
+ // setSubmitting(false);
+ // });
+ // }
+ };
+ const initialValues = {
+ expert_avatar: null,
+ username: user.username,
+ name: user.name,
+ email: user.email,
+ province_name: user.province_name,
+ position: user.position,
+ };
+ const validationSchema = Yup.object().shape({
+ // username: Yup.string().required(t("UpdateProfile.error_message_required")),
+ // name: Yup.string().required(t("UpdateProfile.error_message_required")),
+ // email: Yup.string()
+ // .email(t("UpdateProfile.error_invalid_email"))
+ // .required(t("UpdateProfile.error_message_required")),
+ // province_name: Yup.string().required(
+ // t("UpdateProfile.error_message_required")
+ // ),
+ // position: Yup.string().required(t("UpdateProfile.error_message_required")),
+ });
- return (
-
-
-
-
- {(props) => (
- {
- e.preventDefault();
- props.handleSubmit();
- }}
- >
-
-
-
- {t("UpdateProfile.typography_edit_profile")}
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+ {(props) => (
+ {
+ e.preventDefault();
+ props.handleSubmit();
+ }}
+ >
+
+
+
+ {t("UpdateProfile.typography_edit_profile")}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
- {/*
+
+
+
+
+ {/* */}
-
-
-
- )}
-
-
-
-
- );
+
+
+
+ )}
+
+
+
+
+ );
};
export default DashboardEditProfile;
diff --git a/src/components/dashboard/first/index.jsx b/src/components/dashboard/first/index.jsx
index c693380..ee4f80a 100644
--- a/src/components/dashboard/first/index.jsx
+++ b/src/components/dashboard/first/index.jsx
@@ -1,7 +1,7 @@
import DashboardLayouts from "@/layouts/dashboardLayouts";
const DashboardFirstComponent = () => {
- return ;
+ return ;
};
export default DashboardFirstComponent;
diff --git a/src/components/dashboard/machinary-office/Form/ConfirmForm.jsx b/src/components/dashboard/machinary-office/Form/ConfirmForm.jsx
index f2988ef..a0d8017 100644
--- a/src/components/dashboard/machinary-office/Form/ConfirmForm.jsx
+++ b/src/components/dashboard/machinary-office/Form/ConfirmForm.jsx
@@ -1,140 +1,132 @@
-import { CONFIRM_MACHINARY_OFFICE } from "@/core/data/apiRoutes";
-import {
- Dialog,
- DialogTitle,
- DialogContent,
- DialogContentText,
- DialogActions,
- Button,
- TextField,
-} from "@mui/material";
-import { useTranslations } from "next-intl";
-import { useState } from "react";
-import { useFormik } from "formik";
+import {CONFIRM_MACHINARY_OFFICE} from "@/core/data/apiRoutes";
+import {Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, TextField,} from "@mui/material";
+import {useTranslations} from "next-intl";
+import {useState} from "react";
+import {useFormik} from "formik";
import * as Yup from "yup";
import UploadSystem from "@/core/components/UploadSystem";
import UploadFileNotification from "@/core/components/notifications/UploadFileNotification";
import useDirection from "@/lib/app/hooks/useDirection";
-const ConfirmForm = ({ open, handleClose, rowId, confirmData }) => {
- const t = useTranslations();
- const { directionApp } = useDirection();
- const [proposedAmount, setProposedAmount] = useState("");
- const [description, setDescription] = useState("");
- const [selectedImage, setSelectedImage] = useState("");
- const [fileType, setfileType] = useState(null);
- const [fileName, setfileName] = useState(null);
- const [showAddIcon, setShowAddIcon] = useState(true);
+const ConfirmForm = ({open, handleClose, rowId, confirmData}) => {
+ const t = useTranslations();
+ const {directionApp} = useDirection();
+ const [proposedAmount, setProposedAmount] = useState("");
+ const [description, setDescription] = useState("");
+ const [selectedImage, setSelectedImage] = useState("");
+ const [fileType, setfileType] = useState(null);
+ const [fileName, setfileName] = useState(null);
+ const [showAddIcon, setShowAddIcon] = useState(true);
- //formik
- const validationSchema = Yup.object().shape({
- proposed_amount: Yup.string().required(t("ConfirmDialog.amount_error")),
- });
- const formik = useFormik({
- initialValues: {
- proposed_amount: "",
- description: "",
- },
- validationSchema,
- onSubmit: () => {
- const formData = new FormData();
- formData.append("proposed_amount", proposedAmount);
- if (description != "") formData.append("expert_description", description);
- handleClose();
- confirmData(CONFIRM_MACHINARY_OFFICE, rowId, formData);
- },
- });
+ //formik
+ const validationSchema = Yup.object().shape({
+ proposed_amount: Yup.string().required(t("ConfirmDialog.amount_error")),
+ });
+ const formik = useFormik({
+ initialValues: {
+ proposed_amount: "",
+ description: "",
+ },
+ validationSchema,
+ onSubmit: () => {
+ const formData = new FormData();
+ formData.append("proposed_amount", proposedAmount);
+ if (description != "") formData.append("expert_description", description);
+ handleClose();
+ confirmData(CONFIRM_MACHINARY_OFFICE, rowId, formData);
+ },
+ });
- const handleDescriptionChange = (event) => {
- setDescription(event.target.value);
- };
- const handleAmountChange = (event) => {
- if (/^\d*$/.test(event.target.value)) {
- setProposedAmount(event.target.value);
- }
- formik.handleChange(event);
- };
+ const handleDescriptionChange = (event) => {
+ setDescription(event.target.value);
+ };
+ const handleAmountChange = (event) => {
+ if (/^\d*$/.test(event.target.value)) {
+ setProposedAmount(event.target.value);
+ }
+ formik.handleChange(event);
+ };
- const handleUploadChange = (event) => {
- const uploadedFile = event.target?.files?.[0];
- if (uploadedFile) {
- const maxFileSize = 2 * 1024 * 1024;
- if (uploadedFile.size > maxFileSize) {
- UploadFileNotification(directionApp, t);
- event.target.value = "";
- return;
- }
- const fileType = event.target?.files?.[0].type;
- const fileName = event.target?.files?.[0].name;
- setSelectedImage(URL.createObjectURL(uploadedFile));
- setfileType(fileType);
- setfileName(fileName);
- formik.setFieldValue("confirm_img", uploadedFile);
- setShowAddIcon(false);
- }
- };
- return (
-
- );
+ const handleUploadChange = (event) => {
+ const uploadedFile = event.target?.files?.[0];
+ if (uploadedFile) {
+ const maxFileSize = 2 * 1024 * 1024;
+ if (uploadedFile.size > maxFileSize) {
+ UploadFileNotification(directionApp, t);
+ event.target.value = "";
+ return;
+ }
+ const fileType = event.target?.files?.[0].type;
+ const fileName = event.target?.files?.[0].name;
+ setSelectedImage(URL.createObjectURL(uploadedFile));
+ setfileType(fileType);
+ setfileName(fileName);
+ formik.setFieldValue("confirm_img", uploadedFile);
+ setShowAddIcon(false);
+ }
+ };
+ return (
+
+ );
};
export default ConfirmForm;
diff --git a/src/components/dashboard/machinary-office/Form/RejectForm.jsx b/src/components/dashboard/machinary-office/Form/RejectForm.jsx
index b7a37e9..06f7292 100644
--- a/src/components/dashboard/machinary-office/Form/RejectForm.jsx
+++ b/src/components/dashboard/machinary-office/Form/RejectForm.jsx
@@ -1,116 +1,108 @@
-import { REJECT_MACHINARY_OFFICE } from "@/core/data/apiRoutes";
-import {
- Dialog,
- DialogTitle,
- DialogContent,
- DialogContentText,
- DialogActions,
- Button,
- TextField,
-} from "@mui/material";
-import { useTranslations } from "next-intl";
-import { useFormik } from "formik";
+import {REJECT_MACHINARY_OFFICE} from "@/core/data/apiRoutes";
+import {Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, TextField,} from "@mui/material";
+import {useTranslations} from "next-intl";
+import {useFormik} from "formik";
import * as Yup from "yup";
-import { useState } from "react";
+import {useState} from "react";
import UploadSystem from "@/core/components/UploadSystem";
import UploadFileNotification from "@/core/components/notifications/UploadFileNotification";
import useDirection from "@/lib/app/hooks/useDirection";
-const RejectForm = ({ open, handleClose, rowId, rejectData }) => {
- const t = useTranslations();
- const { directionApp } = useDirection();
- const [description, setDescription] = useState("");
- const [selectedImage, setSelectedImage] = useState("");
- const [fileType, setfileType] = useState(null);
- const [fileName, setfileName] = useState(null);
- const [showAddIcon, setShowAddIcon] = useState(true);
+const RejectForm = ({open, handleClose, rowId, rejectData}) => {
+ const t = useTranslations();
+ const {directionApp} = useDirection();
+ const [description, setDescription] = useState("");
+ const [selectedImage, setSelectedImage] = useState("");
+ const [fileType, setfileType] = useState(null);
+ const [fileName, setfileName] = useState(null);
+ const [showAddIcon, setShowAddIcon] = useState(true);
- const validationSchema = Yup.object().shape({
- description: Yup.string().required(t("RejectDialog.description_error")),
- });
+ const validationSchema = Yup.object().shape({
+ description: Yup.string().required(t("RejectDialog.description_error")),
+ });
- const formik = useFormik({
- initialValues: {
- description: "",
- },
- validationSchema,
- onSubmit: () => {
- const formData = new FormData();
- formData.append("expert_description", description);
- handleClose();
- rejectData(REJECT_MACHINARY_OFFICE, rowId, formData);
- },
- });
+ const formik = useFormik({
+ initialValues: {
+ description: "",
+ },
+ validationSchema,
+ onSubmit: () => {
+ const formData = new FormData();
+ formData.append("expert_description", description);
+ handleClose();
+ rejectData(REJECT_MACHINARY_OFFICE, rowId, formData);
+ },
+ });
- const handleDescriptionChange = (event) => {
- setDescription(event.target.value);
- formik.handleChange(event);
- };
+ const handleDescriptionChange = (event) => {
+ setDescription(event.target.value);
+ formik.handleChange(event);
+ };
- const handleUploadChange = (event) => {
- const uploadedFile = event.target?.files?.[0];
- if (uploadedFile) {
- const maxFileSize = 2 * 1024 * 1024;
- if (uploadedFile.size > maxFileSize) {
- UploadFileNotification(directionApp, t);
- event.target.value = "";
- return;
- }
- const fileType = event.target?.files?.[0].type;
- const fileName = event.target?.files?.[0].name;
- setSelectedImage(URL.createObjectURL(uploadedFile));
- setfileType(fileType);
- setfileName(fileName);
- formik.setFieldValue("reject_img", uploadedFile);
- setShowAddIcon(false);
- }
- };
+ const handleUploadChange = (event) => {
+ const uploadedFile = event.target?.files?.[0];
+ if (uploadedFile) {
+ const maxFileSize = 2 * 1024 * 1024;
+ if (uploadedFile.size > maxFileSize) {
+ UploadFileNotification(directionApp, t);
+ event.target.value = "";
+ return;
+ }
+ const fileType = event.target?.files?.[0].type;
+ const fileName = event.target?.files?.[0].name;
+ setSelectedImage(URL.createObjectURL(uploadedFile));
+ setfileType(fileType);
+ setfileName(fileName);
+ formik.setFieldValue("reject_img", uploadedFile);
+ setShowAddIcon(false);
+ }
+ };
- return (
-
- );
+ return (
+
+ );
};
export default RejectForm;
diff --git a/src/components/dashboard/machinary-office/TableRowActions.jsx b/src/components/dashboard/machinary-office/TableRowActions.jsx
index 30367b9..13c6e7b 100644
--- a/src/components/dashboard/machinary-office/TableRowActions.jsx
+++ b/src/components/dashboard/machinary-office/TableRowActions.jsx
@@ -1,60 +1,60 @@
import ThumbUpAltIcon from "@mui/icons-material/ThumbUpAlt";
import ThumbDownIcon from "@mui/icons-material/ThumbDown";
-import { Box, IconButton, Tooltip } from "@mui/material";
-import { useContext } from "react";
+import {Box, IconButton, Tooltip} from "@mui/material";
+import {useContext} from "react";
import ConfirmForm from "./Form/ConfirmForm";
import RejectForm from "./Form/RejectForm";
-import { useTranslations } from "next-intl";
-import { DataTableContext } from "@/lib/app/contexts/DatatableContext";
+import {useTranslations} from "next-intl";
+import {DataTableContext} from "@/lib/app/contexts/DatatableContext";
-const TableRowActions = ({ row }) => {
- const t = useTranslations();
- const {
- openConfirmDialog,
- openRejectDialog,
- handleOpenConfirmDialog,
- handleOpenRejectDialog,
- handleCloseConfirmDialog,
- handleCloseRejectDialog,
- rowId,
- confirmData,
- rejectData,
- } = useContext(DataTableContext);
- return (
-
-
- {
- handleOpenConfirmDialog(row);
- }}
- >
-
-
-
- {openConfirmDialog && (
-
- )}
-
- handleOpenRejectDialog(row)}>
-
-
-
- {openRejectDialog && (
-
- )}
-
- );
+const TableRowActions = ({row}) => {
+ const t = useTranslations();
+ const {
+ openConfirmDialog,
+ openRejectDialog,
+ handleOpenConfirmDialog,
+ handleOpenRejectDialog,
+ handleCloseConfirmDialog,
+ handleCloseRejectDialog,
+ rowId,
+ confirmData,
+ rejectData,
+ } = useContext(DataTableContext);
+ return (
+
+
+ {
+ handleOpenConfirmDialog(row);
+ }}
+ >
+
+
+
+ {openConfirmDialog && (
+
+ )}
+
+ handleOpenRejectDialog(row)}>
+
+
+
+ {openRejectDialog && (
+
+ )}
+
+ );
};
export default TableRowActions;
diff --git a/src/components/dashboard/machinary-office/TableTolbar.jsx b/src/components/dashboard/machinary-office/TableTolbar.jsx
index 3f06d3b..e267691 100644
--- a/src/components/dashboard/machinary-office/TableTolbar.jsx
+++ b/src/components/dashboard/machinary-office/TableTolbar.jsx
@@ -1,13 +1,13 @@
-import { Stack, Tooltip } from "@mui/material";
-import { useTranslations } from "next-intl";
+import {Stack, Tooltip} from "@mui/material";
+import {useTranslations} from "next-intl";
function TableToolbar() {
- const t = useTranslations();
- return (
-
-
-
- );
+ const t = useTranslations();
+ return (
+
+
+
+ );
}
export default TableToolbar;
diff --git a/src/components/dashboard/machinary-office/index.jsx b/src/components/dashboard/machinary-office/index.jsx
index 30415e4..63061ce 100644
--- a/src/components/dashboard/machinary-office/index.jsx
+++ b/src/components/dashboard/machinary-office/index.jsx
@@ -1,244 +1,241 @@
import DataTableStructure from "@/core/components/DatatableStructure";
import DashboardLayouts from "@/layouts/dashboardLayouts";
-import { Box, IconButton, Typography } from "@mui/material";
+import {Box, IconButton, Typography} from "@mui/material";
import ClearIcon from "@mui/icons-material/Clear";
-import { useMemo } from "react";
+import {useMemo} from "react";
// import TableToolbar from "./TableTollbar";
-import { GET_MACHINARY_OFFICE } from "@/core/data/apiRoutes";
-import { useTranslations } from "next-intl";
+import {GET_MACHINARY_OFFICE} from "@/core/data/apiRoutes";
+import {useTranslations} from "next-intl";
import TableRowActions from "./TableRowActions";
-import {
- LocalizationProvider,
- MobileDateTimePicker,
-} from "@mui/x-date-pickers";
-import { AdapterDateFnsJalali } from "@mui/x-date-pickers/AdapterDateFnsJalali";
+import {LocalizationProvider, MobileDateTimePicker,} from "@mui/x-date-pickers";
+import {AdapterDateFnsJalali} from "@mui/x-date-pickers/AdapterDateFnsJalali";
import moment from "jalali-moment";
-import { faIR } from "@mui/x-date-pickers/locales";
+import {faIR} from "@mui/x-date-pickers/locales";
function DashboardMachinaryOfficeComponent() {
- const t = useTranslations();
- const columns = useMemo(
- () => [
- {
- accessorFn: (row) => row.id,
- id: "id",
- header: t("PassengerOffice.id"),
- enableColumnFilter: true,
- datatype: "numeric",
- filterFn: "equals",
- maxSize: 100,
- columnFilterModeOptions: [
- "equals",
- "notEquals",
- "contains",
- "lessThan",
- "greaterThan",
- "between",
+ const t = useTranslations();
+ const columns = useMemo(
+ () => [
+ {
+ accessorFn: (row) => row.id,
+ id: "id",
+ header: t("PassengerOffice.id"),
+ enableColumnFilter: true,
+ datatype: "numeric",
+ filterFn: "equals",
+ maxSize: 100,
+ columnFilterModeOptions: [
+ "equals",
+ "notEquals",
+ "contains",
+ "lessThan",
+ "greaterThan",
+ "between",
+ ],
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) => row.name,
+ id: "name",
+ header: t("MachinaryOffice.name"),
+ enableColumnFilter: true,
+ datatype: "text",
+ filterFn: "contains",
+ columnFilterModeOptions: ["contains", "equals", "notEquals"],
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) => row.national_id,
+ id: "national_id",
+ header: t("MachinaryOffice.national_id"),
+ enableColumnFilter: true,
+ datatype: "numeric",
+ filterFn: "equals",
+ columnFilterModeOptions: [
+ "equals",
+ "notEquals",
+ "contains",
+ "lessThan",
+ "greaterThan",
+ "between",
+ ],
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) => row.phone_number,
+ id: "phone_number",
+ header: t("MachinaryOffice.phone_number"),
+ enableColumnFilter: true,
+ datatype: "numeric",
+ filterFn: "equals",
+ columnFilterModeOptions: [
+ "equals",
+ "notEquals",
+ "contains",
+ "lessThan",
+ "greaterThan",
+ "between",
+ ],
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) =>
+ moment(row.created_at).locale("fa").format("HH:mm | yyyy/MM/DD"),
+ id: "created_at",
+ header: t("MachinaryOffice.created_at"),
+ enableColumnFilter: true,
+ datatype: "date",
+ filterFn: "lessThan",
+ minSize: 200,
+ columnFilterModeOptions: ["lessThan", "greaterThan"],
+ Cell: ({renderedCellValue}) => {
+ return {renderedCellValue};
+ },
+ Header: ({column}) => {column.columnDef.header},
+ Filter: ({column}) => {
+ const filterFnValue = column.columnDef._filterFn;
+ return (
+
+
+ {
+ const date = new Date(newValue);
+ const formattedDate = moment(date)
+ .locale("en")
+ .format("YYYY-MM-DD HH:mm");
+ column.setFilterValue(formattedDate);
+ }}
+ slotProps={{
+ textField: {
+ placeholder: "تاریخ خود را وارد کنید",
+ helperText: `${t("filter_mode")}: ${t(filterFnValue)}`,
+ sx: {minWidth: "120px"},
+ variant: "standard",
+ },
+ }}
+ value={
+ column.getFilterValue()
+ ? new Date(column.getFilterValue())
+ : null
+ }
+ />
+
+ {
+ column.setFilterValue(null);
+ }}
+ sx={{
+ color: column.getFilterValue()
+ ? "rgba(0, 0, 0, 0.54)"
+ : "#bfbfbf",
+ }}
+ >
+
+
+
+ );
+ },
+ },
+ {
+ accessorFn: (row) =>
+ moment(row.updated_at).locale("fa").format("HH:mm | yyyy/MM/DD"),
+ id: "updated_at",
+ header: t("MachinaryOffice.updated_at"),
+ enableColumnFilter: false,
+ datatype: "numeric",
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) => row.navgan_id,
+ id: "navgan_id",
+ header: t("MachinaryOffice.navgan_id"),
+ enableColumnFilter: true,
+ datatype: "numeric",
+ filterFn: "equals",
+ maxSize: 100,
+ columnFilterModeOptions: [
+ "equals",
+ "notEquals",
+ "contains",
+ "lessThan",
+ "greaterThan",
+ "between",
+ ],
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) => row.vehicle_type,
+ id: "vehicle_type",
+ header: t("MachinaryOffice.vehicle_type"),
+ enableColumnFilter: true,
+ datatype: "text",
+ filterFn: "contains",
+ columnFilterModeOptions: ["contains", "equals", "notEquals"],
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) => row.state_name,
+ id: "state_id",
+ header: t("MachinaryOffice.state_name"),
+ enableColumnFilter: false,
+ datatype: "numeric",
+ minSize: 300,
+ // filterFn: "equals",
+ // filterSelectOptions: [
+ // ],
+ // filterVariant: "select",
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
],
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) => row.name,
- id: "name",
- header: t("MachinaryOffice.name"),
- enableColumnFilter: true,
- datatype: "text",
- filterFn: "contains",
- columnFilterModeOptions: ["contains", "equals", "notEquals"],
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) => row.national_id,
- id: "national_id",
- header: t("MachinaryOffice.national_id"),
- enableColumnFilter: true,
- datatype: "numeric",
- filterFn: "equals",
- columnFilterModeOptions: [
- "equals",
- "notEquals",
- "contains",
- "lessThan",
- "greaterThan",
- "between",
- ],
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) => row.phone_number,
- id: "phone_number",
- header: t("MachinaryOffice.phone_number"),
- enableColumnFilter: true,
- datatype: "numeric",
- filterFn: "equals",
- columnFilterModeOptions: [
- "equals",
- "notEquals",
- "contains",
- "lessThan",
- "greaterThan",
- "between",
- ],
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) =>
- moment(row.created_at).locale("fa").format("HH:mm | yyyy/MM/DD"),
- id: "created_at",
- header: t("MachinaryOffice.created_at"),
- enableColumnFilter: true,
- datatype: "date",
- filterFn: "lessThan",
- minSize: 200,
- columnFilterModeOptions: ["lessThan", "greaterThan"],
- Cell: ({ renderedCellValue }) => {
- return {renderedCellValue};
- },
- Header: ({ column }) => {column.columnDef.header},
- Filter: ({ column }) => {
- const filterFnValue = column.columnDef._filterFn;
- return (
-
-
- {
- const date = new Date(newValue);
- const formattedDate = moment(date)
- .locale("en")
- .format("YYYY-MM-DD HH:mm");
- column.setFilterValue(formattedDate);
- }}
- slotProps={{
- textField: {
- placeholder: "تاریخ خود را وارد کنید",
- helperText: `${t("filter_mode")}: ${t(filterFnValue)}`,
- sx: { minWidth: "120px" },
- variant: "standard",
- },
- }}
- value={
- column.getFilterValue()
- ? new Date(column.getFilterValue())
- : null
- }
+ []
+ );
+ return (
+
+
+ }
+ enableLastUpdate={true}
+ enablePinning={true}
+ enableDensityToggle={true}
+ enableColumnFilters={true}
+ enableHiding={true}
+ enableFullScreenToggle={false}
+ enableGlobalFilter={false}
+ enableColumnResizing={false} // if you want true this you shold change renderRowActions props ** see https://www.material-react-table.com/docs/guides/row-actions
+ enableRowActions={true}
+ renderRowActions={({row}) => }
/>
-
- {
- column.setFilterValue(null);
- }}
- sx={{
- color: column.getFilterValue()
- ? "rgba(0, 0, 0, 0.54)"
- : "#bfbfbf",
- }}
- >
-
-
- );
- },
- },
- {
- accessorFn: (row) =>
- moment(row.updated_at).locale("fa").format("HH:mm | yyyy/MM/DD"),
- id: "updated_at",
- header: t("MachinaryOffice.updated_at"),
- enableColumnFilter: false,
- datatype: "numeric",
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) => row.navgan_id,
- id: "navgan_id",
- header: t("MachinaryOffice.navgan_id"),
- enableColumnFilter: true,
- datatype: "numeric",
- filterFn: "equals",
- maxSize: 100,
- columnFilterModeOptions: [
- "equals",
- "notEquals",
- "contains",
- "lessThan",
- "greaterThan",
- "between",
- ],
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) => row.vehicle_type,
- id: "vehicle_type",
- header: t("MachinaryOffice.vehicle_type"),
- enableColumnFilter: true,
- datatype: "text",
- filterFn: "contains",
- columnFilterModeOptions: ["contains", "equals", "notEquals"],
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) => row.state_name,
- id: "state_id",
- header: t("MachinaryOffice.state_name"),
- enableColumnFilter: false,
- datatype: "numeric",
- minSize: 300,
- // filterFn: "equals",
- // filterSelectOptions: [
- // ],
- // filterVariant: "select",
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- ],
- []
- );
- return (
-
-
- }
- enableLastUpdate={true}
- enablePinning={true}
- enableDensityToggle={true}
- enableColumnFilters={true}
- enableHiding={true}
- enableFullScreenToggle={false}
- enableGlobalFilter={false}
- enableColumnResizing={false} // if you want true this you shold change renderRowActions props ** see https://www.material-react-table.com/docs/guides/row-actions
- enableRowActions={true}
- renderRowActions={({ row }) => }
- />
-
-
- );
+
+ );
}
export default DashboardMachinaryOfficeComponent;
diff --git a/src/components/dashboard/passenger-boss/Form/ConfirmForm.jsx b/src/components/dashboard/passenger-boss/Form/ConfirmForm.jsx
index ec01590..f12c0bc 100644
--- a/src/components/dashboard/passenger-boss/Form/ConfirmForm.jsx
+++ b/src/components/dashboard/passenger-boss/Form/ConfirmForm.jsx
@@ -1,142 +1,134 @@
-import { CONFIRM_PASSENGER_BOSS } from "@/core/data/apiRoutes";
-import {
- Dialog,
- DialogTitle,
- DialogContent,
- DialogContentText,
- DialogActions,
- Button,
- TextField,
-} from "@mui/material";
-import { useTranslations } from "next-intl";
-import { useState } from "react";
-import { useFormik } from "formik";
+import {CONFIRM_PASSENGER_BOSS} from "@/core/data/apiRoutes";
+import {Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, TextField,} from "@mui/material";
+import {useTranslations} from "next-intl";
+import {useState} from "react";
+import {useFormik} from "formik";
import * as Yup from "yup";
import UploadSystem from "@/core/components/UploadSystem";
import UploadFileNotification from "@/core/components/notifications/UploadFileNotification";
import useDirection from "@/lib/app/hooks/useDirection";
-const ConfirmForm = ({ open, handleClose, rowId, confirmData }) => {
- const t = useTranslations();
- const { directionApp } = useDirection();
- const [proposedAmount, setProposedAmount] = useState("");
- const [description, setDescription] = useState("");
- const [selectedImage, setSelectedImage] = useState("");
- const [fileType, setfileType] = useState(null);
- const [fileName, setfileName] = useState(null);
- const [showAddIcon, setShowAddIcon] = useState(true);
+const ConfirmForm = ({open, handleClose, rowId, confirmData}) => {
+ const t = useTranslations();
+ const {directionApp} = useDirection();
+ const [proposedAmount, setProposedAmount] = useState("");
+ const [description, setDescription] = useState("");
+ const [selectedImage, setSelectedImage] = useState("");
+ const [fileType, setfileType] = useState(null);
+ const [fileName, setfileName] = useState(null);
+ const [showAddIcon, setShowAddIcon] = useState(true);
- //formik
- const validationSchema = Yup.object().shape({
- proposed_amount: Yup.string().required(
- t("ConfirmDialog.approved_amount_error")
- ),
- });
- const formik = useFormik({
- initialValues: {
- proposed_amount: "",
- description: "",
- },
- validationSchema,
- onSubmit: () => {
- const formData = new FormData();
- formData.append("approved_amount", proposedAmount);
- if (description != "") formData.append("expert_description", description);
- handleClose();
- confirmData(CONFIRM_PASSENGER_BOSS, rowId, formData);
- },
- });
+ //formik
+ const validationSchema = Yup.object().shape({
+ proposed_amount: Yup.string().required(
+ t("ConfirmDialog.approved_amount_error")
+ ),
+ });
+ const formik = useFormik({
+ initialValues: {
+ proposed_amount: "",
+ description: "",
+ },
+ validationSchema,
+ onSubmit: () => {
+ const formData = new FormData();
+ formData.append("approved_amount", proposedAmount);
+ if (description != "") formData.append("expert_description", description);
+ handleClose();
+ confirmData(CONFIRM_PASSENGER_BOSS, rowId, formData);
+ },
+ });
- const handleDescriptionChange = (event) => {
- setDescription(event.target.value);
- };
- const handleAmountChange = (event) => {
- if (/^\d*$/.test(event.target.value)) {
- setProposedAmount(event.target.value);
- }
- formik.handleChange(event);
- };
- const handleUploadChange = (event) => {
- const uploadedFile = event.target?.files?.[0];
- if (uploadedFile) {
- const maxFileSize = 2 * 1024 * 1024;
- if (uploadedFile.size > maxFileSize) {
- UploadFileNotification(directionApp, t);
- event.target.value = "";
- return;
- }
- const fileType = event.target?.files?.[0].type;
- const fileName = event.target?.files?.[0].name;
- setSelectedImage(URL.createObjectURL(uploadedFile));
- setfileType(fileType);
- setfileName(fileName);
- formik.setFieldValue("confirm_img", uploadedFile);
- setShowAddIcon(false);
- }
- };
+ const handleDescriptionChange = (event) => {
+ setDescription(event.target.value);
+ };
+ const handleAmountChange = (event) => {
+ if (/^\d*$/.test(event.target.value)) {
+ setProposedAmount(event.target.value);
+ }
+ formik.handleChange(event);
+ };
+ const handleUploadChange = (event) => {
+ const uploadedFile = event.target?.files?.[0];
+ if (uploadedFile) {
+ const maxFileSize = 2 * 1024 * 1024;
+ if (uploadedFile.size > maxFileSize) {
+ UploadFileNotification(directionApp, t);
+ event.target.value = "";
+ return;
+ }
+ const fileType = event.target?.files?.[0].type;
+ const fileName = event.target?.files?.[0].name;
+ setSelectedImage(URL.createObjectURL(uploadedFile));
+ setfileType(fileType);
+ setfileName(fileName);
+ formik.setFieldValue("confirm_img", uploadedFile);
+ setShowAddIcon(false);
+ }
+ };
- return (
-
- );
+ return (
+
+ );
};
export default ConfirmForm;
diff --git a/src/components/dashboard/passenger-boss/Form/RejectForm.jsx b/src/components/dashboard/passenger-boss/Form/RejectForm.jsx
index 955a487..e8dd93e 100644
--- a/src/components/dashboard/passenger-boss/Form/RejectForm.jsx
+++ b/src/components/dashboard/passenger-boss/Form/RejectForm.jsx
@@ -1,116 +1,108 @@
-import { REJECT_PASSENGER_BOSS } from "@/core/data/apiRoutes";
-import {
- Dialog,
- DialogTitle,
- DialogContent,
- DialogContentText,
- DialogActions,
- Button,
- TextField,
-} from "@mui/material";
-import { useTranslations } from "next-intl";
-import { useFormik } from "formik";
+import {REJECT_PASSENGER_BOSS} from "@/core/data/apiRoutes";
+import {Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, TextField,} from "@mui/material";
+import {useTranslations} from "next-intl";
+import {useFormik} from "formik";
import * as Yup from "yup";
-import { useState } from "react";
+import {useState} from "react";
import UploadSystem from "@/core/components/UploadSystem";
import UploadFileNotification from "@/core/components/notifications/UploadFileNotification";
import useDirection from "@/lib/app/hooks/useDirection";
-const RejectForm = ({ open, handleClose, rowId, rejectData }) => {
- const t = useTranslations();
- const { directionApp } = useDirection();
- const [description, setDescription] = useState("");
- const [selectedImage, setSelectedImage] = useState("");
- const [fileType, setfileType] = useState(null);
- const [fileName, setfileName] = useState(null);
- const [showAddIcon, setShowAddIcon] = useState(true);
+const RejectForm = ({open, handleClose, rowId, rejectData}) => {
+ const t = useTranslations();
+ const {directionApp} = useDirection();
+ const [description, setDescription] = useState("");
+ const [selectedImage, setSelectedImage] = useState("");
+ const [fileType, setfileType] = useState(null);
+ const [fileName, setfileName] = useState(null);
+ const [showAddIcon, setShowAddIcon] = useState(true);
- const validationSchema = Yup.object().shape({
- description: Yup.string().required(t("RejectDialog.description_error")),
- });
+ const validationSchema = Yup.object().shape({
+ description: Yup.string().required(t("RejectDialog.description_error")),
+ });
- const formik = useFormik({
- initialValues: {
- description: "",
- },
- validationSchema,
- onSubmit: () => {
- const formData = new FormData();
- formData.append("expert_description", description);
- handleClose();
- rejectData(REJECT_PASSENGER_BOSS, rowId, formData);
- },
- });
+ const formik = useFormik({
+ initialValues: {
+ description: "",
+ },
+ validationSchema,
+ onSubmit: () => {
+ const formData = new FormData();
+ formData.append("expert_description", description);
+ handleClose();
+ rejectData(REJECT_PASSENGER_BOSS, rowId, formData);
+ },
+ });
- const handleDescriptionChange = (event) => {
- setDescription(event.target.value);
- formik.handleChange(event);
- };
+ const handleDescriptionChange = (event) => {
+ setDescription(event.target.value);
+ formik.handleChange(event);
+ };
- const handleUploadChange = (event) => {
- const uploadedFile = event.target?.files?.[0];
- if (uploadedFile) {
- const maxFileSize = 2 * 1024 * 1024;
- if (uploadedFile.size > maxFileSize) {
- UploadFileNotification(directionApp, t);
- event.target.value = "";
- return;
- }
- const fileType = event.target?.files?.[0].type;
- const fileName = event.target?.files?.[0].name;
- setSelectedImage(URL.createObjectURL(uploadedFile));
- setfileType(fileType);
- setfileName(fileName);
- formik.setFieldValue("reject_img", uploadedFile);
- setShowAddIcon(false);
- }
- };
+ const handleUploadChange = (event) => {
+ const uploadedFile = event.target?.files?.[0];
+ if (uploadedFile) {
+ const maxFileSize = 2 * 1024 * 1024;
+ if (uploadedFile.size > maxFileSize) {
+ UploadFileNotification(directionApp, t);
+ event.target.value = "";
+ return;
+ }
+ const fileType = event.target?.files?.[0].type;
+ const fileName = event.target?.files?.[0].name;
+ setSelectedImage(URL.createObjectURL(uploadedFile));
+ setfileType(fileType);
+ setfileName(fileName);
+ formik.setFieldValue("reject_img", uploadedFile);
+ setShowAddIcon(false);
+ }
+ };
- return (
-
- );
+ return (
+
+ );
};
export default RejectForm;
diff --git a/src/components/dashboard/passenger-boss/TableRowActions.jsx b/src/components/dashboard/passenger-boss/TableRowActions.jsx
index 30367b9..13c6e7b 100644
--- a/src/components/dashboard/passenger-boss/TableRowActions.jsx
+++ b/src/components/dashboard/passenger-boss/TableRowActions.jsx
@@ -1,60 +1,60 @@
import ThumbUpAltIcon from "@mui/icons-material/ThumbUpAlt";
import ThumbDownIcon from "@mui/icons-material/ThumbDown";
-import { Box, IconButton, Tooltip } from "@mui/material";
-import { useContext } from "react";
+import {Box, IconButton, Tooltip} from "@mui/material";
+import {useContext} from "react";
import ConfirmForm from "./Form/ConfirmForm";
import RejectForm from "./Form/RejectForm";
-import { useTranslations } from "next-intl";
-import { DataTableContext } from "@/lib/app/contexts/DatatableContext";
+import {useTranslations} from "next-intl";
+import {DataTableContext} from "@/lib/app/contexts/DatatableContext";
-const TableRowActions = ({ row }) => {
- const t = useTranslations();
- const {
- openConfirmDialog,
- openRejectDialog,
- handleOpenConfirmDialog,
- handleOpenRejectDialog,
- handleCloseConfirmDialog,
- handleCloseRejectDialog,
- rowId,
- confirmData,
- rejectData,
- } = useContext(DataTableContext);
- return (
-
-
- {
- handleOpenConfirmDialog(row);
- }}
- >
-
-
-
- {openConfirmDialog && (
-
- )}
-
- handleOpenRejectDialog(row)}>
-
-
-
- {openRejectDialog && (
-
- )}
-
- );
+const TableRowActions = ({row}) => {
+ const t = useTranslations();
+ const {
+ openConfirmDialog,
+ openRejectDialog,
+ handleOpenConfirmDialog,
+ handleOpenRejectDialog,
+ handleCloseConfirmDialog,
+ handleCloseRejectDialog,
+ rowId,
+ confirmData,
+ rejectData,
+ } = useContext(DataTableContext);
+ return (
+
+
+ {
+ handleOpenConfirmDialog(row);
+ }}
+ >
+
+
+
+ {openConfirmDialog && (
+
+ )}
+
+ handleOpenRejectDialog(row)}>
+
+
+
+ {openRejectDialog && (
+
+ )}
+
+ );
};
export default TableRowActions;
diff --git a/src/components/dashboard/passenger-boss/TableTollbar.jsx b/src/components/dashboard/passenger-boss/TableTollbar.jsx
index 3f06d3b..e267691 100644
--- a/src/components/dashboard/passenger-boss/TableTollbar.jsx
+++ b/src/components/dashboard/passenger-boss/TableTollbar.jsx
@@ -1,13 +1,13 @@
-import { Stack, Tooltip } from "@mui/material";
-import { useTranslations } from "next-intl";
+import {Stack, Tooltip} from "@mui/material";
+import {useTranslations} from "next-intl";
function TableToolbar() {
- const t = useTranslations();
- return (
-
-
-
- );
+ const t = useTranslations();
+ return (
+
+
+
+ );
}
export default TableToolbar;
diff --git a/src/components/dashboard/passenger-boss/index.jsx b/src/components/dashboard/passenger-boss/index.jsx
index a741312..72f567e 100644
--- a/src/components/dashboard/passenger-boss/index.jsx
+++ b/src/components/dashboard/passenger-boss/index.jsx
@@ -1,245 +1,242 @@
import DataTableStructure from "@/core/components/DatatableStructure";
import DashboardLayouts from "@/layouts/dashboardLayouts";
-import { Box, IconButton, Typography } from "@mui/material";
+import {Box, IconButton, Typography} from "@mui/material";
import ClearIcon from "@mui/icons-material/Clear";
-import { useMemo } from "react";
+import {useMemo} from "react";
// import TableToolbar from "./TableTollbar";
-import { GET_PASSENGER_BOSS } from "@/core/data/apiRoutes";
-import { useTranslations } from "next-intl";
+import {GET_PASSENGER_BOSS} from "@/core/data/apiRoutes";
+import {useTranslations} from "next-intl";
import TableRowActions from "./TableRowActions";
-import {
- LocalizationProvider,
- MobileDateTimePicker,
-} from "@mui/x-date-pickers";
-import { AdapterDateFnsJalali } from "@mui/x-date-pickers/AdapterDateFnsJalali";
+import {LocalizationProvider, MobileDateTimePicker,} from "@mui/x-date-pickers";
+import {AdapterDateFnsJalali} from "@mui/x-date-pickers/AdapterDateFnsJalali";
import moment from "jalali-moment";
-import { faIR } from "@mui/x-date-pickers/locales";
+import {faIR} from "@mui/x-date-pickers/locales";
function DashboardPassengerOfficeComponent() {
- const t = useTranslations();
+ const t = useTranslations();
- const columns = useMemo(
- () => [
- {
- accessorFn: (row) => row.id,
- id: "id",
- header: t("PassengerBoss.id"),
- enableColumnFilter: true,
- datatype: "numeric",
- filterFn: "equals",
- maxSize: 100,
- columnFilterModeOptions: [
- "equals",
- "notEquals",
- "contains",
- "lessThan",
- "greaterThan",
- "between",
+ const columns = useMemo(
+ () => [
+ {
+ accessorFn: (row) => row.id,
+ id: "id",
+ header: t("PassengerBoss.id"),
+ enableColumnFilter: true,
+ datatype: "numeric",
+ filterFn: "equals",
+ maxSize: 100,
+ columnFilterModeOptions: [
+ "equals",
+ "notEquals",
+ "contains",
+ "lessThan",
+ "greaterThan",
+ "between",
+ ],
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) => row.name,
+ id: "name",
+ header: t("PassengerBoss.name"),
+ enableColumnFilter: true,
+ datatype: "text",
+ filterFn: "contains",
+ columnFilterModeOptions: ["contains", "equals", "notEquals"],
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) => row.national_id,
+ id: "national_id",
+ header: t("PassengerBoss.national_id"),
+ enableColumnFilter: true,
+ datatype: "numeric",
+ filterFn: "equals",
+ columnFilterModeOptions: [
+ "equals",
+ "notEquals",
+ "contains",
+ "lessThan",
+ "greaterThan",
+ "between",
+ ],
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) => row.phone_number,
+ id: "phone_number",
+ header: t("PassengerBoss.phone_number"),
+ enableColumnFilter: true,
+ datatype: "numeric",
+ filterFn: "equals",
+ columnFilterModeOptions: [
+ "equals",
+ "notEquals",
+ "contains",
+ "lessThan",
+ "greaterThan",
+ "between",
+ ],
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) =>
+ moment(row.created_at).locale("fa").format("HH:mm | yyyy/MM/DD"),
+ id: "created_at",
+ header: t("PassengerBoss.created_at"),
+ enableColumnFilter: true,
+ datatype: "date",
+ filterFn: "lessThan",
+ minSize: 200,
+ columnFilterModeOptions: ["lessThan", "greaterThan"],
+ Cell: ({renderedCellValue}) => {
+ return {renderedCellValue};
+ },
+ Header: ({column}) => {column.columnDef.header},
+ Filter: ({column}) => {
+ const filterFnValue = column.columnDef._filterFn;
+ return (
+
+
+ {
+ const date = new Date(newValue);
+ const formattedDate = moment(date)
+ .locale("en")
+ .format("YYYY-MM-DD HH:mm");
+ column.setFilterValue(formattedDate);
+ }}
+ slotProps={{
+ textField: {
+ placeholder: "تاریخ خود را وارد کنید",
+ helperText: `${t("filter_mode")}: ${t(filterFnValue)}`,
+ sx: {minWidth: "120px"},
+ variant: "standard",
+ },
+ }}
+ value={
+ column.getFilterValue()
+ ? new Date(column.getFilterValue())
+ : null
+ }
+ />
+
+ {
+ column.setFilterValue(null);
+ }}
+ sx={{
+ color: column.getFilterValue()
+ ? "rgba(0, 0, 0, 0.54)"
+ : "#bfbfbf",
+ }}
+ >
+
+
+
+ );
+ },
+ },
+ {
+ accessorFn: (row) =>
+ moment(row.updated_at).locale("fa").format("HH:mm | yyyy/MM/DD"),
+ id: "updated_at",
+ header: t("PassengerBoss.updated_at"),
+ enableColumnFilter: false,
+ datatype: "numeric",
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) => row.navgan_id,
+ id: "navgan_id",
+ header: t("PassengerBoss.navgan_id"),
+ enableColumnFilter: true,
+ datatype: "numeric",
+ filterFn: "equals",
+ maxSize: 100,
+ columnFilterModeOptions: [
+ "equals",
+ "notEquals",
+ "contains",
+ "lessThan",
+ "greaterThan",
+ "between",
+ ],
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) => row.vehicle_type,
+ id: "vehicle_type",
+ header: t("PassengerBoss.vehicle_type"),
+ enableColumnFilter: true,
+ datatype: "text",
+ filterFn: "contains",
+ columnFilterModeOptions: ["contains", "equals", "notEquals"],
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) => row.state_name,
+ id: "state_id",
+ header: t("PassengerBoss.state_name"),
+ enableColumnFilter: false,
+ datatype: "numeric",
+ minSize: 300,
+ // filterFn: "equals",
+ // filterSelectOptions: [
+ // ],
+ // filterVariant: "select",
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
],
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) => row.name,
- id: "name",
- header: t("PassengerBoss.name"),
- enableColumnFilter: true,
- datatype: "text",
- filterFn: "contains",
- columnFilterModeOptions: ["contains", "equals", "notEquals"],
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) => row.national_id,
- id: "national_id",
- header: t("PassengerBoss.national_id"),
- enableColumnFilter: true,
- datatype: "numeric",
- filterFn: "equals",
- columnFilterModeOptions: [
- "equals",
- "notEquals",
- "contains",
- "lessThan",
- "greaterThan",
- "between",
- ],
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) => row.phone_number,
- id: "phone_number",
- header: t("PassengerBoss.phone_number"),
- enableColumnFilter: true,
- datatype: "numeric",
- filterFn: "equals",
- columnFilterModeOptions: [
- "equals",
- "notEquals",
- "contains",
- "lessThan",
- "greaterThan",
- "between",
- ],
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) =>
- moment(row.created_at).locale("fa").format("HH:mm | yyyy/MM/DD"),
- id: "created_at",
- header: t("PassengerBoss.created_at"),
- enableColumnFilter: true,
- datatype: "date",
- filterFn: "lessThan",
- minSize: 200,
- columnFilterModeOptions: ["lessThan", "greaterThan"],
- Cell: ({ renderedCellValue }) => {
- return {renderedCellValue};
- },
- Header: ({ column }) => {column.columnDef.header},
- Filter: ({ column }) => {
- const filterFnValue = column.columnDef._filterFn;
- return (
-
-
- {
- const date = new Date(newValue);
- const formattedDate = moment(date)
- .locale("en")
- .format("YYYY-MM-DD HH:mm");
- column.setFilterValue(formattedDate);
- }}
- slotProps={{
- textField: {
- placeholder: "تاریخ خود را وارد کنید",
- helperText: `${t("filter_mode")}: ${t(filterFnValue)}`,
- sx: { minWidth: "120px" },
- variant: "standard",
- },
- }}
- value={
- column.getFilterValue()
- ? new Date(column.getFilterValue())
- : null
- }
+ []
+ );
+ return (
+
+
+ }
+ enableLastUpdate={true}
+ enablePinning={true}
+ enableDensityToggle={true}
+ enableColumnFilters={true}
+ enableHiding={true}
+ enableFullScreenToggle={false}
+ enableGlobalFilter={false}
+ enableColumnResizing={false} // if you want true this you shold change renderRowActions props ** see https://www.material-react-table.com/docs/guides/row-actions
+ enableRowActions={true}
+ renderRowActions={({row}) => }
/>
-
- {
- column.setFilterValue(null);
- }}
- sx={{
- color: column.getFilterValue()
- ? "rgba(0, 0, 0, 0.54)"
- : "#bfbfbf",
- }}
- >
-
-
- );
- },
- },
- {
- accessorFn: (row) =>
- moment(row.updated_at).locale("fa").format("HH:mm | yyyy/MM/DD"),
- id: "updated_at",
- header: t("PassengerBoss.updated_at"),
- enableColumnFilter: false,
- datatype: "numeric",
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) => row.navgan_id,
- id: "navgan_id",
- header: t("PassengerBoss.navgan_id"),
- enableColumnFilter: true,
- datatype: "numeric",
- filterFn: "equals",
- maxSize: 100,
- columnFilterModeOptions: [
- "equals",
- "notEquals",
- "contains",
- "lessThan",
- "greaterThan",
- "between",
- ],
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) => row.vehicle_type,
- id: "vehicle_type",
- header: t("PassengerBoss.vehicle_type"),
- enableColumnFilter: true,
- datatype: "text",
- filterFn: "contains",
- columnFilterModeOptions: ["contains", "equals", "notEquals"],
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) => row.state_name,
- id: "state_id",
- header: t("PassengerBoss.state_name"),
- enableColumnFilter: false,
- datatype: "numeric",
- minSize: 300,
- // filterFn: "equals",
- // filterSelectOptions: [
- // ],
- // filterVariant: "select",
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- ],
- []
- );
- return (
-
-
- }
- enableLastUpdate={true}
- enablePinning={true}
- enableDensityToggle={true}
- enableColumnFilters={true}
- enableHiding={true}
- enableFullScreenToggle={false}
- enableGlobalFilter={false}
- enableColumnResizing={false} // if you want true this you shold change renderRowActions props ** see https://www.material-react-table.com/docs/guides/row-actions
- enableRowActions={true}
- renderRowActions={({ row }) => }
- />
-
-
- );
+
+ );
}
export default DashboardPassengerOfficeComponent;
diff --git a/src/components/dashboard/passenger-office/Form/ConfirmForm.jsx b/src/components/dashboard/passenger-office/Form/ConfirmForm.jsx
index 1e02f33..c5abc13 100644
--- a/src/components/dashboard/passenger-office/Form/ConfirmForm.jsx
+++ b/src/components/dashboard/passenger-office/Form/ConfirmForm.jsx
@@ -1,106 +1,98 @@
import UploadSystem from "@/core/components/UploadSystem";
import UploadFileNotification from "@/core/components/notifications/UploadFileNotification";
-import { CONFIRM_PASSENGER_OFFICE } from "@/core/data/apiRoutes";
+import {CONFIRM_PASSENGER_OFFICE} from "@/core/data/apiRoutes";
import useDirection from "@/lib/app/hooks/useDirection";
-import {
- Dialog,
- DialogTitle,
- DialogContent,
- DialogContentText,
- DialogActions,
- Button,
- TextField,
-} from "@mui/material";
-import { useFormik } from "formik";
-import { useTranslations } from "next-intl";
-import { useRef, useState } from "react";
+import {Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, TextField,} from "@mui/material";
+import {useFormik} from "formik";
+import {useTranslations} from "next-intl";
+import {useState} from "react";
-const ConfirmForm = ({ open, handleClose, rowId, confirmData }) => {
- const t = useTranslations();
- const { directionApp } = useDirection();
- const [description, setDescription] = useState("");
- const [selectedImage, setSelectedImage] = useState("");
- const [fileType, setfileType] = useState(null);
- const [fileName, setfileName] = useState(null);
- const [showAddIcon, setShowAddIcon] = useState(true);
+const ConfirmForm = ({open, handleClose, rowId, confirmData}) => {
+ const t = useTranslations();
+ const {directionApp} = useDirection();
+ const [description, setDescription] = useState("");
+ const [selectedImage, setSelectedImage] = useState("");
+ const [fileType, setfileType] = useState(null);
+ const [fileName, setfileName] = useState(null);
+ const [showAddIcon, setShowAddIcon] = useState(true);
- const formik = useFormik({
- initialValues: {
- description: "",
- },
- onSubmit: () => {
- const formData = new FormData();
- if (description !== "")
- formData.append("expert_description", description);
- handleClose();
- confirmData(CONFIRM_PASSENGER_OFFICE, rowId, formData);
- },
- });
+ const formik = useFormik({
+ initialValues: {
+ description: "",
+ },
+ onSubmit: () => {
+ const formData = new FormData();
+ if (description !== "")
+ formData.append("expert_description", description);
+ handleClose();
+ confirmData(CONFIRM_PASSENGER_OFFICE, rowId, formData);
+ },
+ });
- const handleDescriptionChange = (event) => {
- setDescription(event.target.value);
- formik.handleChange(event);
- };
+ const handleDescriptionChange = (event) => {
+ setDescription(event.target.value);
+ formik.handleChange(event);
+ };
- const handleUploadChange = (event) => {
- const uploadedFile = event.target?.files?.[0];
- if (uploadedFile) {
- const maxFileSize = 2 * 1024 * 1024;
- if (uploadedFile.size > maxFileSize) {
- UploadFileNotification(directionApp, t);
- event.target.value = "";
- return;
- }
- const fileType = event.target?.files?.[0].type;
- const fileName = event.target?.files?.[0].name;
- setSelectedImage(URL.createObjectURL(uploadedFile));
- setfileType(fileType);
- setfileName(fileName);
- formik.setFieldValue("confirm_img", uploadedFile);
- setShowAddIcon(false);
- }
- };
+ const handleUploadChange = (event) => {
+ const uploadedFile = event.target?.files?.[0];
+ if (uploadedFile) {
+ const maxFileSize = 2 * 1024 * 1024;
+ if (uploadedFile.size > maxFileSize) {
+ UploadFileNotification(directionApp, t);
+ event.target.value = "";
+ return;
+ }
+ const fileType = event.target?.files?.[0].type;
+ const fileName = event.target?.files?.[0].name;
+ setSelectedImage(URL.createObjectURL(uploadedFile));
+ setfileType(fileType);
+ setfileName(fileName);
+ formik.setFieldValue("confirm_img", uploadedFile);
+ setShowAddIcon(false);
+ }
+ };
- return (
-
- );
+ return (
+
+ );
};
export default ConfirmForm;
diff --git a/src/components/dashboard/passenger-office/Form/RejectForm.jsx b/src/components/dashboard/passenger-office/Form/RejectForm.jsx
index 6b66c7a..ec3b07a 100644
--- a/src/components/dashboard/passenger-office/Form/RejectForm.jsx
+++ b/src/components/dashboard/passenger-office/Form/RejectForm.jsx
@@ -1,114 +1,106 @@
-import { REJECT_PASSENGER_OFFICE } from "@/core/data/apiRoutes";
-import {
- Dialog,
- DialogTitle,
- DialogContent,
- DialogContentText,
- DialogActions,
- Button,
- TextField,
-} from "@mui/material";
-import { useTranslations } from "next-intl";
-import { useFormik } from "formik";
+import {REJECT_PASSENGER_OFFICE} from "@/core/data/apiRoutes";
+import {Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, TextField,} from "@mui/material";
+import {useTranslations} from "next-intl";
+import {useFormik} from "formik";
import * as Yup from "yup";
-import { useState } from "react";
+import {useState} from "react";
import UploadSystem from "@/core/components/UploadSystem";
import UploadFileNotification from "@/core/components/notifications/UploadFileNotification";
import useDirection from "@/lib/app/hooks/useDirection";
-const RejectForm = ({ open, handleClose, rowId, rejectData }) => {
- const t = useTranslations();
- const { directionApp } = useDirection();
- const [description, setDescription] = useState("");
- const [selectedImage, setSelectedImage] = useState("");
- const [fileType, setfileType] = useState(null);
- const [fileName, setfileName] = useState(null);
- const [showAddIcon, setShowAddIcon] = useState(true);
+const RejectForm = ({open, handleClose, rowId, rejectData}) => {
+ const t = useTranslations();
+ const {directionApp} = useDirection();
+ const [description, setDescription] = useState("");
+ const [selectedImage, setSelectedImage] = useState("");
+ const [fileType, setfileType] = useState(null);
+ const [fileName, setfileName] = useState(null);
+ const [showAddIcon, setShowAddIcon] = useState(true);
- const validationSchema = Yup.object().shape({
- description: Yup.string().required(t("RejectDialog.description_error")),
- });
+ const validationSchema = Yup.object().shape({
+ description: Yup.string().required(t("RejectDialog.description_error")),
+ });
- const formik = useFormik({
- initialValues: {
- description: "",
- },
- validationSchema,
- onSubmit: () => {
- const formData = new FormData();
- formData.append("expert_description", description);
- handleClose();
- rejectData(REJECT_PASSENGER_OFFICE, rowId, formData);
- },
- });
+ const formik = useFormik({
+ initialValues: {
+ description: "",
+ },
+ validationSchema,
+ onSubmit: () => {
+ const formData = new FormData();
+ formData.append("expert_description", description);
+ handleClose();
+ rejectData(REJECT_PASSENGER_OFFICE, rowId, formData);
+ },
+ });
- const handleDescriptionChange = (event) => {
- setDescription(event.target.value);
- formik.handleChange(event);
- };
- const handleUploadChange = (event) => {
- const uploadedFile = event.target?.files?.[0];
- if (uploadedFile) {
- const maxFileSize = 2 * 1024 * 1024;
- if (uploadedFile.size > maxFileSize) {
- UploadFileNotification(directionApp, t);
- event.target.value = "";
- return;
- }
- const fileType = event.target?.files?.[0].type;
- const fileName = event.target?.files?.[0].name;
- setSelectedImage(URL.createObjectURL(uploadedFile));
- setfileType(fileType);
- setfileName(fileName);
- formik.setFieldValue("reject_img", uploadedFile);
- setShowAddIcon(false);
- }
- };
- return (
-
- );
+ const handleDescriptionChange = (event) => {
+ setDescription(event.target.value);
+ formik.handleChange(event);
+ };
+ const handleUploadChange = (event) => {
+ const uploadedFile = event.target?.files?.[0];
+ if (uploadedFile) {
+ const maxFileSize = 2 * 1024 * 1024;
+ if (uploadedFile.size > maxFileSize) {
+ UploadFileNotification(directionApp, t);
+ event.target.value = "";
+ return;
+ }
+ const fileType = event.target?.files?.[0].type;
+ const fileName = event.target?.files?.[0].name;
+ setSelectedImage(URL.createObjectURL(uploadedFile));
+ setfileType(fileType);
+ setfileName(fileName);
+ formik.setFieldValue("reject_img", uploadedFile);
+ setShowAddIcon(false);
+ }
+ };
+ return (
+
+ );
};
export default RejectForm;
diff --git a/src/components/dashboard/passenger-office/TableRowActions.jsx b/src/components/dashboard/passenger-office/TableRowActions.jsx
index 30367b9..13c6e7b 100644
--- a/src/components/dashboard/passenger-office/TableRowActions.jsx
+++ b/src/components/dashboard/passenger-office/TableRowActions.jsx
@@ -1,60 +1,60 @@
import ThumbUpAltIcon from "@mui/icons-material/ThumbUpAlt";
import ThumbDownIcon from "@mui/icons-material/ThumbDown";
-import { Box, IconButton, Tooltip } from "@mui/material";
-import { useContext } from "react";
+import {Box, IconButton, Tooltip} from "@mui/material";
+import {useContext} from "react";
import ConfirmForm from "./Form/ConfirmForm";
import RejectForm from "./Form/RejectForm";
-import { useTranslations } from "next-intl";
-import { DataTableContext } from "@/lib/app/contexts/DatatableContext";
+import {useTranslations} from "next-intl";
+import {DataTableContext} from "@/lib/app/contexts/DatatableContext";
-const TableRowActions = ({ row }) => {
- const t = useTranslations();
- const {
- openConfirmDialog,
- openRejectDialog,
- handleOpenConfirmDialog,
- handleOpenRejectDialog,
- handleCloseConfirmDialog,
- handleCloseRejectDialog,
- rowId,
- confirmData,
- rejectData,
- } = useContext(DataTableContext);
- return (
-
-
- {
- handleOpenConfirmDialog(row);
- }}
- >
-
-
-
- {openConfirmDialog && (
-
- )}
-
- handleOpenRejectDialog(row)}>
-
-
-
- {openRejectDialog && (
-
- )}
-
- );
+const TableRowActions = ({row}) => {
+ const t = useTranslations();
+ const {
+ openConfirmDialog,
+ openRejectDialog,
+ handleOpenConfirmDialog,
+ handleOpenRejectDialog,
+ handleCloseConfirmDialog,
+ handleCloseRejectDialog,
+ rowId,
+ confirmData,
+ rejectData,
+ } = useContext(DataTableContext);
+ return (
+
+
+ {
+ handleOpenConfirmDialog(row);
+ }}
+ >
+
+
+
+ {openConfirmDialog && (
+
+ )}
+
+ handleOpenRejectDialog(row)}>
+
+
+
+ {openRejectDialog && (
+
+ )}
+
+ );
};
export default TableRowActions;
diff --git a/src/components/dashboard/passenger-office/TableTollbar.jsx b/src/components/dashboard/passenger-office/TableTollbar.jsx
index 3f06d3b..e267691 100644
--- a/src/components/dashboard/passenger-office/TableTollbar.jsx
+++ b/src/components/dashboard/passenger-office/TableTollbar.jsx
@@ -1,13 +1,13 @@
-import { Stack, Tooltip } from "@mui/material";
-import { useTranslations } from "next-intl";
+import {Stack, Tooltip} from "@mui/material";
+import {useTranslations} from "next-intl";
function TableToolbar() {
- const t = useTranslations();
- return (
-
-
-
- );
+ const t = useTranslations();
+ return (
+
+
+
+ );
}
export default TableToolbar;
diff --git a/src/components/dashboard/passenger-office/index.jsx b/src/components/dashboard/passenger-office/index.jsx
index 5401adc..5f8ddc5 100644
--- a/src/components/dashboard/passenger-office/index.jsx
+++ b/src/components/dashboard/passenger-office/index.jsx
@@ -1,247 +1,243 @@
import DataTableStructure from "@/core/components/DatatableStructure";
import DashboardLayouts from "@/layouts/dashboardLayouts";
-import { Box, IconButton, Typography } from "@mui/material";
+import {Box, IconButton, Typography} from "@mui/material";
import ClearIcon from "@mui/icons-material/Clear";
-import { useMemo } from "react";
-import { faIR } from "@mui/x-date-pickers/locales";
+import {useMemo} from "react";
+import {faIR} from "@mui/x-date-pickers/locales";
// import TableToolbar from "./TableTollbar";
-import { GET_PASSENGER_OFFICE } from "@/core/data/apiRoutes";
-import { useTranslations } from "next-intl";
+import {GET_PASSENGER_OFFICE} from "@/core/data/apiRoutes";
+import {useTranslations} from "next-intl";
import TableRowActions from "./TableRowActions";
-import {
- LocalizationProvider,
- MobileDateTimePicker,
-} from "@mui/x-date-pickers";
-import { AdapterDateFnsJalali } from "@mui/x-date-pickers/AdapterDateFnsJalali";
+import {LocalizationProvider, MobileDateTimePicker,} from "@mui/x-date-pickers";
+import {AdapterDateFnsJalali} from "@mui/x-date-pickers/AdapterDateFnsJalali";
import moment from "jalali-moment";
-import dayjs from "dayjs";
function DashboardPassengerOfficeComponent() {
- const t = useTranslations();
+ const t = useTranslations();
- const columns = useMemo(
- () => [
- {
- accessorFn: (row) => row.id,
- id: "id",
- header: t("PassengerOffice.id"),
- enableColumnFilter: true,
- datatype: "numeric",
- maxSize: 100,
- filterFn: "equals",
- columnFilterModeOptions: [
- "equals",
- "notEquals",
- "contains",
- "lessThan",
- "greaterThan",
- "between",
+ const columns = useMemo(
+ () => [
+ {
+ accessorFn: (row) => row.id,
+ id: "id",
+ header: t("PassengerOffice.id"),
+ enableColumnFilter: true,
+ datatype: "numeric",
+ maxSize: 100,
+ filterFn: "equals",
+ columnFilterModeOptions: [
+ "equals",
+ "notEquals",
+ "contains",
+ "lessThan",
+ "greaterThan",
+ "between",
+ ],
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) => row.name,
+ id: "name",
+ header: t("PassengerOffice.name"),
+ enableColumnFilter: true,
+ datatype: "text",
+ filterFn: "contains",
+ columnFilterModeOptions: ["contains", "equals", "notEquals"],
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) => row.national_id,
+ id: "national_id",
+ header: t("PassengerOffice.national_id"),
+ enableColumnFilter: true,
+ datatype: "numeric",
+ filterFn: "equals",
+ columnFilterModeOptions: [
+ "equals",
+ "notEquals",
+ "contains",
+ "lessThan",
+ "greaterThan",
+ "between",
+ ],
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) => row.phone_number,
+ id: "phone_number",
+ header: t("PassengerOffice.phone_number"),
+ enableColumnFilter: true,
+ datatype: "numeric",
+ filterFn: "equals",
+ columnFilterModeOptions: [
+ "equals",
+ "notEquals",
+ "contains",
+ "lessThan",
+ "greaterThan",
+ "between",
+ ],
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) =>
+ moment(row.created_at).locale("fa").format("HH:mm | yyyy/MM/DD"),
+ id: "created_at",
+ header: t("PassengerOffice.created_at"),
+ enableColumnFilter: true,
+ datatype: "date",
+ filterFn: "lessThan",
+ minSize: 200,
+ columnFilterModeOptions: ["lessThan", "greaterThan"],
+ Cell: ({renderedCellValue}) => {
+ return {renderedCellValue};
+ },
+ Header: ({column}) => {column.columnDef.header},
+ Filter: ({column}) => {
+ const filterFnValue = column.columnDef._filterFn;
+ return (
+
+
+ {
+ const date = new Date(newValue);
+ const formattedDate = moment(date)
+ .locale("en")
+ .format("YYYY-MM-DD HH:mm");
+ column.setFilterValue(formattedDate);
+ }}
+ slotProps={{
+ textField: {
+ placeholder: "تاریخ خود را وارد کنید",
+ helperText: `${t("filter_mode")}: ${t(filterFnValue)}`,
+ sx: {minWidth: "120px"},
+ variant: "standard",
+ actionBar: {actions: ["accept", "today"]},
+ },
+ }}
+ value={
+ column.getFilterValue()
+ ? new Date(column.getFilterValue())
+ : null
+ }
+ />
+
+ {
+ column.setFilterValue(null);
+ }}
+ sx={{
+ color: column.getFilterValue()
+ ? "rgba(0, 0, 0, 0.54)"
+ : "#bfbfbf",
+ }}
+ >
+
+
+
+ );
+ },
+ },
+ {
+ accessorFn: (row) =>
+ moment(row.updated_at).locale("fa").format("HH:mm | YYYY/MM/DD"),
+ id: "updated_at",
+ header: t("PassengerOffice.updated_at"),
+ enableColumnFilter: false,
+ datatype: "numeric",
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) => row.navgan_id,
+ id: "navgan_id",
+ header: t("PassengerOffice.navgan_id"),
+ enableColumnFilter: true,
+ datatype: "numeric",
+ maxSize: 100,
+ filterFn: "equals",
+ columnFilterModeOptions: [
+ "equals",
+ "notEquals",
+ "contains",
+ "lessThan",
+ "greaterThan",
+ "between",
+ ],
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) => row.vehicle_type,
+ id: "vehicle_type",
+ header: t("PassengerOffice.vehicle_type"),
+ enableColumnFilter: true,
+ datatype: "text",
+ filterFn: "contains",
+ columnFilterModeOptions: ["contains", "equals", "notEquals"],
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) => row.state_name,
+ id: "state_id",
+ header: t("PassengerOffice.state_name"),
+ enableColumnFilter: false,
+ datatype: "numeric",
+ minSize: 300,
+ // filterFn: "equals",
+ // filterSelectOptions: [
+ // ],
+ // filterVariant: "select",
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
],
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) => row.name,
- id: "name",
- header: t("PassengerOffice.name"),
- enableColumnFilter: true,
- datatype: "text",
- filterFn: "contains",
- columnFilterModeOptions: ["contains", "equals", "notEquals"],
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) => row.national_id,
- id: "national_id",
- header: t("PassengerOffice.national_id"),
- enableColumnFilter: true,
- datatype: "numeric",
- filterFn: "equals",
- columnFilterModeOptions: [
- "equals",
- "notEquals",
- "contains",
- "lessThan",
- "greaterThan",
- "between",
- ],
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) => row.phone_number,
- id: "phone_number",
- header: t("PassengerOffice.phone_number"),
- enableColumnFilter: true,
- datatype: "numeric",
- filterFn: "equals",
- columnFilterModeOptions: [
- "equals",
- "notEquals",
- "contains",
- "lessThan",
- "greaterThan",
- "between",
- ],
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) =>
- moment(row.created_at).locale("fa").format("HH:mm | yyyy/MM/DD"),
- id: "created_at",
- header: t("PassengerOffice.created_at"),
- enableColumnFilter: true,
- datatype: "date",
- filterFn: "lessThan",
- minSize: 200,
- columnFilterModeOptions: ["lessThan", "greaterThan"],
- Cell: ({ renderedCellValue }) => {
- return {renderedCellValue};
- },
- Header: ({ column }) => {column.columnDef.header},
- Filter: ({ column }) => {
- const filterFnValue = column.columnDef._filterFn;
- return (
-
-
- {
- const date = new Date(newValue);
- const formattedDate = moment(date)
- .locale("en")
- .format("YYYY-MM-DD HH:mm");
- column.setFilterValue(formattedDate);
- }}
- slotProps={{
- textField: {
- placeholder: "تاریخ خود را وارد کنید",
- helperText: `${t("filter_mode")}: ${t(filterFnValue)}`,
- sx: { minWidth: "120px" },
- variant: "standard",
- actionBar: { actions: ["accept", "today"] },
- },
- }}
- value={
- column.getFilterValue()
- ? new Date(column.getFilterValue())
- : null
- }
+ []
+ );
+ return (
+
+
+ }
+ enableLastUpdate={true}
+ enablePinning={true}
+ enableDensityToggle={true}
+ enableColumnFilters={true}
+ enableHiding={true}
+ enableFullScreenToggle={false}
+ enableGlobalFilter={false}
+ enableColumnResizing={false} // if you want true this you shold change renderRowActions props ** see https://www.material-react-table.com/docs/guides/row-actions
+ enableRowActions={true}
+ renderRowActions={({row}) => }
/>
-
- {
- column.setFilterValue(null);
- }}
- sx={{
- color: column.getFilterValue()
- ? "rgba(0, 0, 0, 0.54)"
- : "#bfbfbf",
- }}
- >
-
-
- );
- },
- },
- {
- accessorFn: (row) =>
- moment(row.updated_at).locale("fa").format("HH:mm | YYYY/MM/DD"),
- id: "updated_at",
- header: t("PassengerOffice.updated_at"),
- enableColumnFilter: false,
- datatype: "numeric",
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) => row.navgan_id,
- id: "navgan_id",
- header: t("PassengerOffice.navgan_id"),
- enableColumnFilter: true,
- datatype: "numeric",
- maxSize: 100,
- filterFn: "equals",
- columnFilterModeOptions: [
- "equals",
- "notEquals",
- "contains",
- "lessThan",
- "greaterThan",
- "between",
- ],
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) => row.vehicle_type,
- id: "vehicle_type",
- header: t("PassengerOffice.vehicle_type"),
- enableColumnFilter: true,
- datatype: "text",
- filterFn: "contains",
- columnFilterModeOptions: ["contains", "equals", "notEquals"],
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) => row.state_name,
- id: "state_id",
- header: t("PassengerOffice.state_name"),
- enableColumnFilter: false,
- datatype: "numeric",
- minSize: 300,
- // filterFn: "equals",
- // filterSelectOptions: [
- // ],
- // filterVariant: "select",
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- ],
- []
- );
- return (
-
-
- }
- enableLastUpdate={true}
- enablePinning={true}
- enableDensityToggle={true}
- enableColumnFilters={true}
- enableHiding={true}
- enableFullScreenToggle={false}
- enableGlobalFilter={false}
- enableColumnResizing={false} // if you want true this you shold change renderRowActions props ** see https://www.material-react-table.com/docs/guides/row-actions
- enableRowActions={true}
- renderRowActions={({ row }) => }
- />
-
-
- );
+
+ );
}
export default DashboardPassengerOfficeComponent;
diff --git a/src/components/dashboard/province-manager/Form/ConfirmForm.jsx b/src/components/dashboard/province-manager/Form/ConfirmForm.jsx
index 69e3a62..e456631 100644
--- a/src/components/dashboard/province-manager/Form/ConfirmForm.jsx
+++ b/src/components/dashboard/province-manager/Form/ConfirmForm.jsx
@@ -1,106 +1,98 @@
import UploadSystem from "@/core/components/UploadSystem";
import UploadFileNotification from "@/core/components/notifications/UploadFileNotification";
-import { CONFIRM_PROVINCE_MANAGER } from "@/core/data/apiRoutes";
+import {CONFIRM_PROVINCE_MANAGER} from "@/core/data/apiRoutes";
import useDirection from "@/lib/app/hooks/useDirection";
-import {
- Dialog,
- DialogTitle,
- DialogContent,
- DialogContentText,
- DialogActions,
- Button,
- TextField,
-} from "@mui/material";
-import { useFormik } from "formik";
-import { useTranslations } from "next-intl";
-import { useRef, useState } from "react";
+import {Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, TextField,} from "@mui/material";
+import {useFormik} from "formik";
+import {useTranslations} from "next-intl";
+import {useState} from "react";
-const ConfirmForm = ({ open, handleClose, rowId, confirmData }) => {
- const t = useTranslations();
- const { directionApp } = useDirection();
- const [description, setDescription] = useState("");
- const [selectedImage, setSelectedImage] = useState("");
- const [fileType, setfileType] = useState(null);
- const [fileName, setfileName] = useState(null);
- const [showAddIcon, setShowAddIcon] = useState(true);
+const ConfirmForm = ({open, handleClose, rowId, confirmData}) => {
+ const t = useTranslations();
+ const {directionApp} = useDirection();
+ const [description, setDescription] = useState("");
+ const [selectedImage, setSelectedImage] = useState("");
+ const [fileType, setfileType] = useState(null);
+ const [fileName, setfileName] = useState(null);
+ const [showAddIcon, setShowAddIcon] = useState(true);
- const formik = useFormik({
- initialValues: {
- description: "",
- },
- onSubmit: () => {
- const formData = new FormData();
- if (description !== "")
- formData.append("expert_description", description);
- handleClose();
- confirmData(CONFIRM_PROVINCE_MANAGER, rowId, formData);
- },
- });
+ const formik = useFormik({
+ initialValues: {
+ description: "",
+ },
+ onSubmit: () => {
+ const formData = new FormData();
+ if (description !== "")
+ formData.append("expert_description", description);
+ handleClose();
+ confirmData(CONFIRM_PROVINCE_MANAGER, rowId, formData);
+ },
+ });
- const handleDescriptionChange = (event) => {
- setDescription(event.target.value);
- formik.handleChange(event);
- };
+ const handleDescriptionChange = (event) => {
+ setDescription(event.target.value);
+ formik.handleChange(event);
+ };
- const handleUploadChange = (event) => {
- const uploadedFile = event.target?.files?.[0];
- if (uploadedFile) {
- const maxFileSize = 2 * 1024 * 1024;
- if (uploadedFile.size > maxFileSize) {
- UploadFileNotification(directionApp, t);
- event.target.value = "";
- return;
- }
- const fileType = event.target?.files?.[0].type;
- const fileName = event.target?.files?.[0].name;
- setSelectedImage(URL.createObjectURL(uploadedFile));
- setfileType(fileType);
- setfileName(fileName);
- formik.setFieldValue("confirm_img", uploadedFile);
- setShowAddIcon(false);
- }
- };
+ const handleUploadChange = (event) => {
+ const uploadedFile = event.target?.files?.[0];
+ if (uploadedFile) {
+ const maxFileSize = 2 * 1024 * 1024;
+ if (uploadedFile.size > maxFileSize) {
+ UploadFileNotification(directionApp, t);
+ event.target.value = "";
+ return;
+ }
+ const fileType = event.target?.files?.[0].type;
+ const fileName = event.target?.files?.[0].name;
+ setSelectedImage(URL.createObjectURL(uploadedFile));
+ setfileType(fileType);
+ setfileName(fileName);
+ formik.setFieldValue("confirm_img", uploadedFile);
+ setShowAddIcon(false);
+ }
+ };
- return (
-
- );
+ return (
+
+ );
};
export default ConfirmForm;
diff --git a/src/components/dashboard/province-manager/Form/RejectForm.jsx b/src/components/dashboard/province-manager/Form/RejectForm.jsx
index f1e266d..a50bcf0 100644
--- a/src/components/dashboard/province-manager/Form/RejectForm.jsx
+++ b/src/components/dashboard/province-manager/Form/RejectForm.jsx
@@ -1,115 +1,107 @@
-import { REJECT_PROVINCE_MANAGER } from "@/core/data/apiRoutes";
-import {
- Dialog,
- DialogTitle,
- DialogContent,
- DialogContentText,
- DialogActions,
- Button,
- TextField,
-} from "@mui/material";
-import { useTranslations } from "next-intl";
-import { useFormik } from "formik";
+import {REJECT_PROVINCE_MANAGER} from "@/core/data/apiRoutes";
+import {Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, TextField,} from "@mui/material";
+import {useTranslations} from "next-intl";
+import {useFormik} from "formik";
import * as Yup from "yup";
-import { useState } from "react";
+import {useState} from "react";
import UploadSystem from "@/core/components/UploadSystem";
import UploadFileNotification from "@/core/components/notifications/UploadFileNotification";
import useDirection from "@/lib/app/hooks/useDirection";
-const RejectForm = ({ open, handleClose, rowId, rejectData }) => {
- const t = useTranslations();
- const { directionApp } = useDirection();
- const [description, setDescription] = useState("");
- const [selectedImage, setSelectedImage] = useState("");
- const [fileType, setfileType] = useState(null);
- const [fileName, setfileName] = useState(null);
- const [showAddIcon, setShowAddIcon] = useState(true);
+const RejectForm = ({open, handleClose, rowId, rejectData}) => {
+ const t = useTranslations();
+ const {directionApp} = useDirection();
+ const [description, setDescription] = useState("");
+ const [selectedImage, setSelectedImage] = useState("");
+ const [fileType, setfileType] = useState(null);
+ const [fileName, setfileName] = useState(null);
+ const [showAddIcon, setShowAddIcon] = useState(true);
- const validationSchema = Yup.object().shape({
- description: Yup.string().required(t("RejectDialog.description_error")),
- });
+ const validationSchema = Yup.object().shape({
+ description: Yup.string().required(t("RejectDialog.description_error")),
+ });
- const formik = useFormik({
- initialValues: {
- description: "",
- },
- validationSchema,
- onSubmit: () => {
- const formData = new FormData();
- formData.append("expert_description", description);
- handleClose();
- rejectData(REJECT_PROVINCE_MANAGER, rowId, formData);
- },
- });
+ const formik = useFormik({
+ initialValues: {
+ description: "",
+ },
+ validationSchema,
+ onSubmit: () => {
+ const formData = new FormData();
+ formData.append("expert_description", description);
+ handleClose();
+ rejectData(REJECT_PROVINCE_MANAGER, rowId, formData);
+ },
+ });
- const handleDescriptionChange = (event) => {
- setDescription(event.target.value);
- formik.handleChange(event);
- };
- const handleUploadChange = (event) => {
- const uploadedFile = event.target?.files?.[0];
- if (uploadedFile) {
- const maxFileSize = 2 * 1024 * 1024;
- if (uploadedFile.size > maxFileSize) {
- UploadFileNotification(directionApp, t);
- event.target.value = "";
- return;
- }
- const fileType = event.target?.files?.[0].type;
- const fileName = event.target?.files?.[0].name;
- setSelectedImage(URL.createObjectURL(uploadedFile));
- setfileType(fileType);
- setfileName(fileName);
- formik.setFieldValue("reject_img", uploadedFile);
- setShowAddIcon(false);
- }
- };
+ const handleDescriptionChange = (event) => {
+ setDescription(event.target.value);
+ formik.handleChange(event);
+ };
+ const handleUploadChange = (event) => {
+ const uploadedFile = event.target?.files?.[0];
+ if (uploadedFile) {
+ const maxFileSize = 2 * 1024 * 1024;
+ if (uploadedFile.size > maxFileSize) {
+ UploadFileNotification(directionApp, t);
+ event.target.value = "";
+ return;
+ }
+ const fileType = event.target?.files?.[0].type;
+ const fileName = event.target?.files?.[0].name;
+ setSelectedImage(URL.createObjectURL(uploadedFile));
+ setfileType(fileType);
+ setfileName(fileName);
+ formik.setFieldValue("reject_img", uploadedFile);
+ setShowAddIcon(false);
+ }
+ };
- return (
-
- );
+ return (
+
+ );
};
export default RejectForm;
diff --git a/src/components/dashboard/province-manager/TableRowActions.jsx b/src/components/dashboard/province-manager/TableRowActions.jsx
index 30367b9..13c6e7b 100644
--- a/src/components/dashboard/province-manager/TableRowActions.jsx
+++ b/src/components/dashboard/province-manager/TableRowActions.jsx
@@ -1,60 +1,60 @@
import ThumbUpAltIcon from "@mui/icons-material/ThumbUpAlt";
import ThumbDownIcon from "@mui/icons-material/ThumbDown";
-import { Box, IconButton, Tooltip } from "@mui/material";
-import { useContext } from "react";
+import {Box, IconButton, Tooltip} from "@mui/material";
+import {useContext} from "react";
import ConfirmForm from "./Form/ConfirmForm";
import RejectForm from "./Form/RejectForm";
-import { useTranslations } from "next-intl";
-import { DataTableContext } from "@/lib/app/contexts/DatatableContext";
+import {useTranslations} from "next-intl";
+import {DataTableContext} from "@/lib/app/contexts/DatatableContext";
-const TableRowActions = ({ row }) => {
- const t = useTranslations();
- const {
- openConfirmDialog,
- openRejectDialog,
- handleOpenConfirmDialog,
- handleOpenRejectDialog,
- handleCloseConfirmDialog,
- handleCloseRejectDialog,
- rowId,
- confirmData,
- rejectData,
- } = useContext(DataTableContext);
- return (
-
-
- {
- handleOpenConfirmDialog(row);
- }}
- >
-
-
-
- {openConfirmDialog && (
-
- )}
-
- handleOpenRejectDialog(row)}>
-
-
-
- {openRejectDialog && (
-
- )}
-
- );
+const TableRowActions = ({row}) => {
+ const t = useTranslations();
+ const {
+ openConfirmDialog,
+ openRejectDialog,
+ handleOpenConfirmDialog,
+ handleOpenRejectDialog,
+ handleCloseConfirmDialog,
+ handleCloseRejectDialog,
+ rowId,
+ confirmData,
+ rejectData,
+ } = useContext(DataTableContext);
+ return (
+
+
+ {
+ handleOpenConfirmDialog(row);
+ }}
+ >
+
+
+
+ {openConfirmDialog && (
+
+ )}
+
+ handleOpenRejectDialog(row)}>
+
+
+
+ {openRejectDialog && (
+
+ )}
+
+ );
};
export default TableRowActions;
diff --git a/src/components/dashboard/province-manager/TableTollbar.jsx b/src/components/dashboard/province-manager/TableTollbar.jsx
index 3f06d3b..e267691 100644
--- a/src/components/dashboard/province-manager/TableTollbar.jsx
+++ b/src/components/dashboard/province-manager/TableTollbar.jsx
@@ -1,13 +1,13 @@
-import { Stack, Tooltip } from "@mui/material";
-import { useTranslations } from "next-intl";
+import {Stack, Tooltip} from "@mui/material";
+import {useTranslations} from "next-intl";
function TableToolbar() {
- const t = useTranslations();
- return (
-
-
-
- );
+ const t = useTranslations();
+ return (
+
+
+
+ );
}
export default TableToolbar;
diff --git a/src/components/dashboard/province-manager/index.jsx b/src/components/dashboard/province-manager/index.jsx
index 062e866..5054e02 100644
--- a/src/components/dashboard/province-manager/index.jsx
+++ b/src/components/dashboard/province-manager/index.jsx
@@ -1,245 +1,242 @@
import DataTableStructure from "@/core/components/DatatableStructure";
import DashboardLayouts from "@/layouts/dashboardLayouts";
-import { Box, IconButton, Typography } from "@mui/material";
+import {Box, IconButton, Typography} from "@mui/material";
import ClearIcon from "@mui/icons-material/Clear";
-import { useMemo } from "react";
+import {useMemo} from "react";
// import TableToolbar from "./TableTollbar";
-import { GET_PROVINCE_MANAGER } from "@/core/data/apiRoutes";
-import { useTranslations } from "next-intl";
+import {GET_PROVINCE_MANAGER} from "@/core/data/apiRoutes";
+import {useTranslations} from "next-intl";
import TableRowActions from "./TableRowActions";
-import {
- LocalizationProvider,
- MobileDateTimePicker,
-} from "@mui/x-date-pickers";
-import { AdapterDateFnsJalali } from "@mui/x-date-pickers/AdapterDateFnsJalali";
+import {LocalizationProvider, MobileDateTimePicker,} from "@mui/x-date-pickers";
+import {AdapterDateFnsJalali} from "@mui/x-date-pickers/AdapterDateFnsJalali";
import moment from "jalali-moment";
-import { faIR } from "@mui/x-date-pickers/locales";
+import {faIR} from "@mui/x-date-pickers/locales";
function DashboardProvinceManagerComponent() {
- const t = useTranslations();
+ const t = useTranslations();
- const columns = useMemo(
- () => [
- {
- accessorFn: (row) => row.id,
- id: "id",
- header: t("ProvinceManager.id"),
- enableColumnFilter: true,
- datatype: "numeric",
- filterFn: "equals",
- maxSize: 100,
- columnFilterModeOptions: [
- "equals",
- "notEquals",
- "contains",
- "lessThan",
- "greaterThan",
- "between",
+ const columns = useMemo(
+ () => [
+ {
+ accessorFn: (row) => row.id,
+ id: "id",
+ header: t("ProvinceManager.id"),
+ enableColumnFilter: true,
+ datatype: "numeric",
+ filterFn: "equals",
+ maxSize: 100,
+ columnFilterModeOptions: [
+ "equals",
+ "notEquals",
+ "contains",
+ "lessThan",
+ "greaterThan",
+ "between",
+ ],
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) => row.name,
+ id: "name",
+ header: t("ProvinceManager.name"),
+ enableColumnFilter: true,
+ datatype: "text",
+ filterFn: "contains",
+ columnFilterModeOptions: ["contains", "equals", "notEquals"],
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) => row.national_id,
+ id: "national_id",
+ header: t("ProvinceManager.national_id"),
+ enableColumnFilter: true,
+ datatype: "numeric",
+ filterFn: "equals",
+ columnFilterModeOptions: [
+ "equals",
+ "notEquals",
+ "contains",
+ "lessThan",
+ "greaterThan",
+ "between",
+ ],
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) => row.phone_number,
+ id: "phone_number",
+ header: t("ProvinceManager.phone_number"),
+ enableColumnFilter: true,
+ datatype: "numeric",
+ filterFn: "equals",
+ columnFilterModeOptions: [
+ "equals",
+ "notEquals",
+ "contains",
+ "lessThan",
+ "greaterThan",
+ "between",
+ ],
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) =>
+ moment(row.created_at).locale("fa").format("HH:mm | yyyy/MM/DD"),
+ id: "created_at",
+ header: t("ProvinceManager.created_at"),
+ enableColumnFilter: true,
+ datatype: "date",
+ filterFn: "lessThan",
+ minSize: 200,
+ columnFilterModeOptions: ["lessThan", "greaterThan"],
+ Cell: ({renderedCellValue}) => {
+ return {renderedCellValue};
+ },
+ Header: ({column}) => {column.columnDef.header},
+ Filter: ({column}) => {
+ const filterFnValue = column.columnDef._filterFn;
+ return (
+
+
+ {
+ const date = new Date(newValue);
+ const formattedDate = moment(date)
+ .locale("en")
+ .format("YYYY-MM-DD HH:mm");
+ column.setFilterValue(formattedDate);
+ }}
+ slotProps={{
+ textField: {
+ placeholder: "تاریخ خود را وارد کنید",
+ helperText: `${t("filter_mode")}: ${t(filterFnValue)}`,
+ sx: {minWidth: "120px"},
+ variant: "standard",
+ },
+ }}
+ value={
+ column.getFilterValue()
+ ? new Date(column.getFilterValue())
+ : null
+ }
+ />
+
+ {
+ column.setFilterValue(null);
+ }}
+ sx={{
+ color: column.getFilterValue()
+ ? "rgba(0, 0, 0, 0.54)"
+ : "#bfbfbf",
+ }}
+ >
+
+
+
+ );
+ },
+ },
+ {
+ accessorFn: (row) =>
+ moment(row.updated_at).locale("fa").format("HH:mm | yyyy/MM/DD"),
+ id: "updated_at",
+ header: t("ProvinceManager.updated_at"),
+ enableColumnFilter: false,
+ datatype: "numeric",
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) => row.navgan_id,
+ id: "navgan_id",
+ header: t("ProvinceManager.navgan_id"),
+ enableColumnFilter: true,
+ datatype: "numeric",
+ filterFn: "equals",
+ maxSize: 100,
+ columnFilterModeOptions: [
+ "equals",
+ "notEquals",
+ "contains",
+ "lessThan",
+ "greaterThan",
+ "between",
+ ],
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) => row.vehicle_type,
+ id: "vehicle_type",
+ header: t("ProvinceManager.vehicle_type"),
+ enableColumnFilter: true,
+ datatype: "text",
+ filterFn: "contains",
+ columnFilterModeOptions: ["contains", "equals", "notEquals"],
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) => row.state_name,
+ id: "state_id",
+ header: t("ProvinceManager.state_name"),
+ enableColumnFilter: false,
+ datatype: "numeric",
+ minSize: 300,
+ // filterFn: "equals",
+ // filterSelectOptions: [
+ // ],
+ // filterVariant: "select",
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
],
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) => row.name,
- id: "name",
- header: t("ProvinceManager.name"),
- enableColumnFilter: true,
- datatype: "text",
- filterFn: "contains",
- columnFilterModeOptions: ["contains", "equals", "notEquals"],
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) => row.national_id,
- id: "national_id",
- header: t("ProvinceManager.national_id"),
- enableColumnFilter: true,
- datatype: "numeric",
- filterFn: "equals",
- columnFilterModeOptions: [
- "equals",
- "notEquals",
- "contains",
- "lessThan",
- "greaterThan",
- "between",
- ],
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) => row.phone_number,
- id: "phone_number",
- header: t("ProvinceManager.phone_number"),
- enableColumnFilter: true,
- datatype: "numeric",
- filterFn: "equals",
- columnFilterModeOptions: [
- "equals",
- "notEquals",
- "contains",
- "lessThan",
- "greaterThan",
- "between",
- ],
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) =>
- moment(row.created_at).locale("fa").format("HH:mm | yyyy/MM/DD"),
- id: "created_at",
- header: t("ProvinceManager.created_at"),
- enableColumnFilter: true,
- datatype: "date",
- filterFn: "lessThan",
- minSize: 200,
- columnFilterModeOptions: ["lessThan", "greaterThan"],
- Cell: ({ renderedCellValue }) => {
- return {renderedCellValue};
- },
- Header: ({ column }) => {column.columnDef.header},
- Filter: ({ column }) => {
- const filterFnValue = column.columnDef._filterFn;
- return (
-
-
- {
- const date = new Date(newValue);
- const formattedDate = moment(date)
- .locale("en")
- .format("YYYY-MM-DD HH:mm");
- column.setFilterValue(formattedDate);
- }}
- slotProps={{
- textField: {
- placeholder: "تاریخ خود را وارد کنید",
- helperText: `${t("filter_mode")}: ${t(filterFnValue)}`,
- sx: { minWidth: "120px" },
- variant: "standard",
- },
- }}
- value={
- column.getFilterValue()
- ? new Date(column.getFilterValue())
- : null
- }
+ []
+ );
+ return (
+
+
+ }
+ enableLastUpdate={true}
+ enablePinning={true}
+ enableDensityToggle={true}
+ enableColumnFilters={true}
+ enableHiding={true}
+ enableFullScreenToggle={false}
+ enableGlobalFilter={false}
+ enableColumnResizing={false} // if you want true this you shold change renderRowActions props ** see https://www.material-react-table.com/docs/guides/row-actions
+ enableRowActions={true}
+ renderRowActions={({row}) => }
/>
-
- {
- column.setFilterValue(null);
- }}
- sx={{
- color: column.getFilterValue()
- ? "rgba(0, 0, 0, 0.54)"
- : "#bfbfbf",
- }}
- >
-
-
- );
- },
- },
- {
- accessorFn: (row) =>
- moment(row.updated_at).locale("fa").format("HH:mm | yyyy/MM/DD"),
- id: "updated_at",
- header: t("ProvinceManager.updated_at"),
- enableColumnFilter: false,
- datatype: "numeric",
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) => row.navgan_id,
- id: "navgan_id",
- header: t("ProvinceManager.navgan_id"),
- enableColumnFilter: true,
- datatype: "numeric",
- filterFn: "equals",
- maxSize: 100,
- columnFilterModeOptions: [
- "equals",
- "notEquals",
- "contains",
- "lessThan",
- "greaterThan",
- "between",
- ],
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) => row.vehicle_type,
- id: "vehicle_type",
- header: t("ProvinceManager.vehicle_type"),
- enableColumnFilter: true,
- datatype: "text",
- filterFn: "contains",
- columnFilterModeOptions: ["contains", "equals", "notEquals"],
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) => row.state_name,
- id: "state_id",
- header: t("ProvinceManager.state_name"),
- enableColumnFilter: false,
- datatype: "numeric",
- minSize: 300,
- // filterFn: "equals",
- // filterSelectOptions: [
- // ],
- // filterVariant: "select",
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- ],
- []
- );
- return (
-
-
- }
- enableLastUpdate={true}
- enablePinning={true}
- enableDensityToggle={true}
- enableColumnFilters={true}
- enableHiding={true}
- enableFullScreenToggle={false}
- enableGlobalFilter={false}
- enableColumnResizing={false} // if you want true this you shold change renderRowActions props ** see https://www.material-react-table.com/docs/guides/row-actions
- enableRowActions={true}
- renderRowActions={({ row }) => }
- />
-
-
- );
+
+ );
}
export default DashboardProvinceManagerComponent;
diff --git a/src/components/dashboard/transportation-assistance/Form/ConfirmForm.jsx b/src/components/dashboard/transportation-assistance/Form/ConfirmForm.jsx
index 8067eee..f7f7b88 100644
--- a/src/components/dashboard/transportation-assistance/Form/ConfirmForm.jsx
+++ b/src/components/dashboard/transportation-assistance/Form/ConfirmForm.jsx
@@ -1,102 +1,94 @@
import UploadSystem from "@/core/components/UploadSystem";
-import { CONFIRM_TRANSPORTATION_ASSISTANCE } from "@/core/data/apiRoutes";
+import {CONFIRM_TRANSPORTATION_ASSISTANCE} from "@/core/data/apiRoutes";
import useDirection from "@/lib/app/hooks/useDirection";
-import {
- Dialog,
- DialogTitle,
- DialogContent,
- DialogContentText,
- DialogActions,
- Button,
- TextField,
-} from "@mui/material";
-import { useFormik } from "formik";
-import { useTranslations } from "next-intl";
-import { useState } from "react";
+import {Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, TextField,} from "@mui/material";
+import {useFormik} from "formik";
+import {useTranslations} from "next-intl";
+import {useState} from "react";
import UploadFileNotification from "@/core/components/notifications/UploadFileNotification";
-const ConfirmForm = ({ open, handleClose, rowId, confirmData }) => {
- const t = useTranslations();
- const { directionApp } = useDirection();
- const [description, setDescription] = useState("");
- const [selectedImage, setSelectedImage] = useState("");
- const [fileType, setfileType] = useState(null);
- const [fileName, setfileName] = useState(null);
- const [showAddIcon, setShowAddIcon] = useState(true);
+const ConfirmForm = ({open, handleClose, rowId, confirmData}) => {
+ const t = useTranslations();
+ const {directionApp} = useDirection();
+ const [description, setDescription] = useState("");
+ const [selectedImage, setSelectedImage] = useState("");
+ const [fileType, setfileType] = useState(null);
+ const [fileName, setfileName] = useState(null);
+ const [showAddIcon, setShowAddIcon] = useState(true);
- const formik = useFormik({
- initialValues: {
- description: "",
- },
- onSubmit: () => {
- const formData = new FormData();
- if (description != "") formData.append("expert_description", description);
- handleClose();
- confirmData(CONFIRM_TRANSPORTATION_ASSISTANCE, rowId, formData);
- },
- });
+ const formik = useFormik({
+ initialValues: {
+ description: "",
+ },
+ onSubmit: () => {
+ const formData = new FormData();
+ if (description != "") formData.append("expert_description", description);
+ handleClose();
+ confirmData(CONFIRM_TRANSPORTATION_ASSISTANCE, rowId, formData);
+ },
+ });
- const handleDescriptionChange = (event) => {
- setDescription(event.target.value);
- };
- const handleUploadChange = (event) => {
- const uploadedFile = event.target?.files?.[0];
- if (uploadedFile) {
- const maxFileSize = 2 * 1024 * 1024;
- if (uploadedFile.size > maxFileSize) {
- UploadFileNotification(directionApp, t);
- event.target.value = "";
- return;
- }
+ const handleDescriptionChange = (event) => {
+ setDescription(event.target.value);
+ };
+ const handleUploadChange = (event) => {
+ const uploadedFile = event.target?.files?.[0];
+ if (uploadedFile) {
+ const maxFileSize = 2 * 1024 * 1024;
+ if (uploadedFile.size > maxFileSize) {
+ UploadFileNotification(directionApp, t);
+ event.target.value = "";
+ return;
+ }
- const fileType = event.target?.files?.[0].type;
- const fileName = event.target?.files?.[0].name;
- setSelectedImage(URL.createObjectURL(uploadedFile));
- setfileType(fileType);
- setfileName(fileName);
- formik.setFieldValue("confirm_img", uploadedFile);
- setShowAddIcon(false);
- }
- };
- return (
-
- );
+ const fileType = event.target?.files?.[0].type;
+ const fileName = event.target?.files?.[0].name;
+ setSelectedImage(URL.createObjectURL(uploadedFile));
+ setfileType(fileType);
+ setfileName(fileName);
+ formik.setFieldValue("confirm_img", uploadedFile);
+ setShowAddIcon(false);
+ }
+ };
+ return (
+
+ );
};
export default ConfirmForm;
diff --git a/src/components/dashboard/transportation-assistance/Form/RejectForm.jsx b/src/components/dashboard/transportation-assistance/Form/RejectForm.jsx
index fb3a290..f7643ab 100644
--- a/src/components/dashboard/transportation-assistance/Form/RejectForm.jsx
+++ b/src/components/dashboard/transportation-assistance/Form/RejectForm.jsx
@@ -1,113 +1,105 @@
-import { REJECT_TRANSPORTATION_ASSISTANCE } from "@/core/data/apiRoutes";
-import {
- Dialog,
- DialogTitle,
- DialogContent,
- DialogContentText,
- DialogActions,
- Button,
- TextField,
-} from "@mui/material";
-import { useTranslations } from "next-intl";
-import { useFormik } from "formik";
+import {REJECT_TRANSPORTATION_ASSISTANCE} from "@/core/data/apiRoutes";
+import {Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, TextField,} from "@mui/material";
+import {useTranslations} from "next-intl";
+import {useFormik} from "formik";
import * as Yup from "yup";
-import { useState } from "react";
+import {useState} from "react";
import UploadSystem from "@/core/components/UploadSystem";
import UploadFileNotification from "@/core/components/notifications/UploadFileNotification";
import useDirection from "@/lib/app/hooks/useDirection";
-const RejectForm = ({ open, handleClose, rowId, rejectData }) => {
- const [description, setDescription] = useState("");
- const [selectedImage, setSelectedImage] = useState("");
- const [fileType, setfileType] = useState(null);
- const [fileName, setfileName] = useState(null);
- const [showAddIcon, setShowAddIcon] = useState(true);
- const t = useTranslations();
- const { directionApp } = useDirection();
+const RejectForm = ({open, handleClose, rowId, rejectData}) => {
+ const [description, setDescription] = useState("");
+ const [selectedImage, setSelectedImage] = useState("");
+ const [fileType, setfileType] = useState(null);
+ const [fileName, setfileName] = useState(null);
+ const [showAddIcon, setShowAddIcon] = useState(true);
+ const t = useTranslations();
+ const {directionApp} = useDirection();
- const validationSchema = Yup.object().shape({
- description: Yup.string().required(t("RejectDialog.description_error")),
- });
+ const validationSchema = Yup.object().shape({
+ description: Yup.string().required(t("RejectDialog.description_error")),
+ });
- const formik = useFormik({
- initialValues: {
- description: "",
- },
- validationSchema,
- onSubmit: () => {
- const formData = new FormData();
- formData.append("expert_description", description);
- handleClose();
- rejectData(REJECT_TRANSPORTATION_ASSISTANCE, rowId, formData);
- },
- });
+ const formik = useFormik({
+ initialValues: {
+ description: "",
+ },
+ validationSchema,
+ onSubmit: () => {
+ const formData = new FormData();
+ formData.append("expert_description", description);
+ handleClose();
+ rejectData(REJECT_TRANSPORTATION_ASSISTANCE, rowId, formData);
+ },
+ });
- const handleDescriptionChange = (event) => {
- setDescription(event.target.value);
- formik.handleChange(event);
- };
- const handleUploadChange = (event) => {
- const uploadedFile = event.target?.files?.[0];
- if (uploadedFile) {
- const maxFileSize = 2 * 1024 * 1024;
- if (uploadedFile.size > maxFileSize) {
- UploadFileNotification(directionApp, t);
- event.target.value = "";
- return;
- }
- const fileType = event.target?.files?.[0].type;
- const fileName = event.target?.files?.[0].name;
- setSelectedImage(URL.createObjectURL(uploadedFile));
- setfileType(fileType);
- setfileName(fileName);
- formik.setFieldValue("reject_img", uploadedFile);
- setShowAddIcon(false);
- }
- };
- return (
-
- );
+ const handleDescriptionChange = (event) => {
+ setDescription(event.target.value);
+ formik.handleChange(event);
+ };
+ const handleUploadChange = (event) => {
+ const uploadedFile = event.target?.files?.[0];
+ if (uploadedFile) {
+ const maxFileSize = 2 * 1024 * 1024;
+ if (uploadedFile.size > maxFileSize) {
+ UploadFileNotification(directionApp, t);
+ event.target.value = "";
+ return;
+ }
+ const fileType = event.target?.files?.[0].type;
+ const fileName = event.target?.files?.[0].name;
+ setSelectedImage(URL.createObjectURL(uploadedFile));
+ setfileType(fileType);
+ setfileName(fileName);
+ formik.setFieldValue("reject_img", uploadedFile);
+ setShowAddIcon(false);
+ }
+ };
+ return (
+
+ );
};
export default RejectForm;
diff --git a/src/components/dashboard/transportation-assistance/TableRowActions.jsx b/src/components/dashboard/transportation-assistance/TableRowActions.jsx
index e4b8334..1306d2c 100644
--- a/src/components/dashboard/transportation-assistance/TableRowActions.jsx
+++ b/src/components/dashboard/transportation-assistance/TableRowActions.jsx
@@ -1,61 +1,61 @@
import ThumbUpAltIcon from "@mui/icons-material/ThumbUpAlt";
import ThumbDownIcon from "@mui/icons-material/ThumbDown";
-import { Box, IconButton, Tooltip } from "@mui/material";
-import { useContext } from "react";
+import {Box, IconButton, Tooltip} from "@mui/material";
+import {useContext} from "react";
import ConfirmForm from "./Form/ConfirmForm";
import RejectForm from "./Form/RejectForm";
-import { useTranslations } from "next-intl";
-import { DataTableContext } from "@/lib/app/contexts/DatatableContext";
+import {useTranslations} from "next-intl";
+import {DataTableContext} from "@/lib/app/contexts/DatatableContext";
-const TableRowActions = ({ row }) => {
- const t = useTranslations();
+const TableRowActions = ({row}) => {
+ const t = useTranslations();
- const {
- openConfirmDialog,
- openRejectDialog,
- handleOpenConfirmDialog,
- handleOpenRejectDialog,
- handleCloseConfirmDialog,
- handleCloseRejectDialog,
- rowId,
- confirmData,
- rejectData,
- } = useContext(DataTableContext);
- return (
-
-
- {
- handleOpenConfirmDialog(row);
- }}
- >
-
-
-
- {openConfirmDialog && (
-
- )}
-
- handleOpenRejectDialog(row)}>
-
-
-
- {openRejectDialog && (
-
- )}
-
- );
+ const {
+ openConfirmDialog,
+ openRejectDialog,
+ handleOpenConfirmDialog,
+ handleOpenRejectDialog,
+ handleCloseConfirmDialog,
+ handleCloseRejectDialog,
+ rowId,
+ confirmData,
+ rejectData,
+ } = useContext(DataTableContext);
+ return (
+
+
+ {
+ handleOpenConfirmDialog(row);
+ }}
+ >
+
+
+
+ {openConfirmDialog && (
+
+ )}
+
+ handleOpenRejectDialog(row)}>
+
+
+
+ {openRejectDialog && (
+
+ )}
+
+ );
};
export default TableRowActions;
diff --git a/src/components/dashboard/transportation-assistance/TableTollbar.jsx b/src/components/dashboard/transportation-assistance/TableTollbar.jsx
index 3f06d3b..e267691 100644
--- a/src/components/dashboard/transportation-assistance/TableTollbar.jsx
+++ b/src/components/dashboard/transportation-assistance/TableTollbar.jsx
@@ -1,13 +1,13 @@
-import { Stack, Tooltip } from "@mui/material";
-import { useTranslations } from "next-intl";
+import {Stack, Tooltip} from "@mui/material";
+import {useTranslations} from "next-intl";
function TableToolbar() {
- const t = useTranslations();
- return (
-
-
-
- );
+ const t = useTranslations();
+ return (
+
+
+
+ );
}
export default TableToolbar;
diff --git a/src/components/dashboard/transportation-assistance/index.jsx b/src/components/dashboard/transportation-assistance/index.jsx
index fa6dbd9..51b780d 100644
--- a/src/components/dashboard/transportation-assistance/index.jsx
+++ b/src/components/dashboard/transportation-assistance/index.jsx
@@ -1,245 +1,242 @@
import DataTableStructure from "@/core/components/DatatableStructure";
import DashboardLayouts from "@/layouts/dashboardLayouts";
-import { Box, IconButton, Typography } from "@mui/material";
+import {Box, IconButton, Typography} from "@mui/material";
import ClearIcon from "@mui/icons-material/Clear";
-import { useMemo } from "react";
+import {useMemo} from "react";
// import TableToolbar from "./TableTollbar";
-import { GET_TRANSPORTATION_ASSISTANCE } from "@/core/data/apiRoutes";
-import { useTranslations } from "next-intl";
+import {GET_TRANSPORTATION_ASSISTANCE} from "@/core/data/apiRoutes";
+import {useTranslations} from "next-intl";
import TableRowActions from "./TableRowActions";
-import {
- LocalizationProvider,
- MobileDateTimePicker,
-} from "@mui/x-date-pickers";
-import { AdapterDateFnsJalali } from "@mui/x-date-pickers/AdapterDateFnsJalali";
-import { faIR } from "@mui/x-date-pickers/locales";
+import {LocalizationProvider, MobileDateTimePicker,} from "@mui/x-date-pickers";
+import {AdapterDateFnsJalali} from "@mui/x-date-pickers/AdapterDateFnsJalali";
+import {faIR} from "@mui/x-date-pickers/locales";
import moment from "jalali-moment";
function DashboardTransportationAssistanceComponent() {
- const t = useTranslations();
- const columns = useMemo(
- () => [
- {
- accessorFn: (row) => row.id,
- id: "id",
- header: t("TransportationAssistance.id"),
- enableColumnFilter: true,
- datatype: "numeric",
- filterFn: "equals",
- maxSize: 100,
- columnFilterModeOptions: [
- "equals",
- "notEquals",
- "contains",
- "lessThan",
- "greaterThan",
- "between",
- ],
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) => row.name,
- id: "name",
- header: t("TransportationAssistance.name"),
- enableColumnFilter: true,
- datatype: "text",
- filterFn: "contains",
- columnFilterModeOptions: ["contains", "equals", "notEquals"],
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
+ const t = useTranslations();
+ const columns = useMemo(
+ () => [
+ {
+ accessorFn: (row) => row.id,
+ id: "id",
+ header: t("TransportationAssistance.id"),
+ enableColumnFilter: true,
+ datatype: "numeric",
+ filterFn: "equals",
+ maxSize: 100,
+ columnFilterModeOptions: [
+ "equals",
+ "notEquals",
+ "contains",
+ "lessThan",
+ "greaterThan",
+ "between",
+ ],
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) => row.name,
+ id: "name",
+ header: t("TransportationAssistance.name"),
+ enableColumnFilter: true,
+ datatype: "text",
+ filterFn: "contains",
+ columnFilterModeOptions: ["contains", "equals", "notEquals"],
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
- {
- accessorFn: (row) => row.national_id,
- id: "national_id",
- header: t("TransportationAssistance.national_id"),
- enableColumnFilter: true,
- datatype: "numeric",
- filterFn: "equals",
- columnFilterModeOptions: [
- "equals",
- "notEquals",
- "contains",
- "lessThan",
- "greaterThan",
- "between",
+ {
+ accessorFn: (row) => row.national_id,
+ id: "national_id",
+ header: t("TransportationAssistance.national_id"),
+ enableColumnFilter: true,
+ datatype: "numeric",
+ filterFn: "equals",
+ columnFilterModeOptions: [
+ "equals",
+ "notEquals",
+ "contains",
+ "lessThan",
+ "greaterThan",
+ "between",
+ ],
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) => row.phone_number,
+ id: "phone_number",
+ header: t("TransportationAssistance.phone_number"),
+ enableColumnFilter: true,
+ datatype: "numeric",
+ filterFn: "equals",
+ columnFilterModeOptions: [
+ "equals",
+ "notEquals",
+ "contains",
+ "lessThan",
+ "greaterThan",
+ "between",
+ ],
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) =>
+ moment(row.created_at).locale("fa").format("HH:mm | yyyy/MM/DD"),
+ id: "created_at",
+ header: t("TransportationAssistance.created_at"),
+ enableColumnFilter: true,
+ datatype: "date",
+ minSize: 200,
+ filterFn: "lessThan",
+ columnFilterModeOptions: ["lessThan", "greaterThan"],
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ Header: ({column}) => {column.columnDef.header},
+ Filter: ({column}) => {
+ const filterFnValue = column.columnDef._filterFn;
+ return (
+
+
+ {
+ const date = new Date(newValue);
+ const formattedDate = moment(date)
+ .locale("en")
+ .format("YYYY-MM-DD HH:mm");
+ column.setFilterValue(formattedDate);
+ }}
+ slotProps={{
+ textField: {
+ placeholder: "تاریخ خود را وارد کنید",
+ helperText: `${t("filter_mode")}: ${t(filterFnValue)}`,
+ sx: {minWidth: "120px"},
+ variant: "standard",
+ },
+ }}
+ value={
+ column.getFilterValue()
+ ? new Date(column.getFilterValue())
+ : null
+ }
+ />
+
+ {
+ column.setFilterValue(null);
+ }}
+ sx={{
+ color: column.getFilterValue()
+ ? "rgba(0, 0, 0, 0.54)"
+ : "#bfbfbf",
+ }}
+ >
+
+
+
+ );
+ },
+ },
+ {
+ accessorFn: (row) =>
+ moment(row.updated_at).locale("fa").format("HH:mm | yyyy/MM/DD"),
+ id: "updated_at",
+ header: t("TransportationAssistance.updated_at"),
+ enableColumnFilter: false,
+ datatype: "numeric",
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) => row.navgan_id,
+ id: "navgan_id",
+ header: t("TransportationAssistance.navgan_id"),
+ enableColumnFilter: true,
+ datatype: "numeric",
+ filterFn: "equals",
+ maxSize: 100,
+ columnFilterModeOptions: [
+ "equals",
+ "notEquals",
+ "contains",
+ "lessThan",
+ "greaterThan",
+ "between",
+ ],
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) => row.vehicle_type,
+ id: "vehicle_type",
+ header: t("TransportationAssistance.vehicle_type"),
+ enableColumnFilter: true,
+ datatype: "text",
+ filterFn: "contains",
+ columnFilterModeOptions: ["contains", "equals", "notEquals"],
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
+ {
+ accessorFn: (row) => row.state_name,
+ id: "state_id",
+ header: t("TransportationAssistance.state_name"),
+ enableColumnFilter: false,
+ datatype: "numeric",
+ minSize: 300,
+ // filterFn: "equals",
+ // filterSelectOptions: [
+ // ],
+ // filterVariant: "select",
+ Cell: ({renderedCellValue}) => (
+ {renderedCellValue}
+ ),
+ },
],
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) => row.phone_number,
- id: "phone_number",
- header: t("TransportationAssistance.phone_number"),
- enableColumnFilter: true,
- datatype: "numeric",
- filterFn: "equals",
- columnFilterModeOptions: [
- "equals",
- "notEquals",
- "contains",
- "lessThan",
- "greaterThan",
- "between",
- ],
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) =>
- moment(row.created_at).locale("fa").format("HH:mm | yyyy/MM/DD"),
- id: "created_at",
- header: t("TransportationAssistance.created_at"),
- enableColumnFilter: true,
- datatype: "date",
- minSize: 200,
- filterFn: "lessThan",
- columnFilterModeOptions: ["lessThan", "greaterThan"],
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- Header: ({ column }) => {column.columnDef.header},
- Filter: ({ column }) => {
- const filterFnValue = column.columnDef._filterFn;
- return (
-
-
- {
- const date = new Date(newValue);
- const formattedDate = moment(date)
- .locale("en")
- .format("YYYY-MM-DD HH:mm");
- column.setFilterValue(formattedDate);
- }}
- slotProps={{
- textField: {
- placeholder: "تاریخ خود را وارد کنید",
- helperText: `${t("filter_mode")}: ${t(filterFnValue)}`,
- sx: { minWidth: "120px" },
- variant: "standard",
- },
- }}
- value={
- column.getFilterValue()
- ? new Date(column.getFilterValue())
- : null
- }
+ []
+ );
+ return (
+
+
+ }
+ enableLastUpdate={true}
+ enablePinning={true}
+ enableDensityToggle={true}
+ enableColumnFilters={true}
+ enableHiding={true}
+ enableFullScreenToggle={false}
+ enableGlobalFilter={false}
+ enableColumnResizing={false} // if you want true this you shold change renderRowActions props ** see https://www.material-react-table.com/docs/guides/row-actions
+ enableRowActions={true}
+ renderRowActions={({row}) => }
/>
-
- {
- column.setFilterValue(null);
- }}
- sx={{
- color: column.getFilterValue()
- ? "rgba(0, 0, 0, 0.54)"
- : "#bfbfbf",
- }}
- >
-
-
- );
- },
- },
- {
- accessorFn: (row) =>
- moment(row.updated_at).locale("fa").format("HH:mm | yyyy/MM/DD"),
- id: "updated_at",
- header: t("TransportationAssistance.updated_at"),
- enableColumnFilter: false,
- datatype: "numeric",
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) => row.navgan_id,
- id: "navgan_id",
- header: t("TransportationAssistance.navgan_id"),
- enableColumnFilter: true,
- datatype: "numeric",
- filterFn: "equals",
- maxSize: 100,
- columnFilterModeOptions: [
- "equals",
- "notEquals",
- "contains",
- "lessThan",
- "greaterThan",
- "between",
- ],
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) => row.vehicle_type,
- id: "vehicle_type",
- header: t("TransportationAssistance.vehicle_type"),
- enableColumnFilter: true,
- datatype: "text",
- filterFn: "contains",
- columnFilterModeOptions: ["contains", "equals", "notEquals"],
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- {
- accessorFn: (row) => row.state_name,
- id: "state_id",
- header: t("TransportationAssistance.state_name"),
- enableColumnFilter: false,
- datatype: "numeric",
- minSize: 300,
- // filterFn: "equals",
- // filterSelectOptions: [
- // ],
- // filterVariant: "select",
- Cell: ({ renderedCellValue }) => (
- {renderedCellValue}
- ),
- },
- ],
- []
- );
- return (
-
-
- }
- enableLastUpdate={true}
- enablePinning={true}
- enableDensityToggle={true}
- enableColumnFilters={true}
- enableHiding={true}
- enableFullScreenToggle={false}
- enableGlobalFilter={false}
- enableColumnResizing={false} // if you want true this you shold change renderRowActions props ** see https://www.material-react-table.com/docs/guides/row-actions
- enableRowActions={true}
- renderRowActions={({ row }) => }
- />
-
-
- );
+
+ );
}
export default DashboardTransportationAssistanceComponent;
diff --git a/src/components/first/index.jsx b/src/components/first/index.jsx
index adf4393..9304403 100644
--- a/src/components/first/index.jsx
+++ b/src/components/first/index.jsx
@@ -1,53 +1,53 @@
import dahsboardImage from "&/images/dashboard.svg";
-import { NextLinkComposed } from "@/core/components/LinkRouting";
+import {NextLinkComposed} from "@/core/components/LinkRouting";
import StyledImage from "@/core/components/StyledImage";
import CenterLayout from "@/layouts/CenterLayout";
import FullPageLayout from "@/layouts/FullPageLayout";
import useUser from "@/lib/app/hooks/useUser";
-import { Button, Typography } from "@mui/material";
-import { useTranslations } from "next-intl";
+import {Button, Typography} from "@mui/material";
+import {useTranslations} from "next-intl";
const FirstComponent = () => {
- const t = useTranslations();
- const { isAuth } = useUser();
+ const t = useTranslations();
+ const {isAuth} = useUser();
- return (
-
-
-
-
- {t("app_name")}
-
- {isAuth ? (
-
- ) : (
-
- )}
-
-
- );
+ return (
+
+
+
+
+ {t("app_name")}
+
+ {isAuth ? (
+
+ ) : (
+
+ )}
+
+
+ );
};
export default FirstComponent;
diff --git a/src/components/login-expert/index.jsx b/src/components/login-expert/index.jsx
index 4d6af4a..10ac3b6 100644
--- a/src/components/login-expert/index.jsx
+++ b/src/components/login-expert/index.jsx
@@ -2,158 +2,149 @@ import LinkRouting from "@/core/components/LinkRouting";
// import Notifications from "@/core/components/notifications";
import PasswordField from "@/core/components/PasswordField";
import StyledForm from "@/core/components/StyledForm";
-import { GET_USER_TOKEN } from "@/core/data/apiRoutes";
+import {GET_USER_TOKEN} from "@/core/data/apiRoutes";
import CenterLayout from "@/layouts/CenterLayout";
import FullPageLayout from "@/layouts/FullPageLayout";
-import useDirection from "@/lib/app/hooks/useDirection";
import useUser from "@/lib/app/hooks/useUser";
import LoginIcon from "@mui/icons-material/Login";
-import {
- Box,
- Button,
- Container,
- Paper,
- Stack,
- TextField,
- Typography,
-} from "@mui/material";
+import {Box, Button, Container, Paper, Stack, TextField, Typography,} from "@mui/material";
import axios from "axios";
-import { Field, Formik } from "formik";
-import { useTranslations } from "next-intl";
+import {Field, Formik} from "formik";
+import {useTranslations} from "next-intl";
import Image from "next/image";
-import { useSearchParams } from "next/navigation";
+import {useSearchParams} from "next/navigation";
import * as Yup from "yup";
const LoginComponent = () => {
- const t = useTranslations();
- // const { directionApp } = useDirection(); // should delete because we dont have direction anymore
- const { setToken } = useUser(); // pass token to set token
+ const t = useTranslations();
+ // const { directionApp } = useDirection(); // should delete because we dont have direction anymore
+ const {setToken} = useUser(); // pass token to set token
- // gettin url query
- const searchParams = useSearchParams();
- const backUrlDecodedPath = searchParams.get("back_url");
+ // gettin url query
+ const searchParams = useSearchParams();
+ const backUrlDecodedPath = searchParams.get("back_url");
- //formik properties
- const handleSubmit = async (values, props) => {
- await axios
- .post(GET_USER_TOKEN, {
- username: values.username,
- password: values.password,
- })
- .then(function (response) {
- setToken(response.data.token);
- })
- .catch(function (error) {
- // Notifications(directionApp, error.response, t);
- props.setSubmitting(false);
- });
- };
- const initialValues = {
- username: "",
- password: "",
- };
- const validationSchema = Yup.object().shape({
- username: Yup.string().required(t("LoginPage.error_message_required")),
- password: Yup.string().required(t("LoginPage.error_message_required")),
- });
+ //formik properties
+ const handleSubmit = async (values, props) => {
+ await axios
+ .post(GET_USER_TOKEN, {
+ username: values.username,
+ password: values.password,
+ })
+ .then(function (response) {
+ setToken(response.data.token);
+ })
+ .catch(function (error) {
+ // Notifications(directionApp, error.response, t);
+ props.setSubmitting(false);
+ });
+ };
+ const initialValues = {
+ username: "",
+ password: "",
+ };
+ const validationSchema = Yup.object().shape({
+ username: Yup.string().required(t("LoginPage.error_message_required")),
+ password: Yup.string().required(t("LoginPage.error_message_required")),
+ });
- return (
-
-
-
-
-
- {(props) => (
-
-
-
-
-
- {t("login_expert")}
-
-
-
-
-
-
- }
- disabled={props.isSubmitting ? true : false}
+ return (
+
+
+
+
+
- {t("LoginPage.button_submit")}
-
-
-
-
-
- )}
-
-
-
-
-
-
- {t("LoginPage.link_routing_back_to")}{" "}
- {backUrlDecodedPath
- ? t("LoginPage.link_routing_previuos_page")
- : t("LoginPage.link_routing_main_page")}
-
-
-
- );
+ {(props) => (
+
+
+
+
+
+ {t("login_expert")}
+
+
+
+
+
+
+
+
+
+
+
+ )}
+
+
+
+
+
+
+ {t("LoginPage.link_routing_back_to")}{" "}
+ {backUrlDecodedPath
+ ? t("LoginPage.link_routing_previuos_page")
+ : t("LoginPage.link_routing_main_page")}
+
+
+
+ );
};
export default LoginComponent;
diff --git a/src/core/components/AvatarUpload.jsx b/src/core/components/AvatarUpload.jsx
index e1ade5c..03a9cba 100644
--- a/src/core/components/AvatarUpload.jsx
+++ b/src/core/components/AvatarUpload.jsx
@@ -1,128 +1,128 @@
-import { Avatar, Box, TextField } from "@mui/material";
-import { useState } from "react";
+import {Avatar, Box, TextField} from "@mui/material";
+import {useState} from "react";
import DeleteIcon from "@mui/icons-material/Delete";
import AddIcon from "@mui/icons-material/Add";
-const AvatarUpload = ({ user, setFieldValue, valueAvatar, changeFlag }) => {
- const [selectedImage, setSelectedImage] = useState(user.expert_avatar);
- const [isHovered, setIsHovered] = useState(false);
+const AvatarUpload = ({user, setFieldValue, valueAvatar, changeFlag}) => {
+ const [selectedImage, setSelectedImage] = useState(user.expert_avatar);
+ const [isHovered, setIsHovered] = useState(false);
- const handleImageChange = (event) => {
- const newImage = event.target?.files?.[0];
- if (newImage) {
- setSelectedImage(URL.createObjectURL(newImage));
- setFieldValue(valueAvatar, newImage);
- setFieldValue(changeFlag, true);
- } else {
- setSelectedImage("");
- setFieldValue(valueAvatar, null);
- }
- };
+ const handleImageChange = (event) => {
+ const newImage = event.target?.files?.[0];
+ if (newImage) {
+ setSelectedImage(URL.createObjectURL(newImage));
+ setFieldValue(valueAvatar, newImage);
+ setFieldValue(changeFlag, true);
+ } else {
+ setSelectedImage("");
+ setFieldValue(valueAvatar, null);
+ }
+ };
- const handleDeleteImage = () => {
- setSelectedImage("");
- setFieldValue(valueAvatar, null);
- setFieldValue(changeFlag, true);
- };
+ const handleDeleteImage = () => {
+ setSelectedImage("");
+ setFieldValue(valueAvatar, null);
+ setFieldValue(changeFlag, true);
+ };
- const handleMouseEnter = () => {
- setIsHovered(true);
- };
+ const handleMouseEnter = () => {
+ setIsHovered(true);
+ };
- const handleMouseLeave = () => {
- setIsHovered(false);
- };
+ const handleMouseLeave = () => {
+ setIsHovered(false);
+ };
- return (
-
-
+ return (
-
- {isHovered && (
+ >
- {selectedImage ? (
-
- ) : (
-
- )}
+
+
+ {isHovered && (
+
+ {selectedImage ? (
+
+ ) : (
+
+ )}
+
+ )}
+
- )}
+
-
-
-
- );
+ );
};
export default AvatarUpload;
diff --git a/src/core/components/Datatable.jsx b/src/core/components/Datatable.jsx
index 2d34ece..060e089 100644
--- a/src/core/components/Datatable.jsx
+++ b/src/core/components/Datatable.jsx
@@ -1,174 +1,174 @@
-import { ReloadDataTableContext } from "@/lib/app/contexts/ReloadDatatableContext";
+import {ReloadDataTableContext} from "@/lib/app/contexts/ReloadDatatableContext";
import useLanguage from "@/lib/app/hooks/useLanguage";
-import { Typography } from "@mui/material";
+import {Typography} from "@mui/material";
import axios from "axios";
import MaterialReactTable from "material-react-table";
import moment from "moment-jalaali";
-import { useTranslations } from "next-intl";
-import { useContext, useEffect, useMemo, useState } from "react";
+import {useTranslations} from "next-intl";
+import {useContext, useEffect, useMemo, useState} from "react";
import useSWR from "swr";
const DataTable = (props) => {
- const { reloadDataTable, setReloadDataTable } = useContext(
- ReloadDataTableContext
- );
-
- const fetcher = (...args) => {
- return axios
- .get(args, {
- headers: {
- Authorization: `Bearer ${props.token}`,
- },
- })
- .then((res) => {
- setRowCount(res.data.meta.totalRowCount);
- return res.data.data;
- });
- };
- const t = useTranslations();
- const { languageApp, languageList } = useLanguage();
- const [columnFilters, setColumnFilters] = useState([]);
- const [columnFilterFns, setColumnFilterFns] = useState(() => {
- let output = {};
- const list = props.columns.map((item) =>
- item.enableColumnFilter ? { [item.id]: item.filterFn } : { [item.id]: "" }
+ const {reloadDataTable, setReloadDataTable} = useContext(
+ ReloadDataTableContext
);
- for (var key in list) {
- var nestedObj = list[key];
- for (var nestedKey in nestedObj) {
- output[nestedKey] = nestedObj[nestedKey];
- }
- }
- return output;
- });
- const [sorting, setSorting] = useState([]);
- const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: 10 });
- const [rowCount, setRowCount] = useState(0);
- const [updateTime, setupdateTime] = useState(
- moment().format("HH:mm | jYYYY/jM/jD")
- );
- const tableLocalization = useMemo(
- () =>
- languageList.find((item) => item.key == languageApp).tableLocalization,
- [languageApp, languageList]
- );
-
- const fetchUrl = useMemo(() => {
- const url = new URL(props.tableUrl /* send your api */);
- url.searchParams.set(
- "start",
- `${pagination.pageIndex * pagination.pageSize}`
- );
- const filters = columnFilters.map((filter) => {
- let datatype;
- for (const i in props.columns) {
- if (props.columns[i].id == filter.id) {
- datatype = props.columns[i].datatype;
+ const fetcher = (...args) => {
+ return axios
+ .get(args, {
+ headers: {
+ Authorization: `Bearer ${props.token}`,
+ },
+ })
+ .then((res) => {
+ setRowCount(res.data.meta.totalRowCount);
+ return res.data.data;
+ });
+ };
+ const t = useTranslations();
+ const {languageApp, languageList} = useLanguage();
+ const [columnFilters, setColumnFilters] = useState([]);
+ const [columnFilterFns, setColumnFilterFns] = useState(() => {
+ let output = {};
+ const list = props.columns.map((item) =>
+ item.enableColumnFilter ? {[item.id]: item.filterFn} : {[item.id]: ""}
+ );
+ for (var key in list) {
+ var nestedObj = list[key];
+ for (var nestedKey in nestedObj) {
+ output[nestedKey] = nestedObj[nestedKey];
+ }
}
- }
- return {
- ...filter,
- fn: columnFilterFns[filter.id],
- datatype: datatype,
- };
+ return output;
});
- url.searchParams.set("size", pagination.pageSize);
- url.searchParams.set("filters", JSON.stringify(filters ?? []));
- url.searchParams.set("sorting", JSON.stringify(sorting ?? []));
- return url;
- }, [
- props.tableUrl,
- columnFilters,
- columnFilterFns,
- pagination,
- sorting,
- props.columns,
- ]);
- const { data, isLoading, isValidating, mutate } = useSWR(fetchUrl, fetcher, {
- revalidateOnFocus: false,
- });
+ const [sorting, setSorting] = useState([]);
+ const [pagination, setPagination] = useState({pageIndex: 0, pageSize: 10});
+ const [rowCount, setRowCount] = useState(0);
+ const [updateTime, setupdateTime] = useState(
+ moment().format("HH:mm | jYYYY/jM/jD")
+ );
- useEffect(() => {
- if (reloadDataTable) {
- mutate(fetchUrl).then(() => {
- setReloadDataTable(false); // Set reloadDataTable to false after mutation is complete
- });
- }
- }, [reloadDataTable, setReloadDataTable]);
+ const tableLocalization = useMemo(
+ () =>
+ languageList.find((item) => item.key == languageApp).tableLocalization,
+ [languageApp, languageList]
+ );
- useEffect(() => {
- setupdateTime(moment().format("HH:mm | jYYYY/jM/jD"));
- }, [isValidating, languageApp]);
-
- return (
- (
- <>
- {props.enableCustomToolbar /* send condition */
- ? props.CustomToolbar /* send component */
- : ""}
- >
- )}
- renderBottomToolbarCustomActions={({ table }) => (
- <>
- {props.enableLastUpdate /* send condition */ ? (
-
- {t("last_updated_at")}: {updateTime}
-
- ) : (
- ""
- )}
- >
- )}
- state={{
- isLoading,
+ const fetchUrl = useMemo(() => {
+ const url = new URL(props.tableUrl /* send your api */);
+ url.searchParams.set(
+ "start",
+ `${pagination.pageIndex * pagination.pageSize}`
+ );
+ const filters = columnFilters.map((filter) => {
+ let datatype;
+ for (const i in props.columns) {
+ if (props.columns[i].id == filter.id) {
+ datatype = props.columns[i].datatype;
+ }
+ }
+ return {
+ ...filter,
+ fn: columnFilterFns[filter.id],
+ datatype: datatype,
+ };
+ });
+ url.searchParams.set("size", pagination.pageSize);
+ url.searchParams.set("filters", JSON.stringify(filters ?? []));
+ url.searchParams.set("sorting", JSON.stringify(sorting ?? []));
+ return url;
+ }, [
+ props.tableUrl,
columnFilters,
columnFilterFns,
pagination,
sorting,
- }}
- positionActionsColumn={"last"}
- enableRowActions={props.enableRowActions}
- {...props}
- />
- );
+ props.columns,
+ ]);
+ const {data, isLoading, isValidating, mutate} = useSWR(fetchUrl, fetcher, {
+ revalidateOnFocus: false,
+ });
+
+ useEffect(() => {
+ if (reloadDataTable) {
+ mutate(fetchUrl).then(() => {
+ setReloadDataTable(false); // Set reloadDataTable to false after mutation is complete
+ });
+ }
+ }, [reloadDataTable, setReloadDataTable]);
+
+ useEffect(() => {
+ setupdateTime(moment().format("HH:mm | jYYYY/jM/jD"));
+ }, [isValidating, languageApp]);
+
+ return (
+ (
+ <>
+ {props.enableCustomToolbar /* send condition */
+ ? props.CustomToolbar /* send component */
+ : ""}
+ >
+ )}
+ renderBottomToolbarCustomActions={({table}) => (
+ <>
+ {props.enableLastUpdate /* send condition */ ? (
+
+ {t("last_updated_at")}: {updateTime}
+
+ ) : (
+ ""
+ )}
+ >
+ )}
+ state={{
+ isLoading,
+ columnFilters,
+ columnFilterFns,
+ pagination,
+ sorting,
+ }}
+ positionActionsColumn={"last"}
+ enableRowActions={props.enableRowActions}
+ {...props}
+ />
+ );
};
export default DataTable;
diff --git a/src/core/components/DatatableStructure.jsx b/src/core/components/DatatableStructure.jsx
index e13ed16..ae97461 100644
--- a/src/core/components/DatatableStructure.jsx
+++ b/src/core/components/DatatableStructure.jsx
@@ -1,15 +1,15 @@
-import { DataTableProvider } from "@/lib/app/contexts/DatatableContext";
+import {DataTableProvider} from "@/lib/app/contexts/DatatableContext";
import DataTable from "./Datatable";
-import { ReloadDataTableProvider } from "@/lib/app/contexts/ReloadDatatableContext";
+import {ReloadDataTableProvider} from "@/lib/app/contexts/ReloadDatatableContext";
function DataTableStructure(props) {
- return (
-
-
-
-
-
- );
+ return (
+
+
+
+
+
+ );
}
export default DataTableStructure;
diff --git a/src/core/components/FormErrorMassage.jsx b/src/core/components/FormErrorMassage.jsx
index 4bf74e3..e1d155b 100644
--- a/src/core/components/FormErrorMassage.jsx
+++ b/src/core/components/FormErrorMassage.jsx
@@ -1,10 +1,11 @@
-import { Typography } from "@mui/material";
+import {Typography} from "@mui/material";
+
const FormErrorMessage = (props) => {
- return (
-
- {props.children}
-
- );
+ return (
+
+ {props.children}
+
+ );
};
export default FormErrorMessage;
diff --git a/src/core/components/ImageConvertor.jsx b/src/core/components/ImageConvertor.jsx
index 667182e..9f99bc1 100644
--- a/src/core/components/ImageConvertor.jsx
+++ b/src/core/components/ImageConvertor.jsx
@@ -1,22 +1,22 @@
import ImageResize from "image-resize";
const ImageResizer = async (image) => {
- const imageResize = new ImageResize({
- quality: 1,
- format: "jpg",
- outputType: "base64",
- width: 400,
- });
+ const imageResize = new ImageResize({
+ quality: 1,
+ format: "jpg",
+ outputType: "base64",
+ width: 400,
+ });
- const get = await imageResize.get(image);
- const resize = await imageResize.resize(get).then();
- const output = await imageResize.output(resize).then();
+ const get = await imageResize.get(image);
+ const resize = await imageResize.resize(get).then();
+ const output = await imageResize.output(resize).then();
- const avatar = await (await import("image-to-file-converter"))
- .base64ToFile(output)
- .then();
+ const avatar = await (await import("image-to-file-converter"))
+ .base64ToFile(output)
+ .then();
- return avatar;
+ return avatar;
};
export default ImageResizer;
diff --git a/src/core/components/LinkRouting.jsx b/src/core/components/LinkRouting.jsx
index ff33c86..f8fac0a 100644
--- a/src/core/components/LinkRouting.jsx
+++ b/src/core/components/LinkRouting.jsx
@@ -1,116 +1,116 @@
import MuiLink from "@mui/material/Link";
-import { styled } from "@mui/material/styles";
+import {styled} from "@mui/material/styles";
import clsx from "clsx";
import NextLink from "next/link";
-import { useRouter } from "next/router";
+import {useRouter} from "next/router";
import * as React from "react";
// Add support for the sx prop for consistency with the other branches.
const Anchor = styled("a")({});
export const NextLinkComposed = React.forwardRef(function NextLinkComposed(
- props,
- ref
+ props,
+ ref
) {
- const {
- to,
- linkAs,
- replace,
- scroll,
- shallow,
- prefetch,
- legacyBehavior = true,
- locale,
- ...other
- } = props;
+ const {
+ to,
+ linkAs,
+ replace,
+ scroll,
+ shallow,
+ prefetch,
+ legacyBehavior = true,
+ locale,
+ ...other
+ } = props;
- return (
-
-
-
- );
+ return (
+
+
+
+ );
});
// A styled version of the Next.js Link component:
// https://nextjs.org/docs/api-reference/next/link
const LinkRouting = React.forwardRef(function Link(props, ref) {
- const {
- activeClassName = "active",
- as,
- className: classNameProps,
- href,
- legacyBehavior,
- linkAs: linkAsProp,
- locale,
- noLinkStyle,
- prefetch,
- replace,
- role, // Link don't have roles.
- scroll,
- shallow,
- ...other
- } = props;
+ const {
+ activeClassName = "active",
+ as,
+ className: classNameProps,
+ href,
+ legacyBehavior,
+ linkAs: linkAsProp,
+ locale,
+ noLinkStyle,
+ prefetch,
+ replace,
+ role, // Link don't have roles.
+ scroll,
+ shallow,
+ ...other
+ } = props;
- const router = useRouter();
- const pathname = typeof href === "string" ? href : href.pathname;
- const className = clsx(classNameProps, {
- [activeClassName]: router.pathname === pathname && activeClassName,
- });
+ const router = useRouter();
+ const pathname = typeof href === "string" ? href : href.pathname;
+ const className = clsx(classNameProps, {
+ [activeClassName]: router.pathname === pathname && activeClassName,
+ });
- const isExternal =
- typeof href === "string" &&
- (href.indexOf("http") === 0 || href.indexOf("mailto:") === 0);
+ const isExternal =
+ typeof href === "string" &&
+ (href.indexOf("http") === 0 || href.indexOf("mailto:") === 0);
- if (isExternal) {
- if (noLinkStyle) {
- return ;
+ if (isExternal) {
+ if (noLinkStyle) {
+ return ;
+ }
+
+ return ;
}
- return ;
- }
+ const linkAs = linkAsProp || as;
+ const nextjsProps = {
+ to: href,
+ linkAs,
+ replace,
+ scroll,
+ shallow,
+ prefetch,
+ legacyBehavior,
+ locale,
+ };
- const linkAs = linkAsProp || as;
- const nextjsProps = {
- to: href,
- linkAs,
- replace,
- scroll,
- shallow,
- prefetch,
- legacyBehavior,
- locale,
- };
+ if (noLinkStyle) {
+ return (
+
+ );
+ }
- if (noLinkStyle) {
return (
-
+
);
- }
-
- return (
-
- );
});
export default LinkRouting;
diff --git a/src/core/components/LoadingHardPage.jsx b/src/core/components/LoadingHardPage.jsx
index 5a86af8..d0f1c3f 100644
--- a/src/core/components/LoadingHardPage.jsx
+++ b/src/core/components/LoadingHardPage.jsx
@@ -1,44 +1,44 @@
-import { Backdrop, Fade, styled } from "@mui/material";
+import {Backdrop, Fade, styled} from "@mui/material";
import StyledImage from "./StyledImage";
const LoadingImage = styled(StyledImage)({
- "@keyframes load": {
- "0%": {
- // opacity: 0,
- transform: "scale(1)",
+ "@keyframes load": {
+ "0%": {
+ // opacity: 0,
+ transform: "scale(1)",
+ },
+ "50%": {
+ // opacity: 1,
+ transform: "scale(2)",
+ },
+ "100%": {
+ // opacity: 0,
+ transform: "scale(1)",
+ },
},
- "50%": {
- // opacity: 1,
- transform: "scale(2)",
- },
- "100%": {
- // opacity: 0,
- transform: "scale(1)",
- },
- },
- animation: "load 2s infinite",
+ animation: "load 2s infinite",
});
-const LoadingHardPage = ({ children, loading }) => {
- return (
- <>
- theme.zIndex.drawer + 1 }}
- open={loading}
- >
-
-
-
-
- {children}
- >
- );
+const LoadingHardPage = ({children, loading}) => {
+ return (
+ <>
+ theme.zIndex.drawer + 1}}
+ open={loading}
+ >
+
+
+
+
+ {children}
+ >
+ );
};
export default LoadingHardPage;
diff --git a/src/core/components/Messages.jsx b/src/core/components/Messages.jsx
index e80c572..bc53b6e 100644
--- a/src/core/components/Messages.jsx
+++ b/src/core/components/Messages.jsx
@@ -2,21 +2,21 @@ import CenterLayout from "@/layouts/CenterLayout";
import FullPageLayout from "@/layouts/FullPageLayout";
import StyledImage from "./StyledImage";
-const Message = ({ text, actions }) => {
- return (
-
-
-
- {text}
- {actions}
-
-
- );
+const Message = ({text, actions}) => {
+ return (
+
+
+
+ {text}
+ {actions}
+
+
+ );
};
export default Message;
diff --git a/src/core/components/MuiDatePicker.jsx b/src/core/components/MuiDatePicker.jsx
index d906666..de6c5d5 100644
--- a/src/core/components/MuiDatePicker.jsx
+++ b/src/core/components/MuiDatePicker.jsx
@@ -1,35 +1,35 @@
-import { LocalizationProvider, DatePicker } from "@mui/x-date-pickers";
-import { AdapterDateFnsJalali } from "@mui/x-date-pickers/AdapterDateFnsJalali";
+import {DatePicker, LocalizationProvider} from "@mui/x-date-pickers";
+import {AdapterDateFnsJalali} from "@mui/x-date-pickers/AdapterDateFnsJalali";
import moment from "jalali-moment";
-import { useTranslations } from "next-intl";
+import {useTranslations} from "next-intl";
export default function MuiDatePicker({
- setFieldValue,
- selectType,
- error,
- helperText,
-}) {
- const t = useTranslations();
+ setFieldValue,
+ selectType,
+ error,
+ helperText,
+ }) {
+ const t = useTranslations();
- const handleDateChange = (date) => {
- const selectedDate = moment(date).locale("fa"); // should add .format() at the end to format the data
- setFieldValue(selectType, selectedDate);
- };
+ const handleDateChange = (date) => {
+ const selectedDate = moment(date).locale("fa"); // should add .format() at the end to format the data
+ setFieldValue(selectType, selectedDate);
+ };
- return (
-
-
-
- );
+ return (
+
+
+
+ );
}
diff --git a/src/core/components/PasswordField.jsx b/src/core/components/PasswordField.jsx
index 5747bdb..d109b73 100644
--- a/src/core/components/PasswordField.jsx
+++ b/src/core/components/PasswordField.jsx
@@ -1,33 +1,33 @@
-import { useState } from "react";
-import { IconButton, InputAdornment, TextField } from "@mui/material";
-import { Visibility, VisibilityOff } from "@mui/icons-material";
-import { Field } from "formik";
+import {useState} from "react";
+import {IconButton, InputAdornment, TextField} from "@mui/material";
+import {Visibility, VisibilityOff} from "@mui/icons-material";
+import {Field} from "formik";
const PasswordField = (props) => {
- const [showPassword, setShowPassword] = useState(false);
+ const [showPassword, setShowPassword] = useState(false);
- const handleClickShowPassword = () => {
- setShowPassword(!showPassword);
- };
+ const handleClickShowPassword = () => {
+ setShowPassword(!showPassword);
+ };
- return (
-
-
- {showPassword ? : }
-
-
- ),
- }}
- />
- );
+ return (
+
+
+ {showPassword ? : }
+
+
+ ),
+ }}
+ />
+ );
};
export default PasswordField;
diff --git a/src/core/components/StyledForm.jsx b/src/core/components/StyledForm.jsx
index 1f299bb..41eeabc 100644
--- a/src/core/components/StyledForm.jsx
+++ b/src/core/components/StyledForm.jsx
@@ -1,5 +1,5 @@
-import { styled } from "@mui/material";
-import { Form } from "formik";
+import {styled} from "@mui/material";
+import {Form} from "formik";
const StyledForm = styled(Form)``;
diff --git a/src/core/components/StyledImage.jsx b/src/core/components/StyledImage.jsx
index 64391ad..58dd65f 100644
--- a/src/core/components/StyledImage.jsx
+++ b/src/core/components/StyledImage.jsx
@@ -1,4 +1,4 @@
-import { styled } from "@mui/material";
+import {styled} from "@mui/material";
import Image from "next/image";
const StyledImage = styled(Image)``;
diff --git a/src/core/components/TitlePage.jsx b/src/core/components/TitlePage.jsx
index 7bdcfc2..77c72ee 100644
--- a/src/core/components/TitlePage.jsx
+++ b/src/core/components/TitlePage.jsx
@@ -1,15 +1,15 @@
-import { useTranslations } from "next-intl";
+import {useTranslations} from "next-intl";
import Head from "next/head";
-const TitlePage = ({ text }) => {
- const t = useTranslations();
- return (
-
-
- {text ? `${t("app_short_name")} | ${t(text)}` : t("app_short_name")}
-
-
- );
+const TitlePage = ({text}) => {
+ const t = useTranslations();
+ return (
+
+
+ {text ? `${t("app_short_name")} | ${t(text)}` : t("app_short_name")}
+
+
+ );
};
export default TitlePage;
diff --git a/src/core/components/UploadSystem.jsx b/src/core/components/UploadSystem.jsx
index fe04b73..b40fb46 100644
--- a/src/core/components/UploadSystem.jsx
+++ b/src/core/components/UploadSystem.jsx
@@ -1,176 +1,175 @@
-import { Box, Button, Paper, Typography } from "@mui/material";
-import { useTranslations } from "next-intl";
-import Image from "next/image";
+import {Box, Button, Paper, Typography} from "@mui/material";
+import {useTranslations} from "next-intl";
import AddIcon from "@mui/icons-material/Add";
import DeleteForeverIcon from "@mui/icons-material/DeleteForever";
-import { useRef } from "react";
+import {useRef} from "react";
const UploadSystem = ({
- selectedImage,
- setselectedImage,
- handleUploadChange,
- fieldname,
- setFieldValue,
- imageAlt,
- imageSize,
- fileType,
- fileName,
- setShowAddIcon,
- showAddIcon,
-}) => {
- const t = useTranslations();
- const fileInputRef = useRef(null);
+ selectedImage,
+ setselectedImage,
+ handleUploadChange,
+ fieldname,
+ setFieldValue,
+ imageAlt,
+ imageSize,
+ fileType,
+ fileName,
+ setShowAddIcon,
+ showAddIcon,
+ }) => {
+ const t = useTranslations();
+ const fileInputRef = useRef(null);
- const handleClick = () => {
- fileInputRef.current.click();
- };
+ const handleClick = () => {
+ fileInputRef.current.click();
+ };
- const handleDeleteImage = () => {
- setselectedImage(null);
- setFieldValue(fieldname, null);
- setShowAddIcon(true);
- if (fileInputRef.current) {
- fileInputRef.current.value = "";
- }
- };
+ const handleDeleteImage = () => {
+ setselectedImage(null);
+ setFieldValue(fieldname, null);
+ setShowAddIcon(true);
+ if (fileInputRef.current) {
+ fileInputRef.current.value = "";
+ }
+ };
- const isDocumentFormat = (fileType) => {
- const documentFormats = [
- "application/pdf",
- "application/msword",
- "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
- "application/vnd.ms-excel",
- "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
- ];
- return documentFormats.includes(fileType);
- };
+ const isDocumentFormat = (fileType) => {
+ const documentFormats = [
+ "application/pdf",
+ "application/msword",
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
+ "application/vnd.ms-excel",
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
+ ];
+ return documentFormats.includes(fileType);
+ };
- return (
-
- {showAddIcon ? (
- // Show the add icon and "Upload File" text when no image is selected
- <>
-
+ {showAddIcon ? (
+ // Show the add icon and "Upload File" text when no image is selected
+ <>
+
-
-
- {t("UploadSystem.upload_file")}
-
-
- >
- ) : (
- // Show the uploaded content along with the delete button when an image or document is selected
- <>
- {fileType && fileType.startsWith("image/") ? (
-
-
-
- ) : (
- fileType &&
- isDocumentFormat(fileType) && (
-
-
- {fileName}
-
-
- )
- )}
- }
- variant="contained"
- onClick={handleDeleteImage}
- >
- {t("UploadSystem.delete")}
-
- >
- )}
-
-
- );
+ height: imageSize[1],
+ }}
+ onClick={handleClick}
+ >
+
+
+ {t("UploadSystem.upload_file")}
+
+
+ >
+ ) : (
+ // Show the uploaded content along with the delete button when an image or document is selected
+ <>
+ {fileType && fileType.startsWith("image/") ? (
+
+
+
+ ) : (
+ fileType &&
+ isDocumentFormat(fileType) && (
+
+
+ {fileName}
+
+
+ )
+ )}
+
+ >
+ )}
+
+
+ );
};
export default UploadSystem;
diff --git a/src/core/components/isBotHandler.jsx b/src/core/components/isBotHandler.jsx
index 0fde3e3..5a4c4e1 100644
--- a/src/core/components/isBotHandler.jsx
+++ b/src/core/components/isBotHandler.jsx
@@ -1,8 +1,8 @@
-import { NoSsr } from "@mui/material";
+import {NoSsr} from "@mui/material";
-const NoSsrHandler = ({ isBot, children }) => {
- if (isBot) return children;
- return {children};
+const NoSsrHandler = ({isBot, children}) => {
+ if (isBot) return children;
+ return {children};
};
export default NoSsrHandler;
diff --git a/src/core/components/notifications/ErrorNotification.jsx b/src/core/components/notifications/ErrorNotification.jsx
index f0c887d..e6ac204 100644
--- a/src/core/components/notifications/ErrorNotification.jsx
+++ b/src/core/components/notifications/ErrorNotification.jsx
@@ -1,40 +1,40 @@
import DangerousIcon from "@mui/icons-material/Dangerous";
-import { Box, Typography } from "@mui/material";
-import { toast } from "react-toastify";
+import {Box, Typography} from "@mui/material";
+import {toast} from "react-toastify";
const ErrorNotification = (directionApp, status, t, message) => {
- toast(
- () => (
- <>
-
-
-
-
-
- {t("notifications.error")} ({t("notifications.code")}: {status})
-
-
- {message || t("notifications.error_static_text")}
-
-
-
-
- >
- ),
- {
- position: directionApp === "ltr" ? "top-left" : "top-right",
- autoClose: false,
- closeOnClick: false,
- draggable: false,
- }
- );
+ toast(
+ () => (
+ <>
+
+
+
+
+
+ {t("notifications.error")} ({t("notifications.code")}: {status})
+
+
+ {message || t("notifications.error_static_text")}
+
+
+
+
+ >
+ ),
+ {
+ position: directionApp === "ltr" ? "top-left" : "top-right",
+ autoClose: false,
+ closeOnClick: false,
+ draggable: false,
+ }
+ );
};
export default ErrorNotification;
diff --git a/src/core/components/notifications/SuccessNotification.jsx b/src/core/components/notifications/SuccessNotification.jsx
index ea484d6..085b154 100644
--- a/src/core/components/notifications/SuccessNotification.jsx
+++ b/src/core/components/notifications/SuccessNotification.jsx
@@ -1,43 +1,43 @@
import BeenhereIcon from "@mui/icons-material/Beenhere";
-import { Box, Typography } from "@mui/material";
-import { toast } from "react-toastify";
+import {Box, Typography} from "@mui/material";
+import {toast} from "react-toastify";
const SuccessNotification = (directionApp, status, t) => {
- toast(
- () => (
- <>
-
-
-
-
-
- {t("notifications.success")} ({t("notifications.code")}:{" "}
- {status})
-
-
- {t("notifications.success_static_text")}
-
-
-
-
- >
- ),
- {
- position: directionApp === "ltr" ? "top-left" : "top-right",
- autoClose: 3000,
- hideProgressBar: true,
- pauseOnHover: true,
- closeOnClick: false,
- draggable: true,
- }
- );
+ toast(
+ () => (
+ <>
+
+
+
+
+
+ {t("notifications.success")} ({t("notifications.code")}:{" "}
+ {status})
+
+
+ {t("notifications.success_static_text")}
+
+
+
+
+ >
+ ),
+ {
+ position: directionApp === "ltr" ? "top-left" : "top-right",
+ autoClose: 3000,
+ hideProgressBar: true,
+ pauseOnHover: true,
+ closeOnClick: false,
+ draggable: true,
+ }
+ );
};
export default SuccessNotification;
diff --git a/src/core/components/notifications/UploadFileNotification.jsx b/src/core/components/notifications/UploadFileNotification.jsx
index d06783b..51e2761 100644
--- a/src/core/components/notifications/UploadFileNotification.jsx
+++ b/src/core/components/notifications/UploadFileNotification.jsx
@@ -1,37 +1,37 @@
import DangerousIcon from "@mui/icons-material/Dangerous";
-import { Box, Typography } from "@mui/material";
-import { toast } from "react-toastify";
+import {Box, Typography} from "@mui/material";
+import {toast} from "react-toastify";
const UploadFileNotification = (directionApp, t) => {
- toast(
- ({ closeToast }) => (
- <>
-
-
-
-
-
- {t("UploadSystem.uploadfile_error")}
-
-
-
-
- >
- ),
- {
- position: directionApp === "ltr" ? "top-left" : "top-right",
- autoClose: false,
- closeOnClick: false,
- draggable: false,
- }
- );
+ toast(
+ ({closeToast}) => (
+ <>
+
+
+
+
+
+ {t("UploadSystem.uploadfile_error")}
+
+
+
+
+ >
+ ),
+ {
+ position: directionApp === "ltr" ? "top-left" : "top-right",
+ autoClose: false,
+ closeOnClick: false,
+ draggable: false,
+ }
+ );
};
export default UploadFileNotification;
diff --git a/src/core/components/notifications/WarningNotification.jsx b/src/core/components/notifications/WarningNotification.jsx
index 8a2bfa3..8e3280e 100644
--- a/src/core/components/notifications/WarningNotification.jsx
+++ b/src/core/components/notifications/WarningNotification.jsx
@@ -1,41 +1,41 @@
import ReportIcon from "@mui/icons-material/Report";
-import { Box, Typography } from "@mui/material";
-import { toast } from "react-toastify";
+import {Box, Typography} from "@mui/material";
+import {toast} from "react-toastify";
const WarningNotification = (directionApp, status, t) => {
- toast(
- () => (
- <>
-
-
-
-
-
- {t("notifications.warning")} ({t("notifications.code")}:{" "}
- {status})
-
-
- {t("notifications.warning_static_text")}
-
-
-
-
- >
- ),
- {
- position: directionApp === "ltr" ? "top-left" : "top-right",
- autoClose: false,
- closeOnClick: false,
- draggable: false,
- }
- );
+ toast(
+ () => (
+ <>
+
+
+
+
+
+ {t("notifications.warning")} ({t("notifications.code")}:{" "}
+ {status})
+
+
+ {t("notifications.warning_static_text")}
+
+
+
+
+ >
+ ),
+ {
+ position: directionApp === "ltr" ? "top-left" : "top-right",
+ autoClose: false,
+ closeOnClick: false,
+ draggable: false,
+ }
+ );
};
export default WarningNotification;
diff --git a/src/core/components/notifications/index.jsx b/src/core/components/notifications/index.jsx
index ef63918..41a1896 100644
--- a/src/core/components/notifications/index.jsx
+++ b/src/core/components/notifications/index.jsx
@@ -3,37 +3,37 @@ import WarningNotification from "./WarningNotification";
import SuccessNotification from "./SuccessNotification";
const Notifications = async (directionApp, response, t) => {
- const { status, data } = response;
+ const {status, data} = response;
- switch (status) {
- case 200:
- SuccessNotification(directionApp, status, t);
- break;
- case 400:
- ErrorNotification(directionApp, status, t);
- break;
- case 401:
- ErrorNotification(directionApp, status, t);
- break;
- case 403:
- ErrorNotification(directionApp, status, t);
- break;
- case 422:
- ErrorNotification(directionApp, status, t, data.message);
- break;
- case 500:
- WarningNotification(directionApp, status, t);
- break;
- case 503:
- WarningNotification(directionApp, status, t);
- break;
- case 504:
- WarningNotification(directionApp, status, t);
- break;
- default:
- // Handle other cases if needed
- break;
- }
+ switch (status) {
+ case 200:
+ SuccessNotification(directionApp, status, t);
+ break;
+ case 400:
+ ErrorNotification(directionApp, status, t);
+ break;
+ case 401:
+ ErrorNotification(directionApp, status, t);
+ break;
+ case 403:
+ ErrorNotification(directionApp, status, t);
+ break;
+ case 422:
+ ErrorNotification(directionApp, status, t, data.message);
+ break;
+ case 500:
+ WarningNotification(directionApp, status, t);
+ break;
+ case 503:
+ WarningNotification(directionApp, status, t);
+ break;
+ case 504:
+ WarningNotification(directionApp, status, t);
+ break;
+ default:
+ // Handle other cases if needed
+ break;
+ }
};
export default Notifications;
diff --git a/src/core/data/apiRoutes.js b/src/core/data/apiRoutes.js
index 2c84765..cf01622 100644
--- a/src/core/data/apiRoutes.js
+++ b/src/core/data/apiRoutes.js
@@ -14,55 +14,55 @@ export const GET_USER_ROUTE = BASE_URL + "/dashboard/profile/info";
//passenger office
export const GET_PASSENGER_OFFICE =
- BASE_URL + "/dashboard/passenger_office_chief/show";
+ BASE_URL + "/dashboard/passenger_office_chief/show";
export const CONFIRM_PASSENGER_OFFICE =
- BASE_URL + "/dashboard/passenger_office_chief/confirm";
+ BASE_URL + "/dashboard/passenger_office_chief/confirm";
export const REJECT_PASSENGER_OFFICE =
- BASE_URL + "/dashboard/passenger_office_chief/reject";
+ BASE_URL + "/dashboard/passenger_office_chief/reject";
//passenger office
//passenger boss
export const GET_PASSENGER_BOSS =
- BASE_URL + "/dashboard/province_working_group/show";
+ BASE_URL + "/dashboard/province_working_group/show";
export const CONFIRM_PASSENGER_BOSS =
- BASE_URL + "/dashboard/province_working_group/confirm";
+ BASE_URL + "/dashboard/province_working_group/confirm";
export const REJECT_PASSENGER_BOSS =
- BASE_URL + "/dashboard/province_working_group/reject";
+ BASE_URL + "/dashboard/province_working_group/reject";
//passenger boss
//transportation assistance
export const GET_TRANSPORTATION_ASSISTANCE =
- BASE_URL + "/dashboard/transportation_assistant/show";
+ BASE_URL + "/dashboard/transportation_assistant/show";
export const CONFIRM_TRANSPORTATION_ASSISTANCE =
- BASE_URL + "/dashboard/transportation_assistant/confirm";
+ BASE_URL + "/dashboard/transportation_assistant/confirm";
export const REJECT_TRANSPORTATION_ASSISTANCE =
- BASE_URL + "/dashboard/transportation_assistant/reject";
+ BASE_URL + "/dashboard/transportation_assistant/reject";
//transportation assistance
//machinary office
export const GET_MACHINARY_OFFICE =
- BASE_URL + "/dashboard/machinery_expert/show";
+ BASE_URL + "/dashboard/machinery_expert/show";
export const CONFIRM_MACHINARY_OFFICE =
- BASE_URL + "/dashboard/machinery_expert/confirm";
+ BASE_URL + "/dashboard/machinery_expert/confirm";
export const REJECT_MACHINARY_OFFICE =
- BASE_URL + "/dashboard/machinery_expert/reject";
+ BASE_URL + "/dashboard/machinery_expert/reject";
//passenger office
//province manager
export const GET_PROVINCE_MANAGER =
- BASE_URL + "/dashboard/province_manager/show";
+ BASE_URL + "/dashboard/province_manager/show";
export const CONFIRM_PROVINCE_MANAGER =
- BASE_URL + "/dashboard/province_manager/confirm";
+ BASE_URL + "/dashboard/province_manager/confirm";
export const REJECT_PROVINCE_MANAGER =
- BASE_URL + "/dashboard/province_manager/reject";
+ BASE_URL + "/dashboard/province_manager/reject";
//province manager
diff --git a/src/core/data/headerProfileItems.jsx b/src/core/data/headerProfileItems.jsx
index 63e661a..577fba3 100644
--- a/src/core/data/headerProfileItems.jsx
+++ b/src/core/data/headerProfileItems.jsx
@@ -2,18 +2,18 @@ import BorderColorIcon from "@mui/icons-material/BorderColor";
import PasswordIcon from "@mui/icons-material/Password";
const headerProfileItems = [
- {
- key: 0,
- name: "header.edit_profile",
- route: "/dashboard/edit-profile",
- icon: ,
- },
- {
- key: 1,
- name: "header.change_password",
- route: "/dashboard/change-password",
- icon: ,
- },
+ {
+ key: 0,
+ name: "header.edit_profile",
+ route: "/dashboard/edit-profile",
+ icon: ,
+ },
+ {
+ key: 1,
+ name: "header.change_password",
+ route: "/dashboard/change-password",
+ icon: ,
+ },
];
export default headerProfileItems;
diff --git a/src/core/data/sidebarMenu.jsx b/src/core/data/sidebarMenu.jsx
index 667c688..352b424 100644
--- a/src/core/data/sidebarMenu.jsx
+++ b/src/core/data/sidebarMenu.jsx
@@ -6,58 +6,58 @@ import AssignmentIndIcon from "@mui/icons-material/AssignmentInd";
import DesktopWindowsIcon from "@mui/icons-material/DesktopWindows";
const sidebarMenu = [
- [
- {
- key: "sidebar.dashboard",
- type: "page",
- route: "/dashboard",
- icon: ,
- selected: false,
- role: "all",
- },
- {
- key: "sidebar.passenger-office-chief",
- secondary: "secondary.passenger-office",
- type: "page",
- route: "/dashboard/passenger-office-chief",
- icon: ,
- selected: false,
- role: "passenger_office_chief",
- },
- {
- key: "sidebar.machinary-expert",
- type: "page",
- route: "/dashboard/machinary-expert",
- icon: ,
- selected: false,
- role: "machinery_expert",
- },
- {
- key: "sidebar.passenger-boss",
- secondary: "secondary.passenger-boss",
- type: "page",
- route: "/dashboard/passenger-boss",
- icon: ,
- selected: false,
- role: "passenger_office_chief",
- },
- {
- key: "sidebar.transportation-assistant",
- type: "page",
- route: "/dashboard/transportation-assistant",
- icon: ,
- selected: false,
- role: "transportation_assistant",
- },
- {
- key: "sidebar.province-manager",
- type: "page",
- route: "/dashboard/province-manager",
- icon: ,
- selected: false,
- role: "province_manager",
- },
- ],
+ [
+ {
+ key: "sidebar.dashboard",
+ type: "page",
+ route: "/dashboard",
+ icon: ,
+ selected: false,
+ role: "all",
+ },
+ {
+ key: "sidebar.passenger-office-chief",
+ secondary: "secondary.passenger-office",
+ type: "page",
+ route: "/dashboard/passenger-office-chief",
+ icon: ,
+ selected: false,
+ role: "passenger_office_chief",
+ },
+ {
+ key: "sidebar.machinary-expert",
+ type: "page",
+ route: "/dashboard/machinary-expert",
+ icon: ,
+ selected: false,
+ role: "machinery_expert",
+ },
+ {
+ key: "sidebar.passenger-boss",
+ secondary: "secondary.passenger-boss",
+ type: "page",
+ route: "/dashboard/passenger-boss",
+ icon: ,
+ selected: false,
+ role: "passenger_office_chief",
+ },
+ {
+ key: "sidebar.transportation-assistant",
+ type: "page",
+ route: "/dashboard/transportation-assistant",
+ icon: ,
+ selected: false,
+ role: "transportation_assistant",
+ },
+ {
+ key: "sidebar.province-manager",
+ type: "page",
+ route: "/dashboard/province-manager",
+ icon: ,
+ selected: false,
+ role: "province_manager",
+ },
+ ],
];
export default sidebarMenu;
diff --git a/src/core/utils/createEmotionCache.jsx b/src/core/utils/createEmotionCache.jsx
index 06add02..413fafe 100644
--- a/src/core/utils/createEmotionCache.jsx
+++ b/src/core/utils/createEmotionCache.jsx
@@ -1,38 +1,38 @@
import createCache from "@emotion/cache";
-import { prefixer } from "stylis";
+import {prefixer} from "stylis";
import stylisRTLPlugin from "stylis-plugin-rtl";
const isBrowser = typeof document !== "undefined";
export const createEmotionCacheLtr = () => {
- let insertionPoint;
+ let insertionPoint;
- if (isBrowser) {
- const emotionInsertionPoint = document.querySelector(
- 'meta[name="emotion-insertion-point"]'
- );
- insertionPoint = emotionInsertionPoint ?? undefined;
- }
+ if (isBrowser) {
+ const emotionInsertionPoint = document.querySelector(
+ 'meta[name="emotion-insertion-point"]'
+ );
+ insertionPoint = emotionInsertionPoint ?? undefined;
+ }
- return createCache({
- key: "mui-style",
- insertionPoint,
- });
+ return createCache({
+ key: "mui-style",
+ insertionPoint,
+ });
};
export const createEmotionCacheRtl = () => {
- let insertionPoint;
+ let insertionPoint;
- if (isBrowser) {
- const emotionInsertionPoint = document.querySelector(
- 'meta[name="emotion-insertion-point"]'
- );
- insertionPoint = emotionInsertionPoint ?? undefined;
- }
+ if (isBrowser) {
+ const emotionInsertionPoint = document.querySelector(
+ 'meta[name="emotion-insertion-point"]'
+ );
+ insertionPoint = emotionInsertionPoint ?? undefined;
+ }
- return createCache({
- key: "muirtl",
- stylisPlugins: [prefixer, stylisRTLPlugin],
- insertionPoint,
- });
+ return createCache({
+ key: "muirtl",
+ stylisPlugins: [prefixer, stylisRTLPlugin],
+ insertionPoint,
+ });
};
diff --git a/src/core/utils/theme-rtl.jsx b/src/core/utils/theme-rtl.jsx
index 2d0fdab..fb0bbaa 100644
--- a/src/core/utils/theme-rtl.jsx
+++ b/src/core/utils/theme-rtl.jsx
@@ -1,12 +1,12 @@
-import { createTheme } from "@mui/material/styles";
+import {createTheme} from "@mui/material/styles";
import theme from "./theme";
const themeRtl = createTheme({
- direction: "rtl",
- typography: {
- fontFamily: `IRANSansFaNum, sans-serif`,
- },
- ...theme,
+ direction: "rtl",
+ typography: {
+ fontFamily: `IRANSansFaNum, sans-serif`,
+ },
+ ...theme,
});
export default themeRtl;
diff --git a/src/core/utils/theme.jsx b/src/core/utils/theme.jsx
index e921777..1679552 100644
--- a/src/core/utils/theme.jsx
+++ b/src/core/utils/theme.jsx
@@ -1,30 +1,30 @@
-import { faIR } from "@mui/x-date-pickers/locales";
+import {faIR} from "@mui/x-date-pickers/locales";
const theme = {
- palette: {
- primary: {
- main: "#084070",
- contrastText: "#fff",
- light: "#2c6291",
- dark: "#11293e",
- },
- secondary: {
- main: "#FF4E00",
- contrastText: "#fff",
- light: "#ed743e",
- dark: "#ad3a07",
- },
- },
- faIR,
- components: {
- MuiBackdrop: {
- styleOverrides: {
- root: {
- backgroundColor: "#02020226", // Replace with your desired backdrop color and opacity
+ palette: {
+ primary: {
+ main: "#084070",
+ contrastText: "#fff",
+ light: "#2c6291",
+ dark: "#11293e",
+ },
+ secondary: {
+ main: "#FF4E00",
+ contrastText: "#fff",
+ light: "#ed743e",
+ dark: "#ad3a07",
+ },
+ },
+ faIR,
+ components: {
+ MuiBackdrop: {
+ styleOverrides: {
+ root: {
+ backgroundColor: "#02020226", // Replace with your desired backdrop color and opacity
+ },
+ },
},
- },
},
- },
};
export default theme;
diff --git a/src/layouts/AppLayout.jsx b/src/layouts/AppLayout.jsx
index 4845f6d..d2c5da5 100644
--- a/src/layouts/AppLayout.jsx
+++ b/src/layouts/AppLayout.jsx
@@ -4,96 +4,96 @@ import useLoading from "@/lib/app/hooks/useLoading";
import useUser from "@/lib/app/hooks/useUser";
import Head from "next/head";
import NextNProgress from "nextjs-progressbar";
-import { useEffect } from "react";
+import {useEffect} from "react";
-function AppLayout({ children, isBot }) {
- const { languageIsReady } = useLanguage();
- const { setLoadingPage } = useLoading();
- const { userChangedLanguage, token, isAuth } = useUser();
- useEffect(() => {
- if (languageIsReady) {
- if (token) {
- if (isAuth) {
- if (userChangedLanguage) {
- setLoadingPage(true);
- return;
- }
- setLoadingPage(false);
- return;
- }
- setLoadingPage(true);
- return;
- }
- setLoadingPage(false);
- return;
- }
- setLoadingPage(true);
- }, [languageIsReady, token, isAuth, userChangedLanguage]);
+function AppLayout({children, isBot}) {
+ const {languageIsReady} = useLanguage();
+ const {setLoadingPage} = useLoading();
+ const {userChangedLanguage, token, isAuth} = useUser();
+ useEffect(() => {
+ if (languageIsReady) {
+ if (token) {
+ if (isAuth) {
+ if (userChangedLanguage) {
+ setLoadingPage(true);
+ return;
+ }
+ setLoadingPage(false);
+ return;
+ }
+ setLoadingPage(true);
+ return;
+ }
+ setLoadingPage(false);
+ return;
+ }
+ setLoadingPage(true);
+ }, [languageIsReady, token, isAuth, userChangedLanguage]);
- if (!isBot) {
- if (userChangedLanguage) return;
- if (!languageIsReady) return;
- }
+ if (!isBot) {
+ if (userChangedLanguage) return;
+ if (!languageIsReady) return;
+ }
- return (
- <>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {children}
- >
- );
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {children}
+ >
+ );
}
export default AppLayout;
diff --git a/src/layouts/CenterLayout.jsx b/src/layouts/CenterLayout.jsx
index 4c8767f..1e1b8bf 100644
--- a/src/layouts/CenterLayout.jsx
+++ b/src/layouts/CenterLayout.jsx
@@ -1,18 +1,18 @@
-import { Fade, Stack } from "@mui/material";
+import {Fade, Stack} from "@mui/material";
const CenterLayout = (props) => {
- return (
-
-
- {props.children}
-
-
- );
+ return (
+
+
+ {props.children}
+
+
+ );
};
export default CenterLayout;
diff --git a/src/layouts/FullPageLayout.jsx b/src/layouts/FullPageLayout.jsx
index cbf2102..d6ed61e 100644
--- a/src/layouts/FullPageLayout.jsx
+++ b/src/layouts/FullPageLayout.jsx
@@ -1,21 +1,21 @@
-import { Stack } from "@mui/material";
+import {Stack} from "@mui/material";
const FullPageLayout = (props) => {
- return (
-
- {props.children}
-
- );
+ return (
+
+ {props.children}
+
+ );
};
export default FullPageLayout;
diff --git a/src/layouts/MuiLayout.jsx b/src/layouts/MuiLayout.jsx
index ba891d0..2614ac2 100644
--- a/src/layouts/MuiLayout.jsx
+++ b/src/layouts/MuiLayout.jsx
@@ -1,76 +1,74 @@
import NoSsrHandler from "@/core/components/isBotHandler";
-import {
- createEmotionCacheRtl
-} from "@/core/utils/createEmotionCache";
+import {createEmotionCacheRtl} from "@/core/utils/createEmotionCache";
import themeRtl from "@/core/utils/theme-rtl";
-import { CacheProvider } from "@emotion/react";
-import { GlobalStyles } from "@mui/material";
+import {CacheProvider} from "@emotion/react";
+import {GlobalStyles} from "@mui/material";
import CssBaseline from "@mui/material/CssBaseline";
-import { ThemeProvider } from "@mui/material/styles";
+import {ThemeProvider} from "@mui/material/styles";
import Head from "next/head";
const clientSideEmotionCacheRtl = createEmotionCacheRtl();
-const MuiLayout = ({ children, isBot }) => {
+const MuiLayout = ({children, isBot}) => {
- const emotionCache = clientSideEmotionCacheRtl;
+ const emotionCache = clientSideEmotionCacheRtl;
- const theme = themeRtl;
- return (
-
-
-
-
-
-
-
+
+
+
+
+
+
+ body: {
+ width: "100vw",
+ height: "100vh",
+ },
+ "#__next": {
+ width: "100%",
+ height: "100%",
+ },
+ }}
+ />
-
- {children}
-
-
-
- );
+
+ {children}
+
+
+
+ );
};
export default MuiLayout;
diff --git a/src/layouts/ScrollableLayout.jsx b/src/layouts/ScrollableLayout.jsx
index 5ab58ca..583edd7 100644
--- a/src/layouts/ScrollableLayout.jsx
+++ b/src/layouts/ScrollableLayout.jsx
@@ -1,25 +1,25 @@
-import { Box, Fade } from "@mui/material";
+import {Box, Fade} from "@mui/material";
const ScrollableLayout = (props) => {
- const overflowY = props?.y || "hidden";
- const overflowX = props?.x || "hidden";
+ const overflowY = props?.y || "hidden";
+ const overflowX = props?.x || "hidden";
- return (
-
-
- {props.children}
-
-
- );
+ return (
+
+
+ {props.children}
+
+
+ );
};
export default ScrollableLayout;
diff --git a/src/layouts/dashboardLayouts/breadcrumbs/BreadcrumbItem.jsx b/src/layouts/dashboardLayouts/breadcrumbs/BreadcrumbItem.jsx
index ccff4c9..c233be3 100644
--- a/src/layouts/dashboardLayouts/breadcrumbs/BreadcrumbItem.jsx
+++ b/src/layouts/dashboardLayouts/breadcrumbs/BreadcrumbItem.jsx
@@ -1,19 +1,19 @@
import LinkRouting from "@/core/components/LinkRouting";
-import { Typography } from "@mui/material";
-import { useTranslations } from "next-intl";
+import {Typography} from "@mui/material";
+import {useTranslations} from "next-intl";
export default function BreadcrumbItem(props) {
- const t = useTranslations();
- const isLast = props.index === props.RouterArray.length - 1;
- const url = `/${props.RouterArray.slice(0, props.index + 1).join("/")}`;
+ const t = useTranslations();
+ const isLast = props.index === props.RouterArray.length - 1;
+ const url = `/${props.RouterArray.slice(0, props.index + 1).join("/")}`;
- return isLast ? (
-
- {t("sidebar." + props.label)}
-
- ) : (
-
- {t("sidebar." + props.label)}
-
- );
+ return isLast ? (
+
+ {t("sidebar." + props.label)}
+
+ ) : (
+
+ {t("sidebar." + props.label)}
+
+ );
}
diff --git a/src/layouts/dashboardLayouts/breadcrumbs/index.jsx b/src/layouts/dashboardLayouts/breadcrumbs/index.jsx
index 3123a12..9ab234e 100644
--- a/src/layouts/dashboardLayouts/breadcrumbs/index.jsx
+++ b/src/layouts/dashboardLayouts/breadcrumbs/index.jsx
@@ -1,49 +1,49 @@
-import { useRouter } from "next/router";
-import { Box, Breadcrumbs } from "@mui/material";
-import { useTheme } from "@mui/material/styles";
-import { NavigateBefore, NavigateNext } from "@mui/icons-material";
+import {useRouter} from "next/router";
+import {Box, Breadcrumbs} from "@mui/material";
+import {useTheme} from "@mui/material/styles";
+import {NavigateBefore, NavigateNext} from "@mui/icons-material";
import BreadcrumbItem from "./BreadcrumbItem";
const BreadCrumbs = (props) => {
- const { isVisible } = props;
- const theme = useTheme();
- const router = useRouter();
+ const {isVisible} = props;
+ const theme = useTheme();
+ const router = useRouter();
- if (!isVisible) {
- return null;
- }
+ if (!isVisible) {
+ return null;
+ }
- const { pathname } = router;
- const RouterArray = pathname.split("/").filter((segment) => segment !== "");
+ const {pathname} = router;
+ const RouterArray = pathname.split("/").filter((segment) => segment !== "");
- if (RouterArray.length === 1) {
- return null;
- }
+ if (RouterArray.length === 1) {
+ return null;
+ }
- return (
-
-
- ) : (
-
- )
- }
- aria-label="breadcrumb"
- >
- {RouterArray.map((segment, index) => (
-
- ))}
-
-
- );
+ return (
+
+
+ ) : (
+
+ )
+ }
+ aria-label="breadcrumb"
+ >
+ {RouterArray.map((segment, index) => (
+
+ ))}
+
+
+ );
};
export default BreadCrumbs;
diff --git a/src/layouts/dashboardLayouts/header/ProfileData.jsx b/src/layouts/dashboardLayouts/header/ProfileData.jsx
index e07dba6..548378b 100644
--- a/src/layouts/dashboardLayouts/header/ProfileData.jsx
+++ b/src/layouts/dashboardLayouts/header/ProfileData.jsx
@@ -1,18 +1,18 @@
-import { Avatar, Stack, Typography } from "@mui/material";
+import {Avatar, Stack, Typography} from "@mui/material";
import useUser from "@/lib/app/hooks/useUser";
export default function ProfileData() {
- const { user } = useUser();
- return (
-
-
-
- {user.username}
-
-
- );
+ const {user} = useUser();
+ return (
+
+
+
+ {user.username}
+
+
+ );
}
diff --git a/src/layouts/dashboardLayouts/header/ProfileMenu.jsx b/src/layouts/dashboardLayouts/header/ProfileMenu.jsx
index 1c53ef5..415d501 100644
--- a/src/layouts/dashboardLayouts/header/ProfileMenu.jsx
+++ b/src/layouts/dashboardLayouts/header/ProfileMenu.jsx
@@ -1,61 +1,62 @@
-import { Avatar, Menu, IconButton, Tooltip } from "@mui/material";
-import { useState } from "react";
+import {Avatar, IconButton, Menu, Tooltip} from "@mui/material";
+import {useState} from "react";
import ProfileData from "./ProfileData";
import ProfileOptions from "./ProfileOptions";
-import { useTranslations } from "next-intl";
+import {useTranslations} from "next-intl";
import useUser from "@/lib/app/hooks/useUser";
function ProfileMenu() {
- const t = useTranslations();
- const [anchorElUser, setAnchorElUser] = useState(null);
- const { user } = useUser();
+ const t = useTranslations();
+ const [anchorElUser, setAnchorElUser] = useState(null);
+ const {user} = useUser();
- const handleOpenUserMenu = (event) => {
- setAnchorElUser(event.currentTarget);
- };
- const handleCloseUserMenu = () => {
- setAnchorElUser(null);
- };
+ const handleOpenUserMenu = (event) => {
+ setAnchorElUser(event.currentTarget);
+ };
+ const handleCloseUserMenu = () => {
+ setAnchorElUser(null);
+ };
- return (
- <>
-
-
-
-
-
-
- >
- );
+ return (
+ <>
+
+
+
+
+
+
+ >
+ );
}
+
export default ProfileMenu;
diff --git a/src/layouts/dashboardLayouts/header/ProfileOptionLogOut.jsx b/src/layouts/dashboardLayouts/header/ProfileOptionLogOut.jsx
index f56db6c..2a6cf85 100644
--- a/src/layouts/dashboardLayouts/header/ProfileOptionLogOut.jsx
+++ b/src/layouts/dashboardLayouts/header/ProfileOptionLogOut.jsx
@@ -1,49 +1,49 @@
-import { Box, Button, MenuItem, Typography } from "@mui/material";
+import {Box, Button, MenuItem, Typography} from "@mui/material";
import MeetingRoomIcon from "@mui/icons-material/MeetingRoom";
import useUser from "@/lib/app/hooks/useUser";
-import { useTranslations } from "next-intl";
+import {useTranslations} from "next-intl";
-export default function ProfileOptionLogOut({ handleCloseUserMenu }) {
- const t = useTranslations();
- const { clearToken } = useUser();
- const handleClickLogOut = () => {
- handleCloseUserMenu();
- clearToken();
- };
- return (
- <>
-
- >
- );
+export default function ProfileOptionLogOut({handleCloseUserMenu}) {
+ const t = useTranslations();
+ const {clearToken} = useUser();
+ const handleClickLogOut = () => {
+ handleCloseUserMenu();
+ clearToken();
+ };
+ return (
+ <>
+
+ >
+ );
}
diff --git a/src/layouts/dashboardLayouts/header/ProfileOptions.jsx b/src/layouts/dashboardLayouts/header/ProfileOptions.jsx
index bf63212..6e7bdba 100644
--- a/src/layouts/dashboardLayouts/header/ProfileOptions.jsx
+++ b/src/layouts/dashboardLayouts/header/ProfileOptions.jsx
@@ -1,49 +1,49 @@
-import { Box, MenuItem, Typography } from "@mui/material";
-import { NextLinkComposed } from "@/core/components/LinkRouting";
-import { useTranslations } from "next-intl";
+import {Box, MenuItem, Typography} from "@mui/material";
+import {NextLinkComposed} from "@/core/components/LinkRouting";
+import {useTranslations} from "next-intl";
import headerProfileItems from "@/core/data/headerProfileItems";
import ProfileOptionLogOut from "./ProfileOptionLogOut";
-export default function ProfileOptions({ handleCloseUserMenu }) {
- const t = useTranslations();
+export default function ProfileOptions({handleCloseUserMenu}) {
+ const t = useTranslations();
- return (
- <>
- {headerProfileItems.map((profile_item) => (
-
- ))}
-
- >
- );
+ return (
+ <>
+ {headerProfileItems.map((profile_item) => (
+
+ ))}
+
+ >
+ );
}
diff --git a/src/layouts/dashboardLayouts/header/index.jsx b/src/layouts/dashboardLayouts/header/index.jsx
index cd1e4a0..8760960 100644
--- a/src/layouts/dashboardLayouts/header/index.jsx
+++ b/src/layouts/dashboardLayouts/header/index.jsx
@@ -1,80 +1,72 @@
import MenuIcon from "@mui/icons-material/Menu";
-import {
- AppBar,
- Box,
- Container,
- CssBaseline,
- IconButton,
- Stack,
- Toolbar,
- useTheme
-} from "@mui/material";
+import {AppBar, Box, Container, CssBaseline, IconButton, Stack, Toolbar, useTheme} from "@mui/material";
import ProfileMenu from "./ProfileMenu";
-function Header({ drawerWidth, handleDrawerToggle }) {
- const theme = useTheme();
+function Header({drawerWidth, handleDrawerToggle}) {
+ const theme = useTheme();
- return (
- <>
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
- >
- );
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
}
+
export default Header;
diff --git a/src/layouts/dashboardLayouts/index.jsx b/src/layouts/dashboardLayouts/index.jsx
index f1478bf..ed0ee31 100644
--- a/src/layouts/dashboardLayouts/index.jsx
+++ b/src/layouts/dashboardLayouts/index.jsx
@@ -1,50 +1,50 @@
-import { useState } from "react";
+import {useState} from "react";
import FullPageLayout from "../FullPageLayout";
import Header from "./header";
import Sidebar from "./sidebar";
-import { Toolbar } from "@mui/material";
+import {Toolbar} from "@mui/material";
import BreadCrumbs from "./breadcrumbs";
-import { ToastContainer } from "react-toastify";
+import {ToastContainer} from "react-toastify";
import "react-toastify/dist/ReactToastify.css";
import useDirection from "@/lib/app/hooks/useDirection";
const drawerWidth = 240;
const DashboardLayouts = (props) => {
- const { directionApp } = useDirection();
- const { window } = props;
- const [mobileOpen, setMobileOpen] = useState(false);
- const container =
- window !== undefined ? () => window().document.body : undefined;
+ const {directionApp} = useDirection();
+ const {window} = props;
+ const [mobileOpen, setMobileOpen] = useState(false);
+ const container =
+ window !== undefined ? () => window().document.body : undefined;
- const handleDrawerToggle = () => {
- setMobileOpen(!mobileOpen);
- };
- return (
-
-
-
-
-
-
-
- {props.children}
+ const handleDrawerToggle = () => {
+ setMobileOpen(!mobileOpen);
+ };
+ return (
+
+
+
+
+
+
+
+ {props.children}
+
+
+ {directionApp === "rtl" ? : }
-
- {directionApp === "rtl" ? : }
-
- );
+ );
};
export default DashboardLayouts;
diff --git a/src/layouts/dashboardLayouts/sidebar/SidebarDrawer.jsx b/src/layouts/dashboardLayouts/sidebar/SidebarDrawer.jsx
index 6eb5e60..fecc252 100644
--- a/src/layouts/dashboardLayouts/sidebar/SidebarDrawer.jsx
+++ b/src/layouts/dashboardLayouts/sidebar/SidebarDrawer.jsx
@@ -1,29 +1,28 @@
-import { Divider, Stack, Toolbar, Typography } from "@mui/material";
-import { useTranslations } from "next-intl";
+import {Divider, Stack, Toolbar, Typography} from "@mui/material";
+import {useTranslations} from "next-intl";
import SidebarList from "./SidebarList";
-import StyledImage from "@/core/components/StyledImage";
-const SidebarDrawer = ({ handleDrawerToggle }) => {
- const t = useTranslations();
- return (
- <>
-
-
-
- {t("app_short_name")}
-
-
- {
- t("expert") /* make if on thease t("user_welfare_services")
+const SidebarDrawer = ({handleDrawerToggle}) => {
+ const t = useTranslations();
+ return (
+ <>
+
+
+
+ {t("app_short_name")}
+
+
+ {
+ t("expert") /* make if on thease t("user_welfare_services")
t("user_navy") */
- }
-
-
-
-
-
- >
- );
+ }
+
+
+
+
+
+ >
+ );
};
export default SidebarDrawer;
diff --git a/src/layouts/dashboardLayouts/sidebar/SidebarList.jsx b/src/layouts/dashboardLayouts/sidebar/SidebarList.jsx
index c47cf2b..dffd844 100644
--- a/src/layouts/dashboardLayouts/sidebar/SidebarList.jsx
+++ b/src/layouts/dashboardLayouts/sidebar/SidebarList.jsx
@@ -1,57 +1,57 @@
-import { Divider, List } from "@mui/material";
-import { useEffect, useReducer } from "react";
+import {Divider, List} from "@mui/material";
+import {useEffect, useReducer} from "react";
import SidebarListItem from "./SidebarListItem";
import sidebarMenu from "@/core/data/sidebarMenu";
-import { useRouter } from "next/router";
+import {useRouter} from "next/router";
import useUser from "@/lib/app/hooks/useUser";
function reducer(state, action) {
- switch (action.type) {
- case "COLLAPSE_MENU":
- return state.map((itemsArr) =>
- itemsArr.map((item) =>
- action.key == item.key
- ? { ...item, showSubItem: !item.showSubItem }
- : item
- )
- );
- case "SELECTED":
- return state.map((itemsArr) =>
- itemsArr.map((item) =>
- action.route == item.route
- ? { ...item, selected: true }
- : { ...item, selected: false }
- )
- );
- default:
- throw new Error();
- }
+ switch (action.type) {
+ case "COLLAPSE_MENU":
+ return state.map((itemsArr) =>
+ itemsArr.map((item) =>
+ action.key == item.key
+ ? {...item, showSubItem: !item.showSubItem}
+ : item
+ )
+ );
+ case "SELECTED":
+ return state.map((itemsArr) =>
+ itemsArr.map((item) =>
+ action.route == item.route
+ ? {...item, selected: true}
+ : {...item, selected: false}
+ )
+ );
+ default:
+ throw new Error();
+ }
}
-export default function SidebarList({ handleDrawerToggle }) {
- const [itemMenu, dispatch] = useReducer(reducer, sidebarMenu);
- const { user } = useUser();
- const router = useRouter();
+export default function SidebarList({handleDrawerToggle}) {
+ const [itemMenu, dispatch] = useReducer(reducer, sidebarMenu);
+ const {user} = useUser();
+ const router = useRouter();
- useEffect(() => {
- dispatch({ type: "SELECTED", route: router.pathname });
- }, [router.pathname]);
+ useEffect(() => {
+ dispatch({type: "SELECTED", route: router.pathname});
+ }, [router.pathname]);
- const filteredItemMenu = itemMenu[0].filter(
- (item) => user.role.includes(item.role) || item.role === "all"
- );
+ const filteredItemMenu = itemMenu[0].filter(
+ (item) => user.role.includes(item.role) || item.role === "all"
+ );
- return (
-
- {filteredItemMenu.map((item, index) => (
-
- ))}
- {filteredItemMenu.length > 0 && }
-
- );
+ return (
+
+ {filteredItemMenu.map((item, index) => (
+
+ ))}
+ {filteredItemMenu.length > 0 && }
+
+ );
}
diff --git a/src/layouts/dashboardLayouts/sidebar/SidebarListItem.jsx b/src/layouts/dashboardLayouts/sidebar/SidebarListItem.jsx
index 949b171..f14ae1d 100644
--- a/src/layouts/dashboardLayouts/sidebar/SidebarListItem.jsx
+++ b/src/layouts/dashboardLayouts/sidebar/SidebarListItem.jsx
@@ -1,84 +1,77 @@
-import { NextLinkComposed } from "@/core/components/LinkRouting";
+import {NextLinkComposed} from "@/core/components/LinkRouting";
import ExpandLess from "@mui/icons-material/ExpandLess";
import ExpandMore from "@mui/icons-material/ExpandMore";
-import {
- Badge,
- ListItem,
- ListItemButton,
- ListItemIcon,
- ListItemText,
- Typography,
-} from "@mui/material";
-import { useTranslations } from "next-intl";
-import { Fragment } from "react";
+import {Badge, ListItem, ListItemButton, ListItemIcon, ListItemText, Typography,} from "@mui/material";
+import {useTranslations} from "next-intl";
+import {Fragment} from "react";
import SidebarListSubItem from "./SidebarListSubItem";
-const SidebarListItem = ({ item, dispatch, handleDrawerToggle }) => {
- const t = useTranslations();
+const SidebarListItem = ({item, dispatch, handleDrawerToggle}) => {
+ const t = useTranslations();
- return (
-
-
- {
- if (item.type == "menu") {
- dispatch({ type: "COLLAPSE_MENU", key: item.key });
- }
- handleDrawerToggle();
- }}
- sx={{
- minHeight: 48,
- }}
- >
-
- {item.icon}
-
-
- {t(item.secondary)}
-
- ) : null
- }
- />
+ return (
+
+
+ {
+ if (item.type == "menu") {
+ dispatch({type: "COLLAPSE_MENU", key: item.key});
+ }
+ handleDrawerToggle();
+ }}
+ sx={{
+ minHeight: 48,
+ }}
+ >
+
+ {item.icon}
+
+
+ {t(item.secondary)}
+
+ ) : null
+ }
+ />
- {item.type == "menu" &&
- (item.showSubItem ? : )}
-
-
-
- {item.subItem && (
-
- )}
-
- );
+ {item.type == "menu" &&
+ (item.showSubItem ? : )}
+
+
+
+ {item.subItem && (
+
+ )}
+
+ );
};
export default SidebarListItem;
diff --git a/src/layouts/dashboardLayouts/sidebar/SidebarListSubItem.jsx b/src/layouts/dashboardLayouts/sidebar/SidebarListSubItem.jsx
index f960efb..3407081 100644
--- a/src/layouts/dashboardLayouts/sidebar/SidebarListSubItem.jsx
+++ b/src/layouts/dashboardLayouts/sidebar/SidebarListSubItem.jsx
@@ -1,54 +1,48 @@
-import { NextLinkComposed } from "@/core/components/LinkRouting";
+import {NextLinkComposed} from "@/core/components/LinkRouting";
import InboxIcon from "@mui/icons-material/MoveToInbox";
-import {
- Collapse,
- List,
- ListItemButton,
- ListItemIcon,
- ListItemText,
-} from "@mui/material";
-import { useTranslations } from "next-intl";
-import { Fragment } from "react";
+import {Collapse, List, ListItemButton, ListItemIcon, ListItemText,} from "@mui/material";
+import {useTranslations} from "next-intl";
+import {Fragment} from "react";
-const SidebarListSubItem = ({ item, handleDrawerToggle }) => {
- const t = useTranslations();
+const SidebarListSubItem = ({item, handleDrawerToggle}) => {
+ const t = useTranslations();
- return (
-
-
- {item.subItem.map((subitem, index) => (
-
- {
- if (item.type == "menu") {
- dispatch({ type: "COLLAPSE_MENU", key: item.key });
- }
- handleDrawerToggle();
- }}
- >
-
-
-
-
-
-
- ))}
-
-
- );
+ return (
+
+
+ {item.subItem.map((subitem, index) => (
+
+ {
+ if (item.type == "menu") {
+ dispatch({type: "COLLAPSE_MENU", key: item.key});
+ }
+ handleDrawerToggle();
+ }}
+ >
+
+
+
+
+
+
+ ))}
+
+
+ );
};
export default SidebarListSubItem;
diff --git a/src/layouts/dashboardLayouts/sidebar/index.jsx b/src/layouts/dashboardLayouts/sidebar/index.jsx
index dcf7fe2..2498dfd 100644
--- a/src/layouts/dashboardLayouts/sidebar/index.jsx
+++ b/src/layouts/dashboardLayouts/sidebar/index.jsx
@@ -1,46 +1,46 @@
-import { Box, Drawer } from "@mui/material";
+import {Box, Drawer} from "@mui/material";
import SidebarDrawer from "./SidebarDrawer";
const Sidebar = (props) => {
- return (
-
-
-
-
-
-
-
-
- );
+ return (
+
+
+
+
+
+
+
+
+ );
};
export default Sidebar;
diff --git a/src/lib/app/contexts/DatatableContext.jsx b/src/lib/app/contexts/DatatableContext.jsx
index 94bc016..27fa6ac 100644
--- a/src/lib/app/contexts/DatatableContext.jsx
+++ b/src/lib/app/contexts/DatatableContext.jsx
@@ -1,14 +1,14 @@
-import { createContext } from "react";
+import {createContext} from "react";
import useDataTable from "../hooks/useDatatable";
export const DataTableContext = createContext();
export const DataTableProvider = (props) => {
- const contextValue = useDataTable();
+ const contextValue = useDataTable();
- return (
-
- {props.children}
-
- );
+ return (
+
+ {props.children}
+
+ );
};
diff --git a/src/lib/app/contexts/ReloadDatatableContext.jsx b/src/lib/app/contexts/ReloadDatatableContext.jsx
index 05c788b..de359c5 100644
--- a/src/lib/app/contexts/ReloadDatatableContext.jsx
+++ b/src/lib/app/contexts/ReloadDatatableContext.jsx
@@ -1,15 +1,15 @@
-import { createContext, useState } from "react";
+import {createContext, useState} from "react";
export const ReloadDataTableContext = createContext();
-export const ReloadDataTableProvider = ({ children }) => {
- const [reloadDataTable, setReloadDataTable] = useState(false);
+export const ReloadDataTableProvider = ({children}) => {
+ const [reloadDataTable, setReloadDataTable] = useState(false);
- return (
-
- {children}
-
- );
+ return (
+
+ {children}
+
+ );
};
diff --git a/src/lib/app/contexts/language.jsx b/src/lib/app/contexts/language.jsx
index c8ac313..e3f41f4 100644
--- a/src/lib/app/contexts/language.jsx
+++ b/src/lib/app/contexts/language.jsx
@@ -1,99 +1,99 @@
-import { FA_DATATABLE_LOCALIZATION } from "&/locales/fa/datatable";
-import { useRouter } from "next/router";
-import { createContext, useEffect, useState } from "react";
+import {FA_DATATABLE_LOCALIZATION} from "&/locales/fa/datatable";
+import {useRouter} from "next/router";
+import {createContext, useEffect, useState} from "react";
import useUser from "../hooks/useUser";
export const LanguageContext = createContext();
-export const LanguageProvider = ({ children }) => {
- const router = useRouter();
- const languageList = [
- {
- key: "fa",
- dir: "rtl",
- name: "فارسی",
- fontFamily: `IRANSans, sans-serif`,
- tableLocalization: FA_DATATABLE_LOCALIZATION,
- }
- ];
- const { user, userChangedLanguage, changeLanguageState } = useUser();
- const [languageIsReady, setLanguageIsReady] = useState(false);
- const [languageApp, setLanguageApp] = useState();
- const [directionApp, setDirectionApp] = useState(
- process.env.NEXT_PUBLIC_DEFAULT_DIRECTION
- );
-
- useEffect(() => {
- const lang = localStorage.getItem("_language");
-
- if (!lang && !languageApp) {
- setLanguageApp(process.env.NEXT_PUBLIC_DEFAULT_LANGUAGE);
- } else if (lang) {
- setLanguageApp(lang);
- }
- }, []);
-
- useEffect(() => {
- if (!languageApp) return;
-
- const lang = localStorage.getItem("_language");
-
- if (!lang) {
- localStorage.setItem("_language", languageApp);
- } else {
- if (languageApp != lang) {
- localStorage.setItem("_language", languageApp);
- }
- }
- }, [languageApp]);
-
- useEffect(() => {
- if (!router.isReady) return;
- if (user.user_language) {
- if (user.user_language != languageApp) {
- setLanguageApp(user.user_language);
- return;
- }
- }
-
- if (languageApp != router.locale) {
- router.replace(
- { pathname: router.pathname, query: router.query },
- router.asPath,
+export const LanguageProvider = ({children}) => {
+ const router = useRouter();
+ const languageList = [
{
- locale: languageApp,
+ key: "fa",
+ dir: "rtl",
+ name: "فارسی",
+ fontFamily: `IRANSans, sans-serif`,
+ tableLocalization: FA_DATATABLE_LOCALIZATION,
}
- );
- return;
- }
- for (const lang of languageList) {
- if (languageApp != lang.key) continue;
- setDirectionApp(lang.dir);
- document.dir = lang.dir;
- }
+ ];
+ const {user, userChangedLanguage, changeLanguageState} = useUser();
+ const [languageIsReady, setLanguageIsReady] = useState(false);
+ const [languageApp, setLanguageApp] = useState();
+ const [directionApp, setDirectionApp] = useState(
+ process.env.NEXT_PUBLIC_DEFAULT_DIRECTION
+ );
- const timer = setTimeout(() => {
- changeLanguageState(false);
- setLanguageIsReady(true);
- }, 1000);
+ useEffect(() => {
+ const lang = localStorage.getItem("_language");
- return () => {
- clearTimeout(timer);
- };
- }, [router.locale, router.isReady, userChangedLanguage, languageApp]);
+ if (!lang && !languageApp) {
+ setLanguageApp(process.env.NEXT_PUBLIC_DEFAULT_LANGUAGE);
+ } else if (lang) {
+ setLanguageApp(lang);
+ }
+ }, []);
- return (
-
- {children}
-
- );
+ useEffect(() => {
+ if (!languageApp) return;
+
+ const lang = localStorage.getItem("_language");
+
+ if (!lang) {
+ localStorage.setItem("_language", languageApp);
+ } else {
+ if (languageApp != lang) {
+ localStorage.setItem("_language", languageApp);
+ }
+ }
+ }, [languageApp]);
+
+ useEffect(() => {
+ if (!router.isReady) return;
+ if (user.user_language) {
+ if (user.user_language != languageApp) {
+ setLanguageApp(user.user_language);
+ return;
+ }
+ }
+
+ if (languageApp != router.locale) {
+ router.replace(
+ {pathname: router.pathname, query: router.query},
+ router.asPath,
+ {
+ locale: languageApp,
+ }
+ );
+ return;
+ }
+ for (const lang of languageList) {
+ if (languageApp != lang.key) continue;
+ setDirectionApp(lang.dir);
+ document.dir = lang.dir;
+ }
+
+ const timer = setTimeout(() => {
+ changeLanguageState(false);
+ setLanguageIsReady(true);
+ }, 1000);
+
+ return () => {
+ clearTimeout(timer);
+ };
+ }, [router.locale, router.isReady, userChangedLanguage, languageApp]);
+
+ return (
+
+ {children}
+
+ );
};
diff --git a/src/lib/app/contexts/loading.jsx b/src/lib/app/contexts/loading.jsx
index 6e95a8c..f5b8a47 100644
--- a/src/lib/app/contexts/loading.jsx
+++ b/src/lib/app/contexts/loading.jsx
@@ -1,14 +1,14 @@
import LoadingHardPage from "@/core/components/LoadingHardPage";
-import { createContext, useState } from "react";
+import {createContext, useState} from "react";
export const LoadingContext = createContext();
-export const LoadingProvider = ({ children }) => {
- const [loadingPage, setLoadingPage] = useState(false);
- return (
-
-
- {children}
-
- );
+export const LoadingProvider = ({children}) => {
+ const [loadingPage, setLoadingPage] = useState(false);
+ return (
+
+
+ {children}
+
+ );
};
diff --git a/src/lib/app/contexts/user.jsx b/src/lib/app/contexts/user.jsx
index 30875d9..1dcdb1f 100644
--- a/src/lib/app/contexts/user.jsx
+++ b/src/lib/app/contexts/user.jsx
@@ -1,124 +1,122 @@
-import {
- GET_USER_ROUTE,
- SET_LANGUAGE
-} from "@/core/data/apiRoutes";
+import {GET_USER_ROUTE} from "@/core/data/apiRoutes";
import axios from "axios";
-import { createContext, useCallback, useEffect, useReducer } from "react";
+import {createContext, useCallback, useEffect, useReducer} from "react";
const initialUser = {
- isAuth: false,
- userChangedLanguage: false,
- token: null,
- user: {},
+ isAuth: false,
+ userChangedLanguage: false,
+ token: null,
+ user: {},
};
const reducer = (state, action) => {
- switch (action.type) {
- case "CLEAR_USER":
- return { ...state, user: {} };
- case "CHANGE_USER":
- return { ...state, user: action.user };
- case "CHANGE_USER_LANGUAGE":
- return {
- ...state,
- user: { ...state.user, user_language: action.language },
- };
- case "CHANGE_AUTH_STATE":
- return { ...state, isAuth: action.isAuth };
- case "CHANGE_LANGUAGE_STATE":
- return { ...state, userChangedLanguage: action.userChangedLanguage };
- case "CLEAR_TOKEN":
- localStorage.removeItem("_token");
- return { ...state, token: null };
- case "SET_TOKEN":
- localStorage.setItem("_token", action.token);
- return { ...state, token: action.token };
- default:
- return state;
- }
+ switch (action.type) {
+ case "CLEAR_USER":
+ return {...state, user: {}};
+ case "CHANGE_USER":
+ return {...state, user: action.user};
+ case "CHANGE_USER_LANGUAGE":
+ return {
+ ...state,
+ user: {...state.user, user_language: action.language},
+ };
+ case "CHANGE_AUTH_STATE":
+ return {...state, isAuth: action.isAuth};
+ case "CHANGE_LANGUAGE_STATE":
+ return {...state, userChangedLanguage: action.userChangedLanguage};
+ case "CLEAR_TOKEN":
+ localStorage.removeItem("_token");
+ return {...state, token: null};
+ case "SET_TOKEN":
+ localStorage.setItem("_token", action.token);
+ return {...state, token: action.token};
+ default:
+ return state;
+ }
};
export const UserContext = createContext();
-export const UserProvider = ({ children }) => {
- const [state, dispatch] = useReducer(reducer, initialUser);
+export const UserProvider = ({children}) => {
+ const [state, dispatch] = useReducer(reducer, initialUser);
- const clearUser = useCallback(() => {
- dispatch({ type: "CLEAR_USER" });
- }, []);
+ const clearUser = useCallback(() => {
+ dispatch({type: "CLEAR_USER"});
+ }, []);
- const changeUser = useCallback((user) => {
- dispatch({ type: "CHANGE_USER", user });
- }, []);
+ const changeUser = useCallback((user) => {
+ dispatch({type: "CHANGE_USER", user});
+ }, []);
- const changeUserLanguage = useCallback(/* use in multi language app */);
+ const changeUserLanguage = useCallback(/* use in multi language app */);
- const changeAuthState = useCallback((isAuth) => {
- dispatch({ type: "CHANGE_AUTH_STATE", isAuth });
- }, []);
+ const changeAuthState = useCallback((isAuth) => {
+ dispatch({type: "CHANGE_AUTH_STATE", isAuth});
+ }, []);
- const changeLanguageState = useCallback((userChangedLanguage) => {
- dispatch({ type: "CHANGE_LANGUAGE_STATE", userChangedLanguage });
- }, []);
+ const changeLanguageState = useCallback((userChangedLanguage) => {
+ dispatch({type: "CHANGE_LANGUAGE_STATE", userChangedLanguage});
+ }, []);
- const clearToken = useCallback(() => {
- dispatch({ type: "CLEAR_TOKEN" });
- }, []);
+ const clearToken = useCallback(() => {
+ dispatch({type: "CLEAR_TOKEN"});
+ }, []);
- const setToken = useCallback((token) => {
- dispatch({ type: "SET_TOKEN", token });
- }, []);
+ const setToken = useCallback((token) => {
+ dispatch({type: "SET_TOKEN", token});
+ }, []);
- const getUser = useCallback(
- (callback = () => {}) => {
- axios
- .get(GET_USER_ROUTE, {
- headers: { authorization: `Bearer ${state.token}` },
- })
- .then(({ data }) => {
- if (typeof callback === "function") callback(data);
+ const getUser = useCallback(
+ (callback = () => {
+ }) => {
+ axios
+ .get(GET_USER_ROUTE, {
+ headers: {authorization: `Bearer ${state.token}`},
+ })
+ .then(({data}) => {
+ if (typeof callback === "function") callback(data);
+ });
+ },
+ [state.token]
+ );
+
+ useEffect(() => {
+ const localToken = localStorage.getItem("_token");
+ if (localToken) dispatch({type: "SET_TOKEN", token: localToken});
+ }, []);
+
+ useEffect(() => {
+ if (!state.token) {
+ clearUser();
+ changeAuthState(false);
+ changeLanguageState(false);
+ return;
+ }
+ getUser((data) => {
+ changeUser(data);
+ changeAuthState(true);
+ changeLanguageState(true);
});
- },
- [state.token]
- );
+ }, [state.token]);
- useEffect(() => {
- const localToken = localStorage.getItem("_token");
- if (localToken) dispatch({ type: "SET_TOKEN", token: localToken });
- }, []);
-
- useEffect(() => {
- if (!state.token) {
- clearUser();
- changeAuthState(false);
- changeLanguageState(false);
- return;
- }
- getUser((data) => {
- changeUser(data);
- changeAuthState(true);
- changeLanguageState(true);
- });
- }, [state.token]);
-
- return (
-
- {children}
-
- );
+ return (
+
+ {children}
+
+ );
};
diff --git a/src/lib/app/hooks/useDatatable.jsx b/src/lib/app/hooks/useDatatable.jsx
index ddde95f..ff44b61 100644
--- a/src/lib/app/hooks/useDatatable.jsx
+++ b/src/lib/app/hooks/useDatatable.jsx
@@ -1,113 +1,113 @@
import axios from "axios";
-import { useCallback, useContext, useReducer, useState } from "react";
-import { ReloadDataTableContext } from "../contexts/ReloadDatatableContext";
+import {useCallback, useContext, useReducer, useState} from "react";
+import {ReloadDataTableContext} from "../contexts/ReloadDatatableContext";
import useUser from "./useUser";
import Notifications from "@/core/components/notifications";
import useDirection from "./useDirection";
-import { useTranslations } from "next-intl";
+import {useTranslations} from "next-intl";
const initialValues = {
- url: "",
- rowID: "",
- values: {},
+ url: "",
+ rowID: "",
+ values: {},
};
const reducer = (state, action) => {
- switch (action.type) {
- case "CONFIRM_DATA":
- return {
- ...state,
- url: action.url,
- rowID: action.rowID,
- };
- case "REJECT_DATA":
- return {
- ...state,
- url: action.url,
- rowID: action.rowID,
- values: {},
- };
- default:
- return state;
- }
+ switch (action.type) {
+ case "CONFIRM_DATA":
+ return {
+ ...state,
+ url: action.url,
+ rowID: action.rowID,
+ };
+ case "REJECT_DATA":
+ return {
+ ...state,
+ url: action.url,
+ rowID: action.rowID,
+ values: {},
+ };
+ default:
+ return state;
+ }
};
const useDataTable = () => {
- const { setReloadDataTable } = useContext(ReloadDataTableContext);
- const [state, dispatch] = useReducer(reducer, initialValues);
- const [openConfirmDialog, setOpenConfirmDialog] = useState(false);
- const [openRejectDialog, setOpenRejectDialog] = useState(false);
- const [rowId, setRowId] = useState(null);
- const { directionApp } = useDirection();
- const t = useTranslations();
+ const {setReloadDataTable} = useContext(ReloadDataTableContext);
+ const [state, dispatch] = useReducer(reducer, initialValues);
+ const [openConfirmDialog, setOpenConfirmDialog] = useState(false);
+ const [openRejectDialog, setOpenRejectDialog] = useState(false);
+ const [rowId, setRowId] = useState(null);
+ const {directionApp} = useDirection();
+ const t = useTranslations();
- const { token } = useUser();
+ const {token} = useUser();
- const confirmData = useCallback(async (url, rowID, values) => {
- dispatch({ type: "CONFIRM_DATA", url: url, rowID: rowID, values: values });
- axios
- .post(`${url}/${rowID}`, values, {
- headers: { authorization: `Bearer ${token}` },
- })
- .then((response) => {
- setReloadDataTable(true);
- Notifications(directionApp, response, t);
- })
- .catch((error) => {
- Notifications(directionApp, error.response, t);
- });
- }, []);
+ const confirmData = useCallback(async (url, rowID, values) => {
+ dispatch({type: "CONFIRM_DATA", url: url, rowID: rowID, values: values});
+ axios
+ .post(`${url}/${rowID}`, values, {
+ headers: {authorization: `Bearer ${token}`},
+ })
+ .then((response) => {
+ setReloadDataTable(true);
+ Notifications(directionApp, response, t);
+ })
+ .catch((error) => {
+ Notifications(directionApp, error.response, t);
+ });
+ }, []);
- const rejectData = useCallback(async (url, rowID, values) => {
- dispatch({ type: "REJECT_DATA", url: url, rowID: rowID, values: values });
- axios
- .post(`${url}/${rowID}`, values, {
- headers: { authorization: `Bearer ${token}` },
- })
- .then((response) => {
- setReloadDataTable(true);
- Notifications(directionApp, response, t);
- })
- .catch((error) => {
- console.log(error);
- Notifications(directionApp, error.response, t);
- });
- }, []);
+ const rejectData = useCallback(async (url, rowID, values) => {
+ dispatch({type: "REJECT_DATA", url: url, rowID: rowID, values: values});
+ axios
+ .post(`${url}/${rowID}`, values, {
+ headers: {authorization: `Bearer ${token}`},
+ })
+ .then((response) => {
+ setReloadDataTable(true);
+ Notifications(directionApp, response, t);
+ })
+ .catch((error) => {
+ console.log(error);
+ Notifications(directionApp, error.response, t);
+ });
+ }, []);
- //Confirm Data
- const handleOpenConfirmDialog = (row) => {
- setRowId(row.getValue("id"));
- setOpenConfirmDialog(true);
- };
+ //Confirm Data
+ const handleOpenConfirmDialog = (row) => {
+ setRowId(row.getValue("id"));
+ setOpenConfirmDialog(true);
+ };
- const handleCloseConfirmDialog = () => {
- setOpenConfirmDialog(false);
- };
- //End Confirm Data
+ const handleCloseConfirmDialog = () => {
+ setOpenConfirmDialog(false);
+ };
+ //End Confirm Data
- // Reject Data
- const handleOpenRejectDialog = (row) => {
- setRowId(row.getValue("id"));
- setOpenRejectDialog(true);
- };
+ // Reject Data
+ const handleOpenRejectDialog = (row) => {
+ setRowId(row.getValue("id"));
+ setOpenRejectDialog(true);
+ };
- const handleCloseRejectDialog = () => {
- setOpenRejectDialog(false);
- };
- // End Reject Data
+ const handleCloseRejectDialog = () => {
+ setOpenRejectDialog(false);
+ };
+ // End Reject Data
- const contextValue = {
- handleOpenConfirmDialog,
- handleCloseConfirmDialog,
- handleOpenRejectDialog,
- handleCloseRejectDialog,
- rowId,
- openConfirmDialog,
- openRejectDialog,
- rejectData,
- confirmData,
- };
- return contextValue;
+ const contextValue = {
+ handleOpenConfirmDialog,
+ handleCloseConfirmDialog,
+ handleOpenRejectDialog,
+ handleCloseRejectDialog,
+ rowId,
+ openConfirmDialog,
+ openRejectDialog,
+ rejectData,
+ confirmData,
+ };
+ return contextValue;
};
export default useDataTable;
diff --git a/src/lib/app/hooks/useDirection.jsx b/src/lib/app/hooks/useDirection.jsx
index e45cb24..b2e01fe 100644
--- a/src/lib/app/hooks/useDirection.jsx
+++ b/src/lib/app/hooks/useDirection.jsx
@@ -1,10 +1,10 @@
-import { useContext } from "react";
-import { LanguageContext } from "../contexts/language";
+import {useContext} from "react";
+import {LanguageContext} from "../contexts/language";
const useDirection = () => {
- const { directionApp } = useContext(LanguageContext);
+ const {directionApp} = useContext(LanguageContext);
- return { directionApp };
+ return {directionApp};
};
export default useDirection;
diff --git a/src/lib/app/hooks/useLanguage.jsx b/src/lib/app/hooks/useLanguage.jsx
index 66e2ee0..d663835 100644
--- a/src/lib/app/hooks/useLanguage.jsx
+++ b/src/lib/app/hooks/useLanguage.jsx
@@ -1,28 +1,28 @@
-import { useContext } from "react";
-import { LanguageContext } from "../contexts/language";
+import {useContext} from "react";
+import {LanguageContext} from "../contexts/language";
import useUser from "./useUser";
const useLanguage = () => {
- const { isAuth, changeUserLanguage } = useUser();
- const {
- languageApp,
- setLanguageApp,
- languageIsReady,
- setLanguageIsReady,
- languageList,
- } = useContext(LanguageContext);
+ const {isAuth, changeUserLanguage} = useUser();
+ const {
+ languageApp,
+ setLanguageApp,
+ languageIsReady,
+ setLanguageIsReady,
+ languageList,
+ } = useContext(LanguageContext);
- const changeLanguage = (lang) => {
- if (lang == languageApp) return;
+ const changeLanguage = (lang) => {
+ if (lang == languageApp) return;
- setLanguageIsReady(false);
- setLanguageApp(lang);
- if (isAuth) {
- changeUserLanguage(lang);
- }
- };
+ setLanguageIsReady(false);
+ setLanguageApp(lang);
+ if (isAuth) {
+ changeUserLanguage(lang);
+ }
+ };
- return { languageApp, changeLanguage, languageIsReady, languageList };
+ return {languageApp, changeLanguage, languageIsReady, languageList};
};
export default useLanguage;
diff --git a/src/lib/app/hooks/useLoading.jsx b/src/lib/app/hooks/useLoading.jsx
index d74a87e..a691bd7 100644
--- a/src/lib/app/hooks/useLoading.jsx
+++ b/src/lib/app/hooks/useLoading.jsx
@@ -1,10 +1,10 @@
-import { useContext } from "react";
-import { LoadingContext } from "../contexts/loading";
+import {useContext} from "react";
+import {LoadingContext} from "../contexts/loading";
const useLoading = () => {
- const { setLoadingPage } = useContext(LoadingContext);
+ const {setLoadingPage} = useContext(LoadingContext);
- return { setLoadingPage };
+ return {setLoadingPage};
};
export default useLoading;
diff --git a/src/lib/app/hooks/useUser.jsx b/src/lib/app/hooks/useUser.jsx
index 56bdf7c..b0bbc1a 100644
--- a/src/lib/app/hooks/useUser.jsx
+++ b/src/lib/app/hooks/useUser.jsx
@@ -1,34 +1,34 @@
-import { useContext } from "react";
-import { UserContext } from "../contexts/user";
+import {useContext} from "react";
+import {UserContext} from "../contexts/user";
const useUser = () => {
- const {
- isAuth,
- userChangedLanguage,
- token,
- user,
- getUser,
- clearUser,
- changeUser,
- changeAuthState,
- changeLanguageState,
- clearToken,
- setToken,
- } = useContext(UserContext);
+ const {
+ isAuth,
+ userChangedLanguage,
+ token,
+ user,
+ getUser,
+ clearUser,
+ changeUser,
+ changeAuthState,
+ changeLanguageState,
+ clearToken,
+ setToken,
+ } = useContext(UserContext);
- return {
- isAuth,
- userChangedLanguage,
- token,
- user,
- getUser,
- clearUser,
- changeUser,
- changeAuthState,
- changeLanguageState,
- clearToken,
- setToken,
- };
+ return {
+ isAuth,
+ userChangedLanguage,
+ token,
+ user,
+ getUser,
+ clearUser,
+ changeUser,
+ changeAuthState,
+ changeLanguageState,
+ clearToken,
+ setToken,
+ };
};
export default useUser;
diff --git a/src/middlewares/RolePermission.jsx b/src/middlewares/RolePermission.jsx
index 2cf2baa..9fece10 100644
--- a/src/middlewares/RolePermission.jsx
+++ b/src/middlewares/RolePermission.jsx
@@ -1,43 +1,43 @@
-import { NextLinkComposed } from "@/core/components/LinkRouting";
+import {NextLinkComposed} from "@/core/components/LinkRouting";
import Message from "@/core/components/Messages";
import useUser from "@/lib/app/hooks/useUser";
-import { Button, Typography } from "@mui/material";
-import { useTranslations } from "next-intl";
+import {Button, Typography} from "@mui/material";
+import {useTranslations} from "next-intl";
-const RolePermission = ({ children, requiredPermissions }) => {
- const { user } = useUser();
- const t = useTranslations();
+const RolePermission = ({children, requiredPermissions}) => {
+ const {user} = useUser();
+ const t = useTranslations();
- const hasPermission = requiredPermissions.some((permission) =>
- user?.role?.includes(permission)
- );
-
- if (!hasPermission) {
- return (
-
- {t("Permission.typography_you_dont_have_access")}
-
- }
- actions={
- <>
-
- >
- }
- />
+ const hasPermission = requiredPermissions.some((permission) =>
+ user?.role?.includes(permission)
);
- }
- return <>{children}>;
+ if (!hasPermission) {
+ return (
+
+ {t("Permission.typography_you_dont_have_access")}
+
+ }
+ actions={
+ <>
+
+ >
+ }
+ />
+ );
+ }
+
+ return <>{children}>;
};
export default RolePermission;
diff --git a/src/middlewares/WithAuth.jsx b/src/middlewares/WithAuth.jsx
index 3fa5f43..b20d8b3 100644
--- a/src/middlewares/WithAuth.jsx
+++ b/src/middlewares/WithAuth.jsx
@@ -1,42 +1,42 @@
-import { NextLinkComposed } from "@/core/components/LinkRouting";
+import {NextLinkComposed} from "@/core/components/LinkRouting";
import Message from "@/core/components/Messages";
import useUser from "@/lib/app/hooks/useUser";
-import { Button, Typography } from "@mui/material";
-import { useTranslations } from "next-intl";
-import { useRouter } from "next/router";
+import {Button, Typography} from "@mui/material";
+import {useTranslations} from "next-intl";
+import {useRouter} from "next/router";
-const WithAuthMiddleware = ({ children }) => {
- const { isAuth } = useUser();
- const t = useTranslations();
- const router = useRouter();
+const WithAuthMiddleware = ({children}) => {
+ const {isAuth} = useUser();
+ const t = useTranslations();
+ const router = useRouter();
- if (!isAuth)
- return (
-
- {t(
- "Authorization.typography_your_access_to_this_page_has_expired_Please_login_again"
- )}
-
- }
- actions={
- <>
-
- >
- }
- />
- );
- return <>{children}>;
+ if (!isAuth)
+ return (
+
+ {t(
+ "Authorization.typography_your_access_to_this_page_has_expired_Please_login_again"
+ )}
+
+ }
+ actions={
+ <>
+
+ >
+ }
+ />
+ );
+ return <>{children}>;
};
export default WithAuthMiddleware;
diff --git a/src/middlewares/WithoutAuth.jsx b/src/middlewares/WithoutAuth.jsx
index cb8e571..594ffc5 100644
--- a/src/middlewares/WithoutAuth.jsx
+++ b/src/middlewares/WithoutAuth.jsx
@@ -1,56 +1,56 @@
import Message from "@/core/components/Messages";
import useUser from "@/lib/app/hooks/useUser";
-import { Stack, Typography } from "@mui/material";
-import { useTranslations } from "next-intl";
-import { useSearchParams } from "next/navigation";
-import { useRouter } from "next/router";
-import { useEffect } from "react";
+import {Stack, Typography} from "@mui/material";
+import {useTranslations} from "next-intl";
+import {useSearchParams} from "next/navigation";
+import {useRouter} from "next/router";
+import {useEffect} from "react";
-const WithoutAuthMiddleware = ({ children }) => {
- const { isAuth } = useUser();
- const t = useTranslations();
- const router = useRouter();
+const WithoutAuthMiddleware = ({children}) => {
+ const {isAuth} = useUser();
+ const t = useTranslations();
+ const router = useRouter();
- // gettin url query
- const searchParams = useSearchParams();
- const backUrlDecodedPath = searchParams.get("back_url");
+ // gettin url query
+ const searchParams = useSearchParams();
+ const backUrlDecodedPath = searchParams.get("back_url");
- useEffect(() => {
- if (!isAuth) return;
- const timer = setTimeout(() => {
- router.replace(
- backUrlDecodedPath
- ? decodeURIComponent(backUrlDecodedPath)
- : "/dashboard"
- );
- }, 2000);
+ useEffect(() => {
+ if (!isAuth) return;
+ const timer = setTimeout(() => {
+ router.replace(
+ backUrlDecodedPath
+ ? decodeURIComponent(backUrlDecodedPath)
+ : "/dashboard"
+ );
+ }, 2000);
- return () => {
- clearTimeout(timer);
- };
- }, [isAuth]);
+ return () => {
+ clearTimeout(timer);
+ };
+ }, [isAuth]);
- if (isAuth)
- return (
-
-
- {t(
- "Authorization.typography_your_login_is_valid_and_you_do_not_need_to_login_again"
- )}
-
-
- {t("Authorization.typography_redirect_to")}{" "}
- {backUrlDecodedPath
- ? t("Authorization.typography_routing_previuos_page")
- : t("Authorization.typography_routing_dashbaord_page")}
-
-
- }
- />
- );
- return <>{children}>;
+ if (isAuth)
+ return (
+
+
+ {t(
+ "Authorization.typography_your_login_is_valid_and_you_do_not_need_to_login_again"
+ )}
+
+
+ {t("Authorization.typography_redirect_to")}{" "}
+ {backUrlDecodedPath
+ ? t("Authorization.typography_routing_previuos_page")
+ : t("Authorization.typography_routing_dashbaord_page")}
+
+
+ }
+ />
+ );
+ return <>{children}>;
};
export default WithoutAuthMiddleware;
diff --git a/src/pages/_app.jsx b/src/pages/_app.jsx
index be5d828..573bef2 100644
--- a/src/pages/_app.jsx
+++ b/src/pages/_app.jsx
@@ -1,30 +1,30 @@
import "&/fontiran.scss";
import AppLayout from "@/layouts/AppLayout";
import MuiLayout from "@/layouts/MuiLayout";
-import { LanguageProvider } from "@/lib/app/contexts/language";
-import { LoadingProvider } from "@/lib/app/contexts/loading";
-import { UserProvider } from "@/lib/app/contexts/user";
+import {LanguageProvider} from "@/lib/app/contexts/language";
+import {LoadingProvider} from "@/lib/app/contexts/loading";
+import {UserProvider} from "@/lib/app/contexts/user";
import "moment/locale/fa";
-import { NextIntlProvider } from "next-intl";
+import {NextIntlProvider} from "next-intl";
-const App = ({ Component, pageProps }) => {
- return (
- <>
-
-
-
-
-
-
-
-
-
-
-
-
-
- >
- );
+const App = ({Component, pageProps}) => {
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
};
export default App;
diff --git a/src/pages/_document.jsx b/src/pages/_document.jsx
index e763884..f71303f 100644
--- a/src/pages/_document.jsx
+++ b/src/pages/_document.jsx
@@ -1,67 +1,65 @@
-import {
- createEmotionCacheLtr
-} from "@/core/utils/createEmotionCache";
+import {createEmotionCacheLtr} from "@/core/utils/createEmotionCache";
import theme from "@/core/utils/theme";
import createEmotionServer from "@emotion/server/create-instance";
-import Document, { Head, Html, Main, NextScript } from "next/document";
+import Document, {Head, Html, Main, NextScript} from "next/document";
export default function MyDocument(props) {
- const { emotionStyleTags } = props;
+ const {emotionStyleTags} = props;
- return (
-
-
-
-
-
-
-
- {emotionStyleTags}
-
-
-
-
-
-
- );
+ return (
+
+
+
+
+
+
+
+ {emotionStyleTags}
+
+
+
+
+
+
+ );
}
MyDocument.getInitialProps = async (ctx) => {
- const originalRenderPage = ctx.renderPage;
- let cache;
- switch (ctx.locale) {
- case "fa":
- cache = createEmotionCacheLtr();
- break;
- }
+ const originalRenderPage = ctx.renderPage;
+ let cache;
+ switch (ctx.locale) {
+ case "fa":
+ cache = createEmotionCacheLtr();
+ break;
+ }
- const { extractCriticalToChunks } = createEmotionServer(cache);
+ const {extractCriticalToChunks} = createEmotionServer(cache);
- ctx.renderPage = () =>
- originalRenderPage({
- enhanceApp: (App) =>
- function EnhanceApp(props) {
- return ;
- },
- });
+ ctx.renderPage = () =>
+ originalRenderPage({
+ enhanceApp: (App) =>
+ function EnhanceApp(props) {
+ return ;
+ },
+ });
- const initialProps = await Document.getInitialProps(ctx);
+ const initialProps = await Document.getInitialProps(ctx);
- const emotionStyles = extractCriticalToChunks(initialProps.html);
- const emotionStyleTags = emotionStyles.styles.map((style) => (
-
- ));
+ const emotionStyles = extractCriticalToChunks(initialProps.html);
+ const emotionStyleTags = emotionStyles.styles.map((style) => (
+
+ ));
- return {
- ...initialProps,
- emotionStyleTags,
- };
+ return {
+ ...initialProps,
+ emotionStyleTags,
+ };
};
diff --git a/src/pages/dashboard/change-password/index.jsx b/src/pages/dashboard/change-password/index.jsx
index 30685f1..380b5ff 100644
--- a/src/pages/dashboard/change-password/index.jsx
+++ b/src/pages/dashboard/change-password/index.jsx
@@ -1,23 +1,23 @@
import DashboardChangePasswordComponent from "@/components/dashboard/change-password";
import TitlePage from "@/core/components/TitlePage";
import WithAuthMiddleware from "@/middlewares/WithAuth";
-import { parse } from "next-useragent";
+import {parse} from "next-useragent";
export default function LoanFollowUp() {
- return (
-
-
-
-
- );
+ return (
+
+
+
+
+ );
}
-export async function getServerSideProps({ req, locale }) {
- const { isBot } = parse(req.headers["user-agent"]);
- return {
- props: {
- messages: (await import(`&/locales/${locale}/app.json`)).default,
- isBot,
- },
- };
+export async function getServerSideProps({req, locale}) {
+ const {isBot} = parse(req.headers["user-agent"]);
+ return {
+ props: {
+ messages: (await import(`&/locales/${locale}/app.json`)).default,
+ isBot,
+ },
+ };
}
diff --git a/src/pages/dashboard/edit-profile/index.jsx b/src/pages/dashboard/edit-profile/index.jsx
index 0adabf6..cf68add 100644
--- a/src/pages/dashboard/edit-profile/index.jsx
+++ b/src/pages/dashboard/edit-profile/index.jsx
@@ -1,23 +1,23 @@
import DashboardEditProfile from "@/components/dashboard/edit-profile";
import TitlePage from "@/core/components/TitlePage";
import WithAuthMiddleware from "@/middlewares/WithAuth";
-import { parse } from "next-useragent";
+import {parse} from "next-useragent";
export default function LoanFollowUp() {
- return (
-
-
-
-
- );
+ return (
+
+
+
+
+ );
}
-export async function getServerSideProps({ req, locale }) {
- const { isBot } = parse(req.headers["user-agent"]);
- return {
- props: {
- messages: (await import(`&/locales/${locale}/app.json`)).default,
- isBot,
- },
- };
+export async function getServerSideProps({req, locale}) {
+ const {isBot} = parse(req.headers["user-agent"]);
+ return {
+ props: {
+ messages: (await import(`&/locales/${locale}/app.json`)).default,
+ isBot,
+ },
+ };
}
diff --git a/src/pages/dashboard/index.jsx b/src/pages/dashboard/index.jsx
index c3c3933..83bbb7c 100644
--- a/src/pages/dashboard/index.jsx
+++ b/src/pages/dashboard/index.jsx
@@ -1,23 +1,23 @@
import DashboardFirstComponent from "@/components/dashboard/first";
import TitlePage from "@/core/components/TitlePage";
import WithAuthMiddleware from "@/middlewares/WithAuth";
-import { parse } from "next-useragent";
+import {parse} from "next-useragent";
export default function Dashboard() {
- return (
-
-
-
-
- );
+ return (
+
+
+
+
+ );
}
-export async function getServerSideProps({ req, locale }) {
- const { isBot } = parse(req.headers["user-agent"]);
- return {
- props: {
- messages: (await import(`&/locales/${locale}/app.json`)).default,
- isBot,
- },
- };
+export async function getServerSideProps({req, locale}) {
+ const {isBot} = parse(req.headers["user-agent"]);
+ return {
+ props: {
+ messages: (await import(`&/locales/${locale}/app.json`)).default,
+ isBot,
+ },
+ };
}
diff --git a/src/pages/dashboard/machinary-expert/index.jsx b/src/pages/dashboard/machinary-expert/index.jsx
index ed7b514..0f94415 100644
--- a/src/pages/dashboard/machinary-expert/index.jsx
+++ b/src/pages/dashboard/machinary-expert/index.jsx
@@ -2,25 +2,26 @@ import DashboardMachinaryOfficeComponent from "@/components/dashboard/machinary-
import TitlePage from "@/core/components/TitlePage";
import RolePermission from "@/middlewares/RolePermission";
import WithAuthMiddleware from "@/middlewares/WithAuth";
-import { parse } from "next-useragent";
+import {parse} from "next-useragent";
+
const requiredPermissions = ["machinery_expert"];
export default function PassengerOffice() {
- return (
-
-
-
-
-
-
- );
+ return (
+
+
+
+
+
+
+ );
}
-export async function getServerSideProps({ req, locale }) {
- const { isBot } = parse(req.headers["user-agent"]);
- return {
- props: {
- messages: (await import(`&/locales/${locale}/app.json`)).default,
- isBot,
- },
- };
+export async function getServerSideProps({req, locale}) {
+ const {isBot} = parse(req.headers["user-agent"]);
+ return {
+ props: {
+ messages: (await import(`&/locales/${locale}/app.json`)).default,
+ isBot,
+ },
+ };
}
diff --git a/src/pages/dashboard/passenger-boss/index.jsx b/src/pages/dashboard/passenger-boss/index.jsx
index 8a261f3..ab40851 100644
--- a/src/pages/dashboard/passenger-boss/index.jsx
+++ b/src/pages/dashboard/passenger-boss/index.jsx
@@ -2,25 +2,26 @@ import DashboardPassengerBossComponent from "@/components/dashboard/passenger-bo
import TitlePage from "@/core/components/TitlePage";
import RolePermission from "@/middlewares/RolePermission";
import WithAuthMiddleware from "@/middlewares/WithAuth";
-import { parse } from "next-useragent";
+import {parse} from "next-useragent";
+
const requiredPermissions = ["passenger_office_chief"];
export default function PassengerBoss() {
- return (
-
-
-
-
-
-
- );
+ return (
+
+
+
+
+
+
+ );
}
-export async function getServerSideProps({ req, locale }) {
- const { isBot } = parse(req.headers["user-agent"]);
- return {
- props: {
- messages: (await import(`&/locales/${locale}/app.json`)).default,
- isBot,
- },
- };
+export async function getServerSideProps({req, locale}) {
+ const {isBot} = parse(req.headers["user-agent"]);
+ return {
+ props: {
+ messages: (await import(`&/locales/${locale}/app.json`)).default,
+ isBot,
+ },
+ };
}
diff --git a/src/pages/dashboard/passenger-office-chief/index.jsx b/src/pages/dashboard/passenger-office-chief/index.jsx
index 2402f75..0ff7720 100644
--- a/src/pages/dashboard/passenger-office-chief/index.jsx
+++ b/src/pages/dashboard/passenger-office-chief/index.jsx
@@ -2,25 +2,26 @@ import DashboardPassengerOfficeComponent from "@/components/dashboard/passenger-
import TitlePage from "@/core/components/TitlePage";
import RolePermission from "@/middlewares/RolePermission";
import WithAuthMiddleware from "@/middlewares/WithAuth";
-import { parse } from "next-useragent";
+import {parse} from "next-useragent";
+
const requiredPermissions = ["passenger_office_chief"];
export default function PassengerOffice() {
- return (
-
-
-
-
-
-
- );
+ return (
+
+
+
+
+
+
+ );
}
-export async function getServerSideProps({ req, locale }) {
- const { isBot } = parse(req.headers["user-agent"]);
- return {
- props: {
- messages: (await import(`&/locales/${locale}/app.json`)).default,
- isBot,
- },
- };
+export async function getServerSideProps({req, locale}) {
+ const {isBot} = parse(req.headers["user-agent"]);
+ return {
+ props: {
+ messages: (await import(`&/locales/${locale}/app.json`)).default,
+ isBot,
+ },
+ };
}
diff --git a/src/pages/dashboard/province-manager/index.jsx b/src/pages/dashboard/province-manager/index.jsx
index 808a5d4..748ba4c 100644
--- a/src/pages/dashboard/province-manager/index.jsx
+++ b/src/pages/dashboard/province-manager/index.jsx
@@ -2,25 +2,26 @@ import DashboardProvinceManagerComponent from "@/components/dashboard/province-m
import TitlePage from "@/core/components/TitlePage";
import RolePermission from "@/middlewares/RolePermission";
import WithAuthMiddleware from "@/middlewares/WithAuth";
-import { parse } from "next-useragent";
+import {parse} from "next-useragent";
+
const requiredPermissions = ["province_manager"];
export default function PassengerOffice() {
- return (
-
-
-
-
-
-
- );
+ return (
+
+
+
+
+
+
+ );
}
-export async function getServerSideProps({ req, locale }) {
- const { isBot } = parse(req.headers["user-agent"]);
- return {
- props: {
- messages: (await import(`&/locales/${locale}/app.json`)).default,
- isBot,
- },
- };
+export async function getServerSideProps({req, locale}) {
+ const {isBot} = parse(req.headers["user-agent"]);
+ return {
+ props: {
+ messages: (await import(`&/locales/${locale}/app.json`)).default,
+ isBot,
+ },
+ };
}
diff --git a/src/pages/dashboard/transportation-assistant/index.jsx b/src/pages/dashboard/transportation-assistant/index.jsx
index 47297f6..5727284 100644
--- a/src/pages/dashboard/transportation-assistant/index.jsx
+++ b/src/pages/dashboard/transportation-assistant/index.jsx
@@ -2,25 +2,26 @@ import DashboardTransportationAssistanceComponent from "@/components/dashboard/t
import TitlePage from "@/core/components/TitlePage";
import RolePermission from "@/middlewares/RolePermission";
import WithAuthMiddleware from "@/middlewares/WithAuth";
-import { parse } from "next-useragent";
+import {parse} from "next-useragent";
+
const requiredPermissions = ["transportation_assistant"];
export default function TransportationAssistance() {
- return (
-
-
-
-
-
-
- );
+ return (
+
+
+
+
+
+
+ );
}
-export async function getServerSideProps({ req, locale }) {
- const { isBot } = parse(req.headers["user-agent"]);
- return {
- props: {
- messages: (await import(`&/locales/${locale}/app.json`)).default,
- isBot,
- },
- };
+export async function getServerSideProps({req, locale}) {
+ const {isBot} = parse(req.headers["user-agent"]);
+ return {
+ props: {
+ messages: (await import(`&/locales/${locale}/app.json`)).default,
+ isBot,
+ },
+ };
}
diff --git a/src/pages/index.jsx b/src/pages/index.jsx
index a2abc38..82c1f58 100644
--- a/src/pages/index.jsx
+++ b/src/pages/index.jsx
@@ -1,22 +1,22 @@
import FirstComponent from "@/components/first";
import TitlePage from "@/core/components/TitlePage";
-import { parse } from "next-useragent";
+import {parse} from "next-useragent";
export default function Home() {
- return (
- <>
-
-
- >
- );
+ return (
+ <>
+
+
+ >
+ );
}
-export async function getServerSideProps({ req, locale }) {
- const { isBot } = parse(req.headers["user-agent"]);
- return {
- props: {
- messages: (await import(`&/locales/${locale}/app.json`)).default,
- isBot,
- },
- };
+export async function getServerSideProps({req, locale}) {
+ const {isBot} = parse(req.headers["user-agent"]);
+ return {
+ props: {
+ messages: (await import(`&/locales/${locale}/app.json`)).default,
+ isBot,
+ },
+ };
}
diff --git a/src/pages/login-expert.jsx b/src/pages/login-expert.jsx
index c9e4e7e..19eefc8 100644
--- a/src/pages/login-expert.jsx
+++ b/src/pages/login-expert.jsx
@@ -1,28 +1,28 @@
import LoginComponent from "@/components/login-expert";
import TitlePage from "@/core/components/TitlePage";
import WithoutAuthMiddleware from "@/middlewares/WithoutAuth";
-import { parse } from "next-useragent";
+import {parse} from "next-useragent";
import "react-toastify/dist/ReactToastify.css";
-import { ToastContainer } from "react-toastify";
+import {ToastContainer} from "react-toastify";
import useDirection from "@/lib/app/hooks/useDirection";
export default function Login() {
- const { directionApp } = useDirection();
- return (
-
-
-
- {directionApp === "rtl" ? : }
-
- );
+ const {directionApp} = useDirection();
+ return (
+
+
+
+ {directionApp === "rtl" ? : }
+
+ );
}
-export async function getServerSideProps({ req, locale }) {
- const { isBot } = parse(req.headers["user-agent"]);
- return {
- props: {
- messages: (await import(`&/locales/${locale}/app.json`)).default,
- isBot,
- },
- };
+export async function getServerSideProps({req, locale}) {
+ const {isBot} = parse(req.headers["user-agent"]);
+ return {
+ props: {
+ messages: (await import(`&/locales/${locale}/app.json`)).default,
+ isBot,
+ },
+ };
}