diff --git a/src/core/components/DataTable/filter/BetweenNumberFilter.jsx b/src/core/components/DataTable/filter/BetweenNumberFilter.jsx
deleted file mode 100644
index 0b3512a..0000000
--- a/src/core/components/DataTable/filter/BetweenNumberFilter.jsx
+++ /dev/null
@@ -1,58 +0,0 @@
-import {Grid, TextField} from '@mui/material';
-import {useEffect} from "react";
-
-const BetweenNumberFilter = ({formik, id , defaultValue}) => {
-
- useEffect(() => {
- formik.setFieldValue(`${id}[0]`, defaultValue?.[0] || '');
- formik.setFieldValue(`${id}[1]`, defaultValue?.[1] || '');
- }, []);
- const handleBlur = (index) => () => {
- const minValue = formik.values[id][0];
- const maxValue = formik.values[id][1];
-
- if (index === 0 && minValue !== '' && maxValue !== '' && parseInt(minValue) > parseInt(maxValue)) {
- formik.setFieldValue(`${id}[0]`, maxValue);
- }
-
- if (index === 1 && minValue !== '' && maxValue !== '' && parseInt(maxValue) < parseInt(minValue)) {
- formik.setFieldValue(`${id}[1]`, minValue);
- }
- };
- return (
-
-
-
-
-
-
-
-
- );
-};
-
-export default BetweenNumberFilter;
diff --git a/src/core/components/DataTable/filter/DatePicker/BetweenDateFilter.jsx b/src/core/components/DataTable/filter/DatePicker/BetweenDateFilter.jsx
deleted file mode 100644
index 0e4a325..0000000
--- a/src/core/components/DataTable/filter/DatePicker/BetweenDateFilter.jsx
+++ /dev/null
@@ -1,35 +0,0 @@
-import {Grid} from '@mui/material';
-import MuiDatePicker from "@/core/components/DataTable/filter/DatePicker/MuiDatePicker";
-import {useEffect, useState} from "react";
-
-const BetWeenDateFilter = ({formik, id, defaultValue}) => {
- useEffect(() => {
- formik.setFieldValue(`${id}[0]`, defaultValue?.[0] || '');
- formik.setFieldValue(`${id}[1]`, defaultValue?.[1] || '');
- }, []);
-
- const [dateRange, setDateRange] = useState(defaultValue);
-
- const handleDateChange = (index, value) => {
- const newRange = [...dateRange];
- newRange[index] = value;
- setDateRange(newRange);
- };
-
- return (
-
-
- handleDateChange(0, value)}/>
-
-
- handleDateChange(1, value)}/>
-
-
- );
-};
-
-export default BetWeenDateFilter;
diff --git a/src/core/components/DataTable/filter/DatePicker/MuiDatePicker.jsx b/src/core/components/DataTable/filter/DatePicker/MuiDatePicker.jsx
deleted file mode 100644
index f2b0876..0000000
--- a/src/core/components/DataTable/filter/DatePicker/MuiDatePicker.jsx
+++ /dev/null
@@ -1,67 +0,0 @@
-import { LocalizationProvider, MobileDateTimePicker } from "@mui/x-date-pickers";
-import { AdapterDateFnsJalali } from "@mui/x-date-pickers/AdapterDateFnsJalali";
-import moment from "jalali-moment";
-import { faIR } from "@mui/x-date-pickers/locales";
-import { Box, IconButton, InputAdornment, TextField } from "@mui/material";
-import ClearIcon from "@mui/icons-material/Clear";
-import { useState } from "react";
-
-export default function MuiDatePicker({label, name, formik, defaultValue, minDate, maxDate, onDateChange }) {
- const [pickerValue, setPickerValue] = useState(defaultValue ? new Date(defaultValue) : null);
-
- return (
-
-
- {
- const date = new Date(newValue);
- const formattedDate = moment(date)
- .locale("en")
- .format("YYYY-MM-DD HH:mm");
- formik.setFieldValue(name, formattedDate);
- onDateChange(formattedDate);
- setPickerValue(newValue);
- }}
- slotProps={{
- textField: {
- placeholder: "تاریخ خود را وارد کنید",
- helperText: label,
- InputProps: {
- endAdornment: (
-
- {
- event.stopPropagation();
- formik.setFieldValue(name, "");
- setPickerValue(null);
- }}
- sx={{
- color: "#bfbfbf",
- '&:hover': {
- backgroundColor: 'rgba(189, 189, 189, 0.1)',
- },
- }}
- >
-
-
-
- ),
- },
- },
- }}
- value={pickerValue}
- minDate={minDate ? new Date(minDate) : null}
- maxDate={maxDate ? new Date(maxDate) : null}
- />
-
-
- );
-}
diff --git a/src/core/components/DataTable/filter/FilterBody.jsx b/src/core/components/DataTable/filter/FilterBody.jsx
new file mode 100644
index 0000000..b87f980
--- /dev/null
+++ b/src/core/components/DataTable/filter/FilterBody.jsx
@@ -0,0 +1,58 @@
+'use client'
+
+import {Box, Drawer, IconButton, Typography} from "@mui/material";
+import CancelIcon from '@mui/icons-material/Cancel';
+import FilterBodyField from "@/core/components/DataTable/filter/FilterBodyField";
+
+function FilterBody({columns, drawerState, setDrawerState}) {
+ // const initialValues = columns.reduce((acc, column) => {
+ // if (column.enableColumnFilter) {
+ // const filter = settingStore?.[userId]?.[pageName]?.[tableName]?.['filters']?.find((filter) => filter.id === column.id);
+ // if (column.filterFn === 'betweenNum' || column.filterFn === 'betweenDate') {
+ // acc[column.id] = filter?.value || ["", ""];
+ // } else if (column.type === 'select2') {
+ // acc[column.id] = filter?.value || [];
+ // } else {
+ // acc[column.id] = filter?.value || '';
+ // }
+ // }
+ // return acc;
+ // }, {});
+ // const initialValues = {};
+ return (
+ {
+ setDrawerState(false)
+ }}>
+
+ فیلتر
+ {
+ setDrawerState(false)
+ }}>
+
+
+
+
+ {/**/}
+ {columns.map((column) => {
+
+ })}
+ {/**/}
+
+
+ );
+}
+
+export default FilterBody;
diff --git a/src/core/components/DataTable/filter/FilterBodyField.jsx b/src/core/components/DataTable/filter/FilterBodyField.jsx
new file mode 100644
index 0000000..e78697e
--- /dev/null
+++ b/src/core/components/DataTable/filter/FilterBodyField.jsx
@@ -0,0 +1,9 @@
+'use client'
+
+function FilterBodyField({column}) {
+ return (
+ asdasdasd
+ );
+}
+
+export default FilterBodyField;
diff --git a/src/core/components/DataTable/filter/FilterButton.jsx b/src/core/components/DataTable/filter/FilterButton.jsx
new file mode 100644
index 0000000..ec444bb
--- /dev/null
+++ b/src/core/components/DataTable/filter/FilterButton.jsx
@@ -0,0 +1,17 @@
+'use client'
+import FilterAltIcon from '@mui/icons-material/FilterAlt';
+import {IconButton, Tooltip} from "@mui/material";
+
+function FilterButton({drawerState, setDrawerState}) {
+ return (
+
+ {
+ setDrawerState(!drawerState)
+ }} aria-label="filter table">
+
+
+
+ );
+}
+
+export default FilterButton;
diff --git a/src/core/components/DataTable/filter/FilterColumn.jsx b/src/core/components/DataTable/filter/FilterColumn.jsx
deleted file mode 100644
index 3c0a16c..0000000
--- a/src/core/components/DataTable/filter/FilterColumn.jsx
+++ /dev/null
@@ -1,201 +0,0 @@
-"use client"
-import {Box, Button, Divider, Drawer, FormControl, IconButton, styled, Tooltip, Typography} from '@mui/material';
-import {useFormik} from 'formik';
-import {useEffect, useState} from "react";
-import useTableSetting from "@/lib/hooks/useTableSetting";
-import BetweenNumberFilter from "@/core/components/DataTable/filter/BetweenNumberFilter";
-import BetWeenDateFilter from "@/core/components/DataTable/filter/DatePicker/BetweenDateFilter";
-import SelectBoxMultiple from "@/core/components/DataTable/filter/SelectBoxMultiple";
-import SelectBox from "@/core/components/DataTable/filter/SelectBox";
-import FilterAltIcon from '@mui/icons-material/FilterAlt';
-import CloseIcon from '@mui/icons-material/Close';
-import TextFieldWithFnBox from "@/core/components/DataTable/filter/TextFieldWithFnBox/TextFieldWithFnBox";
-
-function FilterColumn({columns}) {
- const [open, setOpen] = useState(false);
- const [selectedFilters, setSelectedFilters] = useState([]);
- const [userId, setUserId] = useState(0);
- const [pageName, setPageName] = useState('testPage');
- const [tableName, setTableName] = useState('testTable');
- const {settingStore, hideAction, filterAction, sortAction,} = useTableSetting();
-
- const DrawerHeader = styled('div')(({theme}) => ({
- display: 'flex',
- alignItems: 'center',
- padding: theme.spacing(0, 1),
- justifyContent: 'space-between',
- }));
- const toggleDrawer = (newOpen) => () => {
- setOpen(newOpen);
- };
- const handleDrawerClose = () => {
- setOpen(false);
- };
- useEffect(() => {
- const settingValue = settingStore?.[userId]?.[pageName]?.[tableName]?.['filters'] || [];
- setSelectedFilters(settingValue.length > 0 ? settingValue : []);
- if (!settingValue.length > 0) {
- formik.resetForm();
- }
- }, [settingStore]);
-
- const handleSelectFilter = (fieldName, filterFn) => {
- const filterIndex = selectedFilters.findIndex(filter => filter.id === fieldName);
- if (filterIndex !== -1) {
- const updatedFilters = [...selectedFilters];
- updatedFilters[filterIndex].fn = filterFn;
- setSelectedFilters(updatedFilters);
- } else {
- const newFilter = {id: fieldName, fn: filterFn};
- const updatedFilters = [...selectedFilters, newFilter];
- setSelectedFilters(updatedFilters);
- }
- };
-
- const initialValues = columns.reduce((acc, column) => {
- if (column.enableColumnFilter) {
- const filter = settingStore?.[userId]?.[pageName]?.[tableName]?.['filters']?.find((filter) => filter.id === column.id);
- if (column.filterFn === 'betweenNum' || column.filterFn === 'betweenDate') {
- acc[column.id] = filter?.value || ["", ""];
- } else if (column.type === 'select2') {
- acc[column.id] = filter?.value || [];
- } else {
- acc[column.id] = filter?.value || '';
- }
- }
- return acc;
- }, {});
-
- const formik = useFormik({
- initialValues,
- onSubmit: (values) => {
- const updatedFilters = selectedFilters.map(filter => {
- const value = values[filter.id];
- if (value !== undefined) {
- return {...filter, value};
- }
- return filter;
- });
- Object.entries(values).forEach(([fieldName, value]) => {
- const filterIndex = updatedFilters.findIndex(filter => filter.id === fieldName);
- if (filterIndex === -1 && value !== '' && value !== null && value !== undefined) {
- const column = columns.find(col => col.id === fieldName);
- updatedFilters.push({id: fieldName, value, fn: column.filterFn, datatype: column.datatype});
- }
- });
-
- const newArrayFilter = updatedFilters.filter((filter) => {
- const value = values[filter.id];
-
- return (
- value !== '' &&
- value !== null &&
- value !== undefined &&
- !(Array.isArray(value) && (value.length === 0 || (value.length === 2 && value.every((v) => v === ''))))
- );
- });
-
- setSelectedFilters(newArrayFilter);
- filterAction(userId, pageName, tableName, newArrayFilter, columns);
- }
-
- });
- console.log(settingStore?.[userId]?.[pageName]?.[tableName]?.['filters'])
- return (
- <>
-
-
-
-
-
-
-
- فیلتر
-
-
-
-
-
-
- {columns.map((column, index) => (
- column.enableColumnFilter &&
- (column.inputType === 'betweenDate' ?
- filter.id === column.id)?.value || ''}
- />
- : column.inputType === 'betweenNum' ?
- filter.id === column.id)?.value || ["", ""]}
- />
- : column.inputType === 'select2' ?
- filter.id === column.id)?.value || []}
- />
- : column.inputType === 'select' ?
- filter.id === column.id)?.value || ''}
- />
- :
- filter.id === column.id)?.fn || column._filterFn}
- columnFilterModeOptions={column.columnFilterModeOptions}
- onSelectFilter={(filterFn) => handleSelectFilter(column.id, filterFn)}
- defaultValue={formik.values[column.id] || (settingStore?.[userId]?.[pageName]?.[tableName]?.['filters'] || []).find(filter => filter.id === column.id)?.value || ''}
- />
- )
- ))}
-
-
-
-
-
-
-
-
-
- >
- );
-}
-
-export default FilterColumn;
-
-
diff --git a/src/core/components/DataTable/filter/SelectBox.jsx b/src/core/components/DataTable/filter/SelectBox.jsx
deleted file mode 100644
index 88cce6e..0000000
--- a/src/core/components/DataTable/filter/SelectBox.jsx
+++ /dev/null
@@ -1,53 +0,0 @@
-import InputLabel from '@mui/material/InputLabel';
-import MenuItem from '@mui/material/MenuItem';
-import FormControl from '@mui/material/FormControl';
-import Select from '@mui/material/Select';
-import {useEffect, useState} from "react";
-const names = [
- 'Oliver Hansen',
- 'Van Henry',
- 'April Tucker',
- 'Ralph Hubbard',
- 'Omar Alexander',
- 'Carlos Abbott',
- 'Miriam Wagner',
- 'Bradley Wilkerson',
- 'Virginia Andrews',
- 'Kelly Snyder',
-];
-const SelectBox = ({ formik, id, defaultValue }) => {
-
- useEffect(() => {
- formik.setFieldValue(id, defaultValue || '');
- }, []);
-
- const [selectedValue, setSelectedValue] = useState(defaultValue || '');
-
- const handleChange = (event) => {
- const { value } = event.target;
- setSelectedValue(value);
- formik.setFieldValue(id, value);
- };
-
- return (
- <>
-
- انتخاب
-
-
- >
- );
-};
-
-export default SelectBox;
diff --git a/src/core/components/DataTable/filter/SelectBoxMultiple.jsx b/src/core/components/DataTable/filter/SelectBoxMultiple.jsx
deleted file mode 100644
index 4355c72..0000000
--- a/src/core/components/DataTable/filter/SelectBoxMultiple.jsx
+++ /dev/null
@@ -1,116 +0,0 @@
-import {useTheme} from '@mui/material/styles';
-import Box from '@mui/material/Box';
-import OutlinedInput from '@mui/material/OutlinedInput';
-import InputLabel from '@mui/material/InputLabel';
-import MenuItem from '@mui/material/MenuItem';
-import FormControl from '@mui/material/FormControl';
-import Select from '@mui/material/Select';
-import Chip from '@mui/material/Chip';
-import {useEffect, useState} from "react";
-
-const ITEM_HEIGHT = 48;
-const ITEM_PADDING_TOP = 8;
-const MenuProps = {
- PaperProps: {
- style: {
- maxHeight: ITEM_HEIGHT * 4.5 + ITEM_PADDING_TOP,
- width: 250,
- },
- },
-};
-
-const names = [
- 'Oliver Hansen',
- 'Van Henry',
- 'April Tucker',
- 'Ralph Hubbard',
- 'Omar Alexander',
- 'Carlos Abbott',
- 'Miriam Wagner',
- 'Bradley Wilkerson',
- 'Virginia Andrews',
- 'Kelly Snyder',
-];
-
-function getStyles(name, personName, theme) {
- return {
- fontWeight:
- personName.indexOf(name) === -1
- ? theme.typography.fontWeightRegular
- : theme.typography.fontWeightMedium,
- };
-}
-
-const SelectBoxMultiple = ({formik, id, defaultValue}) => {
- const theme = useTheme();
- const [personName, setPersonName] = useState(defaultValue || []);
-
- useEffect(() => {
- defaultValue.forEach((value, index) => {
- formik.setFieldValue(`${id}[${index}]`, value || '');
- });
-
- }, []);
-
- const handleChange = (event) => {
- const {
- target: {value},
- } = event;
-
- const selectedValues = typeof value === 'string' ? value.split(',').filter(item => item.trim() !== '') : value;
-
- formik.setFieldValue(id, []);
-
- if (selectedValues.length === 0) {
- setPersonName([]);
- formik.setFieldValue(id, []);
- } else {
- setPersonName(selectedValues);
- selectedValues.forEach((selectedValue, index) => {
- formik.setFieldValue(`${id}[${index}]`, selectedValue);
- });
- }
- };
-
- return (
- <>
-
- انتخاب
- }
- renderValue={(selected) => (
-
- {selected.map((value) => (
-
- ))}
-
- )}
- MenuProps={MenuProps}
- sx={{
- "&.MuiSelect-select": {
- minWidth: 0,
- maxWidth: '100%',
- overflow: 'hidden',
- },
- }}
- >
- {names.map((name) => (
-
- ))}
-
-
- >
- );
-};
-
-export default SelectBoxMultiple;
diff --git a/src/core/components/DataTable/filter/TextFieldWithFnBox/FilterBox.jsx b/src/core/components/DataTable/filter/TextFieldWithFnBox/FilterBox.jsx
deleted file mode 100644
index 3bba610..0000000
--- a/src/core/components/DataTable/filter/TextFieldWithFnBox/FilterBox.jsx
+++ /dev/null
@@ -1,46 +0,0 @@
-import {ClickAwayListener, List, ListItem, ListItemText, Paper, Popper} from '@mui/material';
-import {useState} from "react";
-
-const columnFilterModeOptionFa = {
- equals: "برابر",
- notEquals: "نابرابر",
- contains: "شامل",
- lessThan: "کوچکتر",
- greaterThan: "بزرگتر",
- fuzzy: "فازی",
-}
-
-function FilterBox({
- anchorEl, open = false, handleClose = () => {
- }, columnFilterModeOptions, onSelectFilter, defaultFilter
- }) {
- const [selectedFilter, setSelectedFilter] = useState(defaultFilter);
-
- const id = open ? 'simple-popper' : undefined;
- const handleSelectFilter = (filterFn) => {
- setSelectedFilter(filterFn);
- onSelectFilter(filterFn);
- handleClose();
- };
-
- return (
-
-
-
-
-
- {columnFilterModeOptions.map((option, index) => (
- handleSelectFilter(option)}
- selected={option === selectedFilter} sx={{cursor: 'pointer'}}>
-
-
- ))}
-
-
-
-
-
- );
-}
-
-export default FilterBox;
diff --git a/src/core/components/DataTable/filter/TextFieldWithFnBox/TextFieldWithFnBox.jsx b/src/core/components/DataTable/filter/TextFieldWithFnBox/TextFieldWithFnBox.jsx
deleted file mode 100644
index 18600dc..0000000
--- a/src/core/components/DataTable/filter/TextFieldWithFnBox/TextFieldWithFnBox.jsx
+++ /dev/null
@@ -1,61 +0,0 @@
-import {IconButton, TextField} from '@mui/material';
-import ArtTrackIcon from '@mui/icons-material/ArtTrack';
-import {useEffect, useState} from "react";
-import FilterBox from "@/core/components/DataTable/filter/TextFieldWithFnBox/FilterBox";
-
-const TextFieldWithFnBox = ({
- formik,
- id,
- header,
- defaultValue,
- defaultFilter,
- columnFilterModeOptions,
- onSelectFilter
- }) => {
-
- const [anchorEl, setAnchorEl] = useState(null);
- const [open, setOpen] = useState(false);
-
- useEffect(() => {
- formik.setFieldValue(id, defaultValue || '');
- }, []);
-
- const handleClick = (event) => {
- setOpen((prevOpen) => !prevOpen);
- setAnchorEl(anchorEl ? null : event.currentTarget);
- };
-
- const handleClose = () => {
- setOpen(false);
- setAnchorEl(null);
- };
-
- return (
- <>
-
-
-
- )
- }}
- sx={{
- position: 'relative'
- }}
- />
-
- >
- );
-};
-
-export default TextFieldWithFnBox;
diff --git a/src/core/components/DataTable/filter/index.jsx b/src/core/components/DataTable/filter/index.jsx
new file mode 100644
index 0000000..b8872bf
--- /dev/null
+++ b/src/core/components/DataTable/filter/index.jsx
@@ -0,0 +1,18 @@
+'use client'
+
+import {useState} from "react";
+import FilterButton from "@/core/components/DataTable/filter/FilterButton";
+import FilterBody from "@/core/components/DataTable/filter/FilterBody";
+
+function FilterColumn({columns}) {
+ const [open, setOpen] = useState(false);
+
+ return (
+ <>
+
+
+ >
+ );
+}
+
+export default FilterColumn;
diff --git a/src/core/components/DataTable/refactor/RefactorTable.jsx b/src/core/components/DataTable/refactor/RefactorTable.jsx
index 06f75c1..71e302c 100644
--- a/src/core/components/DataTable/refactor/RefactorTable.jsx
+++ b/src/core/components/DataTable/refactor/RefactorTable.jsx
@@ -6,9 +6,9 @@ import {useState} from "react";
function RefactorTable() {
const {refactorAction} = useTableSetting();
- const [userId, setUserId] = useState(2);
- const [pageName, setPageName] = useState('loan');
- const [tableName, setTableName] = useState('loan_table');
+ const [userId, setUserId] = useState(0);
+ const [pageName, setPageName] = useState('testPage');
+ const [tableName, setTableName] = useState('testTable');
const refactor = () => {
refactorAction(userId, pageName, tableName);
diff --git a/src/core/components/DataTable/toolbar/TopToolbar.js b/src/core/components/DataTable/toolbar/TopToolbar.js
index 2b9641c..53c65da 100644
--- a/src/core/components/DataTable/toolbar/TopToolbar.js
+++ b/src/core/components/DataTable/toolbar/TopToolbar.js
@@ -3,7 +3,7 @@ import {Box, useMediaQuery} from "@mui/material";
import DataTable_LinearProgressBar from "./LinearProgressBar";
import DataTable_TablePagination from "./TablePagination";
import DataTable_ToolbarInternalButtons from "./ToolbarInternalButtons";
-import FilterColumn from "@/core/components/DataTable/filter/FilterColumn";
+import FilterColumn from "@/core/components/DataTable/filter";
import RefactorTable from "@/core/components/DataTable/refactor/RefactorTable";
const DataTable_TopToolbar = ({table, columns}) => {