Feature/update datatable filter
This commit is contained in:
@@ -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 (
|
||||||
|
|||||||
@@ -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}
|
||||||
|
|||||||
@@ -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}
|
||||||
|
|||||||
@@ -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 }}>
|
||||||
|
|||||||
Reference in New Issue
Block a user