From 9c0920efaf6419616e5aa6b12a07a1c292b21485 Mon Sep 17 00:00:00 2001 From: Amin Ghasempoor Date: Sun, 27 Aug 2023 11:01:50 +0330 Subject: [PATCH 1/9] edit_button_bugfix --- package-lock.json | 19 ++++++++++++++++++- public/locales/fa/app.json | 4 ++-- .../inspector-expert/Form/ReviseForm.jsx | 4 ++-- .../province-head-expert/Form/ReviceForm.jsx | 4 ++-- 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 42161b1..1815fa2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43,7 +43,8 @@ }, "devDependencies": { "@faker-js/faker": "^7.6.0", - "eslint-config-next": "^13.3.0" + "eslint-config-next": "^13.3.0", + "run-script-os": "^1.1.6" } }, "node_modules/@babel/code-frame": { @@ -4789,6 +4790,16 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/run-script-os": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/run-script-os/-/run-script-os-1.1.6.tgz", + "integrity": "sha512-ql6P2LzhBTTDfzKts+Qo4H94VUKpxKDFz6QxxwaUZN0mwvi7L3lpOI7BqPCq7lgDh3XLl0dpeXwfcVIitlrYrw==", + "dev": true, + "bin": { + "run-os": "index.js", + "run-script-os": "index.js" + } + }, "node_modules/rxjs": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", @@ -8841,6 +8852,12 @@ "queue-microtask": "^1.2.2" } }, + "run-script-os": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/run-script-os/-/run-script-os-1.1.6.tgz", + "integrity": "sha512-ql6P2LzhBTTDfzKts+Qo4H94VUKpxKDFz6QxxwaUZN0mwvi7L3lpOI7BqPCq7lgDh3XLl0dpeXwfcVIitlrYrw==", + "dev": true + }, "rxjs": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json index e78f16e..437cabd 100644 --- a/public/locales/fa/app.json +++ b/public/locales/fa/app.json @@ -270,11 +270,11 @@ "proposed_amount_positive": "مقدار پیشنهادی باید مثبت باشد" }, "ReviseDialog": { - "revise": "ویرایش", + "revise": " نیاز به ویرایش", "description_error": "وارد کردن توضیحات الزامی است!", "optional": " (اختیاری)", "button-cancel": "بستن", - "button-revise": "ویرایش", + "button-revise": "ارسال", "description": "توضیحات خود را وارد نمائید" }, "RejectDialog": { diff --git a/src/components/dashboard/inspector-expert/Form/ReviseForm.jsx b/src/components/dashboard/inspector-expert/Form/ReviseForm.jsx index 2661965..92e1a1e 100644 --- a/src/components/dashboard/inspector-expert/Form/ReviseForm.jsx +++ b/src/components/dashboard/inspector-expert/Form/ReviseForm.jsx @@ -15,7 +15,7 @@ import {useFormik} from "formik"; import * as Yup from "yup"; import {useState} from "react"; import useRequest from "@/lib/app/hooks/useRequest"; -import EditIcon from "@mui/icons-material/Edit"; +import ReplyIcon from '@mui/icons-material/Reply'; import useNotification from "@/lib/app/hooks/useNotification"; @@ -59,7 +59,7 @@ const Revise = ({rowId, fetchUrl, mutate}) => { <> setOpenRejectDialog(true)}> - + { setOpenConfirmDialog(true) }} > - + Date: Sun, 27 Aug 2023 14:04:22 +0330 Subject: [PATCH 2/9] mui_date_picker_TF-93 --- .../dashboard/commercial-chief/index.jsx | 57 +------------- .../dashboard/development-assistant/index.jsx | 57 +------------- .../dashboard/inspector-expert/index.jsx | 57 +------------- .../dashboard/machinary-office/index.jsx | 57 +------------- .../navgan-province-manager/index.jsx | 57 +------------- .../dashboard/passenger-boss/index.jsx | 57 +------------- .../dashboard/passenger-office/index.jsx | 58 +------------- .../dashboard/province-head-expert/index.jsx | 57 +------------- .../refahi-province-manager/index.jsx | 58 +------------- .../transportation-assistance/index.jsx | 57 +------------- src/core/components/MuiDatePicker.jsx | 76 +++++++++++++------ 11 files changed, 91 insertions(+), 557 deletions(-) diff --git a/src/components/dashboard/commercial-chief/index.jsx b/src/components/dashboard/commercial-chief/index.jsx index 4ac03b3..9f84193 100644 --- a/src/components/dashboard/commercial-chief/index.jsx +++ b/src/components/dashboard/commercial-chief/index.jsx @@ -1,15 +1,12 @@ import DashboardLayouts from "@/layouts/dashboardLayouts"; -import {Box, IconButton, Typography} from "@mui/material"; -import ClearIcon from "@mui/icons-material/Clear"; +import {Box, Typography} from "@mui/material"; import {useMemo} from "react"; import {GET_COMMERCIAL_CHIEF} 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 moment from "jalali-moment"; -import {faIR} from "@mui/x-date-pickers/locales"; import DataTable from "@/core/components/DataTable"; +import MuiDatePicker from "@/core/components/MuiDatePicker"; function DashboardCommercialChiefComponent() { const t = useTranslations(); @@ -96,56 +93,10 @@ function DashboardCommercialChiefComponent() { Cell: ({renderedCellValue}) => { return {renderedCellValue}; }, - Header: ({column}) => {column.columnDef.header}, + Header: ({column}) => <>{column.columnDef.header}, Filter: ({column}) => { - const filterFnValue = column.columnDef._filterFn; return ( - - - { - const date = new Date(newValue); - const formattedDate = moment(date) - .locale("en") - .format("YYYY-MM-DD HH:mm"); - column.setFilterValue(formattedDate); - }} - slotProps={{ - textField: { - placeholder: "تاریخ خود را وارد کنید", - helperText: `${t("filter_mode")}: ${t(filterFnValue)}`, - sx: {minWidth: "120px"}, - variant: "standard", - }, - }} - value={ - column.getFilterValue() - ? new Date(column.getFilterValue()) - : null - } - /> - - { - column.setFilterValue(null); - }} - sx={{ - color: column.getFilterValue() - ? "rgba(0, 0, 0, 0.54)" - : "#bfbfbf", - }} - > - - - + ); }, }, diff --git a/src/components/dashboard/development-assistant/index.jsx b/src/components/dashboard/development-assistant/index.jsx index e54daab..ed46fb0 100644 --- a/src/components/dashboard/development-assistant/index.jsx +++ b/src/components/dashboard/development-assistant/index.jsx @@ -1,15 +1,12 @@ import DashboardLayouts from "@/layouts/dashboardLayouts"; -import {Box, IconButton, Typography} from "@mui/material"; -import ClearIcon from "@mui/icons-material/Clear"; +import {Box, Typography} from "@mui/material"; import {useMemo} from "react"; import {GET_DEVELOPMENT_ASSISTANT} 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 moment from "jalali-moment"; -import {faIR} from "@mui/x-date-pickers/locales"; import DataTable from "@/core/components/DataTable"; +import MuiDatePicker from "@/core/components/MuiDatePicker"; function DashboardDevelopmentAssistantComponent() { const t = useTranslations(); @@ -97,56 +94,10 @@ function DashboardDevelopmentAssistantComponent() { Cell: ({renderedCellValue}) => { return {renderedCellValue}; }, - Header: ({column}) => {column.columnDef.header}, + Header: ({column}) => <>{column.columnDef.header}, Filter: ({column}) => { - const filterFnValue = column.columnDef._filterFn; return ( - - - { - const date = new Date(newValue); - const formattedDate = moment(date) - .locale("en") - .format("YYYY-MM-DD HH:mm"); - column.setFilterValue(formattedDate); - }} - slotProps={{ - textField: { - placeholder: "تاریخ خود را وارد کنید", - helperText: `${t("filter_mode")}: ${t(filterFnValue)}`, - sx: {minWidth: "120px"}, - variant: "standard", - }, - }} - value={ - column.getFilterValue() - ? new Date(column.getFilterValue()) - : null - } - /> - - { - column.setFilterValue(null); - }} - sx={{ - color: column.getFilterValue() - ? "rgba(0, 0, 0, 0.54)" - : "#bfbfbf", - }} - > - - - + ); }, }, diff --git a/src/components/dashboard/inspector-expert/index.jsx b/src/components/dashboard/inspector-expert/index.jsx index 5eeb329..1be98ed 100644 --- a/src/components/dashboard/inspector-expert/index.jsx +++ b/src/components/dashboard/inspector-expert/index.jsx @@ -1,15 +1,12 @@ import DashboardLayouts from "@/layouts/dashboardLayouts"; -import {Box, IconButton, Typography} from "@mui/material"; -import ClearIcon from "@mui/icons-material/Clear"; +import {Box, Typography} from "@mui/material"; import {useMemo} from "react"; import {GET_INSPECTOR_EXPERT} 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 moment from "jalali-moment"; -import {faIR} from "@mui/x-date-pickers/locales"; import DataTable from "@/core/components/DataTable"; +import MuiDatePicker from "@/core/components/MuiDatePicker"; function DashboardInspectorExpertComponent() { const t = useTranslations(); @@ -96,56 +93,10 @@ function DashboardInspectorExpertComponent() { Cell: ({renderedCellValue}) => { return {renderedCellValue}; }, - Header: ({column}) => {column.columnDef.header}, + Header: ({column}) => <>{column.columnDef.header}, Filter: ({column}) => { - const filterFnValue = column.columnDef._filterFn; return ( - - - { - const date = new Date(newValue); - const formattedDate = moment(date) - .locale("en") - .format("YYYY-MM-DD HH:mm"); - column.setFilterValue(formattedDate); - }} - slotProps={{ - textField: { - placeholder: "تاریخ خود را وارد کنید", - helperText: `${t("filter_mode")}: ${t(filterFnValue)}`, - sx: {minWidth: "120px"}, - variant: "standard", - }, - }} - value={ - column.getFilterValue() - ? new Date(column.getFilterValue()) - : null - } - /> - - { - column.setFilterValue(null); - }} - sx={{ - color: column.getFilterValue() - ? "rgba(0, 0, 0, 0.54)" - : "#bfbfbf", - }} - > - - - + ); }, }, diff --git a/src/components/dashboard/machinary-office/index.jsx b/src/components/dashboard/machinary-office/index.jsx index 8f68209..73c373c 100644 --- a/src/components/dashboard/machinary-office/index.jsx +++ b/src/components/dashboard/machinary-office/index.jsx @@ -1,15 +1,12 @@ import DashboardLayouts from "@/layouts/dashboardLayouts"; -import {Box, IconButton, Typography} from "@mui/material"; -import ClearIcon from "@mui/icons-material/Clear"; +import {Box, Typography} from "@mui/material"; import {useMemo} from "react"; 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 moment from "jalali-moment"; -import {faIR} from "@mui/x-date-pickers/locales"; import DataTable from "@/core/components/DataTable"; +import MuiDatePicker from "@/core/components/MuiDatePicker"; function DashboardMachinaryOfficeComponent() { const t = useTranslations(); @@ -96,56 +93,10 @@ function DashboardMachinaryOfficeComponent() { Cell: ({renderedCellValue}) => { return {renderedCellValue}; }, - Header: ({column}) => {column.columnDef.header}, + Header: ({column}) => <>{column.columnDef.header}, Filter: ({column}) => { - const filterFnValue = column.columnDef._filterFn; return ( - - - { - const date = new Date(newValue); - const formattedDate = moment(date) - .locale("en") - .format("YYYY-MM-DD HH:mm"); - column.setFilterValue(formattedDate); - }} - slotProps={{ - textField: { - placeholder: "تاریخ خود را وارد کنید", - helperText: `${t("filter_mode")}: ${t(filterFnValue)}`, - sx: {minWidth: "120px"}, - variant: "standard", - }, - }} - value={ - column.getFilterValue() - ? new Date(column.getFilterValue()) - : null - } - /> - - { - column.setFilterValue(null); - }} - sx={{ - color: column.getFilterValue() - ? "rgba(0, 0, 0, 0.54)" - : "#bfbfbf", - }} - > - - - + ); }, }, diff --git a/src/components/dashboard/navgan-province-manager/index.jsx b/src/components/dashboard/navgan-province-manager/index.jsx index 702175c..8823e37 100644 --- a/src/components/dashboard/navgan-province-manager/index.jsx +++ b/src/components/dashboard/navgan-province-manager/index.jsx @@ -1,15 +1,12 @@ import DashboardLayouts from "@/layouts/dashboardLayouts"; -import {Box, IconButton, Typography} from "@mui/material"; -import ClearIcon from "@mui/icons-material/Clear"; +import {Box, Typography} from "@mui/material"; import {useMemo} from "react"; import {GET_NAVGAN_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 moment from "jalali-moment"; -import {faIR} from "@mui/x-date-pickers/locales"; import DataTable from "@/core/components/DataTable"; +import MuiDatePicker from "@/core/components/MuiDatePicker"; function DashboardNavganProvinceManagerComponent() { const t = useTranslations(); @@ -97,56 +94,10 @@ function DashboardNavganProvinceManagerComponent() { Cell: ({renderedCellValue}) => { return {renderedCellValue}; }, - Header: ({column}) => {column.columnDef.header}, + Header: ({column}) => <>{column.columnDef.header}, Filter: ({column}) => { - const filterFnValue = column.columnDef._filterFn; return ( - - - { - const date = new Date(newValue); - const formattedDate = moment(date) - .locale("en") - .format("YYYY-MM-DD HH:mm"); - column.setFilterValue(formattedDate); - }} - slotProps={{ - textField: { - placeholder: "تاریخ خود را وارد کنید", - helperText: `${t("filter_mode")}: ${t(filterFnValue)}`, - sx: {minWidth: "120px"}, - variant: "standard", - }, - }} - value={ - column.getFilterValue() - ? new Date(column.getFilterValue()) - : null - } - /> - - { - column.setFilterValue(null); - }} - sx={{ - color: column.getFilterValue() - ? "rgba(0, 0, 0, 0.54)" - : "#bfbfbf", - }} - > - - - + ); }, }, diff --git a/src/components/dashboard/passenger-boss/index.jsx b/src/components/dashboard/passenger-boss/index.jsx index 5fe7342..ad6848f 100644 --- a/src/components/dashboard/passenger-boss/index.jsx +++ b/src/components/dashboard/passenger-boss/index.jsx @@ -1,15 +1,12 @@ import DashboardLayouts from "@/layouts/dashboardLayouts"; -import {Box, IconButton, Typography} from "@mui/material"; -import ClearIcon from "@mui/icons-material/Clear"; +import {Box, Typography} from "@mui/material"; import {useMemo} from "react"; 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 moment from "jalali-moment"; -import {faIR} from "@mui/x-date-pickers/locales"; import DataTable from "@/core/components/DataTable"; +import MuiDatePicker from "@/core/components/MuiDatePicker"; function DashboardPassengerOfficeComponent() { const t = useTranslations(); @@ -97,56 +94,10 @@ function DashboardPassengerOfficeComponent() { Cell: ({renderedCellValue}) => { return {renderedCellValue}; }, - Header: ({column}) => {column.columnDef.header}, + Header: ({column}) => <>{column.columnDef.header}, Filter: ({column}) => { - const filterFnValue = column.columnDef._filterFn; return ( - - - { - const date = new Date(newValue); - const formattedDate = moment(date) - .locale("en") - .format("YYYY-MM-DD HH:mm"); - column.setFilterValue(formattedDate); - }} - slotProps={{ - textField: { - placeholder: "تاریخ خود را وارد کنید", - helperText: `${t("filter_mode")}: ${t(filterFnValue)}`, - sx: {minWidth: "120px"}, - variant: "standard", - }, - }} - value={ - column.getFilterValue() - ? new Date(column.getFilterValue()) - : null - } - /> - - { - column.setFilterValue(null); - }} - sx={{ - color: column.getFilterValue() - ? "rgba(0, 0, 0, 0.54)" - : "#bfbfbf", - }} - > - - - + ); }, }, diff --git a/src/components/dashboard/passenger-office/index.jsx b/src/components/dashboard/passenger-office/index.jsx index d36acff..3f50345 100644 --- a/src/components/dashboard/passenger-office/index.jsx +++ b/src/components/dashboard/passenger-office/index.jsx @@ -1,15 +1,12 @@ import DashboardLayouts from "@/layouts/dashboardLayouts"; -import {Box, IconButton, Typography} from "@mui/material"; -import ClearIcon from "@mui/icons-material/Clear"; +import {Box, Typography} from "@mui/material"; import {useMemo} from "react"; -import {faIR} from "@mui/x-date-pickers/locales"; 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 moment from "jalali-moment"; import DataTable from "@/core/components/DataTable"; +import MuiDatePicker from "@/core/components/MuiDatePicker"; function DashboardPassengerOfficeComponent() { const t = useTranslations(); @@ -97,57 +94,10 @@ function DashboardPassengerOfficeComponent() { Cell: ({renderedCellValue}) => { return {renderedCellValue}; }, - Header: ({column}) => {column.columnDef.header}, + Header: ({column}) => <>{column.columnDef.header}, Filter: ({column}) => { - const filterFnValue = column.columnDef._filterFn; return ( - - - { - const date = new Date(newValue); - const formattedDate = moment(date) - .locale("en") - .format("YYYY-MM-DD HH:mm"); - column.setFilterValue(formattedDate); - }} - slotProps={{ - textField: { - placeholder: "تاریخ خود را وارد کنید", - helperText: `${t("filter_mode")}: ${t(filterFnValue)}`, - sx: {minWidth: "120px"}, - variant: "standard", - actionbar: {actions: ["accept", "today"]}, - }, - }} - value={ - column.getFilterValue() - ? new Date(column.getFilterValue()) - : null - } - /> - - { - column.setFilterValue(null); - }} - sx={{ - color: column.getFilterValue() - ? "rgba(0, 0, 0, 0.54)" - : "#bfbfbf", - }} - > - - - + ); }, }, diff --git a/src/components/dashboard/province-head-expert/index.jsx b/src/components/dashboard/province-head-expert/index.jsx index ded6eef..c76c96d 100644 --- a/src/components/dashboard/province-head-expert/index.jsx +++ b/src/components/dashboard/province-head-expert/index.jsx @@ -1,15 +1,12 @@ import DashboardLayouts from "@/layouts/dashboardLayouts"; -import {Box, IconButton, Typography} from "@mui/material"; -import ClearIcon from "@mui/icons-material/Clear"; +import {Box, Typography} from "@mui/material"; import {useMemo} from "react"; import {GET_PROVINCE_HEAD_EXPERT} from "@/core/data/apiRoutes"; import {useTranslations} from "next-intl"; -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 DataTable from "@/core/components/DataTable"; import TableRowActions from "./TableRowActions" +import MuiDatePicker from "@/core/components/MuiDatePicker"; function DashboardProvinceHeadExpertComponent() { const t = useTranslations(); @@ -97,56 +94,10 @@ function DashboardProvinceHeadExpertComponent() { Cell: ({renderedCellValue}) => { return {renderedCellValue}; }, - Header: ({column}) => {column.columnDef.header}, + Header: ({column}) => <>{column.columnDef.header}, Filter: ({column}) => { - const filterFnValue = column.columnDef._filterFn; return ( - - - { - const date = new Date(newValue); - const formattedDate = moment(date) - .locale("en") - .format("YYYY-MM-DD HH:mm"); - column.setFilterValue(formattedDate); - }} - slotProps={{ - textField: { - placeholder: "تاریخ خود را وارد کنید", - helperText: `${t("filter_mode")}: ${t(filterFnValue)}`, - sx: {minWidth: "120px"}, - variant: "standard", - }, - }} - value={ - column.getFilterValue() - ? new Date(column.getFilterValue()) - : null - } - /> - - { - column.setFilterValue(null); - }} - sx={{ - color: column.getFilterValue() - ? "rgba(0, 0, 0, 0.54)" - : "#bfbfbf", - }} - > - - - + ); }, }, diff --git a/src/components/dashboard/refahi-province-manager/index.jsx b/src/components/dashboard/refahi-province-manager/index.jsx index 8122fcf..740f6e7 100644 --- a/src/components/dashboard/refahi-province-manager/index.jsx +++ b/src/components/dashboard/refahi-province-manager/index.jsx @@ -1,15 +1,12 @@ import DashboardLayouts from "@/layouts/dashboardLayouts"; -import {Box, IconButton, Typography} from "@mui/material"; -import ClearIcon from "@mui/icons-material/Clear"; +import {Box, Typography} from "@mui/material"; import {useMemo} from "react"; -import {faIR} from "@mui/x-date-pickers/locales"; import {GET_REFAHI_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 moment from "jalali-moment"; import DataTable from "@/core/components/DataTable"; +import MuiDatePicker from "@/core/components/MuiDatePicker"; function DashboardRefahiProvinceManagerComponent() { const t = useTranslations(); @@ -97,57 +94,10 @@ function DashboardRefahiProvinceManagerComponent() { Cell: ({renderedCellValue}) => { return {renderedCellValue}; }, - Header: ({column}) => {column.columnDef.header}, + Header: ({column}) => <>{column.columnDef.header}, Filter: ({column}) => { - const filterFnValue = column.columnDef._filterFn; return ( - - - { - const date = new Date(newValue); - const formattedDate = moment(date) - .locale("en") - .format("YYYY-MM-DD HH:mm"); - column.setFilterValue(formattedDate); - }} - slotProps={{ - textField: { - placeholder: "تاریخ خود را وارد کنید", - helperText: `${t("filter_mode")}: ${t(filterFnValue)}`, - sx: {minWidth: "120px"}, - variant: "standard", - actionbar: {actions: ["accept", "today"]}, - }, - }} - value={ - column.getFilterValue() - ? new Date(column.getFilterValue()) - : null - } - /> - - { - column.setFilterValue(null); - }} - sx={{ - color: column.getFilterValue() - ? "rgba(0, 0, 0, 0.54)" - : "#bfbfbf", - }} - > - - - + ); }, }, diff --git a/src/components/dashboard/transportation-assistance/index.jsx b/src/components/dashboard/transportation-assistance/index.jsx index 8f96ed4..01314d1 100644 --- a/src/components/dashboard/transportation-assistance/index.jsx +++ b/src/components/dashboard/transportation-assistance/index.jsx @@ -1,15 +1,12 @@ import DashboardLayouts from "@/layouts/dashboardLayouts"; -import {Box, IconButton, Typography} from "@mui/material"; -import ClearIcon from "@mui/icons-material/Clear"; +import {Box, Typography} from "@mui/material"; import {useMemo} from "react"; 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 moment from "jalali-moment"; import DataTable from "@/core/components/DataTable"; +import MuiDatePicker from "@/core/components/MuiDatePicker"; function DashboardTransportationAssistanceComponent() { const t = useTranslations(); @@ -97,56 +94,10 @@ function DashboardTransportationAssistanceComponent() { Cell: ({renderedCellValue}) => ( {renderedCellValue} ), - Header: ({column}) => {column.columnDef.header}, + Header: ({column}) => <>{column.columnDef.header}, Filter: ({column}) => { - const filterFnValue = column.columnDef._filterFn; return ( - - - { - const date = new Date(newValue); - const formattedDate = moment(date) - .locale("en") - .format("YYYY-MM-DD HH:mm"); - column.setFilterValue(formattedDate); - }} - slotProps={{ - textField: { - placeholder: "تاریخ خود را وارد کنید", - helperText: `${t("filter_mode")}: ${t(filterFnValue)}`, - sx: {minWidth: "120px"}, - variant: "standard", - }, - }} - value={ - column.getFilterValue() - ? new Date(column.getFilterValue()) - : null - } - /> - - { - column.setFilterValue(null); - }} - sx={{ - color: column.getFilterValue() - ? "rgba(0, 0, 0, 0.54)" - : "#bfbfbf", - }} - > - - - + ); }, }, diff --git a/src/core/components/MuiDatePicker.jsx b/src/core/components/MuiDatePicker.jsx index de6c5d5..18be3cc 100644 --- a/src/core/components/MuiDatePicker.jsx +++ b/src/core/components/MuiDatePicker.jsx @@ -1,35 +1,61 @@ -import {DatePicker, LocalizationProvider} from "@mui/x-date-pickers"; +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 {Box, IconButton} from "@mui/material"; +import ClearIcon from "@mui/icons-material/Clear"; import {useTranslations} from "next-intl"; -export default function MuiDatePicker({ - setFieldValue, - selectType, - error, - helperText, - }) { +export default function MuiDatePicker({column}) { const t = useTranslations(); - - const handleDateChange = (date) => { - const selectedDate = moment(date).locale("fa"); // should add .format() at the end to format the data - setFieldValue(selectType, selectedDate); - }; + const filterFnValue = column.columnDef._filterFn; return ( - - + + { + const date = new Date(newValue); + const formattedDate = moment(date) + .locale("en") + .format("YYYY-MM-DD HH:mm"); + column.setFilterValue(formattedDate); + }} + slotProps={{ + textField: { + placeholder: "تاریخ خود را وارد کنید", + helperText: `${t("filter_mode")}: ${t(filterFnValue)}`, + sx: {minWidth: "120px"}, + variant: "standard", + }, + }} + value={ + column.getFilterValue() + ? new Date(column.getFilterValue()) + : null + } + /> + + { + column.setFilterValue(null); }} - onChange={handleDateChange} - /> - + sx={{ + color: column.getFilterValue() + ? "rgba(0, 0, 0, 0.54)" + : "#bfbfbf", + }} + > + + + ); } From 406329392be3b2444c3f11f267df9f30632990f5 Mon Sep 17 00:00:00 2001 From: Amin Ghasempoor Date: Mon, 28 Aug 2023 13:15:15 +0330 Subject: [PATCH 3/9] TF-93 price field --- public/locales/fa/app.json | 2 ++ .../machinary-office/Form/ConfirmForm.jsx | 19 +++++++++++---- .../passenger-boss/Form/ConfirmForm.jsx | 21 +++++++++++++---- src/core/components/PriceField.jsx | 23 +++++++++++++++++++ 4 files changed, 56 insertions(+), 9 deletions(-) create mode 100644 src/core/components/PriceField.jsx diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json index 437cabd..41f327b 100644 --- a/public/locales/fa/app.json +++ b/public/locales/fa/app.json @@ -265,6 +265,8 @@ "approved_amount": "مبلغ تصویب شده", "approved_amount_error": "وارد کردن مبلغ تصویب شده الزامیست", "approved_amount_positive": "مبلغ تصویب شده باید مثبت باشد", + "approved_amount_number": "مبلغ تصویب شده باید عدد باشد", + "toman": "تومان", "proposed_amount_error": "وارد کردن مقدار پیشنهادی الزامیست", "proposed_amount": "مقدار پیشنهادی", "proposed_amount_positive": "مقدار پیشنهادی باید مثبت باشد" diff --git a/src/components/dashboard/machinary-office/Form/ConfirmForm.jsx b/src/components/dashboard/machinary-office/Form/ConfirmForm.jsx index ab4b11f..a55653c 100644 --- a/src/components/dashboard/machinary-office/Form/ConfirmForm.jsx +++ b/src/components/dashboard/machinary-office/Form/ConfirmForm.jsx @@ -21,6 +21,7 @@ import {CONFIRM_MACHINARY_OFFICE} from "@/core/data/apiRoutes"; import * as Yup from "yup"; import useRequest from "@/lib/app/hooks/useRequest"; import useNotification from "@/lib/app/hooks/useNotification"; +import PriceField from "@/core/components/PriceField"; const Confirm = ({rowId, fetchUrl, mutate}) => { @@ -35,7 +36,12 @@ const Confirm = ({rowId, fetchUrl, mutate}) => { const {update_notification} = useNotification() const validationSchema = Yup.object().shape({ - proposed_amount: Yup.number().positive(t("ConfirmDialog.proposed_amount_positive")).required(t("ConfirmDialog.proposed_amount_error")), + proposed_amount: Yup.mixed().test( + "is-number", + `${t("ConfirmDialog.approved_amount_number")}`, + (value) => !isNaN(value) + ).test("positive", `${t("ConfirmDialog.proposed_amount_positive")}`, (value) => value >= 0) + .required(t("ConfirmDialog.proposed_amount_error")) }) const formik = useFormik({ initialValues: { @@ -66,7 +72,11 @@ const Confirm = ({rowId, fetchUrl, mutate}) => { formik.setFieldValue("description", event.target.value) }; const handleAmountChange = (event) => { - formik.setFieldValue("proposed_amount", event.target.value); + if (!isNaN(event.target.value)) { + formik.setFieldValue("proposed_amount", event.target.value) + } else { + formik.setFieldValue("proposed_amount", formik.values.proposed_amount) + } }; const handleUploadChange = (event) => { const uploadedFile = event.target?.files?.[0]; @@ -119,12 +129,13 @@ const Confirm = ({rowId, fetchUrl, mutate}) => { /> - {t("ConfirmDialog.proposed_amount")}{t("ConfirmDialog.unit")}} - type="number" + type="text" inputProps={{ + inputMode: "number", min: 0, pattern: "[0-9]*", }} diff --git a/src/components/dashboard/passenger-boss/Form/ConfirmForm.jsx b/src/components/dashboard/passenger-boss/Form/ConfirmForm.jsx index d4305f5..4b188f2 100644 --- a/src/components/dashboard/passenger-boss/Form/ConfirmForm.jsx +++ b/src/components/dashboard/passenger-boss/Form/ConfirmForm.jsx @@ -21,6 +21,7 @@ import * as Yup from "yup"; import useRequest from "@/lib/app/hooks/useRequest"; import {CONFIRM_PASSENGER_BOSS} from "@/core/data/apiRoutes"; import useNotification from "@/lib/app/hooks/useNotification"; +import PriceField from "@/core/components/PriceField"; const Confirm = ({rowId, fetchUrl, mutate}) => { @@ -35,7 +36,12 @@ const Confirm = ({rowId, fetchUrl, mutate}) => { const {update_notification} = useNotification() const validationSchema = Yup.object().shape({ - approved_amount: Yup.number().positive(t("ConfirmDialog.approved_amount_positive")).required(t("ConfirmDialog.approved_amount_error")) + approved_amount: Yup.mixed().test( + "is-number", + `${t("ConfirmDialog.approved_amount_number")}`, + (value) => !isNaN(value) + ).test("positive", `${t("ConfirmDialog.proposed_amount_positive")}`, (value) => value >= 0) + .required(t("ConfirmDialog.approved_amount_error")) }); const formik = useFormik({ initialValues: { @@ -66,7 +72,11 @@ const Confirm = ({rowId, fetchUrl, mutate}) => { formik.setFieldValue("description", event.target.value) }; const handleAmountChange = (event) => { - formik.setFieldValue("approved_amount", event.target.value); + if (!isNaN(event.target.value)) { + formik.setFieldValue("approved_amount", event.target.value) + } else { + formik.setFieldValue("approved_amount", formik.values.approved_amount) + } }; const handleUploadChange = (event) => { const uploadedFile = event.target?.files?.[0]; @@ -119,18 +129,19 @@ const Confirm = ({rowId, fetchUrl, mutate}) => { /> - {t("ConfirmDialog.approved_amount")}{t("ConfirmDialog.unit")}} - type="number" + type="text" inputProps={{ + inputMode: "number", min: 0, pattern: "[0-9]*", }} + onChange={handleAmountChange} variant="outlined" value={formik.values.approved_amount} - onChange={handleAmountChange} onBlur={formik.handleBlur("approved_amount")} error={ formik.touched.approved_amount && diff --git a/src/core/components/PriceField.jsx b/src/core/components/PriceField.jsx new file mode 100644 index 0000000..29d8763 --- /dev/null +++ b/src/core/components/PriceField.jsx @@ -0,0 +1,23 @@ +import {InputAdornment, TextField, Typography} from "@mui/material"; +import {useTranslations} from "next-intl"; + +const PriceField = (props) => { + const t = useTranslations(); + return ( + + {((props.value) / 10).toLocaleString()} + {t("ConfirmDialog.toman")} + + ), + }} + {...props} + /> + ) +} +export default PriceField \ No newline at end of file From e1f87576cebd1cdfed10b25fa8442525d8c1c848 Mon Sep 17 00:00:00 2001 From: Amin Ghasempoor Date: Tue, 29 Aug 2023 14:26:35 +0330 Subject: [PATCH 4/9] TF-87 loan management refahi --- public/locales/fa/app.json | 15 +- .../Form/UpdateForm.jsx | 150 +++++++++++++++++ .../TableRowActions.jsx | 17 ++ .../refahi-loan-management/index.jsx | 157 ++++++++++++++++++ src/core/data/apiRoutes.js | 8 + src/core/data/sidebarMenu.jsx | 11 ++ .../hooks/LoanStateRefahi.jsx | 25 +++ .../refahi-loan-management/index.jsx | 26 +++ 8 files changed, 408 insertions(+), 1 deletion(-) create mode 100644 src/components/dashboard/refahi-loan-management/Form/UpdateForm.jsx create mode 100644 src/components/dashboard/refahi-loan-management/TableRowActions.jsx create mode 100644 src/components/dashboard/refahi-loan-management/index.jsx create mode 100644 src/lib/prefetchDataTable/hooks/LoanStateRefahi.jsx create mode 100644 src/pages/dashboard/refahi-loan-management/index.jsx diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json index 41f327b..9160674 100644 --- a/public/locales/fa/app.json +++ b/public/locales/fa/app.json @@ -35,6 +35,7 @@ "transportation-assistant": "معاونت حمل و نقل", "navgan-province-manager": "مدیر کل استانی", "refahi-province-manager": "مدیر کل استانی", + "refahi-loan-management": "مدیریت وام", "commercial-chief": "رئیس اداره بازرگانی", "inspector-expert": "بازدید کارشناس", "province-head-expert": "کارشناس ستادی", @@ -46,6 +47,7 @@ "passenger-office": "توزیع درخواست", "passenger-boss": "کارگروه استانی", "refahi-province-manager": "رفاهی", + "refahi-loan-management": "رفاهی", "navgan-province-manager": "ناوگان" }, "Authorization": { @@ -86,6 +88,7 @@ "province_manager_page": "مدیر کل استانی", "province_head_expert": "کارشناس ستادی", "passenger_office_page": "اداره مسافر", + "loan_management_page": "مدیریت وام", "machinary_office_page": "ماشین آلات", "development_assistant_page": "معاون توسعه", "inspector_expert_page": "بازدید کارشناس", @@ -186,7 +189,7 @@ "vehicle_type": "نوع ماشین", "state_name": "وضعیت درخواست" }, - "DevelopmentAssistant": { + "RefahiLoanManagement": { "name": "نام", "id": "کد یکتا", "national_id": "کد ملی", @@ -288,6 +291,16 @@ "optional": " (اختیاری)", "description_error": "وارد کردن توضیحات الزامی است!" }, + "UpdateDialog": { + "update": "تغییر وضعیت درخواست", + "update-tooltip": "بروزرسانی", + "button-cancel": "بستن", + "button-update": "بروزرسانی", + "description": "توضیحات خود را وارد نمائید", + "description_error": "وارد کردن توضیحات الزامی است!", + "next-state-id": "وضعیت بعدی", + "next-state-id-error": "وارد کردن وضعیت بعدی الزامی است!" + }, "UploadSystem": { "upload_file": "فایل خود را بارگذاری کنید", "optional": " (اختیاری)", diff --git a/src/components/dashboard/refahi-loan-management/Form/UpdateForm.jsx b/src/components/dashboard/refahi-loan-management/Form/UpdateForm.jsx new file mode 100644 index 0000000..1d2dd72 --- /dev/null +++ b/src/components/dashboard/refahi-loan-management/Form/UpdateForm.jsx @@ -0,0 +1,150 @@ +import {useTranslations} from "next-intl"; +import {useContext, useState} from "react"; +import { + Button, + Dialog, + DialogActions, + DialogContent, + DialogTitle, + FormControl, + FormHelperText, + IconButton, + InputLabel, + MenuItem, + Select, + Stack, + TextField, + Tooltip +} from "@mui/material"; +import {useFormik} from "formik"; +import ChangeCircleIcon from '@mui/icons-material/ChangeCircle'; +import {UPDATE_LOAN_MANAGEMENT_REFAHI} from "@/core/data/apiRoutes"; +import useRequest from "@/lib/app/hooks/useRequest"; +import useNotification from "@/lib/app/hooks/useNotification"; +import * as Yup from "yup"; +import {LoanStateRefahiContext} from "@/lib/prefetchDataTable/hooks/LoanStateRefahi"; + + +const Update = ({rowId, fetchUrl, mutate}) => { + const t = useTranslations(); + const detail = useContext(LoanStateRefahiContext); + const [openConfirmDialog, setOpenConfirmDialog] = useState(false); + const requestServer = useRequest({auth: true}) + const {update_notification} = useNotification() + + const validationSchema = Yup.object().shape({ + description: Yup.string().required(t("UpdateDialog.description_error")), + next_state_id: Yup.number().required(t("UpdateDialog.next-state-id-error")) + }); + + const formik = useFormik({ + initialValues: { + description: "", + next_state_id: "" + }, + validationSchema, + onSubmit: (values, {setSubmitting}) => { + const formData = new FormData(); + formData.append("description", values.description); + formData.append("next_state_id", values.next_state_id); + + requestServer(`${UPDATE_LOAN_MANAGEMENT_REFAHI}/${rowId}`, 'post', { + data: formData, + }).then((response) => { + mutate(fetchUrl) + update_notification() + }).catch(() => { + }).finally(() => { + setSubmitting(false); + }); + }, + }); + + const handleDescriptionChange = (event) => { + formik.setFieldValue("description", event.target.value) + }; + const handleNextStateIDChange = (event) => { + formik.setFieldValue("next_state_id", event.target.value) + }; + + return ( + <> + + { + setOpenConfirmDialog(true) + }} + > + + + + + {t("UpdateDialog.update")} + + + + + + + + {t("UpdateDialog.next-state-id")} + + + {formik.touched.next_state_id && formik.errors.next_state_id} + + + + + + + + + + + + ); +}; +export default Update; \ No newline at end of file diff --git a/src/components/dashboard/refahi-loan-management/TableRowActions.jsx b/src/components/dashboard/refahi-loan-management/TableRowActions.jsx new file mode 100644 index 0000000..fd599f9 --- /dev/null +++ b/src/components/dashboard/refahi-loan-management/TableRowActions.jsx @@ -0,0 +1,17 @@ +import {Box} from "@mui/material"; +import Update from "./Form/UpdateForm" + +const TableRowActions = ({row, mutate, fetchUrl}) => { + + return ( + + + + ); +}; + +export default TableRowActions; diff --git a/src/components/dashboard/refahi-loan-management/index.jsx b/src/components/dashboard/refahi-loan-management/index.jsx new file mode 100644 index 0000000..8a571cc --- /dev/null +++ b/src/components/dashboard/refahi-loan-management/index.jsx @@ -0,0 +1,157 @@ +import DashboardLayouts from "@/layouts/dashboardLayouts"; +import {Box, Typography} from "@mui/material"; +import {useMemo} from "react"; +import {GET_LOAN_MANAGEMENT_REFAHI} from "@/core/data/apiRoutes"; +import {useTranslations} from "next-intl"; +import TableRowActions from "./TableRowActions"; +import DataTable from "@/core/components/DataTable"; +import moment from "jalali-moment"; +import MuiDatePicker from "@/core/components/MuiDatePicker"; +import {LoanStateRefahiProvider} from "@/lib/prefetchDataTable/hooks/LoanStateRefahi"; + +function DashboardRefahiLoanManagementComponent() { + const t = useTranslations(); + + const columns = useMemo( + () => [ + { + accessorFn: (row) => row.id, + id: "id", + header: t("RefahiLoanManagement.id"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + { + accessorFn: (row) => row.name, + id: "name", + header: t("RefahiLoanManagement.name"), + enableColumnFilter: true, + datatype: "text", + filterFn: "contains", + columnFilterModeOptions: ["contains", "equals", "notEquals"], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + { + accessorFn: (row) => row.national_id, + id: "national_id", + header: t("RefahiLoanManagement.national_id"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + { + accessorFn: (row) => row.phone_number, + id: "phone_number", + header: t("RefahiLoanManagement.phone_number"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + { + accessorFn: (row) => + moment(row.created_at).locale("fa").format("HH:mm | yyyy/MM/DD"), + id: "created_at", + header: t("RefahiLoanManagement.created_at"), + enableColumnFilter: true, + datatype: "date", + filterFn: "lessThan", + columnFilterModeOptions: ["lessThan", "greaterThan"], + Cell: ({renderedCellValue}) => { + return {renderedCellValue}; + }, + Header: ({column}) => <>{column.columnDef.header}, + Filter: ({column}) => { + return ( + + ); + }, + }, + { + accessorFn: (row) => + moment(row.updated_at).locale("fa").format("HH:mm | yyyy/MM/DD"), + id: "updated_at", + header: t("RefahiLoanManagement.updated_at"), + enableColumnFilter: false, + datatype: "numeric", + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + { + accessorFn: (row) => row.state_name, + id: "state_id", + header: t("RefahiLoanManagement.state_name"), + enableColumnFilter: false, + datatype: "numeric", + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + ], + [] + ); + return ( + + + + } + enableLastUpdate={true} + enablePinning={true} + enableDensityToggle={false} + initialState={{density: 'compact'}} //compact (small) //comfortable (medium) //spacious (large) + enableColumnFilters={true} + enableHiding={true} + enableFullScreenToggle={false} + enableGlobalFilter={false} + enableColumnResizing={false} // if you want true this you should change renderRowActions props ** see https://www.material-react-table.com/docs/guides/row-actions + enableRowActions={true} + TableRowAction={TableRowActions} + /> + + + + ); +} + +export default DashboardRefahiLoanManagementComponent; diff --git a/src/core/data/apiRoutes.js b/src/core/data/apiRoutes.js index e430c68..e08e29e 100644 --- a/src/core/data/apiRoutes.js +++ b/src/core/data/apiRoutes.js @@ -133,3 +133,11 @@ export const GET_SIDEBAR_NOTIFICATION = BASE_URL + "/dashboard/notification" //sidebar notification +//loan management refahi +export const GET_LOAN_MANAGEMENT_REFAHI = + BASE_URL + "/dashboard/refahi_loans" +export const UPDATE_LOAN_MANAGEMENT_REFAHI = + BASE_URL + "/dashboard/refahi_loans/update" +export const GET_LOAN_STATE_REFAHI = + BASE_URL + "/dashboard/loan_states/refahi" +//loan management refahi diff --git a/src/core/data/sidebarMenu.jsx b/src/core/data/sidebarMenu.jsx index c2dc246..7e31aaf 100644 --- a/src/core/data/sidebarMenu.jsx +++ b/src/core/data/sidebarMenu.jsx @@ -9,6 +9,7 @@ import BusinessCenterIcon from '@mui/icons-material/BusinessCenter'; import GradingIcon from '@mui/icons-material/Grading'; import SupervisedUserCircleIcon from '@mui/icons-material/SupervisedUserCircle'; import Diversity3Icon from '@mui/icons-material/Diversity3'; +import PaidIcon from '@mui/icons-material/Paid'; const sidebarMenu = [ [ @@ -115,6 +116,16 @@ const sidebarMenu = [ selected: false, permission: "manage_province_affairs_refahi", }, + { + key: "sidebar.refahi-loan-management", + secondary: "secondary.refahi-loan-management", + name: "refahi_loan_management", + type: "page", + route: "/dashboard/refahi-loan-management", + icon: , + selected: false, + permission: "manage_refahi_loan", + }, ], ]; diff --git a/src/lib/prefetchDataTable/hooks/LoanStateRefahi.jsx b/src/lib/prefetchDataTable/hooks/LoanStateRefahi.jsx new file mode 100644 index 0000000..7df1a74 --- /dev/null +++ b/src/lib/prefetchDataTable/hooks/LoanStateRefahi.jsx @@ -0,0 +1,25 @@ +import {createContext, useEffect, useState} from "react"; +import {GET_LOAN_STATE_REFAHI} from "@/core/data/apiRoutes"; +import useRequest from "@/lib/app/hooks/useRequest"; + +export const LoanStateRefahiContext = createContext(); +export const LoanStateRefahiProvider = ({children}) => { + const [detail, setDetail] = useState([]) + const requestServer = useRequest({auth: true, notification: false}) + + useEffect(() => { + requestServer(GET_LOAN_STATE_REFAHI, "get").then((response) => { + setDetail(response.data.data) + }).catch(() => { + }) + }, []); + console.log(detail) + + return ( + + {children} + + ); +} \ No newline at end of file diff --git a/src/pages/dashboard/refahi-loan-management/index.jsx b/src/pages/dashboard/refahi-loan-management/index.jsx new file mode 100644 index 0000000..e513af3 --- /dev/null +++ b/src/pages/dashboard/refahi-loan-management/index.jsx @@ -0,0 +1,26 @@ +import RolePermissionMiddleware from "@/middlewares/RolePermission"; +import WithAuthMiddleware from "@/middlewares/WithAuth"; +import {parse} from "next-useragent"; +import DashboardRefahiLoanManagementComponent from "@/components/dashboard/refahi-loan-management"; + +const requiredPermissions = ["manage_refahi_loan"]; +export default function RefahiLoanManagement() { + return ( + + + + + + ); +} + +export async function getServerSideProps({req, locale}) { + const {isBot} = parse(req.headers["user-agent"]); + return { + props: { + messages: (await import(`&/locales/${locale}/app.json`)).default, + title: "Dashboard.loan_management_page", + isBot, + }, + }; +} From c91525d6cce51b4ebf627379aa0587f9e705157e Mon Sep 17 00:00:00 2001 From: Amin Ghasempoor Date: Tue, 29 Aug 2023 14:36:12 +0330 Subject: [PATCH 5/9] TF-87 loan management refahi delete log --- src/lib/prefetchDataTable/hooks/LoanStateRefahi.jsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/lib/prefetchDataTable/hooks/LoanStateRefahi.jsx b/src/lib/prefetchDataTable/hooks/LoanStateRefahi.jsx index 7df1a74..0aca505 100644 --- a/src/lib/prefetchDataTable/hooks/LoanStateRefahi.jsx +++ b/src/lib/prefetchDataTable/hooks/LoanStateRefahi.jsx @@ -13,7 +13,6 @@ export const LoanStateRefahiProvider = ({children}) => { }).catch(() => { }) }, []); - console.log(detail) return ( Date: Tue, 29 Aug 2023 15:24:33 +0330 Subject: [PATCH 6/9] TF-87 loan management refahi use SWR --- .../Form/UpdateForm.jsx | 10 ++--- .../refahi-loan-management/index.jsx | 39 +++++++++---------- .../hooks/LoanStateRefahi.jsx | 24 ------------ .../hooks/useLoanStateRefahi.jsx | 27 +++++++++++++ 4 files changed, 50 insertions(+), 50 deletions(-) delete mode 100644 src/lib/prefetchDataTable/hooks/LoanStateRefahi.jsx create mode 100644 src/lib/prefetchDataTable/hooks/useLoanStateRefahi.jsx diff --git a/src/components/dashboard/refahi-loan-management/Form/UpdateForm.jsx b/src/components/dashboard/refahi-loan-management/Form/UpdateForm.jsx index 1d2dd72..d4bf165 100644 --- a/src/components/dashboard/refahi-loan-management/Form/UpdateForm.jsx +++ b/src/components/dashboard/refahi-loan-management/Form/UpdateForm.jsx @@ -1,5 +1,5 @@ import {useTranslations} from "next-intl"; -import {useContext, useState} from "react"; +import {useState} from "react"; import { Button, Dialog, @@ -22,12 +22,12 @@ import {UPDATE_LOAN_MANAGEMENT_REFAHI} from "@/core/data/apiRoutes"; import useRequest from "@/lib/app/hooks/useRequest"; import useNotification from "@/lib/app/hooks/useNotification"; import * as Yup from "yup"; -import {LoanStateRefahiContext} from "@/lib/prefetchDataTable/hooks/LoanStateRefahi"; +import useLoanStateRefahi from "@/lib/prefetchDataTable/hooks/useLoanStateRefahi"; const Update = ({rowId, fetchUrl, mutate}) => { const t = useTranslations(); - const detail = useContext(LoanStateRefahiContext); + const {loan_state_refahi} = useLoanStateRefahi() const [openConfirmDialog, setOpenConfirmDialog] = useState(false); const requestServer = useRequest({auth: true}) const {update_notification} = useNotification() @@ -120,11 +120,11 @@ const Update = ({rowId, fetchUrl, mutate}) => { formik.touched.next_state_id && formik.errors.next_state_id } > - {detail.map((item) => { + {loan_state_refahi ? (loan_state_refahi.map((item) => { return ( {item.name} ) - })} + })) : null} {formik.touched.next_state_id && formik.errors.next_state_id} diff --git a/src/components/dashboard/refahi-loan-management/index.jsx b/src/components/dashboard/refahi-loan-management/index.jsx index 8a571cc..4f0b3e1 100644 --- a/src/components/dashboard/refahi-loan-management/index.jsx +++ b/src/components/dashboard/refahi-loan-management/index.jsx @@ -7,7 +7,6 @@ import TableRowActions from "./TableRowActions"; import DataTable from "@/core/components/DataTable"; import moment from "jalali-moment"; import MuiDatePicker from "@/core/components/MuiDatePicker"; -import {LoanStateRefahiProvider} from "@/lib/prefetchDataTable/hooks/LoanStateRefahi"; function DashboardRefahiLoanManagementComponent() { const t = useTranslations(); @@ -129,26 +128,24 @@ function DashboardRefahiLoanManagementComponent() { return ( - - } - enableLastUpdate={true} - enablePinning={true} - enableDensityToggle={false} - initialState={{density: 'compact'}} //compact (small) //comfortable (medium) //spacious (large) - enableColumnFilters={true} - enableHiding={true} - enableFullScreenToggle={false} - enableGlobalFilter={false} - enableColumnResizing={false} // if you want true this you should change renderRowActions props ** see https://www.material-react-table.com/docs/guides/row-actions - enableRowActions={true} - TableRowAction={TableRowActions} - /> - + } + enableLastUpdate={true} + enablePinning={true} + enableDensityToggle={false} + initialState={{density: 'compact'}} //compact (small) //comfortable (medium) //spacious (large) + enableColumnFilters={true} + enableHiding={true} + enableFullScreenToggle={false} + enableGlobalFilter={false} + enableColumnResizing={false} // if you want true this you should change renderRowActions props ** see https://www.material-react-table.com/docs/guides/row-actions + enableRowActions={true} + TableRowAction={TableRowActions} + /> ); diff --git a/src/lib/prefetchDataTable/hooks/LoanStateRefahi.jsx b/src/lib/prefetchDataTable/hooks/LoanStateRefahi.jsx deleted file mode 100644 index 0aca505..0000000 --- a/src/lib/prefetchDataTable/hooks/LoanStateRefahi.jsx +++ /dev/null @@ -1,24 +0,0 @@ -import {createContext, useEffect, useState} from "react"; -import {GET_LOAN_STATE_REFAHI} from "@/core/data/apiRoutes"; -import useRequest from "@/lib/app/hooks/useRequest"; - -export const LoanStateRefahiContext = createContext(); -export const LoanStateRefahiProvider = ({children}) => { - const [detail, setDetail] = useState([]) - const requestServer = useRequest({auth: true, notification: false}) - - useEffect(() => { - requestServer(GET_LOAN_STATE_REFAHI, "get").then((response) => { - setDetail(response.data.data) - }).catch(() => { - }) - }, []); - - return ( - - {children} - - ); -} \ No newline at end of file diff --git a/src/lib/prefetchDataTable/hooks/useLoanStateRefahi.jsx b/src/lib/prefetchDataTable/hooks/useLoanStateRefahi.jsx new file mode 100644 index 0000000..598ac72 --- /dev/null +++ b/src/lib/prefetchDataTable/hooks/useLoanStateRefahi.jsx @@ -0,0 +1,27 @@ +import useSWR from 'swr' +import {GET_LOAN_STATE_REFAHI} from "@/core/data/apiRoutes"; +import useRequest from "@/lib/app/hooks/useRequest"; + +const useLoanStateRefahi = () => { + const requestServer = useRequest({auth: true, notification: false}) + + //swr config + const fetcher = (...args) => { + return requestServer(args, 'get').then((response) => { + return response.data.data; + }).catch(() => { + }) + }; + + const {data} = useSWR(GET_LOAN_STATE_REFAHI, fetcher, { + revalidateIfStale: false, + revalidateOnFocus: false, + revalidateOnReconnect: false + }) + const loan_state_refahi = data + //swr config + + // render data + return {loan_state_refahi} +} +export default useLoanStateRefahi \ No newline at end of file From 859fa7dc07deceda690904fd770f60e5f7e1e320 Mon Sep 17 00:00:00 2001 From: Amin Ghasempoor Date: Tue, 29 Aug 2023 16:07:56 +0330 Subject: [PATCH 7/9] TF-88 navgan loan management --- public/locales/fa/app.json | 13 ++ .../Form/UpdateForm.jsx | 150 +++++++++++++++++ .../TableRowActions.jsx | 17 ++ .../navgan-loan-management/index.jsx | 154 ++++++++++++++++++ src/core/data/apiRoutes.js | 9 + src/core/data/sidebarMenu.jsx | 10 ++ .../hooks/useLoanStateNavgan.jsx | 27 +++ .../navgan-loan-management/index.jsx | 26 +++ 8 files changed, 406 insertions(+) create mode 100644 src/components/dashboard/navgan-loan-management/Form/UpdateForm.jsx create mode 100644 src/components/dashboard/navgan-loan-management/TableRowActions.jsx create mode 100644 src/components/dashboard/navgan-loan-management/index.jsx create mode 100644 src/lib/prefetchDataTable/hooks/useLoanStateNavgan.jsx create mode 100644 src/pages/dashboard/navgan-loan-management/index.jsx diff --git a/public/locales/fa/app.json b/public/locales/fa/app.json index 9160674..065e317 100644 --- a/public/locales/fa/app.json +++ b/public/locales/fa/app.json @@ -36,6 +36,7 @@ "navgan-province-manager": "مدیر کل استانی", "refahi-province-manager": "مدیر کل استانی", "refahi-loan-management": "مدیریت وام", + "navgan-loan-management": "مدیریت وام", "commercial-chief": "رئیس اداره بازرگانی", "inspector-expert": "بازدید کارشناس", "province-head-expert": "کارشناس ستادی", @@ -48,6 +49,7 @@ "passenger-boss": "کارگروه استانی", "refahi-province-manager": "رفاهی", "refahi-loan-management": "رفاهی", + "navgan-loan-management": "ناوگان", "navgan-province-manager": "ناوگان" }, "Authorization": { @@ -200,6 +202,17 @@ "vehicle_type": "نوع ماشین", "state_name": "وضعیت درخواست" }, + "NavganLoanManagement": { + "name": "نام", + "id": "کد یکتا", + "national_id": "کد ملی", + "phone_number": "موبایل", + "created_at": "تاریخ درخواست", + "updated_at": "تاریخ بروزرسانی", + "navgan_id": "کد ناوگان", + "vehicle_type": "نوع ماشین", + "state_name": "وضعیت درخواست" + }, "DevelopmentAssistant": { "name": "نام", "id": "کد یکتا", diff --git a/src/components/dashboard/navgan-loan-management/Form/UpdateForm.jsx b/src/components/dashboard/navgan-loan-management/Form/UpdateForm.jsx new file mode 100644 index 0000000..573bdbb --- /dev/null +++ b/src/components/dashboard/navgan-loan-management/Form/UpdateForm.jsx @@ -0,0 +1,150 @@ +import {useTranslations} from "next-intl"; +import {useState} from "react"; +import { + Button, + Dialog, + DialogActions, + DialogContent, + DialogTitle, + FormControl, + FormHelperText, + IconButton, + InputLabel, + MenuItem, + Select, + Stack, + TextField, + Tooltip +} from "@mui/material"; +import {useFormik} from "formik"; +import ChangeCircleIcon from '@mui/icons-material/ChangeCircle'; +import {UPDATE_LOAN_MANAGEMENT_NAVGAN} from "@/core/data/apiRoutes"; +import useRequest from "@/lib/app/hooks/useRequest"; +import useNotification from "@/lib/app/hooks/useNotification"; +import * as Yup from "yup"; +import useLoanStateNavgan from "@/lib/prefetchDataTable/hooks/useLoanStateNavgan"; + + +const Update = ({rowId, fetchUrl, mutate}) => { + const t = useTranslations(); + const {loan_state_navgan} = useLoanStateNavgan() + const [openConfirmDialog, setOpenConfirmDialog] = useState(false); + const requestServer = useRequest({auth: true}) + const {update_notification} = useNotification() + + const validationSchema = Yup.object().shape({ + description: Yup.string().required(t("UpdateDialog.description_error")), + next_state_id: Yup.number().required(t("UpdateDialog.next-state-id-error")) + }); + + const formik = useFormik({ + initialValues: { + description: "", + next_state_id: "" + }, + validationSchema, + onSubmit: (values, {setSubmitting}) => { + const formData = new FormData(); + formData.append("expert_description", values.description); + formData.append("next_state_id", values.next_state_id); + + requestServer(`${UPDATE_LOAN_MANAGEMENT_NAVGAN}/${rowId}`, 'post', { + data: formData, + }).then((response) => { + mutate(fetchUrl) + update_notification() + }).catch(() => { + }).finally(() => { + setSubmitting(false); + }); + }, + }); + + const handleDescriptionChange = (event) => { + formik.setFieldValue("description", event.target.value) + }; + const handleNextStateIDChange = (event) => { + formik.setFieldValue("next_state_id", event.target.value) + }; + + return ( + <> + + { + setOpenConfirmDialog(true) + }} + > + + + + + {t("UpdateDialog.update")} + + + + + + + + {t("UpdateDialog.next-state-id")} + + + {formik.touched.next_state_id && formik.errors.next_state_id} + + + + + + + + + + + + ); +}; +export default Update; \ No newline at end of file diff --git a/src/components/dashboard/navgan-loan-management/TableRowActions.jsx b/src/components/dashboard/navgan-loan-management/TableRowActions.jsx new file mode 100644 index 0000000..fd599f9 --- /dev/null +++ b/src/components/dashboard/navgan-loan-management/TableRowActions.jsx @@ -0,0 +1,17 @@ +import {Box} from "@mui/material"; +import Update from "./Form/UpdateForm" + +const TableRowActions = ({row, mutate, fetchUrl}) => { + + return ( + + + + ); +}; + +export default TableRowActions; diff --git a/src/components/dashboard/navgan-loan-management/index.jsx b/src/components/dashboard/navgan-loan-management/index.jsx new file mode 100644 index 0000000..eddf02b --- /dev/null +++ b/src/components/dashboard/navgan-loan-management/index.jsx @@ -0,0 +1,154 @@ +import DashboardLayouts from "@/layouts/dashboardLayouts"; +import {Box, Typography} from "@mui/material"; +import {useMemo} from "react"; +import {GET_LOAN_MANAGEMENT_NAVGAN} from "@/core/data/apiRoutes"; +import {useTranslations} from "next-intl"; +import TableRowActions from "./TableRowActions"; +import DataTable from "@/core/components/DataTable"; +import moment from "jalali-moment"; +import MuiDatePicker from "@/core/components/MuiDatePicker"; + +function DashboardNavganLoanManagementComponent() { + const t = useTranslations(); + + const columns = useMemo( + () => [ + { + accessorFn: (row) => row.id, + id: "id", + header: t("NavganLoanManagement.id"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + { + accessorFn: (row) => row.name, + id: "name", + header: t("NavganLoanManagement.name"), + enableColumnFilter: true, + datatype: "text", + filterFn: "contains", + columnFilterModeOptions: ["contains", "equals", "notEquals"], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + { + accessorFn: (row) => row.national_id, + id: "national_id", + header: t("NavganLoanManagement.national_id"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + { + accessorFn: (row) => row.phone_number, + id: "phone_number", + header: t("NavganLoanManagement.phone_number"), + enableColumnFilter: true, + datatype: "numeric", + filterFn: "equals", + columnFilterModeOptions: [ + "equals", + "notEquals", + "contains", + "lessThan", + "greaterThan", + "between", + ], + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + { + accessorFn: (row) => + moment(row.created_at).locale("fa").format("HH:mm | yyyy/MM/DD"), + id: "created_at", + header: t("NavganLoanManagement.created_at"), + enableColumnFilter: true, + datatype: "date", + filterFn: "lessThan", + columnFilterModeOptions: ["lessThan", "greaterThan"], + Cell: ({renderedCellValue}) => { + return {renderedCellValue}; + }, + Header: ({column}) => <>{column.columnDef.header}, + Filter: ({column}) => { + return ( + + ); + }, + }, + { + accessorFn: (row) => + moment(row.updated_at).locale("fa").format("HH:mm | yyyy/MM/DD"), + id: "updated_at", + header: t("NavganLoanManagement.updated_at"), + enableColumnFilter: false, + datatype: "numeric", + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + { + accessorFn: (row) => row.state_name, + id: "state_id", + header: t("NavganLoanManagement.state_name"), + enableColumnFilter: false, + datatype: "numeric", + Cell: ({renderedCellValue}) => ( + {renderedCellValue} + ), + }, + ], + [] + ); + return ( + + + } + enableLastUpdate={true} + enablePinning={true} + enableDensityToggle={false} + initialState={{density: 'compact'}} //compact (small) //comfortable (medium) //spacious (large) + enableColumnFilters={true} + enableHiding={true} + enableFullScreenToggle={false} + enableGlobalFilter={false} + enableColumnResizing={false} // if you want true this you should change renderRowActions props ** see https://www.material-react-table.com/docs/guides/row-actions + enableRowActions={true} + TableRowAction={TableRowActions} + /> + + + ); +} + +export default DashboardNavganLoanManagementComponent; diff --git a/src/core/data/apiRoutes.js b/src/core/data/apiRoutes.js index e08e29e..aba46f1 100644 --- a/src/core/data/apiRoutes.js +++ b/src/core/data/apiRoutes.js @@ -141,3 +141,12 @@ export const UPDATE_LOAN_MANAGEMENT_REFAHI = export const GET_LOAN_STATE_REFAHI = BASE_URL + "/dashboard/loan_states/refahi" //loan management refahi + +// loan management navgan +export const GET_LOAN_MANAGEMENT_NAVGAN = + BASE_URL + "/dashboard/navgan_loans" +export const UPDATE_LOAN_MANAGEMENT_NAVGAN = + BASE_URL + "/dashboard/navgan_loans/update" +export const GET_LOAN_STATE_NAVGAN = + BASE_URL + "/dashboard/loan_states/navgan" +//loan management navgan diff --git a/src/core/data/sidebarMenu.jsx b/src/core/data/sidebarMenu.jsx index 7e31aaf..21a0952 100644 --- a/src/core/data/sidebarMenu.jsx +++ b/src/core/data/sidebarMenu.jsx @@ -126,6 +126,16 @@ const sidebarMenu = [ selected: false, permission: "manage_refahi_loan", }, + { + key: "sidebar.navgan-loan-management", + secondary: "secondary.navgan-loan-management", + name: "navgan_loan_management", + type: "page", + route: "/dashboard/navgan-loan-management", + icon: , + selected: false, + permission: "manage_navgan_loan", + }, ], ]; diff --git a/src/lib/prefetchDataTable/hooks/useLoanStateNavgan.jsx b/src/lib/prefetchDataTable/hooks/useLoanStateNavgan.jsx new file mode 100644 index 0000000..cf3453b --- /dev/null +++ b/src/lib/prefetchDataTable/hooks/useLoanStateNavgan.jsx @@ -0,0 +1,27 @@ +import useSWR from 'swr' +import {GET_LOAN_STATE_NAVGAN} from "@/core/data/apiRoutes"; +import useRequest from "@/lib/app/hooks/useRequest"; + +const useLoanStateNavgan = () => { + const requestServer = useRequest({auth: true, notification: false}) + + //swr config + const fetcher = (...args) => { + return requestServer(args, 'get').then((response) => { + return response.data.data; + }).catch(() => { + }) + }; + + const {data} = useSWR(GET_LOAN_STATE_NAVGAN, fetcher, { + revalidateIfStale: false, + revalidateOnFocus: false, + revalidateOnReconnect: false + }) + const loan_state_navgan = data + //swr config + + // render data + return {loan_state_navgan} +} +export default useLoanStateNavgan \ No newline at end of file diff --git a/src/pages/dashboard/navgan-loan-management/index.jsx b/src/pages/dashboard/navgan-loan-management/index.jsx new file mode 100644 index 0000000..86fb592 --- /dev/null +++ b/src/pages/dashboard/navgan-loan-management/index.jsx @@ -0,0 +1,26 @@ +import RolePermissionMiddleware from "@/middlewares/RolePermission"; +import WithAuthMiddleware from "@/middlewares/WithAuth"; +import {parse} from "next-useragent"; +import DashboardNavganLoanManagementComponent from "@/components/dashboard/navgan-loan-management"; + +const requiredPermissions = ["manage_navgan_loan"]; +export default function NavganLoanManagement() { + return ( + + + + + + ); +} + +export async function getServerSideProps({req, locale}) { + const {isBot} = parse(req.headers["user-agent"]); + return { + props: { + messages: (await import(`&/locales/${locale}/app.json`)).default, + title: "Dashboard.loan_management_page", + isBot, + }, + }; +} From 60f49ce43023a7d6201666c66162ccc8ecc2a102 Mon Sep 17 00:00:00 2001 From: AmirHossein Mahmoodi Date: Sun, 3 Sep 2023 11:22:47 +0330 Subject: [PATCH 8/9] fixed bugs --- .../dashboard/navgan-loan-management/Form/UpdateForm.jsx | 3 --- .../dashboard/refahi-loan-management/Form/UpdateForm.jsx | 3 --- 2 files changed, 6 deletions(-) diff --git a/src/components/dashboard/navgan-loan-management/Form/UpdateForm.jsx b/src/components/dashboard/navgan-loan-management/Form/UpdateForm.jsx index 573bdbb..7ac4ff6 100644 --- a/src/components/dashboard/navgan-loan-management/Form/UpdateForm.jsx +++ b/src/components/dashboard/navgan-loan-management/Form/UpdateForm.jsx @@ -116,9 +116,6 @@ const Update = ({rowId, fetchUrl, mutate}) => { label={t("UpdateDialog.next-state-id")} onChange={handleNextStateIDChange} onBlur={formik.handleBlur("next_state_id")} - helperText={ - formik.touched.next_state_id && formik.errors.next_state_id - } > {loan_state_navgan ? (loan_state_navgan.map((item) => { return ( diff --git a/src/components/dashboard/refahi-loan-management/Form/UpdateForm.jsx b/src/components/dashboard/refahi-loan-management/Form/UpdateForm.jsx index d4bf165..fec5b4c 100644 --- a/src/components/dashboard/refahi-loan-management/Form/UpdateForm.jsx +++ b/src/components/dashboard/refahi-loan-management/Form/UpdateForm.jsx @@ -116,9 +116,6 @@ const Update = ({rowId, fetchUrl, mutate}) => { label={t("UpdateDialog.next-state-id")} onChange={handleNextStateIDChange} onBlur={formik.handleBlur("next_state_id")} - helperText={ - formik.touched.next_state_id && formik.errors.next_state_id - } > {loan_state_refahi ? (loan_state_refahi.map((item) => { return ( From 2169b1a81cbd8d51caa9268ad7cc480621c4fdc4 Mon Sep 17 00:00:00 2001 From: AmirHossein Mahmoodi Date: Sun, 3 Sep 2023 11:25:16 +0330 Subject: [PATCH 9/9] change version --- example.env.local | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example.env.local b/example.env.local index 2c06285..6d90f46 100644 --- a/example.env.local +++ b/example.env.local @@ -1,5 +1,5 @@ NEXT_PUBLIC_API_NAME = "Loan Facilities Dashboard" -NEXT_PUBLIC_API_VERSION = "1.0.0" +NEXT_PUBLIC_API_VERSION = "1.7.0" NEXT_PUBLIC_DEFAULT_LANGUAGE = "fa" NEXT_PUBLIC_DEFAULT_DIRECTION = "rtl"