TF-93 price field

This commit is contained in:
2023-08-28 13:15:15 +03:30
parent 82cf9ac49b
commit 406329392b
4 changed files with 56 additions and 9 deletions

View File

@@ -265,6 +265,8 @@
"approved_amount": "مبلغ تصویب شده",
"approved_amount_error": "وارد کردن مبلغ تصویب شده الزامیست",
"approved_amount_positive": "مبلغ تصویب شده باید مثبت باشد",
"approved_amount_number": "مبلغ تصویب شده باید عدد باشد",
"toman": "تومان",
"proposed_amount_error": "وارد کردن مقدار پیشنهادی الزامیست",
"proposed_amount": "مقدار پیشنهادی",
"proposed_amount_positive": "مقدار پیشنهادی باید مثبت باشد"

View File

@@ -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}) => {
/>
</Stack>
<Stack>
<TextField
<PriceField
name="proposed_amount"
label={<>
<span>{t("ConfirmDialog.proposed_amount")}</span><small>{t("ConfirmDialog.unit")}</small></>}
type="number"
type="text"
inputProps={{
inputMode: "number",
min: 0,
pattern: "[0-9]*",
}}

View File

@@ -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}) => {
/>
</Stack>
<Stack>
<TextField
<PriceField
name="approved_amount"
label={<>
<span>{t("ConfirmDialog.approved_amount")}</span><small>{t("ConfirmDialog.unit")}</small></>}
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 &&

View File

@@ -0,0 +1,23 @@
import {InputAdornment, TextField, Typography} from "@mui/material";
import {useTranslations} from "next-intl";
const PriceField = (props) => {
const t = useTranslations();
return (
<TextField
InputProps={{
endAdornment: (
<InputAdornment position="end">
<Typography
sx={{margin: 1}}
component="span">{((props.value) / 10).toLocaleString()}</Typography>
<Typography component="span"
variant="caption">{t("ConfirmDialog.toman")}</Typography>
</InputAdornment>
),
}}
{...props}
/>
)
}
export default PriceField