recode and add editor config file

This commit is contained in:
Amirhossein Mahmoodi
2023-07-31 09:34:59 +03:30
parent ba91b97e7c
commit 51b21957b9
108 changed files with 5993 additions and 5770 deletions

View File

@@ -1,8 +1,12 @@
{
"compilerOptions": {
"paths": {
"@/*": ["./src/*"],
"&/*": ["./public/*"],
"@/*": [
"./src/*"
],
"&/*": [
"./public/*"
]
}
}
}

View File

@@ -21,9 +21,9 @@ This set of fonts are used in this project under the license: (.....)
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+*/
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');
}
@@ -32,9 +32,9 @@ This set of fonts are used in this project under the license: (.....)
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+*/
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');
}
@@ -43,9 +43,9 @@ This set of fonts are used in this project under the license: (.....)
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+*/
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');
}
@@ -54,9 +54,9 @@ This set of fonts are used in this project under the license: (.....)
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+*/
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');
}
@@ -65,9 +65,9 @@ This set of fonts are used in this project under the license: (.....)
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+*/
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');
}
@@ -76,11 +76,12 @@ This set of fonts are used in this project under the license: (.....)
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+*/
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;
@@ -91,6 +92,7 @@ This set of fonts are used in this project under the license: (.....)
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;
@@ -101,6 +103,7 @@ This set of fonts are used in this project under the license: (.....)
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;
@@ -111,6 +114,7 @@ This set of fonts are used in this project under the license: (.....)
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;
@@ -121,6 +125,7 @@ This set of fonts are used in this project under the license: (.....)
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;
@@ -131,6 +136,7 @@ This set of fonts are used in this project under the license: (.....)
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;
@@ -141,6 +147,7 @@ This set of fonts are used in this project under the license: (.....)
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;
@@ -150,6 +157,7 @@ This set of fonts are used in this project under the license: (.....)
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;

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 9.1 KiB

After

Width:  |  Height:  |  Size: 9.5 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 10 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 13 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 6.5 KiB

View File

