in packages/eui/src/components/basic_table/in_memory_table.tsx [308:400]
static getDerivedStateFromProps<T extends object>(
nextProps: EuiInMemoryTableProps<T>,
prevState: State<T>
) {
let updatedPrevState = prevState;
if (nextProps.items !== prevState.prevProps.items) {
// We have new items because an external search has completed, so reset pagination state.
let nextPageIndex = 0;
if (
nextProps.pagination != null &&
typeof nextProps.pagination !== 'boolean'
) {
nextPageIndex = nextProps.pagination.pageIndex || 0;
}
updatedPrevState = {
...updatedPrevState,
prevProps: {
...updatedPrevState.prevProps,
items: nextProps.items,
},
pageIndex: nextPageIndex,
};
}
// apply changes to controlled pagination
if (
nextProps.pagination != null &&
typeof nextProps.pagination !== 'boolean'
) {
if (
nextProps.pagination.pageSize != null &&
nextProps.pagination.pageSize !== updatedPrevState.pageIndex
) {
updatedPrevState = {
...updatedPrevState,
pageSize: nextProps.pagination.pageSize,
};
}
if (
nextProps.pagination.pageIndex != null &&
nextProps.pagination.pageIndex !== updatedPrevState.pageIndex
) {
updatedPrevState = {
...updatedPrevState,
pageIndex: nextProps.pagination.pageIndex,
};
}
}
const { sortName, sortDirection } = getInitialSorting(
nextProps.columns,
nextProps.sorting
);
if (
sortName !== prevState.prevProps.sortName ||
sortDirection !== prevState.prevProps.sortDirection
) {
updatedPrevState = {
...updatedPrevState,
prevProps: {
...updatedPrevState.prevProps,
sortName,
sortDirection,
},
sortName,
sortDirection,
};
}
const nextQuery = nextProps.search
? (nextProps.search as EuiSearchBarProps).query
: '';
const prevQuery = prevState.prevProps.search
? (prevState.prevProps.search as EuiSearchBarProps).query
: '';
if (nextQuery !== prevQuery) {
updatedPrevState = {
...updatedPrevState,
prevProps: {
...updatedPrevState.prevProps,
search: nextProps.search,
},
query: getQueryFromSearch(nextProps.search, false),
};
}
if (updatedPrevState !== prevState) {
return updatedPrevState;
}
return null;
}