From 789e66b0f30f4b9e4b2d23307722d5f9ab20b475 Mon Sep 17 00:00:00 2001 From: Tom Butcher Date: Thu, 3 Sep 2026 16:31:07 +0100 Subject: [PATCH] Enhance FilterSidebar and ObjectTable Components with View Filter and User Overrides - Added support for viewFilter and isEditing props in FilterSidebar to manage filter states more effectively. - Updated ObjectTable to handle user overrides for filter and sort states when switching views, ensuring accurate data representation. - Integrated userOverridesRef to maintain filter and sort states during editing, improving user experience when managing views. - Adjusted loading logic in ObjectTableNavigationButtons to prioritize effective filters based on active views, enhancing data consistency. --- .../Dashboard/common/FilterSidebar.jsx | 86 +++++---- .../Dashboard/common/ObjectTable.jsx | 55 ++++-- .../common/ObjectTableNavigationButtons.jsx | 21 +- .../context/ObjectListViewContext.jsx | 181 ++++++++++-------- .../Dashboard/context/TableStateContext.jsx | 8 +- 5 files changed, 218 insertions(+), 133 deletions(-) diff --git a/src/components/Dashboard/common/FilterSidebar.jsx b/src/components/Dashboard/common/FilterSidebar.jsx index 5a69be7c..addefd7e 100644 --- a/src/components/Dashboard/common/FilterSidebar.jsx +++ b/src/components/Dashboard/common/FilterSidebar.jsx @@ -45,7 +45,9 @@ const FilterSidebar = ({ type, filter = {}, onFilterChange, - masterFilter = {} + masterFilter = {}, + viewFilter = {}, + isEditing = false }) => { const model = getModelByName(type) const modelProps = getModelProperties(type) @@ -113,6 +115,11 @@ const FilterSidebar = ({ [filterableProperties] ) + const viewFilterKeys = useMemo( + () => new Set(Object.keys(viewFilter).filter((k) => viewFilter[k] !== '')), + [viewFilter] + ) + const activeFields = Object.keys(localFilter) const usedFields = new Set(activeFields) @@ -192,39 +199,46 @@ const FilterSidebar = ({ /> - {rows.map((row) => ( - - changeField(row.field, v)} + options={availableOptions(row.field)} + allowClear={false} + disabled={isViewRow} + labelRender={({ label }) => ( + + )} + style={{ flexShrink: 0 }} + classNames={{ root: 'filter-sidebar-field-select' }} + /> + changeValue(row.field, value)} + style={{ flex: 1 }} + disabled={isViewRow} + propertyFilter={{ + modelType: type, + propertyName: row.field + }} + filter={localFilter} + masterFilter={masterFilter} + /> +