From 154f1ea8c92e38ba46a906d2121a85a1c9fac310 Mon Sep 17 00:00:00 2001 From: Diego Medina Date: Fri, 15 Apr 2022 14:58:32 -0400 Subject: [PATCH] fix: Dashboard Edit View Tab Headers Hidden when Dashboard Name is Long (#19472) --- .../DashboardBuilder/DashboardBuilder.tsx | 29 ++++++++++++++----- superset-frontend/src/dashboard/constants.ts | 2 -- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardBuilder.tsx b/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardBuilder.tsx index ab1e95b9a1b4..11a5b28e561b 100644 --- a/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardBuilder.tsx +++ b/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardBuilder.tsx @@ -18,7 +18,7 @@ */ /* eslint-env browser */ import cx from 'classnames'; -import React, { FC, useCallback, useMemo } from 'react'; +import React, { FC, useCallback, useEffect, useState, useMemo } from 'react'; import { JsonObject, styled, css, t } from '@superset-ui/core'; import { Global } from '@emotion/react'; import { useDispatch, useSelector } from 'react-redux'; @@ -59,10 +59,8 @@ import { CLOSED_FILTER_BAR_WIDTH, FILTER_BAR_HEADER_HEIGHT, FILTER_BAR_TABS_HEIGHT, - HEADER_HEIGHT, MAIN_HEADER_HEIGHT, OPEN_FILTER_BAR_WIDTH, - TABS_HEIGHT, } from 'src/dashboard/constants'; import { shouldFocusTabs, getRootLevelTabsComponent } from './utils'; import DashboardContainer from './DashboardContainer'; @@ -252,6 +250,7 @@ const DashboardBuilder: FC = () => { [dispatch], ); + const headerRef = React.useRef(null); const dashboardRoot = dashboardLayout[DASHBOARD_ROOT_ID]; const rootChildId = dashboardRoot?.children[0]; const topLevelTabs = @@ -264,10 +263,26 @@ const DashboardBuilder: FC = () => { uiConfig.hideTitle || standaloneMode === DashboardStandaloneMode.HIDE_NAV_AND_TITLE || isReport; + const [barTopOffset, setBarTopOffset] = useState(0); - const barTopOffset = - (hideDashboardHeader ? 0 : HEADER_HEIGHT) + - (topLevelTabs ? TABS_HEIGHT : 0); + useEffect(() => { + setBarTopOffset(headerRef.current?.getBoundingClientRect()?.height || 0); + + let observer: ResizeObserver; + if (typeof global.ResizeObserver !== 'undefined' && headerRef.current) { + observer = new ResizeObserver(entries => { + setBarTopOffset( + current => entries?.[0]?.contentRect?.height || current, + ); + }); + + observer.observe(headerRef.current); + } + + return () => { + observer?.disconnect(); + }; + }, []); const { showDashboard, @@ -364,7 +379,7 @@ const DashboardBuilder: FC = () => { )} - + {/* @ts-ignore */}