mirror of
https://github.com/elastic/kibana.git
synced 2025-06-27 18:51:07 -04:00
[Dashboard] Fix missing state on short URL alias match redirect (#163658)
Fixes an issue where URL state from short URLs could be lost on an alias match redirect.
This commit is contained in:
parent
f73746d73b
commit
4de61111b1
2 changed files with 20 additions and 2 deletions
|
@ -51,7 +51,7 @@ test('throws error when provided validation function returns invalid', async ()
|
|||
}).rejects.toThrow('Dashboard failed saved object result validation');
|
||||
});
|
||||
|
||||
test('returns undefined when provided validation function returns redireted', async () => {
|
||||
test('returns undefined when provided validation function returns redirected', async () => {
|
||||
const creationOptions: DashboardCreationOptions = {
|
||||
validateLoadedSavedObject: jest.fn().mockImplementation(() => 'redirected'),
|
||||
};
|
||||
|
@ -59,6 +59,24 @@ test('returns undefined when provided validation function returns redireted', as
|
|||
expect(dashboard).toBeUndefined();
|
||||
});
|
||||
|
||||
/**
|
||||
* Because the getInitialInput function may have side effects, we only want to call it once we are certain that the
|
||||
* the loaded saved object passes validation.
|
||||
*
|
||||
* This is especially relevant in the Dashboard App case where calling the getInitialInput function removes the _a
|
||||
* param from the URL. In alais match situations this caused a bug where the state from the URL wasn't properly applied
|
||||
* after the redirect.
|
||||
*/
|
||||
test('does not get initial input when provided validation function returns redirected', async () => {
|
||||
const creationOptions: DashboardCreationOptions = {
|
||||
validateLoadedSavedObject: jest.fn().mockImplementation(() => 'redirected'),
|
||||
getInitialInput: jest.fn(),
|
||||
};
|
||||
const dashboard = await createDashboard(creationOptions, 0, 'test-id');
|
||||
expect(dashboard).toBeUndefined();
|
||||
expect(creationOptions.getInitialInput).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test('pulls state from dashboard saved object when given a saved object id', async () => {
|
||||
pluginServices.getServices().dashboardContentManagement.loadDashboardState = jest
|
||||
.fn()
|
||||
|
|
|
@ -137,7 +137,6 @@ export const initializeDashboard = async ({
|
|||
useUnifiedSearchIntegration,
|
||||
useSessionStorageIntegration,
|
||||
} = creationOptions ?? {};
|
||||
const overrideInput = getInitialInput?.();
|
||||
|
||||
// --------------------------------------------------------------------------------------
|
||||
// Run validation.
|
||||
|
@ -161,6 +160,7 @@ export const initializeDashboard = async ({
|
|||
// --------------------------------------------------------------------------------------
|
||||
// Combine input from saved object, session storage, & passed input to create initial input.
|
||||
// --------------------------------------------------------------------------------------
|
||||
const overrideInput = getInitialInput?.();
|
||||
const initialInput: DashboardContainerInput = cloneDeep({
|
||||
...DEFAULT_DASHBOARD_INPUT,
|
||||
...(loadDashboardReturn?.dashboardInput ?? {}),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue