diff --git a/examples/ui_actions_explorer/public/context_menu_examples/util.ts b/examples/ui_actions_explorer/public/context_menu_examples/util.ts index 946267a2f34..86a495c1726 100644 --- a/examples/ui_actions_explorer/public/context_menu_examples/util.ts +++ b/examples/ui_actions_explorer/public/context_menu_examples/util.ts @@ -28,13 +28,14 @@ * under the License. */ +import { EuiIconType } from '@elastic/eui/src/components/icon/icon'; import { Action } from '../../../../src/plugins/ui_actions/public'; export const sampleAction = ( id: string, order: number, name: string, - icon: string, + icon: EuiIconType, grouping?: Action['grouping'] ): Action => { return { diff --git a/src/core/public/application/types.ts b/src/core/public/application/types.ts index 5f620d266d2..084f7aaf029 100644 --- a/src/core/public/application/types.ts +++ b/src/core/public/application/types.ts @@ -32,6 +32,7 @@ import { Observable } from 'rxjs'; import { History } from 'history'; import { RecursiveReadonly } from '@osd/utility-types'; +import { EuiIconType } from '@elastic/eui/src/components/icon/icon'; import { MountPoint } from '../types'; import { Capabilities } from './capabilities'; import { ChromeStart } from '../chrome'; @@ -190,7 +191,7 @@ export interface App { * A EUI iconType that will be used for the app's icon. This icon * takes precendence over the `icon` property. */ - euiIconType?: string; + euiIconType?: EuiIconType; /** * A URL to an image file used as an icon. Used as a fallback diff --git a/src/core/public/chrome/nav_links/nav_link.ts b/src/core/public/chrome/nav_links/nav_link.ts index a7811e1c54f..cddd4523451 100644 --- a/src/core/public/chrome/nav_links/nav_link.ts +++ b/src/core/public/chrome/nav_links/nav_link.ts @@ -28,6 +28,7 @@ * under the License. */ +import { EuiIconType } from '@elastic/eui/src/components/icon/icon'; import { pick } from '@osd/std'; import { AppCategory } from '../../'; @@ -75,7 +76,7 @@ export interface ChromeNavLink { * A EUI iconType that will be used for the app's icon. This icon * takes precedence over the `icon` property. */ - readonly euiIconType?: string; + readonly euiIconType?: EuiIconType; /** * A URL to an image file used as an icon. Used as a fallback diff --git a/src/core/public/chrome/nav_links/to_nav_link.test.ts b/src/core/public/chrome/nav_links/to_nav_link.test.ts index 279cf6be23e..1fe2532b7d8 100644 --- a/src/core/public/chrome/nav_links/to_nav_link.test.ts +++ b/src/core/public/chrome/nav_links/to_nav_link.test.ts @@ -32,6 +32,7 @@ import { PublicAppInfo, AppNavLinkStatus, AppStatus } from '../../application'; import { toNavLink } from './to_nav_link'; import { httpServiceMock } from '../../mocks'; +import { EuiIconType } from '@elastic/eui/src/components/icon/icon'; const app = (props: Partial = {}): PublicAppInfo => ({ id: 'some-id', @@ -52,7 +53,7 @@ describe('toNavLink', () => { title: 'title', order: 12, tooltip: 'tooltip', - euiIconType: 'my-icon', + euiIconType: 'my-icon' as EuiIconType, }), basePath ); diff --git a/src/core/types/app_category.ts b/src/core/types/app_category.ts index 79854ce45c0..7e843b6ab55 100644 --- a/src/core/types/app_category.ts +++ b/src/core/types/app_category.ts @@ -9,6 +9,8 @@ * GitHub history for details. */ +import { EuiIconType } from '@elastic/eui/src/components/icon/icon'; + /* * Licensed to Elasticsearch B.V. under one or more contributor * license agreements. See the NOTICE file distributed with @@ -64,5 +66,5 @@ export interface AppCategory { * If the category is only 1 item, and no icon is defined, will default to the product icon * Defaults to initials if no icon is defined */ - euiIconType?: string; + euiIconType?: EuiIconType; } diff --git a/src/plugins/dashboard/public/application/actions/add_to_library_action.tsx b/src/plugins/dashboard/public/application/actions/add_to_library_action.tsx index c2df06499c0..1418cc65dc5 100644 --- a/src/plugins/dashboard/public/application/actions/add_to_library_action.tsx +++ b/src/plugins/dashboard/public/application/actions/add_to_library_action.tsx @@ -31,6 +31,7 @@ import { i18n } from '@osd/i18n'; import _ from 'lodash'; import uuid from 'uuid'; +import { EuiIconType } from '@elastic/eui/src/components/icon/icon'; import { ActionByType, IncompatibleActionError } from '../../ui_actions_plugin'; import { ViewMode, PanelState, IEmbeddable } from '../../embeddable_plugin'; import { @@ -63,7 +64,7 @@ export class AddToLibraryAction implements ActionByType }); } - public getIconType({ embeddable }: ClonePanelActionContext) { + public getIconType({ embeddable }: ClonePanelActionContext): EuiIconType { if (!embeddable.getRoot() || !embeddable.getRoot().isContainer) { throw new IncompatibleActionError(); } diff --git a/src/plugins/dashboard/public/application/actions/expand_panel_action.tsx b/src/plugins/dashboard/public/application/actions/expand_panel_action.tsx index 9a8f2af8860..63a69e21b48 100644 --- a/src/plugins/dashboard/public/application/actions/expand_panel_action.tsx +++ b/src/plugins/dashboard/public/application/actions/expand_panel_action.tsx @@ -28,6 +28,7 @@ * under the License. */ +import { EuiIconType } from '@elastic/eui/src/components/icon/icon'; import { i18n } from '@osd/i18n'; import { IEmbeddable } from '../../embeddable_plugin'; import { ActionByType, IncompatibleActionError } from '../../ui_actions_plugin'; @@ -72,7 +73,7 @@ export class ExpandPanelAction implements ActionByType ( { }); } - getIconType() { + getIconType(): EuiIconType { return 'pencil'; } diff --git a/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/add_panel/add_panel_action.ts b/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/add_panel/add_panel_action.ts index f406c9f25ff..d98ab4c6efd 100644 --- a/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/add_panel/add_panel_action.ts +++ b/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/add_panel/add_panel_action.ts @@ -32,6 +32,7 @@ import { i18n } from '@osd/i18n'; import { Action, ActionExecutionContext } from 'src/plugins/ui_actions/public'; import { NotificationsStart, OverlayStart } from 'src/core/public'; import { EmbeddableStart } from 'src/plugins/embeddable/public/plugin'; +import { EuiIconType } from '@elastic/eui/src/components/icon/icon'; import { ViewMode } from '../../../../types'; import { openAddPanelFlyout } from './open_add_panel_flyout'; import { IContainer } from '../../../../containers'; @@ -60,7 +61,7 @@ export class AddPanelAction implements Action { }); } - public getIconType() { + public getIconType(): EuiIconType { return 'plusInCircleFilled'; } diff --git a/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/customize_title/customize_panel_action.ts b/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/customize_title/customize_panel_action.ts index 7eedcc6dbb0..a07695d8ddf 100644 --- a/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/customize_title/customize_panel_action.ts +++ b/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/customize_title/customize_panel_action.ts @@ -30,6 +30,7 @@ import { i18n } from '@osd/i18n'; import { Action } from 'src/plugins/ui_actions/public'; +import { EuiIconType } from '@elastic/eui/src/components/icon/icon'; import { ViewMode } from '../../../../types'; import { IEmbeddable } from '../../../../embeddables'; @@ -56,7 +57,7 @@ export class CustomizePanelTitleAction implements Action { }); } - public getIconType() { + public getIconType(): EuiIconType { return 'pencil'; } diff --git a/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/inspect_panel_action.ts b/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/inspect_panel_action.ts index d0b3d2316b7..ce1657b7ad7 100644 --- a/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/inspect_panel_action.ts +++ b/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/inspect_panel_action.ts @@ -31,6 +31,7 @@ import { i18n } from '@osd/i18n'; import { Action } from 'src/plugins/ui_actions/public'; import { Start as InspectorStartContract } from 'src/plugins/inspector/public'; +import { EuiIconType } from '@elastic/eui/src/components/icon/icon'; import { IEmbeddable } from '../../../embeddables'; export const ACTION_INSPECT_PANEL = 'openInspector'; @@ -52,7 +53,7 @@ export class InspectPanelAction implements Action { }); } - public getIconType() { + public getIconType(): EuiIconType { return 'inspect'; } diff --git a/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/remove_panel_action.ts b/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/remove_panel_action.ts index 22419874c81..37bb1ceaa31 100644 --- a/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/remove_panel_action.ts +++ b/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/remove_panel_action.ts @@ -29,6 +29,7 @@ */ import { i18n } from '@osd/i18n'; +import { EuiIconType } from '@elastic/eui/src/components/icon/icon'; import { Action, IncompatibleActionError } from '../../../ui_actions'; import { ContainerInput, IContainer } from '../../../containers'; import { ViewMode } from '../../../types'; @@ -63,7 +64,7 @@ export class RemovePanelAction implements Action { }); } - public getIconType() { + public getIconType(): EuiIconType { return 'trash'; } diff --git a/src/plugins/index_pattern_management/public/management_app/mount_management_section.tsx b/src/plugins/index_pattern_management/public/management_app/mount_management_section.tsx index fbc00105f94..2db7fe92b5a 100644 --- a/src/plugins/index_pattern_management/public/management_app/mount_management_section.tsx +++ b/src/plugins/index_pattern_management/public/management_app/mount_management_section.tsx @@ -36,6 +36,7 @@ import { i18n } from '@osd/i18n'; import { I18nProvider } from '@osd/i18n/react'; import { StartServicesAccessor } from 'src/core/public'; +import { EuiIconType } from '@elastic/eui/src/components/icon/icon'; import { OpenSearchDashboardsContextProvider } from '../../../opensearch_dashboards_react/public'; import { ManagementAppMountParams } from '../../../management/public'; import { diff --git a/src/plugins/management/public/plugin.ts b/src/plugins/management/public/plugin.ts index 45e3cbf5064..b50b2dba247 100644 --- a/src/plugins/management/public/plugin.ts +++ b/src/plugins/management/public/plugin.ts @@ -89,7 +89,7 @@ export class ManagementPlugin implements Plugin void; @@ -42,7 +43,7 @@ export interface TopNavMenuData { disableButton?: boolean | (() => boolean); tooltip?: string | (() => string | undefined); emphasize?: boolean; - iconType?: string; + iconType?: EuiIconType; iconSide?: EuiButtonProps['iconSide']; } diff --git a/src/plugins/ui_actions/public/actions/action.ts b/src/plugins/ui_actions/public/actions/action.ts index ba8d01fcdac..b38e2bd4e40 100644 --- a/src/plugins/ui_actions/public/actions/action.ts +++ b/src/plugins/ui_actions/public/actions/action.ts @@ -29,6 +29,7 @@ */ import { UiComponent } from 'src/plugins/opensearch_dashboards_utils/public'; +import { EuiIconType } from '@elastic/eui/src/components/icon/icon'; import { ActionType, ActionContextMapping, BaseContext } from '../types'; import { Presentable } from '../util/presentable'; import { Trigger } from '../triggers'; @@ -85,7 +86,7 @@ export interface Action /** * Optional EUI icon type that can be displayed along with the title. */ - getIconType(context: ActionExecutionContext): string | undefined; + getIconType(context: ActionExecutionContext): EuiIconType | undefined; /** * Returns a title to be displayed to the user. diff --git a/src/plugins/ui_actions/public/actions/action_internal.ts b/src/plugins/ui_actions/public/actions/action_internal.ts index f071e04c340..fb39a01ed69 100644 --- a/src/plugins/ui_actions/public/actions/action_internal.ts +++ b/src/plugins/ui_actions/public/actions/action_internal.ts @@ -30,6 +30,7 @@ // @ts-ignore import React from 'react'; +import { EuiIconType } from '@elastic/eui/src/components/icon/icon'; import { Action, ActionContext as Context, ActionDefinition } from './action'; import { Presentable, PresentableGrouping } from '../util/presentable'; import { uiToReactComponent } from '../../../opensearch_dashboards_react/public'; @@ -53,7 +54,7 @@ export class ActionInternal return this.definition.execute(context); } - public getIconType(context: Context): string | undefined { + public getIconType(context: Context): EuiIconType | undefined { if (!this.definition.getIconType) return undefined; return this.definition.getIconType(context); } diff --git a/src/plugins/ui_actions/public/service/ui_actions_service.test.ts b/src/plugins/ui_actions/public/service/ui_actions_service.test.ts index 82194de2489..18c4db4f0aa 100644 --- a/src/plugins/ui_actions/public/service/ui_actions_service.test.ts +++ b/src/plugins/ui_actions/public/service/ui_actions_service.test.ts @@ -46,7 +46,7 @@ const testAction1: Action = { type: 'type1' as ActionType, execute: async () => {}, getDisplayName: () => 'test1', - getIconType: () => '', + getIconType: () => undefined, isCompatible: async () => true, }; @@ -56,7 +56,7 @@ const testAction2: Action = { type: 'type2' as ActionType, execute: async () => {}, getDisplayName: () => 'test2', - getIconType: () => '', + getIconType: () => undefined, isCompatible: async () => true, }; @@ -108,7 +108,7 @@ describe('UiActionsService', () => { id: 'test', execute: async () => {}, getDisplayName: () => 'test', - getIconType: () => '', + getIconType: () => undefined, isCompatible: async () => true, type: 'test' as ActionType, }); @@ -120,7 +120,7 @@ describe('UiActionsService', () => { id: 'test', execute: async () => {}, getDisplayName: () => 'test', - getIconType: () => '', + getIconType: () => undefined, isCompatible: async () => true, type: 'test' as ActionType, }); @@ -137,7 +137,7 @@ describe('UiActionsService', () => { type: 'type1' as ActionType, execute: async () => {}, getDisplayName: () => 'test', - getIconType: () => '', + getIconType: () => undefined, isCompatible: async () => true, }; const action2: Action = { @@ -146,7 +146,7 @@ describe('UiActionsService', () => { type: 'type2' as ActionType, execute: async () => {}, getDisplayName: () => 'test', - getIconType: () => '', + getIconType: () => undefined, isCompatible: async () => true, }; diff --git a/src/plugins/ui_actions/public/util/presentable.ts b/src/plugins/ui_actions/public/util/presentable.ts index ef726333e15..428644e1c2c 100644 --- a/src/plugins/ui_actions/public/util/presentable.ts +++ b/src/plugins/ui_actions/public/util/presentable.ts @@ -28,6 +28,7 @@ * under the License. */ +import { EuiIconType } from '@elastic/eui/src/components/icon/icon'; import { UiComponent } from 'src/plugins/opensearch_dashboards_utils/public'; /** @@ -54,7 +55,7 @@ export interface Presentable { /** * Optional EUI icon type that can be displayed along with the title. */ - getIconType(context: Context): string | undefined; + getIconType(context: Context): EuiIconType | undefined; /** * Returns a title to be displayed to the user. diff --git a/src/plugins/visualize/public/application/utils/get_top_nav_config.tsx b/src/plugins/visualize/public/application/utils/get_top_nav_config.tsx index d0e79b85d7c..562f96b872b 100644 --- a/src/plugins/visualize/public/application/utils/get_top_nav_config.tsx +++ b/src/plugins/visualize/public/application/utils/get_top_nav_config.tsx @@ -274,7 +274,7 @@ export const getTopNavConfig = ( ? [ { id: 'save', - iconType: savedVis?.id && originatingApp ? undefined : 'save', + iconType: savedVis?.id && originatingApp ? undefined : ('save' as const), label: savedVis?.id && originatingApp ? i18n.translate('visualize.topNavMenu.saveVisualizationAsButtonLabel', { @@ -366,7 +366,7 @@ export const getTopNavConfig = ( defaultMessage: 'Save and return', }), emphasize: true, - iconType: 'checkInCircleFilled', + iconType: 'checkInCircleFilled' as const, description: i18n.translate( 'visualize.topNavMenu.saveAndReturnVisualizationButtonAriaLabel', {