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