From 0b8dd40f8410d6fa78657e5d1c27f6431521a09b Mon Sep 17 00:00:00 2001 From: Shrey Dubey <53302612+shrey@users.noreply.github.com> Date: Wed, 10 Jun 2020 23:32:48 +0530 Subject: [PATCH] [EuiInMemoryTable] Avoid blocking update for getDerivedStateFromProps (#3579) * added single return source in getDerivedStateFromProps * implemented changes * Updated changelog --- CHANGELOG.md | 1 + .../basic_table/in_memory_table.tsx | 22 ++++++++++++++----- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a14be4d2abd..3ef7779bd76 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ - Fixed `EuiKeyPadMenu` and `EuiKeyPadMenuItem` aria roles ([#3502](https://github.com/elastic/eui/pull/3502)) - Fixed `EuiFieldSearch` input clear button doesn't show when external input is passed([#3497](https://github.com/elastic/eui/pull/3497)) - Fixed `EuiBasicTable` footers to always use a unique `key` ([#3559](https://github.com/elastic/eui/pull/3559)) +- Fixed `EuiInMemoryTable` by changing the `getDerivedStateFromProps` to not block the updates as soon as it hits a true if condition ([#3579](https://github.com/elastic/eui/pull/3579)) **Breaking changes** diff --git a/src/components/basic_table/in_memory_table.tsx b/src/components/basic_table/in_memory_table.tsx index dfb90e51b6d..058ebd2162d 100644 --- a/src/components/basic_table/in_memory_table.tsx +++ b/src/components/basic_table/in_memory_table.tsx @@ -246,11 +246,15 @@ export class EuiInMemoryTable extends Component< nextProps: EuiInMemoryTableProps, prevState: State ) { + let updatedPrevState = prevState; + let componentShouldUpdate = false; if (nextProps.items !== prevState.prevProps.items) { // We have new items because an external search has completed, so reset pagination state. - return { + componentShouldUpdate = true; + updatedPrevState = { + ...updatedPrevState, prevProps: { - ...prevState.prevProps, + ...updatedPrevState.prevProps, items: nextProps.items, }, pageIndex: 0, @@ -264,7 +268,9 @@ export class EuiInMemoryTable extends Component< sortName !== prevState.prevProps.sortName || sortDirection !== prevState.prevProps.sortDirection ) { - return { + componentShouldUpdate = true; + updatedPrevState = { + ...updatedPrevState, sortName, sortDirection, }; @@ -278,15 +284,19 @@ export class EuiInMemoryTable extends Component< : ''; if (nextQuery !== prevQuery) { - return { + componentShouldUpdate = true; + updatedPrevState = { + ...updatedPrevState, prevProps: { - ...prevState.prevProps, + ...updatedPrevState.prevProps, search: nextProps.search, }, query: getQueryFromSearch(nextProps.search, false), }; } - + if (componentShouldUpdate) { + return updatedPrevState; + } return null; }