complete validation and make validation for between type on numeric and date inputs
This commit is contained in:
@@ -63,24 +63,25 @@ function FilterBody({columns, drawerState, setDrawerState}) {
|
|||||||
|
|
||||||
const validationSchema = Yup.object().shape(
|
const validationSchema = Yup.object().shape(
|
||||||
columns.reduce((acc, column) => {
|
columns.reduce((acc, column) => {
|
||||||
if (column._filterFn === "between" && column.datatype === "numeric") {
|
if (column._filterFn === "between") {
|
||||||
acc[column.id] = Yup.array().of(Yup.string()).test({
|
acc[column.id] = Yup.object().shape({
|
||||||
test(value, ctx) {
|
value: Yup.array()
|
||||||
console.log("vavavava", value)
|
.of(Yup.string().nullable())
|
||||||
const [start, end] = value.value || ["", ""];
|
.test({
|
||||||
const startInt = parseInt(start, 10);
|
test(value, ctx) {
|
||||||
const endInt = parseInt(end, 10);
|
const [start, end] = value || ["", ""];
|
||||||
if (start && end && endInt <= startInt) {
|
if (column.datatype === "numeric" && start && end && parseInt(end, 10) <= parseInt(start, 10)) {
|
||||||
return ctx.createError({
|
return ctx.createError({
|
||||||
message: `مقدار وارده باید بیشتر از (${start}) باشد`
|
message: `مقدار وارده باید بیشتر از (${start}) باشد`,
|
||||||
});
|
});
|
||||||
} else if ((start && !end) || (!start && end)) {
|
} else if ((start && !end) || (!start && end)) {
|
||||||
return ctx.createError({
|
return ctx.createError({
|
||||||
message: "این بخش را تکمیل نمایید"
|
message: "این بخش را تکمیل نمایید",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
},
|
||||||
|
}),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return acc;
|
return acc;
|
||||||
|
|||||||
@@ -70,6 +70,8 @@ function FilterBodyField({
|
|||||||
setFieldValue={setFieldValue}
|
setFieldValue={setFieldValue}
|
||||||
defaultFilterTranslation={defaultFilterTranslation}
|
defaultFilterTranslation={defaultFilterTranslation}
|
||||||
handleOpenFilterBox={handleOpenFilterBox}
|
handleOpenFilterBox={handleOpenFilterBox}
|
||||||
|
errors={errors}
|
||||||
|
touched={touched}
|
||||||
/>
|
/>
|
||||||
) : column.datatype === "array" && filterParameters.filterFn === "equals" ? (
|
) : column.datatype === "array" && filterParameters.filterFn === "equals" ? (
|
||||||
<CustomSelectMultiple
|
<CustomSelectMultiple
|
||||||
|
|||||||
@@ -4,8 +4,7 @@ import React from "react";
|
|||||||
import {Box, Typography} from "@mui/material";
|
import {Box, Typography} from "@mui/material";
|
||||||
import MuiDatePicker from "@/core/components/DataTable/filter/fieldsType/CustomDate/MuiDatePicker";
|
import MuiDatePicker from "@/core/components/DataTable/filter/fieldsType/CustomDate/MuiDatePicker";
|
||||||
|
|
||||||
function CustomDatePickerRange({column, filterParameters, defaultFilterTranslation, setFieldValue}) {
|
function CustomDatePickerRange({column, filterParameters, defaultFilterTranslation, setFieldValue, errors, touched}) {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Box sx={{display: "flex", gap: 1}}>
|
<Box sx={{display: "flex", gap: 1}}>
|
||||||
<MuiDatePicker
|
<MuiDatePicker
|
||||||
@@ -26,6 +25,8 @@ function CustomDatePickerRange({column, filterParameters, defaultFilterTranslati
|
|||||||
setFieldValue={setFieldValue}
|
setFieldValue={setFieldValue}
|
||||||
minDate={filterParameters.value[0]}
|
minDate={filterParameters.value[0]}
|
||||||
placeholder={`تا تاریخ`}
|
placeholder={`تا تاریخ`}
|
||||||
|
helperText={errors?.[`${column.id}`]?.value ? errors?.[`${column.id}`]?.value : null}
|
||||||
|
error={Boolean(errors?.[`${column.id}`]?.value)}
|
||||||
/>
|
/>
|
||||||
</Box>
|
</Box>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -6,7 +6,12 @@ import {Box, FormHelperText, IconButton, InputAdornment} from "@mui/material";
|
|||||||
import ClearIcon from "@mui/icons-material/Clear";
|
import ClearIcon from "@mui/icons-material/Clear";
|
||||||
import moment from "jalali-moment";
|
import moment from "jalali-moment";
|
||||||
|
|
||||||
function MuiDatePicker({value, setFieldValue, name, minDate, maxDate, helperText, placeholder}) {
|
function MuiDatePicker({value, setFieldValue, name, minDate, maxDate, helperText, placeholder, error}) {
|
||||||
|
|
||||||
|
// console.log("error", error);
|
||||||
|
//
|
||||||
|
// console.log("helperText", helperText)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Box sx={{display: "flex", flexDirection: "column", my: 1}}>
|
<Box sx={{display: "flex", flexDirection: "column", my: 1}}>
|
||||||
<LocalizationProvider dateAdapter={AdapterDateFnsJalali}
|
<LocalizationProvider dateAdapter={AdapterDateFnsJalali}
|
||||||
@@ -19,7 +24,6 @@ function MuiDatePicker({value, setFieldValue, name, minDate, maxDate, helperText
|
|||||||
name={name}
|
name={name}
|
||||||
aria-describedby="component-helper-text"
|
aria-describedby="component-helper-text"
|
||||||
onChange={(value) => {
|
onChange={(value) => {
|
||||||
console.log(value)
|
|
||||||
const date = new Date(value);
|
const date = new Date(value);
|
||||||
const formattedDate = moment(date)
|
const formattedDate = moment(date)
|
||||||
.locale("en")
|
.locale("en")
|
||||||
@@ -30,6 +34,7 @@ function MuiDatePicker({value, setFieldValue, name, minDate, maxDate, helperText
|
|||||||
maxDate={maxDate ? new Date(maxDate) : null}
|
maxDate={maxDate ? new Date(maxDate) : null}
|
||||||
slotProps={{
|
slotProps={{
|
||||||
textField: {
|
textField: {
|
||||||
|
error: error,
|
||||||
placeholder: placeholder,
|
placeholder: placeholder,
|
||||||
InputProps: {
|
InputProps: {
|
||||||
endAdornment: (
|
endAdornment: (
|
||||||
@@ -56,7 +61,7 @@ function MuiDatePicker({value, setFieldValue, name, minDate, maxDate, helperText
|
|||||||
},
|
},
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<FormHelperText id="component-helper-text" sx={{ml: 2}}>
|
<FormHelperText id="component-helper-text" sx={{ml: 2, color: error ? '#d32f2f' : "unset"}}>
|
||||||
{helperText ? helperText : ""}
|
{helperText ? helperText : ""}
|
||||||
</FormHelperText>
|
</FormHelperText>
|
||||||
</LocalizationProvider>
|
</LocalizationProvider>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ function CustomTextFieldRange({
|
|||||||
label={<Typography>از {column.header}</Typography>}
|
label={<Typography>از {column.header}</Typography>}
|
||||||
value={filterParameters.value[0]}
|
value={filterParameters.value[0]}
|
||||||
fullWidth
|
fullWidth
|
||||||
error={touched?.[column.id] && Boolean(errors?.[column.id])}
|
error={touched?.[`${column.id}`]?.value && Boolean(errors?.[`${column.id}`]?.value)}
|
||||||
helperText={<Typography variant="button" sx={{color: "#16534a"}}>نوع
|
helperText={<Typography variant="button" sx={{color: "#16534a"}}>نوع
|
||||||
فیلتر: {defaultFilterTranslation}</Typography>}
|
فیلتر: {defaultFilterTranslation}</Typography>}
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
@@ -33,8 +33,8 @@ function CustomTextFieldRange({
|
|||||||
name={`${column.id}.value[1]`}
|
name={`${column.id}.value[1]`}
|
||||||
onChange={handleChange}
|
onChange={handleChange}
|
||||||
onBlur={handleBlur}
|
onBlur={handleBlur}
|
||||||
error={touched?.[column.id] && Boolean(errors?.[column.id])}
|
error={touched?.[`${column.id}`]?.value && Boolean(errors?.[`${column.id}`]?.value)}
|
||||||
helperText={touched?.[column.id] ? errors?.[column.id] : null}
|
helperText={touched?.[`${column.id}`]?.value ? errors?.[`${column.id}`]?.value : null}
|
||||||
label={<Typography>تا {column.header}</Typography>}
|
label={<Typography>تا {column.header}</Typography>}
|
||||||
value={filterParameters.value[1]}
|
value={filterParameters.value[1]}
|
||||||
fullWidth
|
fullWidth
|
||||||
|
|||||||
Reference in New Issue
Block a user