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');
|
}).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 = {
|
const creationOptions: DashboardCreationOptions = {
|
||||||
validateLoadedSavedObject: jest.fn().mockImplementation(() => 'redirected'),
|
validateLoadedSavedObject: jest.fn().mockImplementation(() => 'redirected'),
|
||||||
};
|
};
|
||||||
|
@ -59,6 +59,24 @@ test('returns undefined when provided validation function returns redireted', as
|
||||||
expect(dashboard).toBeUndefined();
|
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 () => {
|
test('pulls state from dashboard saved object when given a saved object id', async () => {
|
||||||
pluginServices.getServices().dashboardContentManagement.loadDashboardState = jest
|
pluginServices.getServices().dashboardContentManagement.loadDashboardState = jest
|
||||||
.fn()
|
.fn()
|
||||||
|
|
|
@ -137,7 +137,6 @@ export const initializeDashboard = async ({
|
||||||
useUnifiedSearchIntegration,
|
useUnifiedSearchIntegration,
|
||||||
useSessionStorageIntegration,
|
useSessionStorageIntegration,
|
||||||
} = creationOptions ?? {};
|
} = creationOptions ?? {};
|
||||||
const overrideInput = getInitialInput?.();
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------------
|
||||||
// Run validation.
|
// Run validation.
|
||||||
|
@ -161,6 +160,7 @@ export const initializeDashboard = async ({
|
||||||
// --------------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------------
|
||||||
// Combine input from saved object, session storage, & passed input to create initial input.
|
// Combine input from saved object, session storage, & passed input to create initial input.
|
||||||
// --------------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------------
|
||||||
|
const overrideInput = getInitialInput?.();
|
||||||
const initialInput: DashboardContainerInput = cloneDeep({
|
const initialInput: DashboardContainerInput = cloneDeep({
|
||||||
...DEFAULT_DASHBOARD_INPUT,
|
...DEFAULT_DASHBOARD_INPUT,
|
||||||
...(loadDashboardReturn?.dashboardInput ?? {}),
|
...(loadDashboardReturn?.dashboardInput ?? {}),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue