Feature/update datatable filter

This commit is contained in:
2024-12-09 07:43:18 +00:00
committed by AmirHossein Mahmoodi
parent 2c2ebe3b97
commit 2a9f4d73bd
4 changed files with 37 additions and 12 deletions

View File

@@ -6,8 +6,11 @@ import Toolbar from "./Toolbar";
import { GET_SUPERVISOR_LIST } from "@/core/utils/routes"; import { GET_SUPERVISOR_LIST } from "@/core/utils/routes";
import moment from "jalali-moment"; import moment from "jalali-moment";
import RowActions from "./RowActions"; import RowActions from "./RowActions";
import useProvinces from "@/lib/hooks/useProvince";
const OperatorList = () => { const OperatorList = () => {
const { provinces, errorProvinces, loadingProvinces } = useProvinces();
const citiesListApi = "https://rms.rmto.ir/public/contents/edarate_shahri_by_province";
const columns = useMemo( const columns = useMemo(
() => [ () => [
{ {
@@ -24,18 +27,38 @@ const OperatorList = () => {
header: "استان", header: "استان",
id: "province", id: "province",
enableColumnFilter: true, enableColumnFilter: true,
datatype: "text", datatype: "numeric",
filterFn: "equals", filterFn: "equals",
columnFilterModeOptions: ["equals", "contains"], columnSelectOption: () => {
if (loadingProvinces) {
return [{ value: "", label: "در حال بارگذاری..." }];
}
if (errorProvinces) {
return [{ value: "", label: "خطا در بارگذاری" }];
}
return provinces.map((province) => ({
value: province.id,
label: province.name_fa,
}));
},
}, },
{ {
accessorKey: "office", accessorKey: "office",
header: "اداره", header: "اداره",
id: "office", id: "office",
enableColumnFilter: true, enableColumnFilter: true,
datatype: "text", datatype: "numeric",
filterFn: "equals", filterFn: "equals",
columnFilterModeOptions: ["equals", "contains"], dependencyId: "province",
columnSelectOption: (dependencyField) => {
if (dependencyField.value === "") {
return [{ value: "", label: "ابتدا استان را انتخاب کنید" }];
}
return [{ value: dependencyField.value, label: dependencyField.value }];
},
}, },
{ {
accessorKey: "operator_name", accessorKey: "operator_name",
@@ -107,7 +130,7 @@ const OperatorList = () => {
), ),
}, },
], ],
[] [provinces]
); );
return ( return (

View File

@@ -1,7 +1,7 @@
"use client"; "use client";
import { Box, Button, Drawer, styled } from "@mui/material"; import { Box, Button, Drawer, styled } from "@mui/material";
import { Form, Formik } from "formik"; import { Form, Formik, getIn } from "formik";
import useTableSetting from "@/lib/hooks/useTableSetting"; import useTableSetting from "@/lib/hooks/useTableSetting";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import FilterHeader from "@/core/components/DataTable/filter/FilterHeader"; import FilterHeader from "@/core/components/DataTable/filter/FilterHeader";
@@ -110,6 +110,9 @@ function FilterBody({ columns, drawerState, setDrawerState, user_id, page_name,
filterParameters={values[column.id]} filterParameters={values[column.id]}
handleChange={handleChange} handleChange={handleChange}
handleBlur={handleBlur} handleBlur={handleBlur}
dependencyFieldValue={
column.dependencyId ? getIn(values, column.dependencyId) : null
}
setFieldValue={setFieldValue} setFieldValue={setFieldValue}
resetForm={resetForm} resetForm={resetForm}
errors={errors} errors={errors}

View File

@@ -22,6 +22,7 @@ function FilterBodyField({
filterParameters, filterParameters,
handleChange, handleChange,
handleBlur, handleBlur,
dependencyFieldValue,
setFieldValue, setFieldValue,
errors, errors,
touched, touched,
@@ -33,7 +34,6 @@ function FilterBodyField({
const handleOpenFilterBox = (event) => { const handleOpenFilterBox = (event) => {
setAnchorEl(event.currentTarget); setAnchorEl(event.currentTarget);
}; };
return ( return (
<> <>
{filterParameters.datatype === "numeric" && filterParameters.filterFn === "between" ? ( {filterParameters.datatype === "numeric" && filterParameters.filterFn === "between" ? (
@@ -47,12 +47,11 @@ function FilterBodyField({
errors={errors} errors={errors}
touched={touched} touched={touched}
/> />
) : filterParameters.datatype === "numeric" && ) : filterParameters.datatype === "numeric" && filterParameters.filterFn === "equals" ? (
filterParameters.filterFn === "equals" &&
Array.isArray(column.columnSelectOption) ? (
<CustomSelect <CustomSelect
column={column} column={column}
filterParameters={filterParameters} filterParameters={filterParameters}
dependencyFieldValue={dependencyFieldValue}
setFieldValue={setFieldValue} setFieldValue={setFieldValue}
defaultFilterTranslation={defaultFilterTranslation} defaultFilterTranslation={defaultFilterTranslation}
handleOpenFilterBox={handleOpenFilterBox} handleOpenFilterBox={handleOpenFilterBox}

View File

@@ -2,8 +2,8 @@
import { FormControl, FormHelperText, InputLabel, MenuItem, OutlinedInput, Select, Typography } from "@mui/material"; import { FormControl, FormHelperText, InputLabel, MenuItem, OutlinedInput, Select, Typography } from "@mui/material";
function CustomSelect({ column, filterParameters, defaultFilterTranslation, setFieldValue }) { function CustomSelect({ column, dependencyFieldValue, filterParameters, defaultFilterTranslation, setFieldValue }) {
const columnSelectOption = column.columnSelectOption; const columnSelectOption = column.columnSelectOption(dependencyFieldValue);
return ( return (
<FormControl fullWidth sx={{ marginY: 1 }}> <FormControl fullWidth sx={{ marginY: 1 }}>