From f6849f1069f6444ccb23555668c2525aada7db07 Mon Sep 17 00:00:00 2001 From: Shailesh Parmar Date: Wed, 15 Dec 2021 18:08:43 +0530 Subject: [PATCH] Improve: Add clear all button for filter feature in explore page (#1768) * Improve: Add clear all button for filter in explore page * miner fix --- .../components/Explore/Explore.component.tsx | 99 ++++++++++--------- .../common/facetfilter/FacetFilter.tsx | 58 ++++++----- .../common/facetfilter/FacetTypes.ts | 7 +- 3 files changed, 94 insertions(+), 70 deletions(-) diff --git a/openmetadata-ui/src/main/resources/ui/src/components/Explore/Explore.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/Explore/Explore.component.tsx index 38097173107..3fc8fa77c1f 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/Explore/Explore.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/Explore/Explore.component.tsx @@ -98,6 +98,7 @@ const Explore: React.FC = ({ const [fieldList, setFieldList] = useState>(tableSortingFields); const [isEntityLoading, setIsEntityLoading] = useState(true); + const [isFilterSelected, setIsFilterSelected] = useState(false); const [connectionError] = useState(error.includes('Connection refused')); const isMounting = useRef(true); const forceSetAgg = useRef(false); @@ -114,6 +115,7 @@ const Explore: React.FC = ({ if (filterType.includes(selectedFilter)) { return { ...prevState }; } + setIsFilterSelected(true); return { ...prevState, @@ -127,29 +129,31 @@ const Explore: React.FC = ({ const filter = filters[type]; const index = filter.indexOf(selectedFilter); filter.splice(index, 1); - setFilters((prevState) => ({ ...prevState, [type]: filter })); + setFilters((prevState) => { + const selectedFilterCount = Object.values(prevState).reduce( + (count, currentValue) => { + return count + currentValue.length; + }, + 0 + ); + setIsFilterSelected(selectedFilterCount >= 1); + + return { ...prevState, [type]: filter }; + }); } }; - const onSelectAllFilterHandler = ( - type: keyof FilterObject, - filters: Array - ) => { + const onClearFilterHandler = (type: string[]) => { setFilters((prevFilters) => { - return { - ...prevFilters, - ...getQueryParam(location.search), - [type]: filters, - }; - }); - }; + const updatedFilter = type.reduce((filterObj, type) => { + return { ...filterObj, [type]: [] }; + }, {}); + setIsFilterSelected(false); - const onClearFilterHandler = (type: keyof FilterObject) => { - setFilters((prevFilters) => { return { ...prevFilters, ...getQueryParam(location.search), - [type]: [], + ...updatedFilter, }; }); }; @@ -348,9 +352,7 @@ const Explore: React.FC = ({ }; const resetFilters = () => { - visibleFilters.forEach((type) => { - onClearFilterHandler(type); - }); + onClearFilterHandler(visibleFilters); }; const getTabCount = (index: string, isActive: boolean, className = '') => { @@ -383,31 +385,42 @@ const Explore: React.FC = ({ const getTabs = () => { return (
-
diff --git a/openmetadata-ui/src/main/resources/ui/src/components/common/facetfilter/FacetTypes.ts b/openmetadata-ui/src/main/resources/ui/src/components/common/facetfilter/FacetTypes.ts index 25b9245f023..fda59ecc64d 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/common/facetfilter/FacetTypes.ts +++ b/openmetadata-ui/src/main/resources/ui/src/components/common/facetfilter/FacetTypes.ts @@ -21,8 +21,11 @@ export type FacetProp = { type: keyof FilterObject ) => void; filters: FilterObject; - onClearFilter: (value: keyof FilterObject) => void; - onSelectAllFilter: (type: keyof FilterObject, filters: Array) => void; + onClearFilter?: (value: keyof FilterObject) => void; + onSelectAllFilter?: ( + type: keyof FilterObject, + filters: Array + ) => void; }; export type FilterContainerProp = {