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.
This commit is contained in:
parent
73de7ac8ee
commit
b6834fecc6
@ -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}
|
||||
/>
|
||||
</Flex>
|
||||
)}
|
||||
|
||||
@ -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,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user