forked from elastic/kibana
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Canvas] Fixes the Copy Post Url link (elastic#54831)
* Fixes the Copy Post Url link * Adds tests Co-authored-by: Elastic Machine <[email protected]>
- Loading branch information
1 parent
922117d
commit 75cc43c
Showing
5 changed files
with
215 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
37 changes: 37 additions & 0 deletions
37
x-pack/legacy/plugins/canvas/public/components/workpad_header/workpad_export/utils.test.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
/* | ||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one | ||
* or more contributor license agreements. Licensed under the Elastic License; | ||
* you may not use this file except in compliance with the Elastic License. | ||
*/ | ||
|
||
jest.mock('../../../../common/lib/fetch'); | ||
|
||
import { getPdfUrl, createPdf } from './utils'; | ||
import { workpads } from '../../../../__tests__/fixtures/workpads'; | ||
import { fetch } from '../../../../common/lib/fetch'; | ||
|
||
const addBasePath = jest.fn().mockImplementation(s => `basepath/${s}`); | ||
const workpad = workpads[0]; | ||
|
||
test('getPdfUrl returns the correct url', () => { | ||
const url = getPdfUrl(workpad, { pageCount: 2 }, addBasePath); | ||
|
||
expect(url).toMatchInlineSnapshot( | ||
`"basepath//api/reporting/generate/printablePdf?jobParams=(browserTimezone:America%2FPhoenix,layout:(dimensions:(height:0,width:0),id:preserve_layout),objectType:'canvas%20workpad',relativeUrls:!(%2Fapp%2Fcanvas%23%2Fexport%2Fworkpad%2Fpdf%2Fbase-workpad%2Fpage%2F1,%2Fapp%2Fcanvas%23%2Fexport%2Fworkpad%2Fpdf%2Fbase-workpad%2Fpage%2F2),title:'base%20workpad')"` | ||
); | ||
}); | ||
|
||
test('createPdf posts to create the pdf', () => { | ||
createPdf(workpad, { pageCount: 2 }, addBasePath); | ||
|
||
expect(fetch.post).toBeCalled(); | ||
|
||
const args = (fetch.post as jest.MockedFunction<typeof fetch.post>).mock.calls[0]; | ||
|
||
expect(args[0]).toMatchInlineSnapshot(`"basepath//api/reporting/generate/printablePdf"`); | ||
expect(args[1]).toMatchInlineSnapshot(` | ||
Object { | ||
"jobParams": "(browserTimezone:America/Phoenix,layout:(dimensions:(height:0,width:0),id:preserve_layout),objectType:'canvas workpad',relativeUrls:!(/app/canvas#/export/workpad/pdf/base-workpad/page/1,/app/canvas#/export/workpad/pdf/base-workpad/page/2),title:'base workpad')", | ||
} | ||
`); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
/* | ||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one | ||
* or more contributor license agreements. Licensed under the Elastic License; | ||
* you may not use this file except in compliance with the Elastic License. | ||
*/ | ||
|
||
import { npSetup, npStart } from 'ui/new_platform'; | ||
import { CanvasStartDeps } from './plugin'; // eslint-disable-line import/order | ||
|
||
// @ts-ignore Untyped Kibana Lib | ||
import chrome, { loadingCount } from 'ui/chrome'; // eslint-disable-line import/order | ||
// @ts-ignore Untyped Module | ||
import { uiModules } from 'ui/modules'; // eslint-disable-line import/order | ||
import { absoluteToParsedUrl } from 'ui/url/absolute_to_parsed_url'; // eslint-disable-line import/order | ||
import { Storage } from '../../../../../src/plugins/kibana_utils/public'; // eslint-disable-line import/order | ||
// @ts-ignore Untyped Kibana Lib | ||
import { formatMsg } from 'ui/notify/lib/format_msg'; // eslint-disable-line import/order | ||
// @ts-ignore Untyped Kibana Lib | ||
import { QueryString } from 'ui/utils/query_string'; // eslint-disable-line import/order | ||
|
||
const shimCoreSetup = { | ||
...npSetup.core, | ||
}; | ||
const shimCoreStart = { | ||
...npStart.core, | ||
}; | ||
const shimSetupPlugins = {}; | ||
const shimStartPlugins: CanvasStartDeps = { | ||
...npStart.plugins, | ||
__LEGACY: { | ||
// ToDo: Copy directly into canvas | ||
absoluteToParsedUrl, | ||
// ToDo: Copy directly into canvas | ||
formatMsg, | ||
QueryString, | ||
// ToDo: Remove in favor of core.application.register | ||
setRootController: chrome.setRootController, | ||
storage: Storage, | ||
// ToDo: Won't be a part of New Platform. Will need to handle internally | ||
trackSubUrlForApp: chrome.trackSubUrlForApp, | ||
uiModules, | ||
}, | ||
}; | ||
|
||
// These methods are intended to be a replacement for import from 'ui/whatever' | ||
// These will go away once all of this one plugin start/setup properly | ||
// injects wherever these need to go. | ||
export function getCoreSetup() { | ||
return shimCoreSetup; | ||
} | ||
|
||
export function getCoreStart() { | ||
return shimCoreStart; | ||
} | ||
|
||
export function getSetupPlugins() { | ||
return shimSetupPlugins; | ||
} | ||
|
||
export function getStartPlugins() { | ||
return shimStartPlugins; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
/* | ||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one | ||
* or more contributor license agreements. Licensed under the Elastic License; | ||
* you may not use this file except in compliance with the Elastic License. | ||
*/ | ||
|
||
import React from 'react'; | ||
import ReactDOM from 'react-dom'; | ||
import { Chrome } from 'ui/chrome'; | ||
import { IModule } from 'angular'; | ||
import { i18n } from '@kbn/i18n'; | ||
import { Storage } from '../../../../../src/plugins/kibana_utils/public'; | ||
import { CoreSetup, CoreStart, Plugin } from '../../../../../src/core/public'; | ||
// @ts-ignore: Untyped Local | ||
import { initStateManagement, initLocationProvider } from './angular/config'; | ||
import { CanvasRootControllerFactory } from './angular/controllers'; | ||
// @ts-ignore: Untypled Local | ||
import { initStore } from './angular/services'; | ||
// @ts-ignore: untyped local component | ||
import { HelpMenu } from './components/help_menu/help_menu'; | ||
// @ts-ignore: untyped local | ||
import { loadExpressionTypes } from './lib/load_expression_types'; | ||
// @ts-ignore: untyped local | ||
import { loadTransitions } from './lib/load_transitions'; | ||
import { initLoadingIndicator } from './lib/loading_indicator'; | ||
import { getDocumentationLinks } from './lib/documentation_links'; | ||
|
||
// @ts-ignore: untyped local | ||
import { initClipboard } from './lib/clipboard'; | ||
|
||
export { CoreStart }; | ||
/** | ||
* These are the private interfaces for the services your plugin depends on. | ||
* @internal | ||
*/ | ||
// This interface will be built out as we require other plugins for setup | ||
export interface CanvasSetupDeps {} // eslint-disable-line @typescript-eslint/no-empty-interface | ||
export interface CanvasStartDeps { | ||
__LEGACY: { | ||
absoluteToParsedUrl: (url: string, basePath: string) => any; | ||
formatMsg: any; | ||
QueryString: any; | ||
setRootController: Chrome['setRootController']; | ||
storage: typeof Storage; | ||
trackSubUrlForApp: Chrome['trackSubUrlForApp']; | ||
uiModules: { | ||
get: (module: string) => IModule; | ||
}; | ||
}; | ||
} | ||
|
||
/** | ||
* These are the interfaces with your public contracts. You should export these | ||
* for other plugins to use in _their_ `SetupDeps`/`StartDeps` interfaces. | ||
* @public | ||
*/ | ||
// These interfaces are empty for now but will be populate as we need to export | ||
// things for other plugins to use at startup or runtime | ||
export interface CanvasSetup {} // eslint-disable-line @typescript-eslint/no-empty-interface | ||
export interface CanvasStart {} // eslint-disable-line @typescript-eslint/no-empty-interface | ||
|
||
/** @internal */ | ||
export class CanvasPlugin | ||
implements Plugin<CanvasSetup, CanvasStart, CanvasSetupDeps, CanvasStartDeps> { | ||
public setup(core: CoreSetup, plugins: CanvasSetupDeps) { | ||
// This is where any setup actions need to occur. | ||
// Things like registering functions to the interpreter that need | ||
// to be available everywhere, not just in Canvas | ||
|
||
return {}; | ||
} | ||
|
||
public start(core: CoreStart, plugins: CanvasStartDeps) { | ||
loadExpressionTypes(); | ||
loadTransitions(); | ||
|
||
initStateManagement(core, plugins); | ||
initLocationProvider(core, plugins); | ||
initStore(core, plugins); | ||
initClipboard(plugins.__LEGACY.storage); | ||
initLoadingIndicator(core.http.addLoadingCountSource); | ||
|
||
const CanvasRootController = CanvasRootControllerFactory(core, plugins); | ||
plugins.__LEGACY.setRootController('canvas', CanvasRootController); | ||
core.chrome.setHelpExtension({ | ||
appName: i18n.translate('xpack.canvas.helpMenu.appName', { | ||
defaultMessage: 'Canvas', | ||
}), | ||
links: [ | ||
{ | ||
linkType: 'documentation', | ||
href: getDocumentationLinks().canvas, | ||
}, | ||
], | ||
content: domNode => () => { | ||
ReactDOM.render(<HelpMenu />, domNode); | ||
}, | ||
}); | ||
|
||
return {}; | ||
} | ||
} |