129 lines
5.0 KiB
JavaScript
129 lines
5.0 KiB
JavaScript
'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) {
|
|
setSettingStore(JSON.parse(_localStorage))
|
|
}
|
|
}, []);
|
|
|
|
const hideAction = useCallback((user_id, page_name, table_name, settingValue, columns) => {
|
|
updateSettingStorage(user_id, page_name, table_name, "hides", settingValue, columns);
|
|
}, [])
|
|
const sortAction = useCallback((user_id, page_name, table_name, settingValue, columns) => {
|
|
updateSettingStorage(user_id, page_name, table_name, "sorts", settingValue, columns);
|
|
}, [])
|
|
const filterAction = (user_id, page_name, table_name, settingValue, columns) => {
|
|
updateSettingStorage(user_id, page_name, table_name, "filters", settingValue, columns);
|
|
}
|
|
const updateSettingStorage = (user_id, page_name, table_name, settingType, settingValue, columns) => {
|
|
const prevLocalStorage = JSON.parse(localStorage.getItem("_setting-app")) || {};
|
|
const userSettings = prevLocalStorage[user_id] || {};
|
|
const pageSettings = userSettings[page_name] || {};
|
|
const tableSettings = pageSettings[table_name] || {};
|
|
let newSettings;
|
|
if (settingType === "sorts" || settingType === "filters") {
|
|
newSettings = [...settingValue];
|
|
} else {
|
|
newSettings = {...tableSettings[settingType] || {}, ...settingValue};
|
|
}
|
|
const updatedLocalStorage = {
|
|
...prevLocalStorage,
|
|
[user_id]: {
|
|
...userSettings,
|
|
[page_name]: {
|
|
...pageSettings,
|
|
[table_name]: {
|
|
...tableSettings,
|
|
[settingType]: Array.isArray(settingValue) ? [...newSettings] : {...newSettings},
|
|
summary: SummaryTextMessage({
|
|
...tableSettings,
|
|
[settingType]: Array.isArray(settingValue) ? [...newSettings] : {...newSettings},
|
|
}, columns)
|
|
},
|
|
},
|
|
},
|
|
};
|
|
localStorage.setItem("_setting-app", JSON.stringify(updatedLocalStorage));
|
|
setSettingStore(updatedLocalStorage);
|
|
}
|
|
|
|
const SummaryTextMessage = (values, columns) => {
|
|
let SummaryText = "";
|
|
let HideText = "";
|
|
let FilterText = "";
|
|
let SortText = "";
|
|
|
|
if (values.sorts && values.sorts.length > 0) {
|
|
const _list = []
|
|
for (const sort of values.sorts) {
|
|
const _column = columns.find(column => column.id == sort.id)
|
|
if (_column)
|
|
_list.push(`${_column.header}` + `(${sort.desc ? "نزولی" : "صعودی"})`)
|
|
}
|
|
if (_list.length > 0)
|
|
SortText = " مرتب شده بر اساس : " + _list.join(", ")
|
|
}
|
|
if (values.filters && values.filters.length > 0) {
|
|
const _list = []
|
|
for (const filter of values.filters) {
|
|
const _column = columns.find(column => column.id == filter.id)
|
|
if (_column)
|
|
_list.push(`${_column.header}`)
|
|
}
|
|
if (_list.length > 0)
|
|
FilterText = " فیلتر شده بر اساس : " + _list.join(", ")
|
|
}
|
|
|
|
if (values.hides) {
|
|
const hidesArray = Object.entries(values.hides).map((e) => ({id: e[0], value: e[1]}))
|
|
if (hidesArray.length > 0) {
|
|
const _list = []
|
|
for (const hide of hidesArray) {
|
|
if (hide.value) continue
|
|
const _column = columns.find(c => c.id == hide.id)
|
|
if (_column)
|
|
_list.push(_column.header)
|
|
}
|
|
if (_list.length > 0)
|
|
HideText = "ستون های مخفی شده : " + _list.join(", ");
|
|
}
|
|
}
|
|
|
|
if (HideText || SortText || FilterText) {
|
|
if (SortText) {
|
|
SummaryText += SortText;
|
|
if (HideText) {
|
|
SummaryText += " ; ";
|
|
}
|
|
if (FilterText) {
|
|
SummaryText += " ; ";
|
|
}
|
|
}
|
|
if (HideText) {
|
|
SummaryText += HideText;
|
|
if (FilterText) {
|
|
SummaryText += " ; ";
|
|
}
|
|
}
|
|
if (FilterText) {
|
|
SummaryText += FilterText
|
|
}
|
|
}
|
|
|
|
return SummaryText;
|
|
};
|
|
|
|
return (
|
|
<TableSettingContext.Provider
|
|
value={{settingStore, hideAction, sortAction, filterAction}}>
|
|
{children}
|
|
</TableSettingContext.Provider>
|
|
);
|
|
}; |