From edc2cfd204e4de52212114b8834ab29e51e12934 Mon Sep 17 00:00:00 2001 From: AminGhasempoor Date: Tue, 23 Apr 2024 14:37:39 +0330 Subject: [PATCH] use table settings --- src/core/components/DataTable/index.js | 12 ++++++++---- src/core/utils/flattenArrayOfObjects.js | 10 ++++++++++ src/lib/contexts/tableSetting.jsx | 20 +++++++++++--------- 3 files changed, 29 insertions(+), 13 deletions(-) create mode 100644 src/core/utils/flattenArrayOfObjects.js diff --git a/src/core/components/DataTable/index.js b/src/core/components/DataTable/index.js index ec2a1a7..f453ade 100644 --- a/src/core/components/DataTable/index.js +++ b/src/core/components/DataTable/index.js @@ -3,6 +3,7 @@ import DataTable_Main from "./Main"; import { FA_DATATABLE_LOCALIZATION } from "./localization/fa/datatable"; import CustomToolbar from "@/components/CustomToolbar"; import useTableSetting from "@/lib/hooks/useTableSetting"; +import {flattenArrayOfObjects} from "@/core/utils/flattenArrayOfObjects"; const data = [ { @@ -55,24 +56,26 @@ const data = [ const DataTable = (props) => { const { userId, pageName, tableName, columns, initialStateProps } = props const { settingStore, hideAction, sortAction } = useTableSetting(); + const flatColumns = flattenArrayOfObjects(columns,'columns') const onColumnVisibilityChange = (event) => { const settingValue = event(); - hideAction(userId, pageName, tableName, settingValue, columns); + hideAction(userId, pageName, tableName, settingValue, flatColumns); }; const onSortingChange = (event) => { const settingValue = event(settingStore?.[userId]?.[pageName]?.[tableName]?.['sorts'] || []); - sortAction(userId, pageName, tableName, settingValue, columns); + sortAction(userId, pageName, tableName, settingValue, flatColumns); } + const table = useMaterialReactTable({ localization: FA_DATATABLE_LOCALIZATION, columns, data: data, - manualSorting: true, + // manualSorting: true, renderTopToolbarCustomActions: ({ table }) => (<> ), initialState: { @@ -113,6 +116,7 @@ const DataTable = (props) => { ...props }) + return ; }; diff --git a/src/core/utils/flattenArrayOfObjects.js b/src/core/utils/flattenArrayOfObjects.js new file mode 100644 index 0000000..4dd4612 --- /dev/null +++ b/src/core/utils/flattenArrayOfObjects.js @@ -0,0 +1,10 @@ +export const flattenArrayOfObjects = (array, key) => { + return array.reduce((acc, obj) => { + if (Array.isArray(obj[key])) { + acc.push(...flattenArrayOfObjects(obj[key])); + } else { + acc.push(obj); + } + return acc; + }, []); +}; \ No newline at end of file diff --git a/src/lib/contexts/tableSetting.jsx b/src/lib/contexts/tableSetting.jsx index f619afa..0c2262d 100644 --- a/src/lib/contexts/tableSetting.jsx +++ b/src/lib/contexts/tableSetting.jsx @@ -1,11 +1,11 @@ 'use client' import {createContext, useCallback, useEffect, useState} from "react"; +import {flattenArrayOfObjects} from "@/core/utils/flattenArrayOfObjects"; export const TableSettingContext = createContext(); export const TableSettingProvider = ({children}) => { const [settingStore, setSettingStore] = useState({}); - useEffect(() => { const _localStorage = localStorage.getItem("_setting-app") if (_localStorage) { @@ -64,18 +64,19 @@ export const TableSettingProvider = ({children}) => { const _list = [] for (const sort of values.sorts) { const _column = columns.find(column => column.id == sort.id) - _list.push(`${_column.header}` + `(${sort.desc ? "نزولی" : "صعودی"})`) + if (_column) + _list.push(`${_column.header}` + `(${sort.desc ? "نزولی" : "صعودی"})`) } if (_list.length > 0) SortText = " مرتب شده بر اساس : " + _list.join(", ") } - if (values.filters && values.filters.length > 0){ + if (values.filters && values.filters.length > 0) { const _list = [] - for (const filter of values.filters){ + for (const filter of values.filters) { const _column = columns.find(column => column.id == filter.id) - _list.push(`${_column.header}`) + if (_column) + _list.push(`${_column.header}`) } - console.log(_list) if (_list.length > 0) FilterText = " فیلتر شده بر اساس : " + _list.join(", ") } @@ -87,7 +88,8 @@ export const TableSettingProvider = ({children}) => { for (const hide of hidesArray) { if (hide.value) continue const _column = columns.find(c => c.id == hide.id) - _list.push(_column.header) + if (_column) + _list.push(_column.header) } if (_list.length > 0) HideText = "ستون های مخفی شده : " + _list.join(", "); @@ -100,7 +102,7 @@ export const TableSettingProvider = ({children}) => { if (HideText) { SummaryText += " ; "; } - if (FilterText){ + if (FilterText) { SummaryText += " ; "; } } @@ -110,7 +112,7 @@ export const TableSettingProvider = ({children}) => { SummaryText += " ; "; } } - if (FilterText){ + if (FilterText) { SummaryText += FilterText } }