diff --git a/public/app/features/plugins/extensions/validateLink.test.ts b/public/app/features/plugins/extensions/validateLink.test.ts index f6a8243a338..d47a6bc0cf9 100644 --- a/public/app/features/plugins/extensions/validateLink.test.ts +++ b/public/app/features/plugins/extensions/validateLink.test.ts @@ -30,6 +30,17 @@ describe('extension link validator', () => { }); }); + it('should return link configuration if path is not specified', () => { + const configureWithValidation = validator(() => { + return { + title: 'Go to page two', + }; + }); + + const configured = configureWithValidation(extension, context); + expect(configured).toEqual({ title: 'Go to page two' }); + }); + it('should return undefined if path is invalid', () => { const configureWithValidation = validator(() => { return { diff --git a/public/app/features/plugins/extensions/validateLink.ts b/public/app/features/plugins/extensions/validateLink.ts index 15b61399e03..c8c4d214196 100644 --- a/public/app/features/plugins/extensions/validateLink.ts +++ b/public/app/features/plugins/extensions/validateLink.ts @@ -1,3 +1,5 @@ +import { isString } from 'lodash'; + import type { AppPluginExtensionLink } from '@grafana/data'; import type { ConfigureFunc } from './types'; @@ -15,6 +17,10 @@ export function createLinkValidator(options: Options) { return function validateLink(link, context) { const configured = configure(link, context); + if (!isString(configured?.path)) { + return configured; + } + if (!isValidLinkPath(pluginId, configured?.path)) { logger( `[Plugins] Disabled extension '${title}' for '${pluginId}' beause configure didn't return a path with the correct prefix: '${`/a/${pluginId}/`}'`