@@ -1,10 +1,19 @@
<svg xmlns="http://www.w3.org/2000/svg" width="611.781" height="634.738" viewBox="0 0 611.781 634.738">
<g id="Group_67" data-name="Group 67" transform="translate(17717.998 5548)">
<g id="Group_35" data-name="Group 35" transform="translate(-18337.291 -5635.72)">
<path id="Path_5" data-name="Path 5" d="M126.892,461.042c-1.676-6.24-3.057-12-4.776-17.668-6.5-21.426-17.146-40.936-27.846-60.456-10.362-18.9-20.22-38.081-30.31-57.132-.389-.734-.9-1.406-1.791-2.8C36.884,364.062,18.983,407.918,1.474,451.962l-1.21-.256a8.878,8.878,0,0,1-.214-2.524c2.581-12.372,4.479-24.951,8.05-37.034a334.761,334.761,0,0,1,13.91-37.364Q35.923,342.5,51.02,310.733c3.525-7.389,1.922-13.976.051-20.991a185.716,185.716,0,0,1-6.18-54.9,183.572,183.572,0,0,1,21.089-78.7A248.249,248.249,0,0,1,132.8,75.26a320,320,0,0,1,59.11-36.67c23.209-11.317,47.033-21.1,72.336-26.513A487.808,487.808,0,0,1,314.282,3.7C333.731,1.624,353.352,1.16,372.9.018a22,22,0,0,1,3.3.145c.4.037.775.291,1.236,1.13L360.926,4.642c-26.4,5.318-52.988,9.831-79.147,16.136a295.335,295.335,0,0,0-105.32,48.21c-24.648,17.9-45.935,39.123-61.823,65.3-11.419,18.813-17.813,39.38-20.064,61.275-1.445,14.062-1.024,28.1.166,42.133a44.216,44.216,0,0,0,1,4.8c1.418-1.165,2.427-1.875,3.3-2.728,10.2-10.038,20.041-20.48,30.661-30.055,14.1-12.713,29.419-23.882,46.9-31.678,21.42-9.55,43.69-13.568,66.553-6.9,10.553,3.079,20.531,8.393,30.44,13.353,20.075,10.051,39.841,20.721,59.892,30.821a182.512,182.512,0,0,0,68.478,19.421c33.07,2.549,64.407-3.894,93.662-19.748,25.04-13.571,46.544-31.674,66.252-52.041,15.44-15.956,28.916-33.487,41.494-51.746,2.217-3.219,4.962-6.073,7.463-9.1l.983.382a15.039,15.039,0,0,1-.828,3.67c-3.9,7.643-7.67,15.361-11.911,22.812-17.8,31.272-39.019,60-64.85,85.13-26.732,26.009-56.556,47.619-90.953,62.526a162.5,162.5,0,0,1-74.241,14.106c-24.876-.775-48.015,5.5-69.742,17.063-14.861,7.91-29.333,16.559-43.879,25.049-13.773,8.039-28.189,13.431-44.484,11.949-2.667-.242-2.49,1.854-2.988,3.479-2.151,7.019-3.92,14.193-6.627,20.993-3.8,9.547-10.327,17.4-17.557,24.572-15.526,15.4-28.738,32.778-42.59,49.608-4.68,5.687-9.284,11.436-14.28,17.6M284.4,266.987c-.334-.819-.375-1.206-.591-1.393a13.8,13.8,0,0,0-1.854-1.356c-22.793-13.885-46.277-26.286-71.807-34.532-20.915-6.755-41.455-6.841-61.848,1.941-15.741,6.779-28.925,17.112-41,29.01-5.591,5.508-5.981,8.93-2.421,15.921q12.355,24.272,24.657,48.572c10.087,19.93,20.125,39.886,30.279,59.783.543,1.062,1.967,1.674,2.98,2.5a12.859,12.859,0,0,0,1.933-3.081,49.022,49.022,0,0,0-2.4-33.292c-6.476-14.911-14.075-29.337-21.275-43.93-4.967-10.065-10.144-20.026-15.07-30.112-1.63-3.338-2.558-6.917.574-10.1,10.226-10.371,22.1-18.1,36.115-22.335,3.993-1.206,5.77-.416,7.975,3.16,3.927,6.365,7.687,12.846,11.888,19.028,9.727,14.31,23.437,21.051,40.7,20.974,16.93-.075,32.491-5.033,47.273-12.854,4.715-2.495,9.282-5.27,13.894-7.9" transform="translate(619.257 87.713)" fill="#231955"/>
<path id="Path_6" data-name="Path 6" d="M104.479,767.41c2.322-11.049,4.27-22.193,7.046-33.127,5.72-22.532,15.277-43.572,26.263-63.957,16.423-30.474,34.631-59.844,55.63-87.405,20.939-27.481,43.511-53.464,70.53-75.261,24.13-19.467,50.887-33.842,81.027-41.582,4.676-1.2,9.437-2.118,14.2-2.939a15,15,0,0,0,11.744-9.6c4.286-10.252,11.9-14.085,22.732-13.761a202.3,202.3,0,0,0,89.232-17.644A257.328,257.328,0,0,0,528.458,395.6c1.4-1.009,2.885-1.912,5.222-3.451-.953,3.026-1.265,5.258-2.293,7.089-14.936,26.6-31.633,51.891-54.057,72.956-18.879,17.734-40.265,31.046-65.744,36.862-15.1,3.446-30.348,6.253-45.529,9.349-18.622,3.8-37.406,6.945-55.825,11.553-27.566,6.9-51.782,20.673-73.654,38.685-23.608,19.441-42.473,43.054-59.8,68-24.96,35.939-44.814,74.717-63.24,114.278q-3.9,8.368-7.793,16.738l-1.263-.245" transform="translate(583.845 -45.198)" fill="#231955"/>
<path id="Path_7" data-name="Path 7" d="M405.392,690.855l-53.546,54.494-55.389-51.215,55.1-53.062L405.4,690.854" transform="translate(518.777 -129.57)" fill="#ff9100"/>
<path id="Path_5" data-name="Path 5"
d="M126.892,461.042c-1.676-6.24-3.057-12-4.776-17.668-6.5-21.426-17.146-40.936-27.846-60.456-10.362-18.9-20.22-38.081-30.31-57.132-.389-.734-.9-1.406-1.791-2.8C36.884,364.062,18.983,407.918,1.474,451.962l-1.21-.256a8.878,8.878,0,0,1-.214-2.524c2.581-12.372,4.479-24.951,8.05-37.034a334.761,334.761,0,0,1,13.91-37.364Q35.923,342.5,51.02,310.733c3.525-7.389,1.922-13.976.051-20.991a185.716,185.716,0,0,1-6.18-54.9,183.572,183.572,0,0,1,21.089-78.7A248.249,248.249,0,0,1,132.8,75.26a320,320,0,0,1,59.11-36.67c23.209-11.317,47.033-21.1,72.336-26.513A487.808,487.808,0,0,1,314.282,3.7C333.731,1.624,353.352,1.16,372.9.018a22,22,0,0,1,3.3.145c.4.037.775.291,1.236,1.13L360.926,4.642c-26.4,5.318-52.988,9.831-79.147,16.136a295.335,295.335,0,0,0-105.32,48.21c-24.648,17.9-45.935,39.123-61.823,65.3-11.419,18.813-17.813,39.38-20.064,61.275-1.445,14.062-1.024,28.1.166,42.133a44.216,44.216,0,0,0,1,4.8c1.418-1.165,2.427-1.875,3.3-2.728,10.2-10.038,20.041-20.48,30.661-30.055,14.1-12.713,29.419-23.882,46.9-31.678,21.42-9.55,43.69-13.568,66.553-6.9,10.553,3.079,20.531,8.393,30.44,13.353,20.075,10.051,39.841,20.721,59.892,30.821a182.512,182.512,0,0,0,68.478,19.421c33.07,2.549,64.407-3.894,93.662-19.748,25.04-13.571,46.544-31.674,66.252-52.041,15.44-15.956,28.916-33.487,41.494-51.746,2.217-3.219,4.962-6.073,7.463-9.1l.983.382a15.039,15.039,0,0,1-.828,3.67c-3.9,7.643-7.67,15.361-11.911,22.812-17.8,31.272-39.019,60-64.85,85.13-26.732,26.009-56.556,47.619-90.953,62.526a162.5,162.5,0,0,1-74.241,14.106c-24.876-.775-48.015,5.5-69.742,17.063-14.861,7.91-29.333,16.559-43.879,25.049-13.773,8.039-28.189,13.431-44.484,11.949-2.667-.242-2.49,1.854-2.988,3.479-2.151,7.019-3.92,14.193-6.627,20.993-3.8,9.547-10.327,17.4-17.557,24.572-15.526,15.4-28.738,32.778-42.59,49.608-4.68,5.687-9.284,11.436-14.28,17.6M284.4,266.987c-.334-.819-.375-1.206-.591-1.393a13.8,13.8,0,0,0-1.854-1.356c-22.793-13.885-46.277-26.286-71.807-34.532-20.915-6.755-41.455-6.841-61.848,1.941-15.741,6.779-28.925,17.112-41,29.01-5.591,5.508-5.981,8.93-2.421,15.921q12.355,24.272,24.657,48.572c10.087,19.93,20.125,39.886,30.279,59.783.543,1.062,1.967,1.674,2.98,2.5a12.859,12.859,0,0,0,1.933-3.081,49.022,49.022,0,0,0-2.4-33.292c-6.476-14.911-14.075-29.337-21.275-43.93-4.967-10.065-10.144-20.026-15.07-30.112-1.63-3.338-2.558-6.917.574-10.1,10.226-10.371,22.1-18.1,36.115-22.335,3.993-1.206,5.77-.416,7.975,3.16,3.927,6.365,7.687,12.846,11.888,19.028,9.727,14.31,23.437,21.051,40.7,20.974,16.93-.075,32.491-5.033,47.273-12.854,4.715-2.495,9.282-5.27,13.894-7.9"
transform="translate(619.257 87.713)" fill="#231955"/>
<path id="Path_6" data-name="Path 6"
d="M104.479,767.41c2.322-11.049,4.27-22.193,7.046-33.127,5.72-22.532,15.277-43.572,26.263-63.957,16.423-30.474,34.631-59.844,55.63-87.405,20.939-27.481,43.511-53.464,70.53-75.261,24.13-19.467,50.887-33.842,81.027-41.582,4.676-1.2,9.437-2.118,14.2-2.939a15,15,0,0,0,11.744-9.6c4.286-10.252,11.9-14.085,22.732-13.761a202.3,202.3,0,0,0,89.232-17.644A257.328,257.328,0,0,0,528.458,395.6c1.4-1.009,2.885-1.912,5.222-3.451-.953,3.026-1.265,5.258-2.293,7.089-14.936,26.6-31.633,51.891-54.057,72.956-18.879,17.734-40.265,31.046-65.744,36.862-15.1,3.446-30.348,6.253-45.529,9.349-18.622,3.8-37.406,6.945-55.825,11.553-27.566,6.9-51.782,20.673-73.654,38.685-23.608,19.441-42.473,43.054-59.8,68-24.96,35.939-44.814,74.717-63.24,114.278q-3.9,8.368-7.793,16.738l-1.263-.245"
transform="translate(583.845 -45.198)" fill="#231955"/>
<path id="Path_7" data-name="Path 7"
d="M405.392,690.855l-53.546,54.494-55.389-51.215,55.1-53.062L405.4,690.854"
transform="translate(518.777 -129.57)" fill="#ff9100"/>
</g>
<text id="MARHABA" transform="translate(-17322 -4931)" fill="#bcbcbc" font-size="50" font-family="Montserrat-ExtraBold, Montserrat" font-weight="800"><tspan x="-281.35" y="0">MARHABA</tspan></text>
<text id="MARHABA" transform="translate(-17322 -4931)" fill="#bcbcbc" font-size="50"
font-family="Montserrat-ExtraBold, Montserrat" font-weight="800">
<tspan x="-281.35" y="0">MARHABA</tspan>
</text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@@ -1,32 +1,25 @@
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 {token} = useUser();
const {directionApp} = useDirection();
const handleSubmit = (values, { setSubmitting, resetForm }) => {
const handleSubmit = (values, {setSubmitting, resetForm}) => {
toast.dismiss();
const pendingToast = toast(t("notifications.pending"), {
position: directionApp === "ltr" ? "top-left" : "top-right",
@@ -43,7 +36,7 @@ const DashboardChangePasswordComponent = () => {
new_password_confirmation: values.new_password_confirmation,
},
{
headers: { authorization: `Bearer ${token}` },
headers: {authorization: `Bearer ${token}`},
}
)
.then((response) => {
@@ -99,11 +92,11 @@ const DashboardChangePasswordComponent = () => {
}}
>
<Paper elevation={0}>
<Stack spacing={3} sx={{ p: 5 }} component="div">
<Stack spacing={3} sx={{p: 5}} component="div">
<Box
sx={{ position: "relative", width: "100%", height: 200 }}
sx={{position: "relative", width: "100%", height: 200}}
>
<Image fill src="/images/change-password.svg" alt="" />
<Image fill src="/images/change-password.svg" alt=""/>
</Box>
<Typography margin={2} variant="h4" textAlign="center">
{t("ChangePassword.typography_change_password")}

View File

@@ -2,31 +2,22 @@ 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();
const {user, token, getUser, changeUser} = useUser();
console.log(user);
const { directionApp } = useDirection();
const {directionApp} = useDirection();
const editAvatar = async (avatar) => {
try {
@@ -49,7 +40,7 @@ const DashboardEditProfile = () => {
throw error;
}
};
const handleSubmit = (values, { setSubmitting }) => {
const handleSubmit = (values, {setSubmitting}) => {
// const formData = new FormData();
// formData.append("email", values.expert_email);
// if (values.change_avatar !== false) {
@@ -133,7 +124,7 @@ const DashboardEditProfile = () => {
}}
>
<Paper elevation={0}>
<Stack spacing={3} sx={{ p: 5 }} component="div">
<Stack spacing={3} sx={{p: 5}} component="div">
<Typography margin={2} variant="h4" textAlign="center">
{t("UpdateProfile.typography_edit_profile")}
</Typography>
@@ -152,7 +143,7 @@ const DashboardEditProfile = () => {
changeFlag="change_avatar"
/>
</Box>
<Grid container spacing={2} sx={{ pb: 2 }}>
<Grid container spacing={2} sx={{pb: 2}}>
<Grid item xs={12} sm={6}>
<Field
as={TextField}

View File

@@ -1,24 +1,16 @@
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 ConfirmForm = ({open, handleClose, rowId, confirmData}) => {
const t = useTranslations();
const { directionApp } = useDirection();
const {directionApp} = useDirection();
const [proposedAmount, setProposedAmount] = useState("");
const [description, setDescription] = useState("");
const [selectedImage, setSelectedImage] = useState("");
@@ -87,7 +79,7 @@ const ConfirmForm = ({ open, handleClose, rowId, confirmData }) => {
onChange={handleDescriptionChange}
fullWidth
variant="outlined"
sx={{ mt: 1 }}
sx={{mt: 1}}
/>
<TextField
name="proposed_amount"
@@ -109,7 +101,7 @@ const ConfirmForm = ({ open, handleClose, rowId, confirmData }) => {
helperText={
formik.touched.proposed_amount && formik.errors.proposed_amount
}
sx={{ mt: 1 }}
sx={{mt: 1}}
fullWidth
/>
<UploadSystem

View File

@@ -1,24 +1,16 @@
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 RejectForm = ({open, handleClose, rowId, rejectData}) => {
const t = useTranslations();
const { directionApp } = useDirection();
const {directionApp} = useDirection();
const [description, setDescription] = useState("");
const [selectedImage, setSelectedImage] = useState("");
const [fileType, setfileType] = useState(null);
@@ -85,7 +77,7 @@ const RejectForm = ({ open, handleClose, rowId, rejectData }) => {
helperText={formik.touched.description && formik.errors.description}
fullWidth
variant="outlined"
sx={{ mt: 1 }}
sx={{mt: 1}}
/>
<UploadSystem
selectedImage={selectedImage}

View File

@@ -1,13 +1,13 @@
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 TableRowActions = ({row}) => {
const t = useTranslations();
const {
openConfirmDialog,
@@ -21,7 +21,7 @@ const TableRowActions = ({ row }) => {
rejectData,
} = useContext(DataTableContext);
return (
<Box sx={{ display: "flex", flexWrap: "nowrap", gap: "8px" }}>
<Box sx={{display: "flex", flexWrap: "nowrap", gap: "8px"}}>
<Tooltip title={t("ConfirmDialog.confirm")}>
<IconButton
color="primary"
@@ -29,7 +29,7 @@ const TableRowActions = ({ row }) => {
handleOpenConfirmDialog(row);
}}
>
<ThumbUpAltIcon />
<ThumbUpAltIcon/>
</IconButton>
</Tooltip>
{openConfirmDialog && (
@@ -42,7 +42,7 @@ const TableRowActions = ({ row }) => {
)}
<Tooltip title={t("RejectDialog.reject")}>
<IconButton color="primary" onClick={() => handleOpenRejectDialog(row)}>
<ThumbDownIcon />
<ThumbDownIcon/>
</IconButton>
</Tooltip>
{openRejectDialog && (

View File

@@ -1,5 +1,5 @@
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();

View File

@@ -1,19 +1,16 @@
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();
@@ -35,7 +32,7 @@ function DashboardMachinaryOfficeComponent() {
"greaterThan",
"between",
],
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -47,7 +44,7 @@ function DashboardMachinaryOfficeComponent() {
datatype: "text",
filterFn: "contains",
columnFilterModeOptions: ["contains", "equals", "notEquals"],
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -66,7 +63,7 @@ function DashboardMachinaryOfficeComponent() {
"greaterThan",
"between",
],
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -85,7 +82,7 @@ function DashboardMachinaryOfficeComponent() {
"greaterThan",
"between",
],
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -99,14 +96,14 @@ function DashboardMachinaryOfficeComponent() {
filterFn: "lessThan",
minSize: 200,
columnFilterModeOptions: ["lessThan", "greaterThan"],
Cell: ({ renderedCellValue }) => {
Cell: ({renderedCellValue}) => {
return <Typography variant="body2">{renderedCellValue}</Typography>;
},
Header: ({ column }) => <em>{column.columnDef.header}</em>,
Filter: ({ column }) => {
Header: ({column}) => <em>{column.columnDef.header}</em>,
Filter: ({column}) => {
const filterFnValue = column.columnDef._filterFn;
return (
<Box sx={{ display: "flex", alignItems: "start" }}>
<Box sx={{display: "flex", alignItems: "start"}}>
<LocalizationProvider
dateAdapter={AdapterDateFnsJalali}
localeText={
@@ -127,7 +124,7 @@ function DashboardMachinaryOfficeComponent() {
textField: {
placeholder: "تاریخ خود را وارد کنید",
helperText: `${t("filter_mode")}: ${t(filterFnValue)}`,
sx: { minWidth: "120px" },
sx: {minWidth: "120px"},
variant: "standard",
},
}}
@@ -149,7 +146,7 @@ function DashboardMachinaryOfficeComponent() {
: "#bfbfbf",
}}
>
<ClearIcon />
<ClearIcon/>
</IconButton>
</Box>
);
@@ -162,7 +159,7 @@ function DashboardMachinaryOfficeComponent() {
header: t("MachinaryOffice.updated_at"),
enableColumnFilter: false,
datatype: "numeric",
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -182,7 +179,7 @@ function DashboardMachinaryOfficeComponent() {
"greaterThan",
"between",
],
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -194,7 +191,7 @@ function DashboardMachinaryOfficeComponent() {
datatype: "text",
filterFn: "contains",
columnFilterModeOptions: ["contains", "equals", "notEquals"],
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -209,7 +206,7 @@ function DashboardMachinaryOfficeComponent() {
// filterSelectOptions: [
// ],
// filterVariant: "select",
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -218,7 +215,7 @@ function DashboardMachinaryOfficeComponent() {
);
return (
<DashboardLayouts>
<Box sx={{ px: 3 }}>
<Box sx={{px: 3}}>
<DataTableStructure
tableUrl={GET_MACHINARY_OFFICE}
columns={columns}
@@ -234,7 +231,7 @@ function DashboardMachinaryOfficeComponent() {
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 }) => <TableRowActions row={row} />}
renderRowActions={({row}) => <TableRowActions row={row}/>}
/>
</Box>
</DashboardLayouts>

View File

@@ -1,24 +1,16 @@
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 ConfirmForm = ({open, handleClose, rowId, confirmData}) => {
const t = useTranslations();
const { directionApp } = useDirection();
const {directionApp} = useDirection();
const [proposedAmount, setProposedAmount] = useState("");
const [description, setDescription] = useState("");
const [selectedImage, setSelectedImage] = useState("");
@@ -89,7 +81,7 @@ const ConfirmForm = ({ open, handleClose, rowId, confirmData }) => {
onChange={handleDescriptionChange}
fullWidth
variant="outlined"
sx={{ mt: 1 }}
sx={{mt: 1}}
/>
<TextField
name="proposed_amount"
@@ -111,7 +103,7 @@ const ConfirmForm = ({ open, handleClose, rowId, confirmData }) => {
helperText={
formik.touched.proposed_amount && formik.errors.proposed_amount
}
sx={{ mt: 1 }}
sx={{mt: 1}}
fullWidth
/>
<UploadSystem

View File

@@ -1,24 +1,16 @@
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 RejectForm = ({open, handleClose, rowId, rejectData}) => {
const t = useTranslations();
const { directionApp } = useDirection();
const {directionApp} = useDirection();
const [description, setDescription] = useState("");
const [selectedImage, setSelectedImage] = useState("");
const [fileType, setfileType] = useState(null);
@@ -85,7 +77,7 @@ const RejectForm = ({ open, handleClose, rowId, rejectData }) => {
helperText={formik.touched.description && formik.errors.description}
fullWidth
variant="outlined"
sx={{ mt: 1 }}
sx={{mt: 1}}
/>
<UploadSystem
selectedImage={selectedImage}

View File

@@ -1,13 +1,13 @@
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 TableRowActions = ({row}) => {
const t = useTranslations();
const {
openConfirmDialog,
@@ -21,7 +21,7 @@ const TableRowActions = ({ row }) => {
rejectData,
} = useContext(DataTableContext);
return (
<Box sx={{ display: "flex", flexWrap: "nowrap", gap: "8px" }}>
<Box sx={{display: "flex", flexWrap: "nowrap", gap: "8px"}}>
<Tooltip title={t("ConfirmDialog.confirm")}>
<IconButton
color="primary"
@@ -29,7 +29,7 @@ const TableRowActions = ({ row }) => {
handleOpenConfirmDialog(row);
}}
>
<ThumbUpAltIcon />
<ThumbUpAltIcon/>
</IconButton>
</Tooltip>
{openConfirmDialog && (
@@ -42,7 +42,7 @@ const TableRowActions = ({ row }) => {
)}
<Tooltip title={t("RejectDialog.reject")}>
<IconButton color="primary" onClick={() => handleOpenRejectDialog(row)}>
<ThumbDownIcon />
<ThumbDownIcon/>
</IconButton>
</Tooltip>
{openRejectDialog && (

View File

@@ -1,5 +1,5 @@
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();

View File

@@ -1,19 +1,16 @@
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();
@@ -36,7 +33,7 @@ function DashboardPassengerOfficeComponent() {
"greaterThan",
"between",
],
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -48,7 +45,7 @@ function DashboardPassengerOfficeComponent() {
datatype: "text",
filterFn: "contains",
columnFilterModeOptions: ["contains", "equals", "notEquals"],
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -67,7 +64,7 @@ function DashboardPassengerOfficeComponent() {
"greaterThan",
"between",
],
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -86,7 +83,7 @@ function DashboardPassengerOfficeComponent() {
"greaterThan",
"between",
],
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -100,14 +97,14 @@ function DashboardPassengerOfficeComponent() {
filterFn: "lessThan",
minSize: 200,
columnFilterModeOptions: ["lessThan", "greaterThan"],
Cell: ({ renderedCellValue }) => {
Cell: ({renderedCellValue}) => {
return <Typography variant="body2">{renderedCellValue}</Typography>;
},
Header: ({ column }) => <em>{column.columnDef.header}</em>,
Filter: ({ column }) => {
Header: ({column}) => <em>{column.columnDef.header}</em>,
Filter: ({column}) => {
const filterFnValue = column.columnDef._filterFn;
return (
<Box sx={{ display: "flex", alignItems: "start" }}>
<Box sx={{display: "flex", alignItems: "start"}}>
<LocalizationProvider
dateAdapter={AdapterDateFnsJalali}
localeText={
@@ -128,7 +125,7 @@ function DashboardPassengerOfficeComponent() {
textField: {
placeholder: "تاریخ خود را وارد کنید",
helperText: `${t("filter_mode")}: ${t(filterFnValue)}`,
sx: { minWidth: "120px" },
sx: {minWidth: "120px"},
variant: "standard",
},
}}
@@ -150,7 +147,7 @@ function DashboardPassengerOfficeComponent() {
: "#bfbfbf",
}}
>
<ClearIcon />
<ClearIcon/>
</IconButton>
</Box>
);
@@ -163,7 +160,7 @@ function DashboardPassengerOfficeComponent() {
header: t("PassengerBoss.updated_at"),
enableColumnFilter: false,
datatype: "numeric",
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -183,7 +180,7 @@ function DashboardPassengerOfficeComponent() {
"greaterThan",
"between",
],
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -195,7 +192,7 @@ function DashboardPassengerOfficeComponent() {
datatype: "text",
filterFn: "contains",
columnFilterModeOptions: ["contains", "equals", "notEquals"],
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -210,7 +207,7 @@ function DashboardPassengerOfficeComponent() {
// filterSelectOptions: [
// ],
// filterVariant: "select",
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -219,7 +216,7 @@ function DashboardPassengerOfficeComponent() {
);
return (
<DashboardLayouts>
<Box sx={{ px: 3 }}>
<Box sx={{px: 3}}>
<DataTableStructure
tableUrl={GET_PASSENGER_BOSS}
columns={columns}
@@ -235,7 +232,7 @@ function DashboardPassengerOfficeComponent() {
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 }) => <TableRowActions row={row} />}
renderRowActions={({row}) => <TableRowActions row={row}/>}
/>
</Box>
</DashboardLayouts>

View File

@@ -1,23 +1,15 @@
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 ConfirmForm = ({open, handleClose, rowId, confirmData}) => {
const t = useTranslations();
const { directionApp } = useDirection();
const {directionApp} = useDirection();
const [description, setDescription] = useState("");
const [selectedImage, setSelectedImage] = useState("");
const [fileType, setfileType] = useState(null);
@@ -76,7 +68,7 @@ const ConfirmForm = ({ open, handleClose, rowId, confirmData }) => {
onBlur={formik.handleBlur("description")}
fullWidth
variant="outlined"
sx={{ mt: 1 }}
sx={{mt: 1}}
/>
<UploadSystem
selectedImage={selectedImage}

View File

@@ -1,24 +1,16 @@
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 RejectForm = ({open, handleClose, rowId, rejectData}) => {
const t = useTranslations();
const { directionApp } = useDirection();
const {directionApp} = useDirection();
const [description, setDescription] = useState("");
const [selectedImage, setSelectedImage] = useState("");
const [fileType, setfileType] = useState(null);
@@ -83,7 +75,7 @@ const RejectForm = ({ open, handleClose, rowId, rejectData }) => {
helperText={formik.touched.description && formik.errors.description}
fullWidth
variant="outlined"
sx={{ mt: 1 }}
sx={{mt: 1}}
/>
<UploadSystem
selectedImage={selectedImage}

View File

@@ -1,13 +1,13 @@
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 TableRowActions = ({row}) => {
const t = useTranslations();
const {
openConfirmDialog,
@@ -21,7 +21,7 @@ const TableRowActions = ({ row }) => {
rejectData,
} = useContext(DataTableContext);
return (
<Box sx={{ display: "flex", flexWrap: "nowrap", gap: "8px" }}>
<Box sx={{display: "flex", flexWrap: "nowrap", gap: "8px"}}>
<Tooltip title={t("ConfirmDialog.confirm")}>
<IconButton
color="primary"
@@ -29,7 +29,7 @@ const TableRowActions = ({ row }) => {
handleOpenConfirmDialog(row);
}}
>
<ThumbUpAltIcon />
<ThumbUpAltIcon/>
</IconButton>
</Tooltip>
{openConfirmDialog && (
@@ -42,7 +42,7 @@ const TableRowActions = ({ row }) => {
)}
<Tooltip title={t("RejectDialog.reject")}>
<IconButton color="primary" onClick={() => handleOpenRejectDialog(row)}>
<ThumbDownIcon />
<ThumbDownIcon/>
</IconButton>
</Tooltip>
{openRejectDialog && (

View File

@@ -1,5 +1,5 @@
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();

View File

@@ -1,20 +1,16 @@
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();
@@ -37,7 +33,7 @@ function DashboardPassengerOfficeComponent() {
"greaterThan",
"between",
],
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -49,7 +45,7 @@ function DashboardPassengerOfficeComponent() {
datatype: "text",
filterFn: "contains",
columnFilterModeOptions: ["contains", "equals", "notEquals"],
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -68,7 +64,7 @@ function DashboardPassengerOfficeComponent() {
"greaterThan",
"between",
],
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -87,7 +83,7 @@ function DashboardPassengerOfficeComponent() {
"greaterThan",
"between",
],
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -101,14 +97,14 @@ function DashboardPassengerOfficeComponent() {
filterFn: "lessThan",
minSize: 200,
columnFilterModeOptions: ["lessThan", "greaterThan"],
Cell: ({ renderedCellValue }) => {
Cell: ({renderedCellValue}) => {
return <Typography variant="body2">{renderedCellValue}</Typography>;
},
Header: ({ column }) => <em>{column.columnDef.header}</em>,
Filter: ({ column }) => {
Header: ({column}) => <em>{column.columnDef.header}</em>,
Filter: ({column}) => {
const filterFnValue = column.columnDef._filterFn;
return (
<Box sx={{ display: "flex", alignItems: "start" }}>
<Box sx={{display: "flex", alignItems: "start"}}>
<LocalizationProvider
dateAdapter={AdapterDateFnsJalali}
localeText={
@@ -129,9 +125,9 @@ function DashboardPassengerOfficeComponent() {
textField: {
placeholder: "تاریخ خود را وارد کنید",
helperText: `${t("filter_mode")}: ${t(filterFnValue)}`,
sx: { minWidth: "120px" },
sx: {minWidth: "120px"},
variant: "standard",
actionBar: { actions: ["accept", "today"] },
actionBar: {actions: ["accept", "today"]},
},
}}
value={
@@ -152,7 +148,7 @@ function DashboardPassengerOfficeComponent() {
: "#bfbfbf",
}}
>
<ClearIcon />
<ClearIcon/>
</IconButton>
</Box>
);
@@ -165,7 +161,7 @@ function DashboardPassengerOfficeComponent() {
header: t("PassengerOffice.updated_at"),
enableColumnFilter: false,
datatype: "numeric",
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -185,7 +181,7 @@ function DashboardPassengerOfficeComponent() {
"greaterThan",
"between",
],
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -197,7 +193,7 @@ function DashboardPassengerOfficeComponent() {
datatype: "text",
filterFn: "contains",
columnFilterModeOptions: ["contains", "equals", "notEquals"],
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -212,7 +208,7 @@ function DashboardPassengerOfficeComponent() {
// filterSelectOptions: [
// ],
// filterVariant: "select",
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -221,7 +217,7 @@ function DashboardPassengerOfficeComponent() {
);
return (
<DashboardLayouts>
<Box sx={{ px: 3 }}>
<Box sx={{px: 3}}>
<DataTableStructure
tableUrl={GET_PASSENGER_OFFICE}
columns={columns}
@@ -237,7 +233,7 @@ function DashboardPassengerOfficeComponent() {
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 }) => <TableRowActions row={row} />}
renderRowActions={({row}) => <TableRowActions row={row}/>}
/>
</Box>
</DashboardLayouts>

View File

@@ -1,23 +1,15 @@
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 ConfirmForm = ({open, handleClose, rowId, confirmData}) => {
const t = useTranslations();
const { directionApp } = useDirection();
const {directionApp} = useDirection();
const [description, setDescription] = useState("");
const [selectedImage, setSelectedImage] = useState("");
const [fileType, setfileType] = useState(null);
@@ -76,7 +68,7 @@ const ConfirmForm = ({ open, handleClose, rowId, confirmData }) => {
onBlur={formik.handleBlur("description")}
fullWidth
variant="outlined"
sx={{ mt: 1 }}
sx={{mt: 1}}
/>
<UploadSystem
selectedImage={selectedImage}

View File

@@ -1,24 +1,16 @@
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 RejectForm = ({open, handleClose, rowId, rejectData}) => {
const t = useTranslations();
const { directionApp } = useDirection();
const {directionApp} = useDirection();
const [description, setDescription] = useState("");
const [selectedImage, setSelectedImage] = useState("");
const [fileType, setfileType] = useState(null);
@@ -84,7 +76,7 @@ const RejectForm = ({ open, handleClose, rowId, rejectData }) => {
helperText={formik.touched.description && formik.errors.description}
fullWidth
variant="outlined"
sx={{ mt: 1 }}
sx={{mt: 1}}
/>
<UploadSystem
selectedImage={selectedImage}

View File

@@ -1,13 +1,13 @@
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 TableRowActions = ({row}) => {
const t = useTranslations();
const {
openConfirmDialog,
@@ -21,7 +21,7 @@ const TableRowActions = ({ row }) => {
rejectData,
} = useContext(DataTableContext);
return (
<Box sx={{ display: "flex", flexWrap: "nowrap", gap: "8px" }}>
<Box sx={{display: "flex", flexWrap: "nowrap", gap: "8px"}}>
<Tooltip title={t("ConfirmDialog.confirm")}>
<IconButton
color="primary"
@@ -29,7 +29,7 @@ const TableRowActions = ({ row }) => {
handleOpenConfirmDialog(row);
}}
>
<ThumbUpAltIcon />
<ThumbUpAltIcon/>
</IconButton>
</Tooltip>
{openConfirmDialog && (
@@ -42,7 +42,7 @@ const TableRowActions = ({ row }) => {
)}
<Tooltip title={t("RejectDialog.reject")}>
<IconButton color="primary" onClick={() => handleOpenRejectDialog(row)}>
<ThumbDownIcon />
<ThumbDownIcon/>
</IconButton>
</Tooltip>
{openRejectDialog && (

View File

@@ -1,5 +1,5 @@
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();

View File

@@ -1,19 +1,16 @@
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();
@@ -36,7 +33,7 @@ function DashboardProvinceManagerComponent() {
"greaterThan",
"between",
],
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -48,7 +45,7 @@ function DashboardProvinceManagerComponent() {
datatype: "text",
filterFn: "contains",
columnFilterModeOptions: ["contains", "equals", "notEquals"],
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -67,7 +64,7 @@ function DashboardProvinceManagerComponent() {
"greaterThan",
"between",
],
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -86,7 +83,7 @@ function DashboardProvinceManagerComponent() {
"greaterThan",
"between",
],
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -100,14 +97,14 @@ function DashboardProvinceManagerComponent() {
filterFn: "lessThan",
minSize: 200,
columnFilterModeOptions: ["lessThan", "greaterThan"],
Cell: ({ renderedCellValue }) => {
Cell: ({renderedCellValue}) => {
return <Typography variant="body2">{renderedCellValue}</Typography>;
},
Header: ({ column }) => <em>{column.columnDef.header}</em>,
Filter: ({ column }) => {
Header: ({column}) => <em>{column.columnDef.header}</em>,
Filter: ({column}) => {
const filterFnValue = column.columnDef._filterFn;
return (
<Box sx={{ display: "flex", alignItems: "start" }}>
<Box sx={{display: "flex", alignItems: "start"}}>
<LocalizationProvider
dateAdapter={AdapterDateFnsJalali}
localeText={
@@ -128,7 +125,7 @@ function DashboardProvinceManagerComponent() {
textField: {
placeholder: "تاریخ خود را وارد کنید",
helperText: `${t("filter_mode")}: ${t(filterFnValue)}`,
sx: { minWidth: "120px" },
sx: {minWidth: "120px"},
variant: "standard",
},
}}
@@ -150,7 +147,7 @@ function DashboardProvinceManagerComponent() {
: "#bfbfbf",
}}
>
<ClearIcon />
<ClearIcon/>
</IconButton>
</Box>
);
@@ -163,7 +160,7 @@ function DashboardProvinceManagerComponent() {
header: t("ProvinceManager.updated_at"),
enableColumnFilter: false,
datatype: "numeric",
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -183,7 +180,7 @@ function DashboardProvinceManagerComponent() {
"greaterThan",
"between",
],
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -195,7 +192,7 @@ function DashboardProvinceManagerComponent() {
datatype: "text",
filterFn: "contains",
columnFilterModeOptions: ["contains", "equals", "notEquals"],
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -210,7 +207,7 @@ function DashboardProvinceManagerComponent() {
// filterSelectOptions: [
// ],
// filterVariant: "select",
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -219,7 +216,7 @@ function DashboardProvinceManagerComponent() {
);
return (
<DashboardLayouts>
<Box sx={{ px: 3 }}>
<Box sx={{px: 3}}>
<DataTableStructure
tableUrl={GET_PROVINCE_MANAGER}
columns={columns}
@@ -235,7 +232,7 @@ function DashboardProvinceManagerComponent() {
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 }) => <TableRowActions row={row} />}
renderRowActions={({row}) => <TableRowActions row={row}/>}
/>
</Box>
</DashboardLayouts>

View File

@@ -1,23 +1,15 @@
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 ConfirmForm = ({open, handleClose, rowId, confirmData}) => {
const t = useTranslations();
const { directionApp } = useDirection();
const {directionApp} = useDirection();
const [description, setDescription] = useState("");
const [selectedImage, setSelectedImage] = useState("");
const [fileType, setfileType] = useState(null);
@@ -72,7 +64,7 @@ const ConfirmForm = ({ open, handleClose, rowId, confirmData }) => {
onChange={handleDescriptionChange}
fullWidth
variant="outlined"
sx={{ mt: 1 }}
sx={{mt: 1}}
/>
<UploadSystem
selectedImage={selectedImage}

View File

@@ -1,29 +1,21 @@
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 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 {directionApp} = useDirection();
const validationSchema = Yup.object().shape({
description: Yup.string().required(t("RejectDialog.description_error")),
@@ -83,7 +75,7 @@ const RejectForm = ({ open, handleClose, rowId, rejectData }) => {
helperText={formik.touched.description && formik.errors.description}
fullWidth
variant="outlined"
sx={{ mt: 1 }}
sx={{mt: 1}}
/>
<UploadSystem
selectedImage={selectedImage}

View File

@@ -1,13 +1,13 @@
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 TableRowActions = ({row}) => {
const t = useTranslations();
const {
@@ -22,7 +22,7 @@ const TableRowActions = ({ row }) => {
rejectData,
} = useContext(DataTableContext);
return (
<Box sx={{ display: "flex", flexWrap: "nowrap", gap: "8px" }}>
<Box sx={{display: "flex", flexWrap: "nowrap", gap: "8px"}}>
<Tooltip title={t("ConfirmDialog.confirm")}>
<IconButton
color="primary"
@@ -30,7 +30,7 @@ const TableRowActions = ({ row }) => {
handleOpenConfirmDialog(row);
}}
>
<ThumbUpAltIcon />
<ThumbUpAltIcon/>
</IconButton>
</Tooltip>
{openConfirmDialog && (
@@ -43,7 +43,7 @@ const TableRowActions = ({ row }) => {
)}
<Tooltip title={t("RejectDialog.reject")}>
<IconButton color="primary" onClick={() => handleOpenRejectDialog(row)}>
<ThumbDownIcon />
<ThumbDownIcon/>
</IconButton>
</Tooltip>
{openRejectDialog && (

View File

@@ -1,5 +1,5 @@
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();

View File

@@ -1,18 +1,15 @@
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() {
@@ -35,7 +32,7 @@ function DashboardTransportationAssistanceComponent() {
"greaterThan",
"between",
],
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -47,7 +44,7 @@ function DashboardTransportationAssistanceComponent() {
datatype: "text",
filterFn: "contains",
columnFilterModeOptions: ["contains", "equals", "notEquals"],
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -67,7 +64,7 @@ function DashboardTransportationAssistanceComponent() {
"greaterThan",
"between",
],
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -86,7 +83,7 @@ function DashboardTransportationAssistanceComponent() {
"greaterThan",
"between",
],
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -100,14 +97,14 @@ function DashboardTransportationAssistanceComponent() {
minSize: 200,
filterFn: "lessThan",
columnFilterModeOptions: ["lessThan", "greaterThan"],
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
Header: ({ column }) => <em>{column.columnDef.header}</em>,
Filter: ({ column }) => {
Header: ({column}) => <em>{column.columnDef.header}</em>,
Filter: ({column}) => {
const filterFnValue = column.columnDef._filterFn;
return (
<Box sx={{ display: "flex", alignItems: "start" }}>
<Box sx={{display: "flex", alignItems: "start"}}>
<LocalizationProvider
dateAdapter={AdapterDateFnsJalali}
localeText={
@@ -128,7 +125,7 @@ function DashboardTransportationAssistanceComponent() {
textField: {
placeholder: "تاریخ خود را وارد کنید",
helperText: `${t("filter_mode")}: ${t(filterFnValue)}`,
sx: { minWidth: "120px" },
sx: {minWidth: "120px"},
variant: "standard",
},
}}
@@ -150,7 +147,7 @@ function DashboardTransportationAssistanceComponent() {
: "#bfbfbf",
}}
>
<ClearIcon />
<ClearIcon/>
</IconButton>
</Box>
);
@@ -163,7 +160,7 @@ function DashboardTransportationAssistanceComponent() {
header: t("TransportationAssistance.updated_at"),
enableColumnFilter: false,
datatype: "numeric",
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -183,7 +180,7 @@ function DashboardTransportationAssistanceComponent() {
"greaterThan",
"between",
],
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -195,7 +192,7 @@ function DashboardTransportationAssistanceComponent() {
datatype: "text",
filterFn: "contains",
columnFilterModeOptions: ["contains", "equals", "notEquals"],
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -210,7 +207,7 @@ function DashboardTransportationAssistanceComponent() {
// filterSelectOptions: [
// ],
// filterVariant: "select",
Cell: ({ renderedCellValue }) => (
Cell: ({renderedCellValue}) => (
<Typography variant="body2">{renderedCellValue}</Typography>
),
},
@@ -219,7 +216,7 @@ function DashboardTransportationAssistanceComponent() {
);
return (
<DashboardLayouts>
<Box sx={{ px: 3 }}>
<Box sx={{px: 3}}>
<DataTableStructure
tableUrl={GET_TRANSPORTATION_ASSISTANCE}
columns={columns}
@@ -235,7 +232,7 @@ function DashboardTransportationAssistanceComponent() {
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 }) => <TableRowActions row={row} />}
renderRowActions={({row}) => <TableRowActions row={row}/>}
/>
</Box>
</DashboardLayouts>

View File

@@ -1,18 +1,18 @@
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 {isAuth} = useUser();
return (
<FullPageLayout sx={{ p: 1 }}>
<FullPageLayout sx={{p: 1}}>
<CenterLayout spacing={3}>
<StyledImage
src={dahsboardImage}
@@ -20,7 +20,7 @@ const FirstComponent = () => {
width={300}
height={200}
/>
<Typography variant="h5" sx={{ textAlign: "center" }}>
<Typography variant="h5" sx={{textAlign: "center"}}>
{t("app_name")}
</Typography>
{isAuth ? (
@@ -35,7 +35,7 @@ const FirstComponent = () => {
</Button>
) : (
<Button
sx={{ mx: 2 }}
sx={{mx: 2}}
variant="contained"
component={NextLinkComposed}
to={{

View File

@@ -2,32 +2,23 @@ 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 {setToken} = useUser(); // pass token to set token
// gettin url query
const searchParams = useSearchParams();
@@ -58,7 +49,7 @@ const LoginComponent = () => {
});
return (
<FullPageLayout sx={{ p: 1 }}>
<FullPageLayout sx={{p: 1}}>
<CenterLayout>
<Container maxWidth="sm">
<Paper elevation={0}>
@@ -68,17 +59,17 @@ const LoginComponent = () => {
validationSchema={validationSchema}
>
{(props) => (
<Stack spacing={2} sx={{ p: 2 }}>
<Stack spacing={2} sx={{p: 2}}>
<Box
sx={{ position: "relative", width: "100%", height: 200 }}
sx={{position: "relative", width: "100%", height: 200}}
>
<Image fill src="/images/login.svg" alt={t("app_name")} />
<Image fill src="/images/login.svg" alt={t("app_name")}/>
</Box>
<Typography margin={2} variant="h4" textAlign="center">
{t("login_expert")}
</Typography>
<StyledForm sx={{ width: "100%" }}>
<Stack spacing={3} sx={{ p: 2 }}>
<StyledForm sx={{width: "100%"}}>
<Stack spacing={3} sx={{p: 2}}>
<Field
as={TextField}
name="username"
@@ -125,7 +116,7 @@ const LoginComponent = () => {
variant="contained"
fullWidth
size="medium"
endIcon={<LoginIcon />}
endIcon={<LoginIcon/>}
disabled={props.isSubmitting ? true : false}
>
{t("LoginPage.button_submit")}
@@ -141,7 +132,7 @@ const LoginComponent = () => {
</CenterLayout>
<Stack direction="row" alignItems="center" justifyContent="center">
<LinkRouting
sx={{ margin: 2 }}
sx={{margin: 2}}
href={
backUrlDecodedPath ? decodeURIComponent(backUrlDecodedPath) : "/"
}

View File

@@ -1,9 +1,9 @@
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 AvatarUpload = ({user, setFieldValue, valueAvatar, changeFlag}) => {
const [selectedImage, setSelectedImage] = useState(user.expert_avatar);
const [isHovered, setIsHovered] = useState(false);
@@ -118,7 +118,7 @@ const AvatarUpload = ({ user, setFieldValue, valueAvatar, changeFlag }) => {
id="avatar-upload"
type="file"
accept="image/*"
sx={{ display: "none" }}
sx={{display: "none"}}
onChange={handleImageChange}
/>
</Box>

View File

@@ -1,15 +1,15 @@
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(
const {reloadDataTable, setReloadDataTable} = useContext(
ReloadDataTableContext
);
@@ -26,12 +26,12 @@ const DataTable = (props) => {
});
};
const t = useTranslations();
const { languageApp, languageList } = useLanguage();
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]: "" }
item.enableColumnFilter ? {[item.id]: item.filterFn} : {[item.id]: ""}
);
for (var key in list) {
var nestedObj = list[key];
@@ -42,7 +42,7 @@ const DataTable = (props) => {
return output;
});
const [sorting, setSorting] = useState([]);
const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: 10 });
const [pagination, setPagination] = useState({pageIndex: 0, pageSize: 10});
const [rowCount, setRowCount] = useState(0);
const [updateTime, setupdateTime] = useState(
moment().format("HH:mm | jYYYY/jM/jD")
@@ -85,7 +85,7 @@ const DataTable = (props) => {
sorting,
props.columns,
]);
const { data, isLoading, isValidating, mutate } = useSWR(fetchUrl, fetcher, {
const {data, isLoading, isValidating, mutate} = useSWR(fetchUrl, fetcher, {
revalidateOnFocus: false,
});
@@ -119,25 +119,25 @@ const DataTable = (props) => {
muiTableHeadCellProps={{
sx: {
color: "primary.main",
"& .Mui-TableHeadCell-Content": { justifyContent: "space-between" },
"& .Mui-TableHeadCell-Content": {justifyContent: "space-between"},
},
}}
enableColumnFilterModes
muiTablePaperProps={{ elevation: 0 }}
muiTablePaperProps={{elevation: 0}}
rowCount={rowCount}
onColumnFilterFnsChange={setColumnFilterFns}
onColumnFiltersChange={setColumnFilters}
onPaginationChange={setPagination}
onSortingChange={setSorting}
positionToolbarAlertBanner="bottom"
renderTopToolbarCustomActions={({ table }) => (
renderTopToolbarCustomActions={({table}) => (
<>
{props.enableCustomToolbar /* send condition */
? props.CustomToolbar /* send component */
: ""}
</>
)}
renderBottomToolbarCustomActions={({ table }) => (
renderBottomToolbarCustomActions={({table}) => (
<>
{props.enableLastUpdate /* send condition */ ? (
<Typography
@@ -145,7 +145,7 @@ const DataTable = (props) => {
color: "primary.main",
alignSelf: "center",
whiteSpace: "nowrap",
maxWidth: { xs: 100, sm: "100%" },
maxWidth: {xs: 100, sm: "100%"},
overflowX: "scroll",
}}
variant="caption"

View File

@@ -1,12 +1,12 @@
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 (
<ReloadDataTableProvider>
<DataTableProvider>
<DataTable {...props} token={localStorage.getItem("_token")} />
<DataTable {...props} token={localStorage.getItem("_token")}/>
</DataTableProvider>
</ReloadDataTableProvider>
);

View File

@@ -1,4 +1,5 @@
import { Typography } from "@mui/material";
import {Typography} from "@mui/material";
const FormErrorMessage = (props) => {
return (
<Typography variant="body2" color="error">

View File

@@ -1,8 +1,8 @@
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.

View File

@@ -1,4 +1,4 @@
import { Backdrop, Fade, styled } from "@mui/material";
import {Backdrop, Fade, styled} from "@mui/material";
import StyledImage from "./StyledImage";
const LoadingImage = styled(StyledImage)({
@@ -19,11 +19,11 @@ const LoadingImage = styled(StyledImage)({
animation: "load 2s infinite",
});
const LoadingHardPage = ({ children, loading }) => {
const LoadingHardPage = ({children, loading}) => {
return (
<>
<Backdrop
sx={{ bgcolor: "#fff", zIndex: (theme) => theme.zIndex.drawer + 1 }}
sx={{bgcolor: "#fff", zIndex: (theme) => theme.zIndex.drawer + 1}}
open={loading}
>
<Fade in={true}>

View File

@@ -2,9 +2,9 @@ import CenterLayout from "@/layouts/CenterLayout";
import FullPageLayout from "@/layouts/FullPageLayout";
import StyledImage from "./StyledImage";
const Message = ({ text, actions }) => {
const Message = ({text, actions}) => {
return (
<FullPageLayout sx={{ p: 1 }}>
<FullPageLayout sx={{p: 1}}>
<CenterLayout spacing={3}>
<StyledImage
src={"/images/loading_logo.svg"}

View File

@@ -1,14 +1,14 @@
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();
const handleDateChange = (date) => {
@@ -19,7 +19,7 @@ export default function MuiDatePicker({
return (
<LocalizationProvider dateAdapter={AdapterDateFnsJalali}>
<DatePicker
sx={{ width: "100%" }}
sx={{width: "100%"}}
label={t("MuiDatePicker.date_picker_birthday")}
slotProps={{
textField: {

View File

@@ -1,7 +1,7 @@
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);
@@ -21,7 +21,7 @@ const PasswordField = (props) => {
endAdornment: (
<InputAdornment position="end">
<IconButton onClick={handleClickShowPassword}>
{showPassword ? <Visibility /> : <VisibilityOff />}
{showPassword ? <Visibility/> : <VisibilityOff/>}
</IconButton>
</InputAdornment>
),

View File

@@ -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)``;

View File

@@ -1,4 +1,4 @@
import { styled } from "@mui/material";
import {styled} from "@mui/material";
import Image from "next/image";
const StyledImage = styled(Image)``;

View File

@@ -1,7 +1,7 @@
import { useTranslations } from "next-intl";
import {useTranslations} from "next-intl";
import Head from "next/head";
const TitlePage = ({ text }) => {
const TitlePage = ({text}) => {
const t = useTranslations();
return (
<Head>

View File

@@ -1,9 +1,8 @@
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,
@@ -17,7 +16,7 @@ const UploadSystem = ({
fileName,
setShowAddIcon,
showAddIcon,
}) => {
}) => {
const t = useTranslations();
const fileInputRef = useRef(null);
@@ -46,7 +45,7 @@ const UploadSystem = ({
};
return (
<Box sx={{ width: "100%", my: 1 }}>
<Box sx={{width: "100%", my: 1}}>
{showAddIcon ? (
// Show the add icon and "Upload File" text when no image is selected
<>
@@ -65,7 +64,7 @@ const UploadSystem = ({
}}
onClick={handleClick}
>
<AddIcon sx={{ fontSize: "2rem", color: "#a19d9d" }} />
<AddIcon sx={{fontSize: "2rem", color: "#a19d9d"}}/>
<Typography
variant="subtitle2"
sx={{
@@ -154,7 +153,7 @@ const UploadSystem = ({
width: "100%",
}}
color="error"
endIcon={<DeleteForeverIcon />}
endIcon={<DeleteForeverIcon/>}
variant="contained"
onClick={handleDeleteImage}
>
@@ -165,7 +164,7 @@ const UploadSystem = ({
<input
type="file"
accept="image/*, .pdf, .doc, .docx, .xls, .xlsx"
style={{ display: "none" }}
style={{display: "none"}}
onChange={handleUploadChange}
ref={fileInputRef}
/>

View File

@@ -1,6 +1,6 @@
import { NoSsr } from "@mui/material";
import {NoSsr} from "@mui/material";
const NoSsrHandler = ({ isBot, children }) => {
const NoSsrHandler = ({isBot, children}) => {
if (isBot) return children;
return <NoSsr>{children}</NoSsr>;
};

View File

@@ -1,6 +1,6 @@
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(
@@ -14,9 +14,9 @@ const ErrorNotification = (directionApp, status, t, message) => {
justifyContent: "start",
}}
>
<Box sx={{ display: "flex", alignItems: "center" }}>
<DangerousIcon color="error" sx={{ mr: 1.6 }} />
<Box sx={{ display: "flex", flexDirection: "column" }}>
<Box sx={{display: "flex", alignItems: "center"}}>
<DangerousIcon color="error" sx={{mr: 1.6}}/>
<Box sx={{display: "flex", flexDirection: "column"}}>
<Typography color="error" variant="button">
{t("notifications.error")} ({t("notifications.code")}: {status})
</Typography>

View File

@@ -1,6 +1,6 @@
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(
@@ -14,9 +14,9 @@ const SuccessNotification = (directionApp, status, t) => {
justifyContent: "start",
}}
>
<Box sx={{ display: "flex", alignItems: "center" }}>
<BeenhereIcon color="success" sx={{ mr: 1.6 }} />
<Box sx={{ display: "flex", flexDirection: "column" }}>
<Box sx={{display: "flex", alignItems: "center"}}>
<BeenhereIcon color="success" sx={{mr: 1.6}}/>
<Box sx={{display: "flex", flexDirection: "column"}}>
<Typography color="success.main" variant="button">
{t("notifications.success")} ({t("notifications.code")}:{" "}
{status})

View File

@@ -1,10 +1,10 @@
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 }) => (
({closeToast}) => (
<>
<Box
sx={{
@@ -14,9 +14,9 @@ const UploadFileNotification = (directionApp, t) => {
justifyContent: "start",
}}
>
<Box sx={{ display: "flex", alignItems: "center" }}>
<DangerousIcon color="error" sx={{ mr: 1.6 }} />
<Box sx={{ display: "flex", flexDirection: "column" }}>
<Box sx={{display: "flex", alignItems: "center"}}>
<DangerousIcon color="error" sx={{mr: 1.6}}/>
<Box sx={{display: "flex", flexDirection: "column"}}>
<Typography color="error" variant="button">
{t("UploadSystem.uploadfile_error")}
</Typography>

View File

@@ -1,6 +1,6 @@
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(
@@ -14,9 +14,9 @@ const WarningNotification = (directionApp, status, t) => {
justifyContent: "start",
}}
>
<Box sx={{ display: "flex", alignItems: "center" }}>
<ReportIcon color="warning" sx={{ mr: 1.6 }} />
<Box sx={{ display: "flex", flexDirection: "column" }}>
<Box sx={{display: "flex", alignItems: "center"}}>
<ReportIcon color="warning" sx={{mr: 1.6}}/>
<Box sx={{display: "flex", flexDirection: "column"}}>
<Typography color="warning.main" variant="button">
{t("notifications.warning")} ({t("notifications.code")}:{" "}
{status})

View File

@@ -3,7 +3,7 @@ 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:

View File

@@ -6,13 +6,13 @@ const headerProfileItems = [
key: 0,
name: "header.edit_profile",
route: "/dashboard/edit-profile",
icon: <BorderColorIcon />,
icon: <BorderColorIcon/>,
},
{
key: 1,
name: "header.change_password",
route: "/dashboard/change-password",
icon: <PasswordIcon />,
icon: <PasswordIcon/>,
},
];

View File

@@ -11,7 +11,7 @@ const sidebarMenu = [
key: "sidebar.dashboard",
type: "page",
route: "/dashboard",
icon: <SpaceDashboardIcon />,
icon: <SpaceDashboardIcon/>,
selected: false,
role: "all",
},
@@ -20,7 +20,7 @@ const sidebarMenu = [
secondary: "secondary.passenger-office",
type: "page",
route: "/dashboard/passenger-office-chief",
icon: <AirlineSeatReclineNormalIcon />,
icon: <AirlineSeatReclineNormalIcon/>,
selected: false,
role: "passenger_office_chief",
},
@@ -28,7 +28,7 @@ const sidebarMenu = [
key: "sidebar.machinary-expert",
type: "page",
route: "/dashboard/machinary-expert",
icon: <DirectionsCarFilledIcon />,
icon: <DirectionsCarFilledIcon/>,
selected: false,
role: "machinery_expert",
},
@@ -37,7 +37,7 @@ const sidebarMenu = [
secondary: "secondary.passenger-boss",
type: "page",
route: "/dashboard/passenger-boss",
icon: <AssignmentIndIcon />,
icon: <AssignmentIndIcon/>,
selected: false,
role: "passenger_office_chief",
},
@@ -45,7 +45,7 @@ const sidebarMenu = [
key: "sidebar.transportation-assistant",
type: "page",
route: "/dashboard/transportation-assistant",
icon: <DirectionsRailwayIcon />,
icon: <DirectionsRailwayIcon/>,
selected: false,
role: "transportation_assistant",
},
@@ -53,7 +53,7 @@ const sidebarMenu = [
key: "sidebar.province-manager",
type: "page",
route: "/dashboard/province-manager",
icon: <DesktopWindowsIcon />,
icon: <DesktopWindowsIcon/>,
selected: false,
role: "province_manager",
},

View File

@@ -1,5 +1,5 @@
import createCache from "@emotion/cache";
import { prefixer } from "stylis";
import {prefixer} from "stylis";
import stylisRTLPlugin from "stylis-plugin-rtl";
const isBrowser = typeof document !== "undefined";

View File

@@ -1,4 +1,4 @@
import { createTheme } from "@mui/material/styles";
import {createTheme} from "@mui/material/styles";
import theme from "./theme";
const themeRtl = createTheme({

View File

@@ -1,4 +1,4 @@
import { faIR } from "@mui/x-date-pickers/locales";
import {faIR} from "@mui/x-date-pickers/locales";
const theme = {
palette: {

View File

@@ -4,12 +4,12 @@ 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();
function AppLayout({children, isBot}) {
const {languageIsReady} = useLanguage();
const {setLoadingPage} = useLoading();
const {userChangedLanguage, token, isAuth} = useUser();
useEffect(() => {
if (languageIsReady) {
if (token) {
@@ -42,7 +42,7 @@ function AppLayout({ children, isBot }) {
name="application-name"
content={process.env.NEXT_PUBLIC_API_NAME}
/>
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-capable" content="yes"/>
<meta
name="apple-mobile-web-app-status-bar-style"
content="black-translucent"
@@ -51,13 +51,13 @@ function AppLayout({ children, isBot }) {
name="apple-mobile-web-app-title"
content={process.env.NEXT_PUBLIC_API_NAME}
/>
<meta name="description" content="Marhaba does it for you" />
<meta name="format-detection" content="telephone=no" />
<meta name="format-detection" content="date=no" />
<meta name="format-detection" content="address=no" />
<meta name="format-detection" content="email=no" />
<meta name="mobile-web-app-capable" content="yes" />
<link rel="apple-touch-icon" href="/icons/maskable_icon_x512.png" />
<meta name="description" content="Marhaba does it for you"/>
<meta name="format-detection" content="telephone=no"/>
<meta name="format-detection" content="date=no"/>
<meta name="format-detection" content="address=no"/>
<meta name="format-detection" content="email=no"/>
<meta name="mobile-web-app-capable" content="yes"/>
<link rel="apple-touch-icon" href="/icons/maskable_icon_x512.png"/>
<link
rel="apple-touch-icon"
sizes="120x120"
@@ -68,8 +68,8 @@ function AppLayout({ children, isBot }) {
sizes="180x180"
href="/icons/maskable_icon_x192.png"
/>
<meta name="google" content="notranslate" />
<meta name="robots" content="noindex" />
<meta name="google" content="notranslate"/>
<meta name="robots" content="noindex"/>
<meta
name="viewport"
content="minimum-scale=1, initial-scale=1, width=device-width, shrink-to-fit=no, user-scalable=no, viewport-fit=cover"
@@ -89,7 +89,7 @@ function AppLayout({ children, isBot }) {
</Head>
<NextNProgress
color={theme.palette.secondary.dark}
options={{ showSpinner: false }}
options={{showSpinner: false}}
/>
{children}
</>

View File

@@ -1,4 +1,4 @@
import { Fade, Stack } from "@mui/material";
import {Fade, Stack} from "@mui/material";
const CenterLayout = (props) => {
return (
@@ -7,7 +7,7 @@ const CenterLayout = (props) => {
alignItems="center"
justifyContent="center"
spacing={props?.spacing}
sx={{ flex: 1, ...props?.sx, py: 3 }}
sx={{flex: 1, ...props?.sx, py: 3}}
>
{props.children}
</Stack>

View File

@@ -1,4 +1,4 @@
import { Stack } from "@mui/material";
import {Stack} from "@mui/material";
const FullPageLayout = (props) => {
return (

View File

@@ -1,17 +1,15 @@
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;
@@ -20,7 +18,7 @@ const MuiLayout = ({ children, isBot }) => {
<NoSsrHandler isBot={isBot}>
<CacheProvider value={emotionCache}>
<Head>
<meta name="viewport" content="initial-scale=1, width=device-width" />
<meta name="viewport" content="initial-scale=1, width=device-width"/>
</Head>
<ThemeProvider theme={theme}>
<GlobalStyles
@@ -65,7 +63,7 @@ const MuiLayout = ({ children, isBot }) => {
}}
/>
<CssBaseline />
<CssBaseline/>
{children}
</ThemeProvider>
</CacheProvider>

View File

@@ -1,4 +1,4 @@
import { Box, Fade } from "@mui/material";
import {Box, Fade} from "@mui/material";
const ScrollableLayout = (props) => {
const overflowY = props?.y || "hidden";

View File

@@ -1,6 +1,6 @@
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();

View File

@@ -1,11 +1,11 @@
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 {isVisible} = props;
const theme = useTheme();
const router = useRouter();
@@ -13,7 +13,7 @@ const BreadCrumbs = (props) => {
return null;
}
const { pathname } = router;
const {pathname} = router;
const RouterArray = pathname.split("/").filter((segment) => segment !== "");
if (RouterArray.length === 1) {
@@ -26,9 +26,9 @@ const BreadCrumbs = (props) => {
maxItems={2}
separator={
theme.direction === "ltr" ? (
<NavigateNext fontSize="small" />
<NavigateNext fontSize="small"/>
) : (
<NavigateBefore fontSize="small" />
<NavigateBefore fontSize="small"/>
)
}
aria-label="breadcrumb"

View File

@@ -1,16 +1,16 @@
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();
const {user} = useUser();
return (
<Stack alignItems="center" spacing={2} sx={{ p: 3 }}>
<Stack alignItems="center" spacing={2} sx={{p: 3}}>
<Avatar
sx={{ width: "80px", height: "80px" }}
sx={{width: "80px", height: "80px"}}
alt="User Image"
src={user.avatar}
/>
<Typography sx={{ fontSize: 15, fontWeight: 600 }} textAlign="center">
<Typography sx={{fontSize: 15, fontWeight: 600}} textAlign="center">
{user.username}
</Typography>
</Stack>

View File

@@ -1,14 +1,14 @@
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 {user} = useUser();
const handleOpenUserMenu = (event) => {
setAnchorElUser(event.currentTarget);
@@ -20,7 +20,7 @@ function ProfileMenu() {
return (
<>
<Tooltip title={t("header.open_profile")} arrow>
<IconButton onClick={handleOpenUserMenu} sx={{ p: 0 }}>
<IconButton onClick={handleOpenUserMenu} sx={{p: 0}}>
<Avatar
sx={{
width: 24,
@@ -34,7 +34,7 @@ function ProfileMenu() {
</IconButton>
</Tooltip>
<Menu
MenuListProps={{ sx: { py: 0 } }}
MenuListProps={{sx: {py: 0}}}
sx={{
mt: 6,
}}
@@ -52,10 +52,11 @@ function ProfileMenu() {
open={Boolean(anchorElUser)}
onClose={handleCloseUserMenu}
>
<ProfileData />
<ProfileOptions handleCloseUserMenu={handleCloseUserMenu} />
<ProfileData/>
<ProfileOptions handleCloseUserMenu={handleCloseUserMenu}/>
</Menu>
</>
);
}
export default ProfileMenu;

View File

@@ -1,11 +1,11 @@
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 }) {
export default function ProfileOptionLogOut({handleCloseUserMenu}) {
const t = useTranslations();
const { clearToken } = useUser();
const {clearToken} = useUser();
const handleClickLogOut = () => {
handleCloseUserMenu();
clearToken();
@@ -28,7 +28,7 @@ export default function ProfileOptionLogOut({ handleCloseUserMenu }) {
}}
onClick={handleClickLogOut}
>
<Box sx={{ display: "flex", alignItems: "center", flex: 1 }}>
<Box sx={{display: "flex", alignItems: "center", flex: 1}}>
<Box
sx={{
display: "flex",
@@ -37,9 +37,9 @@ export default function ProfileOptionLogOut({ handleCloseUserMenu }) {
pr: 2,
}}
>
<MeetingRoomIcon />
<MeetingRoomIcon/>
</Box>
<Typography sx={{ flex: 1 }} textAlign="start">
<Typography sx={{flex: 1}} textAlign="start">
{t("header.logout")}
</Typography>
</Box>

View File

@@ -1,10 +1,10 @@
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 }) {
export default function ProfileOptions({handleCloseUserMenu}) {
const t = useTranslations();
return (
@@ -26,7 +26,7 @@ export default function ProfileOptions({ handleCloseUserMenu }) {
key={profile_item.key}
onClick={handleCloseUserMenu}
>
<Box sx={{ display: "flex", alignItems: "center", flex: 1 }}>
<Box sx={{display: "flex", alignItems: "center", flex: 1}}>
<Box
sx={{
display: "flex",
@@ -37,13 +37,13 @@ export default function ProfileOptions({ handleCloseUserMenu }) {
>
{profile_item.icon}
</Box>
<Typography sx={{ flex: 1 }} textAlign="start">
<Typography sx={{flex: 1}} textAlign="start">
{t(profile_item.name)}
</Typography>
</Box>
</MenuItem>
))}
<ProfileOptionLogOut handleCloseUserMenu={handleCloseUserMenu} />
<ProfileOptionLogOut handleCloseUserMenu={handleCloseUserMenu}/>
</>
);
}

View File

@@ -1,27 +1,18 @@
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 }) {
function Header({drawerWidth, handleDrawerToggle}) {
const theme = useTheme();
return (
<>
<CssBaseline />
<CssBaseline/>
<AppBar
position="fixed"
sx={{
width: { md: `calc(100% - ${drawerWidth}px)` },
ml: { md: `${drawerWidth}px` },
width: {md: `calc(100% - ${drawerWidth}px)`},
ml: {md: `${drawerWidth}px`},
}}
>
<Container maxWidth="xxl">
@@ -31,15 +22,15 @@ function Header({ drawerWidth, handleDrawerToggle }) {
display: "flex",
}}
>
<Stack direction="row" justifyContent="flex-start" sx={{ flex: 1 }}>
<Stack direction="row" justifyContent="flex-start" sx={{flex: 1}}>
<IconButton
color="inherit"
aria-label="open drawer"
onClick={handleDrawerToggle}
edge="start"
sx={{ display: { md: "none" }, m: 0 }}
sx={{display: {md: "none"}, m: 0}}
>
<MenuIcon />
<MenuIcon/>
</IconButton>
</Stack>
<Stack
@@ -57,7 +48,7 @@ function Header({ drawerWidth, handleDrawerToggle }) {
my: 1,
width: 56,
height: 56,
"@media (min-width:600px)": { maxWidth: 64, maxHeight: 64 },
"@media (min-width:600px)": {maxWidth: 64, maxHeight: 64},
"@media (min-width:0px)": {
"@media (orientation: landscape)": {
width: 48,
@@ -68,8 +59,8 @@ function Header({ drawerWidth, handleDrawerToggle }) {
>
</Box>
</Stack>
<Stack direction="row" justifyContent="flex-end" sx={{ flex: 1 }}>
<ProfileMenu />
<Stack direction="row" justifyContent="flex-end" sx={{flex: 1}}>
<ProfileMenu/>
</Stack>
</Toolbar>
</Container>
@@ -77,4 +68,5 @@ function Header({ drawerWidth, handleDrawerToggle }) {
</>
);
}
export default Header;

View File

@@ -1,18 +1,18 @@
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 {directionApp} = useDirection();
const {window} = props;
const [mobileOpen, setMobileOpen] = useState(false);
const container =
window !== undefined ? () => window().document.body : undefined;
@@ -34,15 +34,15 @@ const DashboardLayouts = (props) => {
/>
<FullPageLayout
component="main"
sx={{ flexGrow: 1, width: { sm: `calc(100% - ${drawerWidth}px)` } }}
sx={{flexGrow: 1, width: {sm: `calc(100% - ${drawerWidth}px)`}}}
>
<Toolbar />
<FullPageLayout sx={{ mt: 3 }}>
<BreadCrumbs isVisible={true} />
<Toolbar/>
<FullPageLayout sx={{mt: 3}}>
<BreadCrumbs isVisible={true}/>
{props.children}
</FullPageLayout>
</FullPageLayout>
{directionApp === "rtl" ? <ToastContainer rtl /> : <ToastContainer ltr />}
{directionApp === "rtl" ? <ToastContainer rtl/> : <ToastContainer ltr/>}
</FullPageLayout>
);
};

View File

@@ -1,15 +1,14 @@
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 SidebarDrawer = ({handleDrawerToggle}) => {
const t = useTranslations();
return (
<>
<Toolbar>
<Stack>
<Typography variant="h6" sx={{ color: "primary.main" }}>
<Typography variant="h6" sx={{color: "primary.main"}}>
{t("app_short_name")}
</Typography>
<Typography variant="caption">
@@ -20,8 +19,8 @@ const SidebarDrawer = ({ handleDrawerToggle }) => {
</Typography>
</Stack>
</Toolbar>
<Divider />
<SidebarList handleDrawerToggle={handleDrawerToggle} />
<Divider/>
<SidebarList handleDrawerToggle={handleDrawerToggle}/>
</>
);
};

View File

@@ -1,8 +1,8 @@
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) {
@@ -11,7 +11,7 @@ function reducer(state, action) {
return state.map((itemsArr) =>
itemsArr.map((item) =>
action.key == item.key
? { ...item, showSubItem: !item.showSubItem }
? {...item, showSubItem: !item.showSubItem}
: item
)
);
@@ -19,8 +19,8 @@ function reducer(state, action) {
return state.map((itemsArr) =>
itemsArr.map((item) =>
action.route == item.route
? { ...item, selected: true }
: { ...item, selected: false }
? {...item, selected: true}
: {...item, selected: false}
)
);
default:
@@ -28,13 +28,13 @@ function reducer(state, action) {
}
}
export default function SidebarList({ handleDrawerToggle }) {
export default function SidebarList({handleDrawerToggle}) {
const [itemMenu, dispatch] = useReducer(reducer, sidebarMenu);
const { user } = useUser();
const {user} = useUser();
const router = useRouter();
useEffect(() => {
dispatch({ type: "SELECTED", route: router.pathname });
dispatch({type: "SELECTED", route: router.pathname});
}, [router.pathname]);
const filteredItemMenu = itemMenu[0].filter(
@@ -51,7 +51,7 @@ export default function SidebarList({ handleDrawerToggle }) {
handleDrawerToggle={handleDrawerToggle}
/>
))}
{filteredItemMenu.length > 0 && <Divider />}
{filteredItemMenu.length > 0 && <Divider/>}
</List>
);
}

View File

@@ -1,24 +1,17 @@
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 SidebarListItem = ({item, dispatch, handleDrawerToggle}) => {
const t = useTranslations();
return (
<Fragment key={item.key}>
<ListItem disablePadding sx={{ display: "block" }}>
<ListItem disablePadding sx={{display: "block"}}>
<ListItemButton
selected={item.selected}
{...(item.type == "page" && {
@@ -29,7 +22,7 @@ const SidebarListItem = ({ item, dispatch, handleDrawerToggle }) => {
})}
onClick={() => {
if (item.type == "menu") {
dispatch({ type: "COLLAPSE_MENU", key: item.key });
dispatch({type: "COLLAPSE_MENU", key: item.key});
}
handleDrawerToggle();
}}
@@ -59,7 +52,7 @@ const SidebarListItem = ({ item, dispatch, handleDrawerToggle }) => {
/>
{item.type == "menu" &&
(item.showSubItem ? <ExpandLess /> : <ExpandMore />)}
(item.showSubItem ? <ExpandLess/> : <ExpandMore/>)}
<Badge
badgeContent="21"
color="error"

View File

@@ -1,21 +1,15 @@
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 SidebarListSubItem = ({item, handleDrawerToggle}) => {
const t = useTranslations();
return (
<Collapse in={item.showSubItem} timeout="auto" unmountOnExit>
<List component="div" disablePadding sx={{ bgcolor: "#f6f6f6" }}>
<List component="div" disablePadding sx={{bgcolor: "#f6f6f6"}}>
{item.subItem.map((subitem, index) => (
<Fragment key={subitem.key}>
<ListItemButton
@@ -28,7 +22,7 @@ const SidebarListSubItem = ({ item, handleDrawerToggle }) => {
}}
onClick={(event) => {
if (item.type == "menu") {
dispatch({ type: "COLLAPSE_MENU", key: item.key });
dispatch({type: "COLLAPSE_MENU", key: item.key});
}
handleDrawerToggle();
}}
@@ -40,9 +34,9 @@ const SidebarListSubItem = ({ item, handleDrawerToggle }) => {
pr: 2,
}}
>
<InboxIcon />
<InboxIcon/>
</ListItemIcon>
<ListItemText primary={t(subitem.key)} />
<ListItemText primary={t(subitem.key)}/>
</ListItemButton>
</Fragment>
))}

View File

@@ -1,11 +1,11 @@
import { Box, Drawer } from "@mui/material";
import {Box, Drawer} from "@mui/material";
import SidebarDrawer from "./SidebarDrawer";
const Sidebar = (props) => {
return (
<Box
component="nav"
sx={{ width: { md: props.drawerWidth }, flexShrink: { sm: 0 } }}
sx={{width: {md: props.drawerWidth}, flexShrink: {sm: 0}}}
aria-label="mailbox folders"
>
<Drawer
@@ -17,19 +17,19 @@ const Sidebar = (props) => {
keepMounted: true,
}}
sx={{
display: { xs: "block", md: "none" },
display: {xs: "block", md: "none"},
"& .MuiDrawer-paper": {
boxSizing: "border-box",
width: props.drawerWidth,
},
}}
>
<SidebarDrawer handleDrawerToggle={props.handleDrawerToggle} />
<SidebarDrawer handleDrawerToggle={props.handleDrawerToggle}/>
</Drawer>
<Drawer
variant="permanent"
sx={{
display: { xs: "none", md: "block" },
display: {xs: "none", md: "block"},
"& .MuiDrawer-paper": {
boxSizing: "border-box",
width: props.drawerWidth,
@@ -37,7 +37,7 @@ const Sidebar = (props) => {
}}
open
>
<SidebarDrawer handleDrawerToggle={props.handleDrawerToggle} />
<SidebarDrawer handleDrawerToggle={props.handleDrawerToggle}/>
</Drawer>
</Box>
);

View File

@@ -1,4 +1,4 @@
import { createContext } from "react";
import {createContext} from "react";
import useDataTable from "../hooks/useDatatable";
export const DataTableContext = createContext();

View File

@@ -1,13 +1,13 @@
import { createContext, useState } from "react";
import {createContext, useState} from "react";
export const ReloadDataTableContext = createContext();
export const ReloadDataTableProvider = ({ children }) => {
export const ReloadDataTableProvider = ({children}) => {
const [reloadDataTable, setReloadDataTable] = useState(false);
return (
<ReloadDataTableContext.Provider
value={{ reloadDataTable, setReloadDataTable }}
value={{reloadDataTable, setReloadDataTable}}
>
{children}
</ReloadDataTableContext.Provider>

View File

@@ -1,11 +1,11 @@
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 }) => {
export const LanguageProvider = ({children}) => {
const router = useRouter();
const languageList = [
{
@@ -16,7 +16,7 @@ export const LanguageProvider = ({ children }) => {
tableLocalization: FA_DATATABLE_LOCALIZATION,
}
];
const { user, userChangedLanguage, changeLanguageState } = useUser();
const {user, userChangedLanguage, changeLanguageState} = useUser();
const [languageIsReady, setLanguageIsReady] = useState(false);
const [languageApp, setLanguageApp] = useState();
const [directionApp, setDirectionApp] = useState(
@@ -58,7 +58,7 @@ export const LanguageProvider = ({ children }) => {
if (languageApp != router.locale) {
router.replace(
{ pathname: router.pathname, query: router.query },
{pathname: router.pathname, query: router.query},
router.asPath,
{
locale: languageApp,

View File

@@ -1,13 +1,13 @@
import LoadingHardPage from "@/core/components/LoadingHardPage";
import { createContext, useState } from "react";
import {createContext, useState} from "react";
export const LoadingContext = createContext();
export const LoadingProvider = ({ children }) => {
export const LoadingProvider = ({children}) => {
const [loadingPage, setLoadingPage] = useState(false);
return (
<LoadingContext.Provider value={{ loadingPage, setLoadingPage }}>
<LoadingHardPage loading={loadingPage} />
<LoadingContext.Provider value={{loadingPage, setLoadingPage}}>
<LoadingHardPage loading={loadingPage}/>
{children}
</LoadingContext.Provider>
);

View File

@@ -1,9 +1,6 @@
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,
@@ -15,24 +12,24 @@ const initialUser = {
const reducer = (state, action) => {
switch (action.type) {
case "CLEAR_USER":
return { ...state, user: {} };
return {...state, user: {}};
case "CHANGE_USER":
return { ...state, user: action.user };
return {...state, user: action.user};
case "CHANGE_USER_LANGUAGE":
return {
...state,
user: { ...state.user, user_language: action.language },
user: {...state.user, user_language: action.language},
};
case "CHANGE_AUTH_STATE":
return { ...state, isAuth: action.isAuth };
return {...state, isAuth: action.isAuth};
case "CHANGE_LANGUAGE_STATE":
return { ...state, userChangedLanguage: action.userChangedLanguage };
return {...state, userChangedLanguage: action.userChangedLanguage};
case "CLEAR_TOKEN":
localStorage.removeItem("_token");
return { ...state, token: null };
return {...state, token: null};
case "SET_TOKEN":
localStorage.setItem("_token", action.token);
return { ...state, token: action.token };
return {...state, token: action.token};
default:
return state;
}
@@ -40,42 +37,43 @@ const reducer = (state, action) => {
export const UserContext = createContext();
export const UserProvider = ({ children }) => {
export const UserProvider = ({children}) => {
const [state, dispatch] = useReducer(reducer, initialUser);
const clearUser = useCallback(() => {
dispatch({ type: "CLEAR_USER" });
dispatch({type: "CLEAR_USER"});
}, []);
const changeUser = useCallback((user) => {
dispatch({ type: "CHANGE_USER", user });
dispatch({type: "CHANGE_USER", user});
}, []);
const changeUserLanguage = useCallback(/* use in multi language app */);
const changeAuthState = useCallback((isAuth) => {
dispatch({ type: "CHANGE_AUTH_STATE", isAuth });
dispatch({type: "CHANGE_AUTH_STATE", isAuth});
}, []);
const changeLanguageState = useCallback((userChangedLanguage) => {
dispatch({ type: "CHANGE_LANGUAGE_STATE", userChangedLanguage });
dispatch({type: "CHANGE_LANGUAGE_STATE", userChangedLanguage});
}, []);
const clearToken = useCallback(() => {
dispatch({ type: "CLEAR_TOKEN" });
dispatch({type: "CLEAR_TOKEN"});
}, []);
const setToken = useCallback((token) => {
dispatch({ type: "SET_TOKEN", token });
dispatch({type: "SET_TOKEN", token});
}, []);
const getUser = useCallback(
(callback = () => {}) => {
(callback = () => {
}) => {
axios
.get(GET_USER_ROUTE, {
headers: { authorization: `Bearer ${state.token}` },
headers: {authorization: `Bearer ${state.token}`},
})
.then(({ data }) => {
.then(({data}) => {
if (typeof callback === "function") callback(data);
});
},
@@ -84,7 +82,7 @@ export const UserProvider = ({ children }) => {
useEffect(() => {
const localToken = localStorage.getItem("_token");
if (localToken) dispatch({ type: "SET_TOKEN", token: localToken });
if (localToken) dispatch({type: "SET_TOKEN", token: localToken});
}, []);
useEffect(() => {

View File

@@ -1,10 +1,10 @@
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: "",
@@ -33,21 +33,21 @@ const reducer = (state, action) => {
};
const useDataTable = () => {
const { setReloadDataTable } = useContext(ReloadDataTableContext);
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 {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 });
dispatch({type: "CONFIRM_DATA", url: url, rowID: rowID, values: values});
axios
.post(`${url}/${rowID}`, values, {
headers: { authorization: `Bearer ${token}` },
headers: {authorization: `Bearer ${token}`},
})
.then((response) => {
setReloadDataTable(true);
@@ -59,10 +59,10 @@ const useDataTable = () => {
}, []);
const rejectData = useCallback(async (url, rowID, values) => {
dispatch({ type: "REJECT_DATA", url: url, rowID: rowID, values: values });
dispatch({type: "REJECT_DATA", url: url, rowID: rowID, values: values});
axios
.post(`${url}/${rowID}`, values, {
headers: { authorization: `Bearer ${token}` },
headers: {authorization: `Bearer ${token}`},
})
.then((response) => {
setReloadDataTable(true);

View File

@@ -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;

View File

@@ -1,9 +1,9 @@
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 {isAuth, changeUserLanguage} = useUser();
const {
languageApp,
setLanguageApp,
@@ -22,7 +22,7 @@ const useLanguage = () => {
}
};
return { languageApp, changeLanguage, languageIsReady, languageList };
return {languageApp, changeLanguage, languageIsReady, languageList};
};
export default useLanguage;

View File

@@ -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;

View File

@@ -1,5 +1,5 @@
import { useContext } from "react";
import { UserContext } from "../contexts/user";
import {useContext} from "react";
import {UserContext} from "../contexts/user";
const useUser = () => {
const {

View File

@@ -1,11 +1,11 @@
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 RolePermission = ({children, requiredPermissions}) => {
const {user} = useUser();
const t = useTranslations();
const hasPermission = requiredPermissions.some((permission) =>
@@ -16,7 +16,7 @@ const RolePermission = ({ children, requiredPermissions }) => {
return (
<Message
text={
<Typography sx={{ textAlign: "center" }}>
<Typography sx={{textAlign: "center"}}>
{t("Permission.typography_you_dont_have_access")}
</Typography>
}

View File

@@ -1,12 +1,12 @@
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 WithAuthMiddleware = ({children}) => {
const {isAuth} = useUser();
const t = useTranslations();
const router = useRouter();
@@ -14,7 +14,7 @@ const WithAuthMiddleware = ({ children }) => {
return (
<Message
text={
<Typography sx={{ textAlign: "center" }}>
<Typography sx={{textAlign: "center"}}>
{t(
"Authorization.typography_your_access_to_this_page_has_expired_Please_login_again"
)}
@@ -27,7 +27,7 @@ const WithAuthMiddleware = ({ children }) => {
component={NextLinkComposed}
to={{
pathname: "/login-expert",
query: { back_url: encodeURIComponent(router.asPath) },
query: {back_url: encodeURIComponent(router.asPath)},
}}
>
{t("login")}

View File

@@ -1,13 +1,13 @@
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 WithoutAuthMiddleware = ({children}) => {
const {isAuth} = useUser();
const t = useTranslations();
const router = useRouter();
@@ -35,7 +35,7 @@ const WithoutAuthMiddleware = ({ children }) => {
<Message
text={
<Stack alignItems="center" spacing={2}>
<Typography sx={{ textAlign: "center" }}>
<Typography sx={{textAlign: "center"}}>
{t(
"Authorization.typography_your_login_is_valid_and_you_do_not_need_to_login_again"
)}

View File

@@ -1,13 +1,13 @@
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 }) => {
const App = ({Component, pageProps}) => {
return (
<>
<UserProvider>

View File

@@ -1,20 +1,18 @@
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 (
<Html>
<Head>
<meta name="theme-color" content={theme.palette.primary.main} />
<meta name="emotion-insertion-point" content="" />
<link rel="shortcut icon" href="/icons/favicon.ico" />
<link rel="manifest" href="/manifest.json" />
<meta name="theme-color" content={theme.palette.primary.main}/>
<meta name="emotion-insertion-point" content=""/>
<link rel="shortcut icon" href="/icons/favicon.ico"/>
<link rel="manifest" href="/manifest.json"/>
<link
rel="stylesheet"
href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap"
@@ -22,8 +20,8 @@ export default function MyDocument(props) {
{emotionStyleTags}
</Head>
<body>
<Main />
<NextScript />
<Main/>
<NextScript/>
</body>
</Html>
);
@@ -38,7 +36,7 @@ MyDocument.getInitialProps = async (ctx) => {
break;
}
const { extractCriticalToChunks } = createEmotionServer(cache);
const {extractCriticalToChunks} = createEmotionServer(cache);
ctx.renderPage = () =>
originalRenderPage({
@@ -56,7 +54,7 @@ MyDocument.getInitialProps = async (ctx) => {
data-emotion={`${style.key} ${style.ids.join(" ")}`}
key={style.key}
// eslint-disable-next-line react/no-danger
dangerouslySetInnerHTML={{ __html: style.css }}
dangerouslySetInnerHTML={{__html: style.css}}
/>
));

View File

@@ -1,19 +1,19 @@
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 (
<WithAuthMiddleware>
<TitlePage text="Dashboard.change_password" />
<DashboardChangePasswordComponent />
<TitlePage text="Dashboard.change_password"/>
<DashboardChangePasswordComponent/>
</WithAuthMiddleware>
);
}
export async function getServerSideProps({ req, locale }) {
const { isBot } = parse(req.headers["user-agent"]);
export async function getServerSideProps({req, locale}) {
const {isBot} = parse(req.headers["user-agent"]);
return {
props: {
messages: (await import(`&/locales/${locale}/app.json`)).default,

View File

@@ -1,19 +1,19 @@
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 (
<WithAuthMiddleware>
<TitlePage text="Dashboard.edit_profile" />
<DashboardEditProfile />
<TitlePage text="Dashboard.edit_profile"/>
<DashboardEditProfile/>
</WithAuthMiddleware>
);
}
export async function getServerSideProps({ req, locale }) {
const { isBot } = parse(req.headers["user-agent"]);
export async function getServerSideProps({req, locale}) {
const {isBot} = parse(req.headers["user-agent"]);
return {
props: {
messages: (await import(`&/locales/${locale}/app.json`)).default,

View File

@@ -1,19 +1,19 @@
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 (
<WithAuthMiddleware>
<TitlePage text="Dashboard.dashboard_page" />
<DashboardFirstComponent />
<TitlePage text="Dashboard.dashboard_page"/>
<DashboardFirstComponent/>
</WithAuthMiddleware>
);
}
export async function getServerSideProps({ req, locale }) {
const { isBot } = parse(req.headers["user-agent"]);
export async function getServerSideProps({req, locale}) {
const {isBot} = parse(req.headers["user-agent"]);
return {
props: {
messages: (await import(`&/locales/${locale}/app.json`)).default,

View File

@@ -2,21 +2,22 @@ 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 (
<WithAuthMiddleware>
<RolePermission requiredPermissions={requiredPermissions}>
<TitlePage text="Dashboard.machinary_office_page" />
<DashboardMachinaryOfficeComponent />
<TitlePage text="Dashboard.machinary_office_page"/>
<DashboardMachinaryOfficeComponent/>
</RolePermission>
</WithAuthMiddleware>
);
}
export async function getServerSideProps({ req, locale }) {
const { isBot } = parse(req.headers["user-agent"]);
export async function getServerSideProps({req, locale}) {
const {isBot} = parse(req.headers["user-agent"]);
return {
props: {
messages: (await import(`&/locales/${locale}/app.json`)).default,

View File

@@ -2,21 +2,22 @@ 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 (
<WithAuthMiddleware>
<RolePermission requiredPermissions={requiredPermissions}>
<TitlePage text="Dashboard.passenger_boss_page" />
<DashboardPassengerBossComponent />
<TitlePage text="Dashboard.passenger_boss_page"/>
<DashboardPassengerBossComponent/>
</RolePermission>
</WithAuthMiddleware>
);
}
export async function getServerSideProps({ req, locale }) {
const { isBot } = parse(req.headers["user-agent"]);
export async function getServerSideProps({req, locale}) {
const {isBot} = parse(req.headers["user-agent"]);
return {
props: {
messages: (await import(`&/locales/${locale}/app.json`)).default,

View File

@@ -2,21 +2,22 @@ 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 (
<WithAuthMiddleware>
<RolePermission requiredPermissions={requiredPermissions}>
<TitlePage text="Dashboard.passenger_office_page" />
<DashboardPassengerOfficeComponent />
<TitlePage text="Dashboard.passenger_office_page"/>
<DashboardPassengerOfficeComponent/>
</RolePermission>
</WithAuthMiddleware>
);
}
export async function getServerSideProps({ req, locale }) {
const { isBot } = parse(req.headers["user-agent"]);
export async function getServerSideProps({req, locale}) {
const {isBot} = parse(req.headers["user-agent"]);
return {
props: {
messages: (await import(`&/locales/${locale}/app.json`)).default,

View File

@@ -2,21 +2,22 @@ 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 (
<WithAuthMiddleware>
<RolePermission requiredPermissions={requiredPermissions}>
<TitlePage text="Dashboard.province_manager_page" />
<DashboardProvinceManagerComponent />
<TitlePage text="Dashboard.province_manager_page"/>
<DashboardProvinceManagerComponent/>
</RolePermission>
</WithAuthMiddleware>
);
}
export async function getServerSideProps({ req, locale }) {
const { isBot } = parse(req.headers["user-agent"]);
export async function getServerSideProps({req, locale}) {
const {isBot} = parse(req.headers["user-agent"]);
return {
props: {
messages: (await import(`&/locales/${locale}/app.json`)).default,

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