[Dashboard Navigation] GA Links Panel (#178999)

Closes https://github.com/elastic/kibana/issues/172075
Closes https://github.com/elastic/kibana/issues/178396

## Summary

In order to move the links panel into general availability, this PR does
four main things:
1. It changes the default of the "Save to library" toggle in the flyout
from `true` to `false` - this is in response to some early telemetry,
which suggests that link panels **not** saved to the library are more
common.

    | Before | After |
    |--------|--------|
| ![Screenshot 2024-03-20 at 9 38
41 AM](af42e570-98c2-4cbb-852f-0a34a7dd779b)
| ![Screenshot 2024-03-20 at 9 36
10 AM](2943e3fe-c3ce-4b23-a8cf-bba990995457)
|

2. It fixes a styling issue in Serverless where the height of the
secondary edit/add link flyout was incorrect.

    | Before | After |
    |--------|--------|
|
![image](0d32bda7-a5bc-4655-80ac-bffab6fce61a)
|
![image](78f32642-550b-475f-bbf1-12a38189592e)
|

3. It removes the lab setting for the links panel. The removal of this
setting is **not** a breaking change - it is completely safe to remove
this setting **regardless** of the previous value. Telemetry tracking
for this setting is also no longer required.

    | Before | After |
    |--------|--------|
| ![Screenshot 2024-03-19 at 3 00
39 PM](e9d5c19e-9ebd-4561-8391-4bb7e6f915d9)
|
![image](1325c0d0-349f-4dc9-897a-41049efb4670)
|


4. It removes any reference to "Technical preview" or "Experimental"
    
    | Before | After |
    |--------|--------|
| ![Screenshot 2024-03-19 at 2 55
20 PM](2a246688-78b1-4376-9218-8b6b2a87dfed)
|
![image](20bf7b6c-ef85-4ede-851d-035fd9f53bbd)
|
| ![Screenshot 2024-03-19 at 2 56
14 PM](c9fe5224-56d8-4d04-8b3c-f7c8b5433115)
| ![Screenshot 2024-03-19 at 2 58
27 PM](a2dfcb4d-2d42-40d0-a7d4-616587e69044)
|


### Checklist

- [x] [Unit or functional
tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)
were updated or added to match the most common scenarios
- [x] This renders correctly on smaller devices using a responsive
layout. (You can test this [in your
browser](https://www.browserstack.com/guide/responsive-testing-on-local-server))
- [x] This was checked for [cross-browser
compatibility](https://www.elastic.co/support/matrix#matrix_browsers)


### For maintainers

- [ ] This was checked for breaking API changes and was [labeled
appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)
This commit is contained in:
Hannah Mudge 2024-03-25 14:10:04 -06:00 committed by GitHub
parent 80d831bb2a
commit b9ab67ab13
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
13 changed files with 13 additions and 103 deletions

View file

@ -515,10 +515,6 @@ export const stackManagementSchema: MakeSchemaFrom<UsageStats> = {
type: 'boolean',
_meta: { description: 'Non-default value of setting.' },
},
'labs:dashboard:linksPanel': {
type: 'boolean',
_meta: { description: 'Non-default value of setting.' },
},
'discover:showFieldStatistics': {
type: 'boolean',
_meta: { description: 'Non-default value of setting.' },

View file

@ -142,7 +142,6 @@ export interface UsageStats {
'labs:canvas:useDataService': boolean;
'labs:presentation:timeToPresent': boolean;
'labs:dashboard:enable_ui': boolean;
'labs:dashboard:linksPanel': boolean;
'labs:dashboard:deferBelowFold': boolean;
'discover:rowHeightOption': number;
hideAnnouncements: boolean;

View file

@ -25,7 +25,7 @@
}
@mixin euiFlyout {
@include kibanaFullBodyHeight();
height: calc(100vh - var(--euiFixedHeadersOffset, 0));
position: fixed;
display: flex;
inline-size: 50vw;

View file

@ -10,7 +10,6 @@ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
import useMountedState from 'react-use/lib/useMountedState';
import {
EuiBadge,
EuiButton,
EuiButtonEmpty,
EuiButtonGroup,
@ -28,7 +27,6 @@ import {
EuiFormRow,
EuiSwitch,
EuiTitle,
EuiToolTip,
} from '@elastic/eui';
import { DashboardContainer } from '@kbn/dashboard-plugin/public/dashboard_container';
@ -91,7 +89,7 @@ const LinksEditor = ({
);
const [isSaving, setIsSaving] = useState(false);
const [orderedLinks, setOrderedLinks] = useState<Link[]>([]);
const [saveByReference, setSaveByReference] = useState(!initialLinks ? true : isByReference);
const [saveByReference, setSaveByReference] = useState(!initialLinks ? false : isByReference);
const isEditingExisting = initialLinks || isByReference;
@ -173,19 +171,6 @@ const LinksEditor = ({
</h2>
</EuiTitle>
</EuiFlexItem>
<EuiFlexItem grow={false}>
<EuiToolTip content={LinksStrings.editor.panelEditor.getTechnicalPreviewTooltip()}>
{/* The EuiBadge needs an empty title to prevent the default tooltip */}
<EuiBadge
color="hollow"
tabIndex={0}
title=""
aria-label={LinksStrings.editor.panelEditor.getTechnicalPreviewTooltip()}
>
{LinksStrings.editor.panelEditor.getTechnicalPreviewLabel()}
</EuiBadge>
</EuiToolTip>
</EuiFlexItem>
</EuiFlexGroup>
</EuiFlyoutHeader>
<EuiFlyoutBody>

View file

@ -37,15 +37,6 @@ export const LinksStrings = {
defaultMessage: 'Close',
}),
panelEditor: {
getTechnicalPreviewTooltip: () =>
i18n.translate('links.panelEditor.technicalPreviewTooltip', {
defaultMessage:
'This functionality is in technical preview and may be changed or removed completely in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.',
}),
getTechnicalPreviewLabel: () =>
i18n.translate('links.panelEditor.technicalPreviewLabel', {
defaultMessage: 'Technical preview',
}),
getLinksTitle: () =>
i18n.translate('links.panelEditor.linksTitle', {
defaultMessage: 'Links',

View file

@ -26,11 +26,7 @@ import { LinksAttributes } from '../../common/content_management';
import { extract, inject } from '../../common/embeddable';
import { LinksStrings } from '../components/links_strings';
import { getLinksAttributeService } from '../services/attribute_service';
import {
coreServices,
presentationUtil,
untilPluginStartServicesReady,
} from '../services/kibana_services';
import { coreServices, untilPluginStartServicesReady } from '../services/kibana_services';
import type { LinksEmbeddable } from './links_embeddable';
import { LinksByReferenceInput, LinksEditorFlyoutReturn, LinksInput } from './types';
@ -89,7 +85,7 @@ export class LinksFactoryDefinition
}
public canCreateNew() {
return presentationUtil.labsService.isProjectEnabled('labs:dashboard:linksPanel');
return true;
}
public getDefaultInput(): Partial<LinksInput> {

View file

@ -80,7 +80,7 @@ export class LinksPlugin
title: APP_NAME,
icon: APP_ICON,
description: LinksStrings.getDescription(),
stage: 'experimental',
stage: 'production',
appExtensions: {
visualizations: {
docTypes: [CONTENT_ID],
@ -98,7 +98,7 @@ export class LinksPlugin
updatedAt,
icon: APP_ICON,
typeTitle: APP_NAME,
stage: 'experimental',
stage: 'production',
savedObjectType: type,
};
},

View file

@ -10,20 +10,12 @@ import { i18n } from '@kbn/i18n';
export const LABS_PROJECT_PREFIX = 'labs:';
export const DEFER_BELOW_FOLD = `${LABS_PROJECT_PREFIX}dashboard:deferBelowFold` as const;
export const DASHBOARD_LINKS_PANEL = `${LABS_PROJECT_PREFIX}dashboard:linksPanel` as const;
export const BY_VALUE_EMBEDDABLE = `${LABS_PROJECT_PREFIX}canvas:byValueEmbeddable` as const;
export const projectIDs = [DEFER_BELOW_FOLD, BY_VALUE_EMBEDDABLE, DASHBOARD_LINKS_PANEL] as const;
export const projectIDs = [DEFER_BELOW_FOLD, BY_VALUE_EMBEDDABLE] as const;
export const environmentNames = ['kibana', 'browser', 'session'] as const;
export const solutionNames = ['canvas', 'dashboard', 'presentation'] as const;
const technicalPreviewLabel = i18n.translate(
'presentationUtil.advancedSettings.technicalPreviewLabel',
{
defaultMessage: 'technical preview',
}
);
/**
* This is a list of active Labs Projects for the Presentation Team. It is the "source of truth" for all projects
* provided to users of our solutions in Kibana.
@ -43,23 +35,6 @@ export const projects: { [ID in ProjectID]: ProjectConfig & { id: ID } } = {
}),
solutions: ['dashboard'],
},
[DASHBOARD_LINKS_PANEL]: {
id: DASHBOARD_LINKS_PANEL,
isActive: true,
isDisplayed: true,
environments: ['kibana', 'browser', 'session'],
name: i18n.translate('presentationUtil.labs.enableLinksPanelProjectName', {
defaultMessage: 'Enable links panel',
}),
description: i18n.translate('presentationUtil.labs.enableLinksPanelProjectDescription', {
defaultMessage:
'{technicalPreviewLabel} Enables the links panel for dashboard, which allows dashboard authors to easily link dashboards together.',
values: {
technicalPreviewLabel: `<em>[${technicalPreviewLabel}]</em>`,
},
}),
solutions: ['dashboard'],
},
[BY_VALUE_EMBEDDABLE]: {
id: BY_VALUE_EMBEDDABLE,
isActive: true,

View file

@ -10218,12 +10218,6 @@
"description": "Non-default value of setting."
}
},
"labs:dashboard:linksPanel": {
"type": "boolean",
"_meta": {
"description": "Non-default value of setting."
}
},
"discover:showFieldStatistics": {
"type": "boolean",
"_meta": {

View file

@ -17,17 +17,6 @@ export class DashboardPageLinks extends FtrService {
private readonly testSubjects = this.ctx.getService('testSubjects');
private readonly comboBox = this.ctx.getService('comboBox');
private readonly header = this.ctx.getPageObject('header');
private readonly settings = this.ctx.getPageObject('settings');
public async toggleLinksLab(value?: boolean) {
this.log.debug(`toggle the links lab setting to ${value}`);
await this.header.clickStackManagement();
await this.settings.clickKibanaSettings();
await this.settings.toggleAdvancedSettingCheckbox('labs:dashboard:linksPanel', value);
}
/* -----------------------------------------------------------
Links panel
----------------------------------------------------------- */

View file

@ -4915,8 +4915,6 @@
"links.panelEditor.saveButtonLabel": "Enregistrer",
"links.panelEditor.saveToLibrarySwitchLabel": "Enregistrer dans la bibliothèque",
"links.panelEditor.saveToLibrarySwitchTooltip": "Enregistrer ce panneau de liens dans la bibliothèque afin de pouvoir l'ajouter facilement à d'autres tableaux de bord.",
"links.panelEditor.technicalPreviewLabel": "Version d'évaluation technique",
"links.panelEditor.technicalPreviewTooltip": "Cette fonctionnalité est en version d'évaluation technique et pourra être modifiée ou retirée complètement dans une future version. Elastic s'efforcera de corriger tout problème, mais les fonctionnalités des versions d'évaluation technique ne sont pas soumises aux SLA de support des fonctionnalités officielles en disponibilité générale.",
"links.panelEditor.titleInputLabel": "Titre",
"links.saveDuplicateRejectedDescription": "La confirmation d'enregistrement avec un doublon de titre a été rejetée.",
"links.visTypeAlias.title": "Liens",
@ -5277,8 +5275,6 @@
"presentationUtil.labs.components.disabledStatusMessage": "Par défaut : {status}",
"presentationUtil.labs.components.enabledStatusMessage": "Par défaut : {status}",
"presentationUtil.labs.components.noProjectsinSolutionMessage": "Aucun atelier actuellement dans {solutionName}.",
"presentationUtil.labs.enableLinksPanelProjectDescription": "{technicalPreviewLabel} Active le panneau de liens pour le tableau de bord, ce qui permet aux auteurs de tableaux de bord de les associer facilement entre eux.",
"presentationUtil.advancedSettings.technicalPreviewLabel": "version d'évaluation technique",
"presentationUtil.dashboardDrilldownConfig.components.openInNewTab": "Ouvrir le tableau de bord dans un nouvel onglet",
"presentationUtil.dashboardDrilldownConfig.components.useCurrentDateRange": "Utiliser la plage de dates du tableau de bord d'origine",
"presentationUtil.dashboardDrilldownConfig.components.useCurrentFiltersLabel": "Utiliser les filtres et la requête du tableau de bord d'origine",
@ -5307,7 +5303,6 @@
"presentationUtil.labs.enableByValueEmbeddableName": "Éléments d'incorporation By-Value",
"presentationUtil.labs.enableDeferBelowFoldProjectDescription": "Les panneaux sous \"le pli\" (la zone masquée en dessous de la fenêtre accessible en faisant défiler), ne se chargeront pas immédiatement, mais seulement lorsqu'ils entreront dans la fenêtre d'affichage.",
"presentationUtil.labs.enableDeferBelowFoldProjectName": "Différer le chargement des panneaux sous \"le pli\"",
"presentationUtil.labs.enableLinksPanelProjectName": "Activer le panneau de liens",
"presentationUtil.saveModalDashboard.addToDashboardLabel": "Ajouter au tableau de bord",
"presentationUtil.saveModalDashboard.dashboardInfoTooltip": "Les éléments ajoutés à la bibliothèque Visualize sont disponibles pour tous les tableaux de bord. Les modifications apportées à un élément de bibliothèque sont répercutées partout où il est utilisé.",
"presentationUtil.saveModalDashboard.existingDashboardOptionLabel": "Existant",

View file

@ -4909,8 +4909,6 @@
"links.panelEditor.saveButtonLabel": "保存",
"links.panelEditor.saveToLibrarySwitchLabel": "ライブラリに保存",
"links.panelEditor.saveToLibrarySwitchTooltip": "このリンクパネルをライブラリに保存すると、他のダッシュボードに簡単に追加できます。",
"links.panelEditor.technicalPreviewLabel": "テクニカルプレビュー",
"links.panelEditor.technicalPreviewTooltip": "この機能はテクニカルプレビュー中であり、将来のリリースでは変更されたり完全に削除されたりする場合があります。Elasticはすべての問題の修正に努めますが、テクニカルプレビュー中の機能には正式なGA機能のサポートSLAが適用されません。",
"links.panelEditor.titleInputLabel": "タイトル",
"links.saveDuplicateRejectedDescription": "重複ファイルの保存確認が拒否されました",
"links.visTypeAlias.title": "リンク",
@ -5264,14 +5262,12 @@
"presentationUtil.expressionInput.argReferenceAliasesDetail": "{BOLD_MD_TOKEN}エイリアス{BOLD_MD_TOKEN}: {aliases}",
"presentationUtil.expressionInput.argReferenceDefaultDetail": "{BOLD_MD_TOKEN}Default{BOLD_MD_TOKEN}: {defaultVal}",
"presentationUtil.expressionInput.argReferenceRequiredDetail": "{BOLD_MD_TOKEN}必須{BOLD_MD_TOKEN}{required}",
"presentationUtil.expressionInput.argReferenceTypesDetail": "{BOLD_MD_TOKEN}タイプ{BOLD_MD_TOKEN}: {types}",
"presentationUtil.expressionInput.functionReferenceAccepts": "{BOLD_MD_TOKEN}承諾{BOLD_MD_TOKEN}{acceptTypes}",
"presentationUtil.expressionInput.functionReferenceReturns": "{BOLD_MD_TOKEN}返す{BOLD_MD_TOKEN}{returnType}",
"presentationUtil.labs.components.disabledStatusMessage": "デフォルト: {status}",
"presentationUtil.labs.components.enabledStatusMessage": "デフォルト: {status}",
"presentationUtil.labs.components.noProjectsinSolutionMessage": "現在{solutionName}にはラボがありません。",
"presentationUtil.labs.enableLinksPanelProjectDescription": "{technicalPreviewLabel} ダッシュボードのリンクパネルを有効にすると、ダッシュボードの作成者がダッシュボードを簡単にリンクできるようになります。",
"presentationUtil.advancedSettings.technicalPreviewLabel": "テクニカルプレビュー",
"presentationUtil.expressionInput.argReferenceTypesDetail": "{BOLD_MD_TOKEN}タイプ{BOLD_MD_TOKEN}{types}",
"presentationUtil.expressionInput.functionReferenceAccepts": "{BOLD_MD_TOKEN}受け入れ{BOLD_MD_TOKEN}{acceptTypes}",
"presentationUtil.expressionInput.functionReferenceReturns": "{BOLD_MD_TOKEN}{BOLD_MD_TOKEN}を返します:{returnType}",
"presentationUtil.labs.components.disabledStatusMessage": "デフォルト:{status}",
"presentationUtil.labs.components.enabledStatusMessage": "デフォルト:{status}",
"presentationUtil.labs.components.noProjectsinSolutionMessage": "現在{solutionName}にラボはありません。",
"presentationUtil.dashboardDrilldownConfig.components.openInNewTab": "新しいタブでダッシュボードを開く",
"presentationUtil.dashboardDrilldownConfig.components.useCurrentDateRange": "元のダッシュボードから日付範囲を使用",
"presentationUtil.dashboardDrilldownConfig.components.useCurrentFiltersLabel": "元のダッシュボードからフィルターとクエリを使用",
@ -5300,7 +5296,6 @@
"presentationUtil.labs.enableByValueEmbeddableName": "By-Value埋め込み可能オブジェクト",
"presentationUtil.labs.enableDeferBelowFoldProjectDescription": "「区切り」の下のすべてのパネル(ウィンドウ下部の下にある非表示の領域)はすぐに読み込まれません。ビューポートを入力するときにのみ読み込まれます",
"presentationUtil.labs.enableDeferBelowFoldProjectName": "「区切り」の下のパネルの読み込みを延期",
"presentationUtil.labs.enableLinksPanelProjectName": "リンクパネルを編集",
"presentationUtil.saveModalDashboard.addToDashboardLabel": "ダッシュボードに追加",
"presentationUtil.saveModalDashboard.dashboardInfoTooltip": "Visualizeライブラリに追加された項目はすべてのダッシュボードで使用できます。ライブラリ項目の編集は、使用されるすべての場所に表示されます。",
"presentationUtil.saveModalDashboard.existingDashboardOptionLabel": "既存",

View file

@ -4918,8 +4918,6 @@
"links.panelEditor.saveButtonLabel": "保存",
"links.panelEditor.saveToLibrarySwitchLabel": "保存到库",
"links.panelEditor.saveToLibrarySwitchTooltip": "将此链接面板保存到库中,以便将其轻松添加到其他仪表板。",
"links.panelEditor.technicalPreviewLabel": "技术预览",
"links.panelEditor.technicalPreviewTooltip": "此功能处于技术预览状态在未来版本中可能会更改或完全移除。Elastic 将努力修复任何问题,但处于技术预览状态的功能不受正式 GA 功能支持 SLA 的约束。",
"links.panelEditor.titleInputLabel": "标题",
"links.saveDuplicateRejectedDescription": "已拒绝使用重复标题保存确认",
"links.visTypeAlias.title": "链接",
@ -5281,8 +5279,6 @@
"presentationUtil.labs.components.disabledStatusMessage": "默认:{status}",
"presentationUtil.labs.components.enabledStatusMessage": "默认:{status}",
"presentationUtil.labs.components.noProjectsinSolutionMessage": "{solutionName} 中当前没有实验。",
"presentationUtil.labs.enableLinksPanelProjectDescription": "{technicalPreviewLabel} 为仪表板启用链接面板,以便仪表板作者将仪表板轻松链接到一起。",
"presentationUtil.advancedSettings.technicalPreviewLabel": "技术预览",
"presentationUtil.dashboardDrilldownConfig.components.openInNewTab": "在新选项卡中打开仪表板",
"presentationUtil.dashboardDrilldownConfig.components.useCurrentDateRange": "使用源仪表板的日期范围",
"presentationUtil.dashboardDrilldownConfig.components.useCurrentFiltersLabel": "使用源仪表板的筛选和查询",
@ -5311,7 +5307,6 @@
"presentationUtil.labs.enableByValueEmbeddableName": "按值嵌入",
"presentationUtil.labs.enableDeferBelowFoldProjectDescription": "“折叠”下的任何面板即可通过滚动访问的窗口底部隐藏的区域,将不会立即加载,而仅在进入视区时加载",
"presentationUtil.labs.enableDeferBelowFoldProjectName": "推迟加载“折叠”下的面板",
"presentationUtil.labs.enableLinksPanelProjectName": "启用链接面板",
"presentationUtil.saveModalDashboard.addToDashboardLabel": "添加到仪表板",
"presentationUtil.saveModalDashboard.dashboardInfoTooltip": "添加到 Visualize 库的项目可用于所有仪表板。对库项目的编辑将显示在使用位置。",
"presentationUtil.saveModalDashboard.existingDashboardOptionLabel": "现有",