diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 9b6e5b8dd7959..c4af806b473f4 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -348,6 +348,9 @@ src/core/packages/user-settings/server-mocks @elastic/kibana-security src/core/test-helpers/kbn-server @elastic/kibana-core src/core/test-helpers/model-versions @elastic/kibana-core src/platform/packages/private/analytics/utils/analytics_collection_utils @elastic/kibana-core +src/platform/packages/private/dashboard/dashboard-navigation-options-common @elastic/kibana-presentation +src/platform/packages/private/dashboard/dashboard-navigation-options-components @elastic/kibana-presentation +src/platform/packages/private/dashboard/dashboard-navigation-options-schema @elastic/kibana-presentation src/platform/packages/private/kbn-ambient-common-types @elastic/kibana-operations src/platform/packages/private/kbn-ambient-ftr-types @elastic/kibana-operations @elastic/appex-qa src/platform/packages/private/kbn-apm-config-loader @elastic/kibana-core @vigneshshanmugam diff --git a/package.json b/package.json index e30fc48350f26..dd5dc30314fce 100644 --- a/package.json +++ b/package.json @@ -536,6 +536,9 @@ "@kbn/dashboard-agent-common": "link:x-pack/platform/packages/shared/dashboard-agent/dashboard-agent-common", "@kbn/dashboard-agent-plugin": "link:x-pack/platform/plugins/shared/dashboard_agent", "@kbn/dashboard-markdown": "link:src/platform/plugins/shared/dashboard_markdown", + "@kbn/dashboard-navigation-options-common": "link:src/platform/packages/private/dashboard/dashboard-navigation-options-common", + "@kbn/dashboard-navigation-options-components": "link:src/platform/packages/private/dashboard/dashboard-navigation-options-components", + "@kbn/dashboard-navigation-options-schema": "link:src/platform/packages/private/dashboard/dashboard-navigation-options-schema", "@kbn/dashboard-plugin": "link:src/platform/plugins/shared/dashboard", "@kbn/dashboards-selector": "link:src/platform/packages/shared/dashboards/dashboards-selector", "@kbn/data-forge": "link:x-pack/platform/packages/shared/kbn-data-forge", diff --git a/src/platform/plugins/shared/dashboard/server/dashboard_navigation/index.ts b/src/platform/packages/private/dashboard/dashboard-navigation-options-common/index.ts similarity index 78% rename from src/platform/plugins/shared/dashboard/server/dashboard_navigation/index.ts rename to src/platform/packages/private/dashboard/dashboard-navigation-options-common/index.ts index 479d852d0e6fe..1489fd98cf73f 100644 --- a/src/platform/plugins/shared/dashboard/server/dashboard_navigation/index.ts +++ b/src/platform/packages/private/dashboard/dashboard-navigation-options-common/index.ts @@ -7,5 +7,8 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -export { dashboardNavigationOptionsSchema } from './schemas'; -export type { DashboardNavigationOptions } from './types'; +export const DEFAULT_DASHBOARD_NAVIGATION_OPTIONS = { + open_in_new_tab: false, + use_time_range: true, + use_filters: true, +}; diff --git a/src/platform/plugins/shared/dashboard/server/dashboard_navigation/types.ts b/src/platform/packages/private/dashboard/dashboard-navigation-options-common/jest.config.js similarity index 69% rename from src/platform/plugins/shared/dashboard/server/dashboard_navigation/types.ts rename to src/platform/packages/private/dashboard/dashboard-navigation-options-common/jest.config.js index f08aa5d7e8b23..5933a4e17416b 100644 --- a/src/platform/plugins/shared/dashboard/server/dashboard_navigation/types.ts +++ b/src/platform/packages/private/dashboard/dashboard-navigation-options-common/jest.config.js @@ -7,7 +7,8 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import type { TypeOf } from '@kbn/config-schema'; -import type { dashboardNavigationOptionsSchema } from './schemas'; - -export type DashboardNavigationOptions = TypeOf; +module.exports = { + preset: '@kbn/test/jest_node', + rootDir: '../../../../../..', + roots: ['/src/platform/packages/private/dashboard/dashboard-navigation-options-common'], +}; diff --git a/src/platform/packages/private/dashboard/dashboard-navigation-options-common/kibana.jsonc b/src/platform/packages/private/dashboard/dashboard-navigation-options-common/kibana.jsonc new file mode 100644 index 0000000000000..49fbd3f4616c0 --- /dev/null +++ b/src/platform/packages/private/dashboard/dashboard-navigation-options-common/kibana.jsonc @@ -0,0 +1,7 @@ +{ + "type": "shared-common", + "id": "@kbn/dashboard-navigation-options-common", + "owner": "@elastic/kibana-presentation", + "group": "platform", + "visibility": "private" +} diff --git a/src/platform/packages/private/dashboard/dashboard-navigation-options-common/moon.yml b/src/platform/packages/private/dashboard/dashboard-navigation-options-common/moon.yml new file mode 100644 index 0000000000000..9120fdb546c68 --- /dev/null +++ b/src/platform/packages/private/dashboard/dashboard-navigation-options-common/moon.yml @@ -0,0 +1,33 @@ +# This file is generated by the @kbn/moon package. Any manual edits will be erased! +# To extend this, write your extensions/overrides to 'moon.extend.yml' +# then regenerate this file with: 'node scripts/regenerate_moon_projects.js --update --filter @kbn/dashboard-navigation-options-common' + +$schema: https://moonrepo.dev/schemas/project.json +id: '@kbn/dashboard-navigation-options-common' +layer: unknown +owners: + defaultOwner: '@elastic/kibana-presentation' +toolchains: + default: node +language: typescript +project: + title: '@kbn/dashboard-navigation-options-common' + description: Moon project for @kbn/dashboard-navigation-options-common + channel: '' + owner: '@elastic/kibana-presentation' + sourceRoot: src/platform/packages/private/dashboard/dashboard-navigation-options-common +dependsOn: [] +tags: + - shared-common + - package + - prod + - group-platform + - private + - jest-unit-tests +fileGroups: + src: + - '**/*.ts' + - '!target/**/*' + jest-config: + - jest.config.js +tasks: {} diff --git a/src/platform/packages/private/dashboard/dashboard-navigation-options-common/package.json b/src/platform/packages/private/dashboard/dashboard-navigation-options-common/package.json new file mode 100644 index 0000000000000..15d9585c000d6 --- /dev/null +++ b/src/platform/packages/private/dashboard/dashboard-navigation-options-common/package.json @@ -0,0 +1,7 @@ +{ + "name": "@kbn/dashboard-navigation-options-common", + "private": true, + "version": "1.0.0", + "license": "Elastic License 2.0 OR AGPL-3.0-only OR SSPL-1.0", + "sideEffects": false +} \ No newline at end of file diff --git a/src/platform/packages/private/dashboard/dashboard-navigation-options-common/tsconfig.json b/src/platform/packages/private/dashboard/dashboard-navigation-options-common/tsconfig.json new file mode 100644 index 0000000000000..4d33b40eda45c --- /dev/null +++ b/src/platform/packages/private/dashboard/dashboard-navigation-options-common/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "@kbn/tsconfig-base/tsconfig.json", + "compilerOptions": { + "outDir": "target/types", + }, + "include": [ + "**/*.ts", + ], + "exclude": [ + "target/**/*" + ], + "kbn_references": [] +} diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_navigation/options_editor.tsx b/src/platform/packages/private/dashboard/dashboard-navigation-options-components/index.tsx similarity index 96% rename from src/platform/plugins/shared/dashboard/public/dashboard_navigation/options_editor.tsx rename to src/platform/packages/private/dashboard/dashboard-navigation-options-components/index.tsx index 0c02b84e61b47..591f771d82246 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_navigation/options_editor.tsx +++ b/src/platform/packages/private/dashboard/dashboard-navigation-options-components/index.tsx @@ -10,7 +10,7 @@ import { i18n } from '@kbn/i18n'; import React from 'react'; import { EuiFormRow, EuiSpacer, EuiSwitch } from '@elastic/eui'; -import type { DashboardNavigationOptions } from '../../server'; +import type { DashboardNavigationOptions } from '@kbn/dashboard-navigation-options-schema'; export interface Props { options: DashboardNavigationOptions; diff --git a/src/platform/packages/private/dashboard/dashboard-navigation-options-components/jest.config.js b/src/platform/packages/private/dashboard/dashboard-navigation-options-components/jest.config.js new file mode 100644 index 0000000000000..241b26902d527 --- /dev/null +++ b/src/platform/packages/private/dashboard/dashboard-navigation-options-components/jest.config.js @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../../../../..', + roots: [ + '/src/platform/packages/private/dashboard/dashboard-navigation-options-components', + ], +}; diff --git a/src/platform/packages/private/dashboard/dashboard-navigation-options-components/kibana.jsonc b/src/platform/packages/private/dashboard/dashboard-navigation-options-components/kibana.jsonc new file mode 100644 index 0000000000000..45fbb5a9c5a97 --- /dev/null +++ b/src/platform/packages/private/dashboard/dashboard-navigation-options-components/kibana.jsonc @@ -0,0 +1,7 @@ +{ + "type": "shared-browser", + "id": "@kbn/dashboard-navigation-options-components", + "owner": "@elastic/kibana-presentation", + "group": "platform", + "visibility": "private" +} diff --git a/src/platform/packages/private/dashboard/dashboard-navigation-options-components/moon.yml b/src/platform/packages/private/dashboard/dashboard-navigation-options-components/moon.yml new file mode 100644 index 0000000000000..6773beb2d723b --- /dev/null +++ b/src/platform/packages/private/dashboard/dashboard-navigation-options-components/moon.yml @@ -0,0 +1,36 @@ +# This file is generated by the @kbn/moon package. Any manual edits will be erased! +# To extend this, write your extensions/overrides to 'moon.extend.yml' +# then regenerate this file with: 'node scripts/regenerate_moon_projects.js --update --filter @kbn/dashboard-navigation-options-components' + +$schema: https://moonrepo.dev/schemas/project.json +id: '@kbn/dashboard-navigation-options-components' +layer: unknown +owners: + defaultOwner: '@elastic/kibana-presentation' +toolchains: + default: node +language: typescript +project: + title: '@kbn/dashboard-navigation-options-components' + description: Moon project for @kbn/dashboard-navigation-options-components + channel: '' + owner: '@elastic/kibana-presentation' + sourceRoot: src/platform/packages/private/dashboard/dashboard-navigation-options-components +dependsOn: + - '@kbn/i18n' + - '@kbn/dashboard-navigation-options-schema' +tags: + - shared-browser + - package + - prod + - group-platform + - private + - jest-unit-tests +fileGroups: + src: + - '**/*.ts' + - '**/*.tsx' + - '!target/**/*' + jest-config: + - jest.config.js +tasks: {} diff --git a/src/platform/packages/private/dashboard/dashboard-navigation-options-components/package.json b/src/platform/packages/private/dashboard/dashboard-navigation-options-components/package.json new file mode 100644 index 0000000000000..05a5477f8a3eb --- /dev/null +++ b/src/platform/packages/private/dashboard/dashboard-navigation-options-components/package.json @@ -0,0 +1,7 @@ +{ + "name": "@kbn/dashboard-navigation-options-components", + "private": true, + "version": "1.0.0", + "license": "Elastic License 2.0 OR AGPL-3.0-only OR SSPL-1.0", + "sideEffects": false +} \ No newline at end of file diff --git a/src/platform/packages/private/dashboard/dashboard-navigation-options-components/tsconfig.json b/src/platform/packages/private/dashboard/dashboard-navigation-options-components/tsconfig.json new file mode 100644 index 0000000000000..ddc2945f26448 --- /dev/null +++ b/src/platform/packages/private/dashboard/dashboard-navigation-options-components/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": "@kbn/tsconfig-base/tsconfig.json", + "compilerOptions": { + "outDir": "target/types", + }, + "include": [ + "**/*.ts", + "**/*.tsx", + ], + "exclude": [ + "target/**/*" + ], + "kbn_references": [ + "@kbn/i18n", + "@kbn/dashboard-navigation-options-schema" + ] +} diff --git a/src/platform/plugins/shared/dashboard/server/dashboard_navigation/schemas.ts b/src/platform/packages/private/dashboard/dashboard-navigation-options-schema/index.ts similarity index 83% rename from src/platform/plugins/shared/dashboard/server/dashboard_navigation/schemas.ts rename to src/platform/packages/private/dashboard/dashboard-navigation-options-schema/index.ts index 38650c5cc07fc..6fb5d92f4a2fa 100644 --- a/src/platform/plugins/shared/dashboard/server/dashboard_navigation/schemas.ts +++ b/src/platform/packages/private/dashboard/dashboard-navigation-options-schema/index.ts @@ -7,8 +7,9 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import type { TypeOf } from '@kbn/config-schema'; import { schema } from '@kbn/config-schema'; -import { DEFAULT_DASHBOARD_NAVIGATION_OPTIONS } from '../../common/page_bundle_constants'; +import { DEFAULT_DASHBOARD_NAVIGATION_OPTIONS } from '@kbn/dashboard-navigation-options-common'; export const dashboardNavigationOptionsSchema = schema.object({ use_filters: schema.boolean({ @@ -30,3 +31,5 @@ export const dashboardNavigationOptionsSchema = schema.object({ }, }), }); + +export type DashboardNavigationOptions = TypeOf; diff --git a/src/platform/packages/private/dashboard/dashboard-navigation-options-schema/jest.config.js b/src/platform/packages/private/dashboard/dashboard-navigation-options-schema/jest.config.js new file mode 100644 index 0000000000000..b42fbca7de4f8 --- /dev/null +++ b/src/platform/packages/private/dashboard/dashboard-navigation-options-schema/jest.config.js @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +module.exports = { + preset: '@kbn/test/jest_node', + rootDir: '../../../../../..', + roots: ['/src/platform/packages/private/dashboard/dashboard-navigation-options-schema'], +}; diff --git a/src/platform/packages/private/dashboard/dashboard-navigation-options-schema/kibana.jsonc b/src/platform/packages/private/dashboard/dashboard-navigation-options-schema/kibana.jsonc new file mode 100644 index 0000000000000..ca4dd2760abf5 --- /dev/null +++ b/src/platform/packages/private/dashboard/dashboard-navigation-options-schema/kibana.jsonc @@ -0,0 +1,7 @@ +{ + "type": "shared-server", + "id": "@kbn/dashboard-navigation-options-schema", + "owner": "@elastic/kibana-presentation", + "group": "platform", + "visibility": "private" +} diff --git a/src/platform/packages/private/dashboard/dashboard-navigation-options-schema/moon.yml b/src/platform/packages/private/dashboard/dashboard-navigation-options-schema/moon.yml new file mode 100644 index 0000000000000..a9b6f0a494948 --- /dev/null +++ b/src/platform/packages/private/dashboard/dashboard-navigation-options-schema/moon.yml @@ -0,0 +1,35 @@ +# This file is generated by the @kbn/moon package. Any manual edits will be erased! +# To extend this, write your extensions/overrides to 'moon.extend.yml' +# then regenerate this file with: 'node scripts/regenerate_moon_projects.js --update --filter @kbn/dashboard-navigation-options-schema' + +$schema: https://moonrepo.dev/schemas/project.json +id: '@kbn/dashboard-navigation-options-schema' +layer: unknown +owners: + defaultOwner: '@elastic/kibana-presentation' +toolchains: + default: node +language: typescript +project: + title: '@kbn/dashboard-navigation-options-schema' + description: Moon project for @kbn/dashboard-navigation-options-schema + channel: '' + owner: '@elastic/kibana-presentation' + sourceRoot: src/platform/packages/private/dashboard/dashboard-navigation-options-schema +dependsOn: + - '@kbn/config-schema' + - '@kbn/dashboard-navigation-options-common' +tags: + - shared-server + - package + - prod + - group-platform + - private + - jest-unit-tests +fileGroups: + src: + - '**/*.ts' + - '!target/**/*' + jest-config: + - jest.config.js +tasks: {} diff --git a/src/platform/packages/private/dashboard/dashboard-navigation-options-schema/package.json b/src/platform/packages/private/dashboard/dashboard-navigation-options-schema/package.json new file mode 100644 index 0000000000000..87058025bb3ff --- /dev/null +++ b/src/platform/packages/private/dashboard/dashboard-navigation-options-schema/package.json @@ -0,0 +1,7 @@ +{ + "name": "@kbn/dashboard-navigation-options-schema", + "private": true, + "version": "1.0.0", + "license": "Elastic License 2.0 OR AGPL-3.0-only OR SSPL-1.0", + "sideEffects": false +} \ No newline at end of file diff --git a/src/platform/packages/private/dashboard/dashboard-navigation-options-schema/tsconfig.json b/src/platform/packages/private/dashboard/dashboard-navigation-options-schema/tsconfig.json new file mode 100644 index 0000000000000..cc2182f840ced --- /dev/null +++ b/src/platform/packages/private/dashboard/dashboard-navigation-options-schema/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "@kbn/tsconfig-base/tsconfig.json", + "compilerOptions": { + "outDir": "target/types", + }, + "include": [ + "**/*.ts", + ], + "exclude": [ + "target/**/*" + ], + "kbn_references": [ + "@kbn/config-schema", + "@kbn/dashboard-navigation-options-common" + ] +} diff --git a/src/platform/plugins/private/links/moon.yml b/src/platform/plugins/private/links/moon.yml index d93058f50ee77..b3545df1080f1 100644 --- a/src/platform/plugins/private/links/moon.yml +++ b/src/platform/plugins/private/links/moon.yml @@ -44,6 +44,9 @@ dependsOn: - '@kbn/es-query' - '@kbn/presentation-util' - '@kbn/kibana-utils-plugin' + - '@kbn/dashboard-navigation-options-common' + - '@kbn/dashboard-navigation-options-components' + - '@kbn/dashboard-navigation-options-schema' tags: - plugin - prod diff --git a/src/platform/plugins/private/links/public/components/dashboard_link/dashboard_link_component.test.tsx b/src/platform/plugins/private/links/public/components/dashboard_link/dashboard_link_component.test.tsx index 00a69c8f667aa..0aa10b71e65f6 100644 --- a/src/platform/plugins/private/links/public/components/dashboard_link/dashboard_link_component.test.tsx +++ b/src/platform/plugins/private/links/public/components/dashboard_link/dashboard_link_component.test.tsx @@ -21,7 +21,7 @@ import type { ResolvedLink } from '../../types'; import { BehaviorSubject } from 'rxjs'; import type { AggregateQuery, Filter, Query, TimeRange } from '@kbn/es-query'; import { EuiThemeProvider } from '@elastic/eui'; -import { DEFAULT_DASHBOARD_NAVIGATION_OPTIONS } from '@kbn/dashboard-plugin/public'; +import { DEFAULT_DASHBOARD_NAVIGATION_OPTIONS } from '@kbn/dashboard-navigation-options-common'; function createMockLinksParent({ initialQuery, diff --git a/src/platform/plugins/private/links/public/components/dashboard_link/dashboard_link_component.tsx b/src/platform/plugins/private/links/public/components/dashboard_link/dashboard_link_component.tsx index f0df11283f379..d91df54a0b54e 100644 --- a/src/platform/plugins/private/links/public/components/dashboard_link/dashboard_link_component.tsx +++ b/src/platform/plugins/private/links/public/components/dashboard_link/dashboard_link_component.tsx @@ -18,8 +18,8 @@ import type { DashboardLocatorParams } from '@kbn/dashboard-plugin/common'; import type { Query } from '@kbn/es-query'; import { isFilterPinned } from '@kbn/es-query'; import { useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; -import type { DashboardNavigationOptions } from '@kbn/dashboard-plugin/server'; -import { DEFAULT_DASHBOARD_NAVIGATION_OPTIONS } from '@kbn/dashboard-plugin/public'; +import type { DashboardNavigationOptions } from '@kbn/dashboard-navigation-options-schema'; +import { DEFAULT_DASHBOARD_NAVIGATION_OPTIONS } from '@kbn/dashboard-navigation-options-common'; import type { LinksLayoutType } from '../../../common/content_management'; import { DASHBOARD_LINK_TYPE, LINKS_VERTICAL_LAYOUT } from '../../../common/content_management'; diff --git a/src/platform/plugins/private/links/public/components/editor/link_editor.test.tsx b/src/platform/plugins/private/links/public/components/editor/link_editor.test.tsx index f2d7e329b5a18..50af54eb3520d 100644 --- a/src/platform/plugins/private/links/public/components/editor/link_editor.test.tsx +++ b/src/platform/plugins/private/links/public/components/editor/link_editor.test.tsx @@ -46,8 +46,7 @@ describe('LinksEditor', () => { .getAttribute('aria-checked'); }; - // FLAKY: https://github.com/elastic/kibana/issues/253303 - describe.skip('dashboard link options', () => { + describe('dashboard link options', () => { test('starts with default when options not provided', async () => { render(); await waitFor(() => { diff --git a/src/platform/plugins/private/links/public/components/editor/link_editor.tsx b/src/platform/plugins/private/links/public/components/editor/link_editor.tsx index d36cc7712f70d..97c482943f0b2 100644 --- a/src/platform/plugins/private/links/public/components/editor/link_editor.tsx +++ b/src/platform/plugins/private/links/public/components/editor/link_editor.tsx @@ -28,15 +28,18 @@ import { EuiFlyoutHeader, } from '@elastic/eui'; +import { DEFAULT_DASHBOARD_NAVIGATION_OPTIONS } from '@kbn/dashboard-navigation-options-common'; +import { DashboardNavigationOptionsEditor } from '@kbn/dashboard-navigation-options-components'; +import type { DashboardNavigationOptions } from '@kbn/dashboard-navigation-options-schema'; import type { LinkType } from '../../../common/content_management'; import { EXTERNAL_LINK_TYPE, DASHBOARD_LINK_TYPE } from '../../../common/content_management'; import { LinksStrings } from '../links_strings'; import { LinkInfo } from './constants'; -import { LinkOptionsComponent } from './link_options'; import { LinkDestination } from './link_destination'; -import type { LinkOptions } from '../../../server'; -import { getOptions } from '../../../common/embeddable/transforms/get_options'; +import type { ExternalLinkOptions } from '../../../server'; import type { ResolvedLink } from '../../types'; +import { DEFAULT_EXTERNAL_LINK_OPTIONS } from '../external_link/constants'; +import { ExternalLinkOptionsEditor } from '../external_link/external_link_options_edtior'; export const LinkEditor = ({ link, @@ -55,7 +58,14 @@ export const LinkEditor = ({ const [defaultLinkLabel, setDefaultLinkLabel] = useState(link?.title); const [currentLinkLabel, setCurrentLinkLabel] = useState(link?.label ?? ''); const [linkDescription, setLinkDescription] = useState(link?.description); - const [linkOptions, setLinkOptions] = useState(link?.options); + const [dashboardLinkOptions, setDashboardLinkOptions] = useState({ + ...DEFAULT_DASHBOARD_NAVIGATION_OPTIONS, + ...(link && link.type === DASHBOARD_LINK_TYPE ? link.options : {}), + }); + const [externalLinkOptions, setExternalLinkOptions] = useState({ + ...DEFAULT_EXTERNAL_LINK_OPTIONS, + ...(link && link.type === EXTERNAL_LINK_TYPE ? link.options : {}), + }); const [linkDestination, setLinkDestination] = useState(link?.destination); const linkTypes: EuiRadioGroupOption[] = useMemo(() => { @@ -141,11 +151,23 @@ export const LinkEditor = ({ data-test-subj="links--linkEditor--linkLabel--input" /> - + + {selectedLinkType === DASHBOARD_LINK_TYPE ? ( + { + setDashboardLinkOptions({ ...dashboardLinkOptions, ...change }); + }} + /> + ) : ( + { + setExternalLinkOptions({ ...externalLinkOptions, ...change }); + }} + /> + )} + @@ -166,12 +188,23 @@ export const LinkEditor = ({ onClick={() => { // this check should always be true, since the button is disabled otherwise - this is just for type safety if (linkDestination) { + function getOptions() { + if (selectedLinkType === DASHBOARD_LINK_TYPE) { + return dashboardLinkOptions; + } + + if (selectedLinkType === EXTERNAL_LINK_TYPE) { + return externalLinkOptions; + } + + throw new Error(`unexpected options type: ${selectedLinkType}`); + } onSave({ label: currentLinkLabel === defaultLinkLabel ? undefined : currentLinkLabel, type: selectedLinkType, id: link?.id ?? uuidv4(), destination: linkDestination, - options: getOptions(selectedLinkType, linkOptions), + options: getOptions(), title: defaultLinkLabel ?? '', description: linkDescription, } as ResolvedLink); diff --git a/src/platform/plugins/private/links/public/components/editor/link_options.tsx b/src/platform/plugins/private/links/public/components/editor/link_options.tsx deleted file mode 100644 index 22c060f843e69..0000000000000 --- a/src/platform/plugins/private/links/public/components/editor/link_options.tsx +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import React, { useState } from 'react'; - -import { EuiFormRow } from '@elastic/eui'; - -import { - DashboardNavigationOptionsEditor, - DEFAULT_DASHBOARD_NAVIGATION_OPTIONS, -} from '@kbn/dashboard-plugin/public'; -import type { DashboardNavigationOptions } from '@kbn/dashboard-plugin/server'; -import type { LinkType } from '../../../common/content_management'; -import { EXTERNAL_LINK_TYPE, DASHBOARD_LINK_TYPE } from '../../../common/content_management'; -import { LinksStrings } from '../links_strings'; -import type { ExternalLinkOptions, LinkOptions } from '../../../server'; -import { DEFAULT_EXTERNAL_LINK_OPTIONS } from '../external_link/constants'; -import { ExternalLinkOptionsEditor } from '../external_link/external_link_options_edtior'; -import type { ResolvedLink } from '../../types'; - -export const LinkOptionsComponent = ({ - link, - setLinkOptions, - selectedLinkType, -}: { - selectedLinkType: LinkType; - link?: ResolvedLink; - setLinkOptions: (options: LinkOptions) => void; -}) => { - const [dashboardLinkOptions, setDashboardLinkOptions] = useState({ - ...DEFAULT_DASHBOARD_NAVIGATION_OPTIONS, - ...(link && link.type === DASHBOARD_LINK_TYPE ? link.options : {}), - }); - const [externalLinkOptions, setExternalLinkOptions] = useState({ - ...DEFAULT_EXTERNAL_LINK_OPTIONS, - ...(link && link.type === EXTERNAL_LINK_TYPE ? link.options : {}), - }); - - return ( - - {selectedLinkType === DASHBOARD_LINK_TYPE ? ( - { - setDashboardLinkOptions({ ...dashboardLinkOptions, ...change }); - setLinkOptions({ ...dashboardLinkOptions, ...change }); - }} - /> - ) : ( - { - setExternalLinkOptions({ ...externalLinkOptions, ...change }); - setLinkOptions({ ...externalLinkOptions, ...change }); - }} - /> - )} - - ); -}; diff --git a/src/platform/plugins/private/links/server/content_management/schema/v1/cm_services.ts b/src/platform/plugins/private/links/server/content_management/schema/v1/cm_services.ts index dcd862627dc86..9600d3d124fde 100644 --- a/src/platform/plugins/private/links/server/content_management/schema/v1/cm_services.ts +++ b/src/platform/plugins/private/links/server/content_management/schema/v1/cm_services.ts @@ -17,7 +17,7 @@ import { createOptionsSchemas, objectTypeToGetResultSchema, } from '@kbn/content-management-utils'; -import { dashboardNavigationOptionsSchema } from '@kbn/dashboard-plugin/server'; +import { dashboardNavigationOptionsSchema } from '@kbn/dashboard-navigation-options-schema'; import { DASHBOARD_LINK_TYPE, EXTERNAL_LINK_TYPE } from '../../../../common/content_management/v1'; import { LINKS_HORIZONTAL_LAYOUT, diff --git a/src/platform/plugins/private/links/tsconfig.json b/src/platform/plugins/private/links/tsconfig.json index 2a1855cc0935e..b61344cae05bb 100644 --- a/src/platform/plugins/private/links/tsconfig.json +++ b/src/platform/plugins/private/links/tsconfig.json @@ -37,7 +37,10 @@ "@kbn/share-plugin", "@kbn/es-query", "@kbn/presentation-util", - "@kbn/kibana-utils-plugin" + "@kbn/kibana-utils-plugin", + "@kbn/dashboard-navigation-options-common", + "@kbn/dashboard-navigation-options-components", + "@kbn/dashboard-navigation-options-schema" ], "exclude": ["target/**/*"] } diff --git a/src/platform/plugins/shared/dashboard/common/page_bundle_constants.ts b/src/platform/plugins/shared/dashboard/common/page_bundle_constants.ts index b635835c58eb6..4c8305223f064 100644 --- a/src/platform/plugins/shared/dashboard/common/page_bundle_constants.ts +++ b/src/platform/plugins/shared/dashboard/common/page_bundle_constants.ts @@ -16,12 +16,6 @@ export const SEARCH_SESSION_ID = 'searchSessionId'; /** The number of columns in the dashboard grid layout. */ export const DASHBOARD_GRID_COLUMN_COUNT = 48; -export const DEFAULT_DASHBOARD_NAVIGATION_OPTIONS = { - open_in_new_tab: false, - use_time_range: true, - use_filters: true, -}; - // Do not change constant value - part of dashboard REST API export const DASHBOARD_DRILLDOWN_TYPE = 'dashboard_drilldown'; diff --git a/src/platform/plugins/shared/dashboard/moon.yml b/src/platform/plugins/shared/dashboard/moon.yml index 1f6a98d029ef2..5d5d327c6694a 100644 --- a/src/platform/plugins/shared/dashboard/moon.yml +++ b/src/platform/plugins/shared/dashboard/moon.yml @@ -126,6 +126,9 @@ dependsOn: - '@kbn/core-http-server-mocks' - '@kbn/core-http-browser' - '@kbn/lens-common' + - '@kbn/dashboard-navigation-options-common' + - '@kbn/dashboard-navigation-options-components' + - '@kbn/dashboard-navigation-options-schema' tags: - plugin - prod diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_drilldown/dashboard_drilldown.ts b/src/platform/plugins/shared/dashboard/public/dashboard_drilldown/dashboard_drilldown.ts index e8611f39be194..fa23d989cc6de 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_drilldown/dashboard_drilldown.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_drilldown/dashboard_drilldown.ts @@ -12,14 +12,12 @@ import { setStateToKbnUrl } from '@kbn/kibana-utils-plugin/public'; import type { ApplyGlobalFilterActionContext } from '@kbn/unified-search-plugin/public'; import { isFilterPinned } from '@kbn/es-query'; import type { DrilldownDefinition } from '@kbn/embeddable-plugin/public/drilldowns/types'; +import { DEFAULT_DASHBOARD_NAVIGATION_OPTIONS } from '@kbn/dashboard-navigation-options-common'; import type { DashboardDrilldownState } from '../../server/dashboard_drilldown/types'; import { coreServices } from '../services/kibana_services'; import { getLocation } from './get_location'; import { cleanEmptyKeys } from '../../common/locator/locator'; -import { - DASHBOARD_DRILLDOWN_SUPPORTED_TRIGGERS, - DEFAULT_DASHBOARD_NAVIGATION_OPTIONS, -} from '../../common/page_bundle_constants'; +import { DASHBOARD_DRILLDOWN_SUPPORTED_TRIGGERS } from '../../common/page_bundle_constants'; import { DashboardDrilldownEditor } from './editor'; export const dashboardDrilldown: DrilldownDefinition< diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_drilldown/editor.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_drilldown/editor.tsx index 4bc406eb71e46..93d7346e42ab2 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_drilldown/editor.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_drilldown/editor.tsx @@ -14,10 +14,10 @@ import { EuiFormRow, EuiComboBox, EuiSkeletonText } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import type { DrilldownEditorProps } from '@kbn/embeddable-plugin/public'; import useDebounce from 'react-use/lib/useDebounce'; +import { DEFAULT_DASHBOARD_NAVIGATION_OPTIONS } from '@kbn/dashboard-navigation-options-common'; +import { DashboardNavigationOptionsEditor } from '@kbn/dashboard-navigation-options-components'; import type { DashboardDrilldownState } from '../../server'; import { findService } from '../dashboard_client'; -import { DEFAULT_DASHBOARD_NAVIGATION_OPTIONS } from '../../common/page_bundle_constants'; -import { DashboardNavigationOptionsEditor } from '../dashboard_navigation/options_editor'; export const DashboardDrilldownEditor = (props: DrilldownEditorProps) => { const [options, setOptions] = useState>>([]); diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_navigation/index.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_navigation/index.tsx deleted file mode 100644 index be9cd13d44d8c..0000000000000 --- a/src/platform/plugins/shared/dashboard/public/dashboard_navigation/index.tsx +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { EuiSkeletonText } from '@elastic/eui'; -import React, { Suspense } from 'react'; - -import type { Props } from './options_editor'; - -const LazyDashboardNavigationOptionsEditor = React.lazy(async () => { - const { DashboardNavigationOptionsEditor } = await import( - '../dashboard_renderer/dashboard_module' - ); - return { default: DashboardNavigationOptionsEditor }; -}); - -export const DashboardNavigationOptionsEditor = (props: Props) => { - return ( - }> - - - ); -}; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_renderer/dashboard_module.ts b/src/platform/plugins/shared/dashboard/public/dashboard_renderer/dashboard_module.ts index e0640bbffef01..59261293fec5e 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_renderer/dashboard_module.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_renderer/dashboard_module.ts @@ -10,7 +10,6 @@ export { DashboardRenderer } from './dashboard_renderer'; export { DashboardTopNavWithContext } from '../dashboard_top_nav/dashboard_top_nav_with_context'; export { DashboardListingTable } from '../dashboard_listing/dashboard_listing_table'; -export { DashboardNavigationOptionsEditor } from '../dashboard_navigation/options_editor'; export { ClonePanelAction } from '../dashboard_actions/clone_panel_action'; export { ExpandPanelAction } from '../dashboard_actions/expand_panel_action'; export { FiltersNotificationAction } from '../dashboard_actions/filters_notification_action'; diff --git a/src/platform/plugins/shared/dashboard/public/index.ts b/src/platform/plugins/shared/dashboard/public/index.ts index 057803de3d4a9..5322f133b2148 100644 --- a/src/platform/plugins/shared/dashboard/public/index.ts +++ b/src/platform/plugins/shared/dashboard/public/index.ts @@ -26,15 +26,11 @@ export type { DashboardListingTab } from './dashboard_listing/types'; export { DashboardListingTable } from './dashboard_listing'; export { DashboardTopNav } from './dashboard_top_nav'; -export { DashboardNavigationOptionsEditor } from './dashboard_navigation'; export type { RedirectToProps } from './dashboard_app/types'; export type { FindDashboardsByIdResponse } from './dashboard_client'; -export { - DASHBOARD_APP_ID, - DEFAULT_DASHBOARD_NAVIGATION_OPTIONS, -} from '../common/page_bundle_constants'; +export { DASHBOARD_APP_ID } from '../common/page_bundle_constants'; export { cleanEmptyKeys, DashboardAppLocatorDefinition } from '../common/locator/locator'; export function plugin(initializerContext: PluginInitializerContext) { diff --git a/src/platform/plugins/shared/dashboard/server/dashboard_drilldown/schemas.ts b/src/platform/plugins/shared/dashboard/server/dashboard_drilldown/schemas.ts index 40a11148f6ef7..eb1b2eb34aab7 100644 --- a/src/platform/plugins/shared/dashboard/server/dashboard_drilldown/schemas.ts +++ b/src/platform/plugins/shared/dashboard/server/dashboard_drilldown/schemas.ts @@ -8,7 +8,7 @@ */ import { schema } from '@kbn/config-schema'; -import { dashboardNavigationOptionsSchema } from '../dashboard_navigation'; +import { dashboardNavigationOptionsSchema } from '@kbn/dashboard-navigation-options-schema'; export const dashboardDrilldownSchema = dashboardNavigationOptionsSchema.extends({ dashboard_id: schema.string(), diff --git a/src/platform/plugins/shared/dashboard/server/index.ts b/src/platform/plugins/shared/dashboard/server/index.ts index 8575926d75223..22bed636c368d 100644 --- a/src/platform/plugins/shared/dashboard/server/index.ts +++ b/src/platform/plugins/shared/dashboard/server/index.ts @@ -61,9 +61,5 @@ export type { export type { DashboardDrilldownState } from './dashboard_drilldown/types'; export type { DashboardSavedObjectAttributes, SavedDashboardPanel } from './dashboard_saved_object'; export type { ScanDashboardsResult } from './scan_dashboards'; -export { - dashboardNavigationOptionsSchema, - type DashboardNavigationOptions, -} from './dashboard_navigation'; export { DASHBOARD_API_PATH } from '../common/constants'; diff --git a/src/platform/plugins/shared/dashboard/tsconfig.json b/src/platform/plugins/shared/dashboard/tsconfig.json index 4525789f59648..73b8580ad39bf 100644 --- a/src/platform/plugins/shared/dashboard/tsconfig.json +++ b/src/platform/plugins/shared/dashboard/tsconfig.json @@ -123,7 +123,10 @@ "@kbn/core-http-common", "@kbn/core-http-server-mocks", "@kbn/core-http-browser", - "@kbn/lens-common" + "@kbn/lens-common", + "@kbn/dashboard-navigation-options-common", + "@kbn/dashboard-navigation-options-components", + "@kbn/dashboard-navigation-options-schema" ], "exclude": ["target/**/*"] } diff --git a/tsconfig.base.json b/tsconfig.base.json index 1874ef1828a60..6544ba9150ca4 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -906,6 +906,12 @@ "@kbn/dashboard-agent-plugin/*": ["x-pack/platform/plugins/shared/dashboard_agent/*"], "@kbn/dashboard-markdown": ["src/platform/plugins/shared/dashboard_markdown"], "@kbn/dashboard-markdown/*": ["src/platform/plugins/shared/dashboard_markdown/*"], + "@kbn/dashboard-navigation-options-common": ["src/platform/packages/private/dashboard/dashboard-navigation-options-common"], + "@kbn/dashboard-navigation-options-common/*": ["src/platform/packages/private/dashboard/dashboard-navigation-options-common/*"], + "@kbn/dashboard-navigation-options-components": ["src/platform/packages/private/dashboard/dashboard-navigation-options-components"], + "@kbn/dashboard-navigation-options-components/*": ["src/platform/packages/private/dashboard/dashboard-navigation-options-components/*"], + "@kbn/dashboard-navigation-options-schema": ["src/platform/packages/private/dashboard/dashboard-navigation-options-schema"], + "@kbn/dashboard-navigation-options-schema/*": ["src/platform/packages/private/dashboard/dashboard-navigation-options-schema/*"], "@kbn/dashboard-plugin": ["src/platform/plugins/shared/dashboard"], "@kbn/dashboard-plugin/*": ["src/platform/plugins/shared/dashboard/*"], "@kbn/dashboards-selector": ["src/platform/packages/shared/dashboards/dashboards-selector"], diff --git a/yarn.lock b/yarn.lock index 00745b34e6da1..4ea0073516ec6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6355,6 +6355,18 @@ version "0.0.0" uid "" +"@kbn/dashboard-navigation-options-common@link:src/platform/packages/private/dashboard/dashboard-navigation-options-common": + version "0.0.0" + uid "" + +"@kbn/dashboard-navigation-options-components@link:src/platform/packages/private/dashboard/dashboard-navigation-options-components": + version "0.0.0" + uid "" + +"@kbn/dashboard-navigation-options-schema@link:src/platform/packages/private/dashboard/dashboard-navigation-options-schema": + version "0.0.0" + uid "" + "@kbn/dashboard-plugin@link:src/platform/plugins/shared/dashboard": version "0.0.0" uid ""