From 40ad52fdbc7f50537b761e7c521c690b601e94a9 Mon Sep 17 00:00:00 2001 From: Ashley Harrison Date: Fri, 4 Oct 2024 15:11:32 +0100 Subject: [PATCH] SingleTopNav: Handle for non-scenes dashboards (#94198) handle singleTopNav for non-scenes dashboards --- .../dashboard/components/DashNav/DashNav.tsx | 16 +++++-------- .../AccessControlDashboardPermissions.tsx | 4 ++-- .../DashboardSettings/AnnotationsSettings.tsx | 4 ++-- .../DashboardSettings/DashboardSettings.tsx | 18 ++++++++++---- .../DashboardSettings/GeneralSettings.tsx | 3 ++- .../DashboardSettings/JsonEditorSettings.tsx | 4 ++-- .../DashboardSettings/LinksSettings.tsx | 4 ++-- .../DashboardSettings/VersionsSettings.tsx | 4 ++-- .../components/DashboardSettings/types.ts | 3 ++- .../components/PanelEditor/PanelEditor.tsx | 16 +++++++++---- .../dashboard/containers/DashboardPage.tsx | 24 ++++++++++++++++--- .../editor/VariableEditorContainer.tsx | 4 ++-- 12 files changed, 68 insertions(+), 36 deletions(-) diff --git a/public/app/features/dashboard/components/DashNav/DashNav.tsx b/public/app/features/dashboard/components/DashNav/DashNav.tsx index 86a3986be31..3d92e3731c3 100644 --- a/public/app/features/dashboard/components/DashNav/DashNav.tsx +++ b/public/app/features/dashboard/components/DashNav/DashNav.tsx @@ -16,7 +16,6 @@ import { Badge, } from '@grafana/ui'; import { updateNavIndex } from 'app/core/actions'; -import { AppChromeUpdate } from 'app/core/components/AppChrome/AppChromeUpdate'; import { NavToolbarSeparator } from 'app/core/components/AppChrome/NavToolbar/NavToolbarSeparator'; import config from 'app/core/config'; import { useAppNotification } from 'app/core/copy/appNotification'; @@ -83,6 +82,7 @@ export const DashNav = memo((props) => { // this ensures the component rerenders when the location changes useLocation(); const forceUpdate = useForceUpdate(); + const isSingleTopNav = config.featureToggles.singleTopNav; // We don't really care about the event payload here only that it triggeres a re-render of this component useBusEvent(props.dashboard.events, DashboardMetaChangedEvent); @@ -357,15 +357,11 @@ export const DashNav = memo((props) => { }; return ( - - {renderLeftActions()} - - {renderRightActions()} - - } - /> + <> + {renderLeftActions()} + {!isSingleTopNav && } + {renderRightActions()} + ); }); diff --git a/public/app/features/dashboard/components/DashboardPermissions/AccessControlDashboardPermissions.tsx b/public/app/features/dashboard/components/DashboardPermissions/AccessControlDashboardPermissions.tsx index 6b31090b447..303cae3ac2b 100644 --- a/public/app/features/dashboard/components/DashboardPermissions/AccessControlDashboardPermissions.tsx +++ b/public/app/features/dashboard/components/DashboardPermissions/AccessControlDashboardPermissions.tsx @@ -5,12 +5,12 @@ import { AccessControlAction } from 'app/types'; import { SettingsPageProps } from '../DashboardSettings/types'; -export const AccessControlDashboardPermissions = ({ dashboard, sectionNav }: SettingsPageProps) => { +export const AccessControlDashboardPermissions = ({ dashboard, sectionNav, toolbar }: SettingsPageProps) => { const canSetPermissions = contextSrv.hasPermission(AccessControlAction.DashboardsPermissionsWrite); const pageNav = sectionNav.node.parentItem; return ( - + ); diff --git a/public/app/features/dashboard/components/DashboardSettings/AnnotationsSettings.tsx b/public/app/features/dashboard/components/DashboardSettings/AnnotationsSettings.tsx index 158d80b9dcc..e345cf1533d 100644 --- a/public/app/features/dashboard/components/DashboardSettings/AnnotationsSettings.tsx +++ b/public/app/features/dashboard/components/DashboardSettings/AnnotationsSettings.tsx @@ -7,7 +7,7 @@ import { AnnotationSettingsEdit, AnnotationSettingsList, newAnnotationName } fro import { SettingsPageProps } from './types'; -export function AnnotationsSettings({ dashboard, editIndex, sectionNav }: SettingsPageProps) { +export function AnnotationsSettings({ dashboard, editIndex, sectionNav, toolbar }: SettingsPageProps) { const onNew = () => { const newAnnotation: AnnotationQuery = { name: newAnnotationName, @@ -27,7 +27,7 @@ export function AnnotationsSettings({ dashboard, editIndex, sectionNav }: Settin const isEditing = editIndex != null && editIndex < dashboard.annotations.list.length; return ( - + {!isEditing && } {isEditing && } diff --git a/public/app/features/dashboard/components/DashboardSettings/DashboardSettings.tsx b/public/app/features/dashboard/components/DashboardSettings/DashboardSettings.tsx index adb6af01c37..ab2fd4d6a21 100644 --- a/public/app/features/dashboard/components/DashboardSettings/DashboardSettings.tsx +++ b/public/app/features/dashboard/components/DashboardSettings/DashboardSettings.tsx @@ -4,7 +4,7 @@ import { useLocation } from 'react-router-dom-v5-compat'; import { locationUtil, NavModel, NavModelItem } from '@grafana/data'; import { selectors } from '@grafana/e2e-selectors'; -import { locationService } from '@grafana/runtime'; +import { config, locationService } from '@grafana/runtime'; import { Button, Stack, Text, ToolbarButtonRow } from '@grafana/ui'; import { AppChromeUpdate } from 'app/core/components/AppChrome/AppChromeUpdate'; import { Page } from 'app/core/components/Page/Page'; @@ -36,6 +36,7 @@ const onClose = () => locationService.partial({ editview: null, editIndex: null export function DashboardSettings({ dashboard, editview, pageNav, sectionNav }: Props) { const [updateId, setUpdateId] = useState(0); + const isSingleTopNav = config.featureToggles.singleTopNav; useEffect(() => { dashboard.events.subscribe(DashboardMetaChangedEvent, () => setUpdateId((v) => v + 1)); }, [dashboard]); @@ -81,8 +82,15 @@ export function DashboardSettings({ dashboard, editview, pageNav, sectionNav }: return ( <> - {actions}} /> - + {!isSingleTopNav && ( + {actions}} /> + )} + {actions} : undefined} + sectionNav={subSectionNav} + dashboard={dashboard} + editIndex={editIndex} + /> ); } @@ -209,9 +217,9 @@ function getSectionNav( }; } -function MakeEditable({ dashboard, sectionNav }: SettingsPageProps) { +function MakeEditable({ dashboard, sectionNav, toolbar }: SettingsPageProps) { return ( - + Dashboard not editable