From 605cfa045a8b774713f8ddf57abb1f2825c645cf Mon Sep 17 00:00:00 2001 From: Kamil Gabryjelski Date: Mon, 12 Dec 2022 16:07:38 +0100 Subject: [PATCH] perf: Prevent rerendering and re-querying metadata of filters in horizontal bar (#22389) --- .../FilterControls/FilterControl.tsx | 77 +++++++++++-------- .../FilterBar/FilterControls/FilterValue.tsx | 2 +- 2 files changed, 45 insertions(+), 34 deletions(-) diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterControl.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterControl.tsx index 535e2e0bd..7d335e553 100644 --- a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterControl.tsx +++ b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterControl.tsx @@ -17,6 +17,11 @@ * under the License. */ import React, { useContext, useMemo, useState } from 'react'; +import { + createHtmlPortalNode, + InPortal, + OutPortal, +} from 'react-reverse-portal'; import { styled, SupersetTheme } from '@superset-ui/core'; import { FormItem as StyledFormItem, Form } from 'src/components/Form'; import { Tooltip } from 'src/components/Tooltip'; @@ -224,6 +229,7 @@ const FilterControl = ({ orientation = FilterBarOrientation.VERTICAL, overflow = false, }: FilterControlProps) => { + const portalNode = useMemo(() => createHtmlPortalNode(), []); const [isFilterActive, setIsFilterActive] = useState(false); const { name = '' } = filter; @@ -276,40 +282,45 @@ const FilterControl = ({ }, [orientation, overflow]); return ( - - + + + + -
- - - -
-
-
+ +
+ + + +
+
+ + ); }; diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterValue.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterValue.tsx index 213329c4b..308361622 100644 --- a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterValue.tsx +++ b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterValue.tsx @@ -319,4 +319,4 @@ const FilterValue: React.FC = ({ ); }; -export default FilterValue; +export default React.memo(FilterValue);