From b6834fecc65294eb39998fb09cdfa9d05441715c Mon Sep 17 00:00:00 2001 From: Tom Butcher Date: Wed, 2 Sep 2026 21:35:56 +0100 Subject: [PATCH] Refactor ObjectTable and ObjectListViewContext for Simplified Filter Management - Removed unnecessary state management for masterFilter and masterSort in ObjectTable, streamlining filter handling. - Updated ObjectListViewContext to simplify view state restoration logic, enhancing clarity and maintainability. - Adjusted references to masterFilter throughout ObjectTable to ensure consistent filter application. --- .../Dashboard/common/ObjectTable.jsx | 58 ++++--------------- .../context/ObjectListViewContext.jsx | 39 +++---------- 2 files changed, 17 insertions(+), 80 deletions(-) diff --git a/src/components/Dashboard/common/ObjectTable.jsx b/src/components/Dashboard/common/ObjectTable.jsx index 39794ec5..454472fd 100644 --- a/src/components/Dashboard/common/ObjectTable.jsx +++ b/src/components/Dashboard/common/ObjectTable.jsx @@ -323,11 +323,6 @@ const ObjectTable = forwardRef( activeObjectViewRef.current = activeObjectView const onObjectViewFilterSortChangeRef = useRef(onObjectViewFilterSortChange) onObjectViewFilterSortChangeRef.current = onObjectViewFilterSortChange - const listViewMastersRef = useRef({ masterFilter: {}, masterSort: {} }) - const [listViewMasters, setListViewMastersState] = useState({ - masterFilter: {}, - masterSort: {} - }) const [sidebarFilter, setSidebarFilter] = useState({}) const [tableSorter, setTableSorter] = useState({}) const [initialized, setInitialized] = useState(false) @@ -380,30 +375,12 @@ const ObjectTable = forwardRef( ) const prevValuesRef = useRef({ type, masterFilter }) - const effectiveMasterFilter = useMemo( - () => ({ - ...listViewMasters.masterFilter, - ...masterFilter - }), - [listViewMasters.masterFilter, masterFilter] - ) - - const getEffectiveMasterFilter = useCallback( - () => ({ - ...listViewMastersRef.current.masterFilter, - ...masterFilter - }), - [masterFilter] - ) + const getMasterFilter = useCallback(() => masterFilter || {}, [masterFilter]) const resolveSorter = useCallback((userSorter) => { if (userSorter?.field && userSorter?.order) { return { field: userSorter.field, order: userSorter.order } } - const masterSort = listViewMastersRef.current.masterSort - if (masterSort?.field && masterSort?.order) { - return { field: masterSort.field, order: masterSort.order } - } return {} }, []) @@ -546,14 +523,14 @@ const ObjectTable = forwardRef( return fetchObjects(type, { page: pageNum, limit: pageSize, - filter: { ...getEffectiveMasterFilter(), ...filter }, + filter: { ...getMasterFilter(), ...filter }, sorter: resolveSorter(sorter), onDataChange }) }, [ type, - getEffectiveMasterFilter, + getMasterFilter, pageSize, onDataChange, fetchObjects, @@ -916,15 +893,15 @@ const ObjectTable = forwardRef( Object.entries(sidebarFilter).forEach(([k, v]) => { if (v !== '' && v !== undefined) active[k] = v }) - return { ...effectiveMasterFilter, ...active } - }, [sidebarFilter, effectiveMasterFilter]) + return { ...masterFilter, ...active } + }, [sidebarFilter, masterFilter]) const tableFilterContextValue = useMemo( () => ({ filter: getActiveFilterValues(sidebarFilter), - masterFilter: effectiveMasterFilter + masterFilter }), - [sidebarFilter, effectiveMasterFilter] + [sidebarFilter, masterFilter] ) newEventHandlerRef.current = newEventHandler @@ -1111,20 +1088,6 @@ const ObjectTable = forwardRef( resolveSorter ]) - const setListViewMasters = useCallback( - ({ masterFilter: nextMasterFilter = {}, masterSort: nextMasterSort = {} }) => { - listViewMastersRef.current = { - masterFilter: nextMasterFilter, - masterSort: nextMasterSort - } - setListViewMastersState({ - masterFilter: nextMasterFilter, - masterSort: nextMasterSort - }) - }, - [] - ) - const applyViewState = useCallback( (filterState, sorterState) => { if (filterState == null && sorterState == null) { @@ -1170,7 +1133,6 @@ const ObjectTable = forwardRef( useImperativeHandle(ref, () => ({ reload, applyViewState, - setListViewMasters, setData: (newData) => { setPages([{ pageNum: 1, items: newData }]) }, @@ -1246,7 +1208,7 @@ const ObjectTable = forwardRef( propertyLabel={propertyLabel} modelType={type} filter={sidebarFilter} - masterFilter={effectiveMasterFilter} + masterFilter={masterFilter} /> ) @@ -1440,7 +1402,7 @@ const ObjectTable = forwardRef( } } - if (isFilterable && !Object.keys(effectiveMasterFilter).includes(prop.name)) { + if (isFilterable && !Object.keys(masterFilter).includes(prop.name)) { columnConfig.filterDropdown = ({ setSelectedKeys, selectedKeys, @@ -1719,7 +1681,7 @@ const ObjectTable = forwardRef( type={type} filter={sidebarFilter} onFilterChange={handleSidebarFilterChange} - masterFilter={effectiveMasterFilter} + masterFilter={masterFilter} /> )} diff --git a/src/components/Dashboard/context/ObjectListViewContext.jsx b/src/components/Dashboard/context/ObjectListViewContext.jsx index 5e9c2a54..164bd38f 100644 --- a/src/components/Dashboard/context/ObjectListViewContext.jsx +++ b/src/components/Dashboard/context/ObjectListViewContext.jsx @@ -140,23 +140,16 @@ export const ObjectListViewProvider = ({ if (tabKey !== ALL_TAB_KEY && !view) return - if (editing) { - tableRef.current.setListViewMasters?.({ - masterFilter: {}, - masterSort: {} - }) - tableRef.current.applyViewState( - view?.filter || {}, - view?.sort?.field ? view.sort : {} - ) + // "All" outside edit mode restores the user's persisted filter/sort + if (tabKey === ALL_TAB_KEY && !editing) { + tableRef.current.applyViewState(null, null) return } - tableRef.current.setListViewMasters?.({ - masterFilter: view?.filter || {}, - masterSort: view?.sort?.field ? view.sort : {} - }) - tableRef.current.applyViewState(null, null) + tableRef.current.applyViewState( + view?.filter || {}, + view?.sort?.field ? view.sort : {} + ) }, [tableRef] ) @@ -698,16 +691,6 @@ export const ObjectListViewProvider = ({ const lastSyncedViewKeyRef = useRef(null) - const masterFilter = useMemo(() => { - if (isEditing || !activeView) return {} - return activeView.filter || {} - }, [activeView, isEditing]) - - const masterSort = useMemo(() => { - if (isEditing || !activeView?.sort?.field) return {} - return activeView.sort - }, [activeView, isEditing]) - useEffect(() => { const viewKey = isEditing ? `edit:${activeView?._id ?? activeTabKey}` @@ -722,8 +705,6 @@ export const ObjectListViewProvider = ({ onViewStateChange?.({ activeView: isEditing ? activeViewRef.current : null, - masterFilter, - masterSort, isEditing, handleFilterSortChange: isEditing ? stableFilterSortHandlerRef.current @@ -733,8 +714,6 @@ export const ObjectListViewProvider = ({ activeTabKey, activeView?._id, isEditing, - masterFilter, - masterSort, onViewStateChange ]) @@ -750,8 +729,6 @@ export const ObjectListViewProvider = ({ views: displayedViews, activeView, activeTabKey, - masterFilter, - masterSort, initialLoading, saving, isEditing, @@ -773,8 +750,6 @@ export const ObjectListViewProvider = ({ displayedViews, activeView, activeTabKey, - masterFilter, - masterSort, initialLoading, saving, isEditing,