'use client' import {createContext, useCallback, useEffect, useState} from "react"; 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 refactorAction = (user_id, page_name, table_name) => { const prevLocalStorage = JSON.parse(localStorage.getItem("_setting-app")) || {}; const userSettings = prevLocalStorage[user_id] || {}; const pageSettings = userSettings[page_name] || {}; const refactorData = { ...prevLocalStorage, [user_id]: { ...userSettings, [page_name]: { ...pageSettings, [table_name]: {}, }, }, }; localStorage.setItem("_setting-app", JSON.stringify(refactorData)); setSettingStore(refactorData); } 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 ( {children} ); };