diff --git a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.tsx b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.tsx index 13e1287022f3d..026ca50f9f818 100644 --- a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.tsx +++ b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.tsx @@ -168,6 +168,16 @@ export function DiscoverSidebarResponsive(props: DiscoverSidebarResponsiveProps) }, }); break; + case FetchStatus.ERROR: + dispatchSidebarStateAction({ + type: DiscoverSidebarReducerActionType.DOCUMENTS_LOADED, + payload: { + dataView: selectedDataViewRef.current, + fieldCounts: {}, + isPlainRecord: isPlainRecordType, + }, + }); + break; default: break; } diff --git a/test/functional/apps/discover/group1/_sidebar.ts b/test/functional/apps/discover/group1/_sidebar.ts index 109e8aa37cd38..db3abf5046582 100644 --- a/test/functional/apps/discover/group1/_sidebar.ts +++ b/test/functional/apps/discover/group1/_sidebar.ts @@ -510,6 +510,46 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(allFields.includes('_bytes-runtimefield')).to.be(false); }); + it('should render even when retrieving documents failed with an error', async () => { + await PageObjects.header.waitUntilLoadingHasFinished(); + + await testSubjects.missingOrFail('discoverNoResultsError'); + + expect(await PageObjects.discover.getSidebarAriaDescription()).to.be( + '53 available fields. 0 empty fields. 3 meta fields.' + ); + + await PageObjects.discover.addRuntimeField('_invalid-runtimefield', `emit(‘’);`); + + await PageObjects.header.waitUntilLoadingHasFinished(); + + // error in fetching documents because of the invalid runtime field + await testSubjects.existOrFail('discoverNoResultsError'); + + await PageObjects.discover.waitUntilSidebarHasLoaded(); + + // check that the sidebar is rendered + expect(await PageObjects.discover.getSidebarAriaDescription()).to.be( + '54 available fields. 0 empty fields. 3 meta fields.' + ); + let allFields = await PageObjects.discover.getAllFieldNames(); + expect(allFields.includes('_invalid-runtimefield')).to.be(true); + + await browser.refresh(); + await PageObjects.header.waitUntilLoadingHasFinished(); + await testSubjects.existOrFail('discoverNoResultsError'); // still has error + + // check that the sidebar is rendered event after a refresh + allFields = await PageObjects.discover.getAllFieldNames(); + expect(allFields.includes('_invalid-runtimefield')).to.be(true); + + await PageObjects.discover.removeField('_invalid-runtimefield'); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSidebarHasLoaded(); + + await testSubjects.missingOrFail('discoverNoResultsError'); + }); + it('should work correctly when time range is updated', async function () { await esArchiver.loadIfNeeded( 'test/functional/fixtures/es_archiver/index_pattern_without_timefield'