debug hide action of datatable
This commit is contained in:
@@ -11,15 +11,14 @@ import useSWR from "swr";
|
|||||||
const DataTable_Main = (props) => {
|
const DataTable_Main = (props) => {
|
||||||
const request = useRequest();
|
const request = useRequest();
|
||||||
const isEmptyObject = (obj) => obj && Object.keys(obj).length === 0 && obj.constructor === Object;
|
const isEmptyObject = (obj) => obj && Object.keys(obj).length === 0 && obj.constructor === Object;
|
||||||
const { filterData, sortData, setSortData } = useDataTable();
|
const { filterData, sortData, setSortData, hideData, setHideData } = useDataTable();
|
||||||
const { need_filter, table_url, user_id, page_name, table_name, columns, initialStateProps, TableToolbar } = props;
|
const { need_filter, table_url, user_id, page_name, table_name, columns, initialStateProps, TableToolbar } = props;
|
||||||
const flatColumns = flattenArrayOfObjects(columns, "columns");
|
const flatColumns = flattenArrayOfObjects(columns, "columns");
|
||||||
const { settingStore, hideAction } = useTableSetting();
|
const { settingStore, hideAction } = useTableSetting();
|
||||||
const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: 10 });
|
const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: 10 });
|
||||||
|
|
||||||
const onColumnVisibilityChange = (event) => {
|
const onColumnVisibilityChange = (event) => {
|
||||||
const settingValue = event();
|
setHideData(event);
|
||||||
hideAction(user_id, page_name, table_name, settingValue, flatColumns);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const onSortingChange = (event) => {
|
const onSortingChange = (event) => {
|
||||||
@@ -57,13 +56,13 @@ const DataTable_Main = (props) => {
|
|||||||
data: data?.data ?? [],
|
data: data?.data ?? [],
|
||||||
initialState: {
|
initialState: {
|
||||||
density: "compact",
|
density: "compact",
|
||||||
columnVisibility: settingStore?.[user_id]?.[page_name]?.[table_name]?.["hides"],
|
columnVisibility: hideData,
|
||||||
sorting: sortData,
|
sorting: sortData,
|
||||||
...initialStateProps,
|
...initialStateProps,
|
||||||
},
|
},
|
||||||
state: {
|
state: {
|
||||||
showProgressBars: isValidating,
|
showProgressBars: isValidating,
|
||||||
columnVisibility: settingStore?.[user_id]?.[page_name]?.[table_name]?.["hides"],
|
columnVisibility: hideData,
|
||||||
sorting: sortData,
|
sorting: sortData,
|
||||||
pagination,
|
pagination,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ import DownloadIcon from "@mui/icons-material/Download";
|
|||||||
import { toast } from "react-toastify";
|
import { toast } from "react-toastify";
|
||||||
import useTableSetting from "@/lib/hooks/useTableSetting";
|
import useTableSetting from "@/lib/hooks/useTableSetting";
|
||||||
|
|
||||||
function AskForKeepData({ filterData, sortData, user_id, page_name, table_name, columns }) {
|
function AskForKeepData({ filterData, sortData, hideData, user_id, page_name, table_name, columns }) {
|
||||||
const { filterAction, sortAction } = useTableSetting();
|
const { filterAction, sortAction, hideAction } = useTableSetting();
|
||||||
|
|
||||||
const onSaveFilter = () => {
|
const onSaveFilter = () => {
|
||||||
const filteredItems = Object.keys(filterData)
|
const filteredItems = Object.keys(filterData)
|
||||||
@@ -25,8 +25,8 @@ function AskForKeepData({ filterData, sortData, user_id, page_name, table_name,
|
|||||||
})
|
})
|
||||||
.filter(Boolean);
|
.filter(Boolean);
|
||||||
filterAction(user_id, page_name, table_name, filteredItems, columns);
|
filterAction(user_id, page_name, table_name, filteredItems, columns);
|
||||||
|
|
||||||
sortAction(user_id, page_name, table_name, sortData, columns);
|
sortAction(user_id, page_name, table_name, sortData, columns);
|
||||||
|
hideAction(user_id, page_name, table_name, hideData, columns);
|
||||||
toast.dismiss({ containerId: "datatable" });
|
toast.dismiss({ containerId: "datatable" });
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -11,9 +11,11 @@ const DataTableProvider = ({ children, user_id, page_name, table_name, columns }
|
|||||||
const [isInitStates, setInitStates] = useState(false);
|
const [isInitStates, setInitStates] = useState(false);
|
||||||
const flatColumns = flattenArrayOfObjects(columns, "columns");
|
const flatColumns = flattenArrayOfObjects(columns, "columns");
|
||||||
const [initFilter, setInitFilter] = useState({});
|
const [initFilter, setInitFilter] = useState({});
|
||||||
const [initSort, setInitSort] = useState([]);
|
|
||||||
const [filterData, setFilterData] = useState({});
|
const [filterData, setFilterData] = useState({});
|
||||||
|
const [initSort, setInitSort] = useState([]);
|
||||||
const [sortData, setSortData] = useState([]);
|
const [sortData, setSortData] = useState([]);
|
||||||
|
const [initHide, setInitHide] = useState([]);
|
||||||
|
const [hideData, setHideData] = useState([]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!settingStore) return;
|
if (!settingStore) return;
|
||||||
@@ -47,22 +49,26 @@ const DataTableProvider = ({ children, user_id, page_name, table_name, columns }
|
|||||||
return acc;
|
return acc;
|
||||||
}, {});
|
}, {});
|
||||||
setFilterData(values);
|
setFilterData(values);
|
||||||
setSortData(settingStore?.[user_id]?.[page_name]?.[table_name]?.["sorts"] || []);
|
|
||||||
setInitFilter(values);
|
setInitFilter(values);
|
||||||
|
setSortData(settingStore?.[user_id]?.[page_name]?.[table_name]?.["sorts"] || []);
|
||||||
setInitSort(settingStore?.[user_id]?.[page_name]?.[table_name]?.["sorts"] || []);
|
setInitSort(settingStore?.[user_id]?.[page_name]?.[table_name]?.["sorts"] || []);
|
||||||
|
setHideData(settingStore?.[user_id]?.[page_name]?.[table_name]?.["hides"] || []);
|
||||||
|
setInitHide(settingStore?.[user_id]?.[page_name]?.[table_name]?.["hides"] || []);
|
||||||
setInitStates(true);
|
setInitStates(true);
|
||||||
}, [settingStore, isInitStates]);
|
}, [settingStore, isInitStates]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (
|
if (
|
||||||
JSON.stringify(initFilter) !== JSON.stringify(filterData) ||
|
JSON.stringify(initFilter) !== JSON.stringify(filterData) ||
|
||||||
JSON.stringify(initSort) !== JSON.stringify(sortData)
|
JSON.stringify(initSort) !== JSON.stringify(sortData) ||
|
||||||
|
JSON.stringify(initHide) !== JSON.stringify(hideData)
|
||||||
) {
|
) {
|
||||||
if (!toast.isActive("keep_data", "filtering")) {
|
if (!toast.isActive("keep_data", "filtering")) {
|
||||||
toast(
|
toast(
|
||||||
<AskForKeepData
|
<AskForKeepData
|
||||||
filterData={filterData}
|
filterData={filterData}
|
||||||
sortData={sortData}
|
sortData={sortData}
|
||||||
|
hideData={hideData}
|
||||||
user_id={user_id}
|
user_id={user_id}
|
||||||
page_name={page_name}
|
page_name={page_name}
|
||||||
table_name={table_name}
|
table_name={table_name}
|
||||||
@@ -85,6 +91,7 @@ const DataTableProvider = ({ children, user_id, page_name, table_name, columns }
|
|||||||
<AskForKeepData
|
<AskForKeepData
|
||||||
filterData={filterData}
|
filterData={filterData}
|
||||||
sortData={sortData}
|
sortData={sortData}
|
||||||
|
hideData={hideData}
|
||||||
user_id={user_id}
|
user_id={user_id}
|
||||||
page_name={page_name}
|
page_name={page_name}
|
||||||
table_name={table_name}
|
table_name={table_name}
|
||||||
@@ -96,12 +103,12 @@ const DataTableProvider = ({ children, user_id, page_name, table_name, columns }
|
|||||||
} else {
|
} else {
|
||||||
toast.dismiss({ containerId: "datatable" });
|
toast.dismiss({ containerId: "datatable" });
|
||||||
}
|
}
|
||||||
}, [filterData, sortData]);
|
}, [filterData, sortData, hideData]);
|
||||||
|
|
||||||
if (!isInitStates) return null;
|
if (!isInitStates) return null;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<DataTableContext.Provider value={{ filterData, setFilterData, sortData, setSortData }}>
|
<DataTableContext.Provider value={{ filterData, setFilterData, sortData, setSortData, hideData, setHideData }}>
|
||||||
{children}
|
{children}
|
||||||
</DataTableContext.Provider>
|
</DataTableContext.Provider>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ import { useContext } from "react";
|
|||||||
import { DataTableContext } from "@/lib/contexts/DataTable";
|
import { DataTableContext } from "@/lib/contexts/DataTable";
|
||||||
|
|
||||||
const useTableSetting = () => {
|
const useTableSetting = () => {
|
||||||
const { filterData, setFilterData, sortData, setSortData } = useContext(DataTableContext);
|
const { filterData, setFilterData, sortData, setSortData, hideData, setHideData } = useContext(DataTableContext);
|
||||||
return { filterData, setFilterData, sortData, setSortData };
|
return { filterData, setFilterData, sortData, setSortData, hideData, setHideData };
|
||||||
};
|
};
|
||||||
|
|
||||||
export default useTableSetting;
|
export default useTableSetting;
|
||||||
|
|||||||
Reference in New Issue
Block a user