From 4da04ff16dacdc096c1fafd917e059e8a12f3416 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Fern=C3=A1ndez?= Date: Thu, 22 Sep 2022 17:44:47 +0200 Subject: [PATCH] Navigation: use pageNav and subTitle in Dashboards > Settings > Links (#55510) --- .../DashboardSettings/LinksSettings.test.tsx | 12 ++++--- .../DashboardSettings/LinksSettings.tsx | 31 ++++++++++++++----- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/public/app/features/dashboard/components/DashboardSettings/LinksSettings.test.tsx b/public/app/features/dashboard/components/DashboardSettings/LinksSettings.test.tsx index 65291bc874c..f3c1a51b72c 100644 --- a/public/app/features/dashboard/components/DashboardSettings/LinksSettings.test.tsx +++ b/public/app/features/dashboard/components/DashboardSettings/LinksSettings.test.tsx @@ -2,15 +2,16 @@ import { within } from '@testing-library/dom'; import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import React from 'react'; -import { BrowserRouter } from 'react-router-dom'; +import { Router } from 'react-router-dom'; import { getGrafanaContextMock } from 'test/mocks/getGrafanaContextMock'; import { selectors } from '@grafana/e2e-selectors'; +import { locationService } from '@grafana/runtime'; import { GrafanaContext } from 'app/core/context/GrafanaContext'; import { DashboardModel } from '../../state'; -import { LinksSettings } from './LinksSettings'; +import { DashboardSettings } from './DashboardSettings'; function setup(dashboard: DashboardModel) { const sectionNav = { @@ -20,11 +21,12 @@ function setup(dashboard: DashboardModel) { }, }; + // Need to use DashboardSettings here as it's responsible for fetching the state back from location return render( - - - + + + ); } diff --git a/public/app/features/dashboard/components/DashboardSettings/LinksSettings.tsx b/public/app/features/dashboard/components/DashboardSettings/LinksSettings.tsx index 9a677e5f5a6..d550f9789c1 100644 --- a/public/app/features/dashboard/components/DashboardSettings/LinksSettings.tsx +++ b/public/app/features/dashboard/components/DashboardSettings/LinksSettings.tsx @@ -1,5 +1,7 @@ import React, { useState } from 'react'; +import { NavModelItem } from '@grafana/data'; +import { locationService } from '@grafana/runtime'; import { Page } from 'app/core/components/PageNew/Page'; import { LinkSettingsEdit, LinkSettingsList } from '../LinksSettings'; @@ -9,28 +11,41 @@ import { SettingsPageProps } from './types'; export type LinkSettingsMode = 'list' | 'new' | 'edit'; -export function LinksSettings({ dashboard, sectionNav }: SettingsPageProps) { - const [editIdx, setEditIdx] = useState(null); +export function LinksSettings({ dashboard, sectionNav, editIndex }: SettingsPageProps) { + const [isNew, setIsNew] = useState(false); const onGoBack = () => { - setEditIdx(null); + setIsNew(false); + locationService.partial({ editIndex: undefined }); }; const onNew = () => { dashboard.links = [...dashboard.links, { ...newLink }]; - setEditIdx(dashboard.links.length - 1); + setIsNew(true); + locationService.partial({ editIndex: dashboard.links.length - 1 }); }; const onEdit = (idx: number) => { - setEditIdx(idx); + setIsNew(false); + locationService.partial({ editIndex: idx }); }; - const isEditing = editIdx !== null; + const isEditing = editIndex !== undefined; + + let pageNav: NavModelItem | undefined; + if (isEditing) { + const title = isNew ? 'New link' : 'Edit link'; + const description = isNew ? 'Create a new link on your dashboard' : 'Edit a specific link of your dashboard'; + pageNav = { + text: title, + subTitle: description, + }; + } return ( - + {!isEditing && } - {isEditing && } + {isEditing && } ); }