react-bootstrap-table2 icon indicating copy to clipboard operation
react-bootstrap-table2 copied to clipboard

Cannot read property 'id' of undefined + The above error occurred in the <SelectionProvider> component:

Open smchauhan opened this issue 4 years ago • 12 comments

Hi Allen,

The bug I want all these functionalities in single table searching in all fields + paging, it works fine for the first time, but after navigating to another page and searching for something generates error. for your reference have added code snippet and error,

Code Snippet

import paginationFactory, { PaginationProvider, PaginationListStandalone } from 'react-bootstrap-table2-paginator';
import ToolkitProvider, { Search } from 'react-bootstrap-table2-toolkit';
import { tableData } from '../../../data/blog/BlogPostData';

const columns = [
    {   dataField: 'id',        text: 'Id'      },
    {   dataField: 'category',  text: 'Category' }, 
    {   dataField: 'slug',      text: 'Slug'    }, 
    {   dataField: 'posts',     text: 'Posts'   },
    {   dataField: 'date_created',  text: 'Date Created'    },
    {   dataField: 'date_updated',  text: 'Date Updated'    },
];
const options = {
    custom: true,
    paginationSize: 4,
    pageStartIndex: 1,
    firstPageText: 'First',
    prePageText: 'Prev',
    nextPageText: 'Next',
    lastPageText: 'Last',
    nextPageTitle: 'First page',
    prePageTitle: 'Pre page',
    firstPageTitle: 'Next page',
    lastPageTitle: 'Last page',
    showTotal: true,
    totalSize: tableData.length
  };
const contentTable = ({ paginationProps, paginationTableProps }) => (
    <div>
      <ToolkitProvider
        keyField="id"
        columns={ columns }
        data={ tableData}
        search
      >
        {
          toolkitprops => (
            <div className="post-table">              
              <SearchBar { ...toolkitprops.searchProps } className="search-bar m-4" placeholder="Search Post" /> 
              <div className="table-responsive">
                  <BootstrapTable
                selectRow={ selectRow }
                bordered={ false }  
                { ...toolkitprops.baseProps }
                { ...paginationTableProps }
              />
              </div>
            </div>
          )
        }
      </ToolkitProvider>      
      <PaginationListStandalone { ...paginationProps } />      
    </div>
  );

const BlogPost= () => {
return (
        <Fragment>
           <PaginationProvider
             pagination={
                  paginationFactory(options)
              }
             >
              { contentTable }
           </PaginationProvider>
     </Fragment>
    )
};
export default BlogPost;

To Reproduce Steps that generate errors:

  1. Enter value in Search bar ( It works fine )
  2. Navigate to page 2..3...or X
  3. Again enter value in Search bar ( It generate error with blank screen )
  4. See error below show in my console.

Error Screenshots If applicable, add screenshots to help explain your problem.

  1. https://prnt.sc/1mt2mvr
  2. https://prnt.sc/1mt2upq
  3. https://prnt.sc/1mt9yhe

smchauhan avatar Aug 11 '21 11:08 smchauhan

Same issue here. I've tried specifically defining the selected keys on selectRow, but it doesn't fix it. Basically this issue occurs when navigating to a new page and then changing the data. Quite a substantial oversight, as it doesn't allow the case of selecting and filtering to work with pagination.

I'm now going to try to find a workaround, and I'd consider making a PR fix, but this repo doesn't seem like it is being maintained.

bfricka avatar Sep 01 '21 23:09 bfricka

@bfricka Thanks a lot, I am also trying to fix it, I will post here if I can fix it, between if you find any solution, plz post the solution here. Thanks again :)

smchauhan avatar Sep 02 '21 03:09 smchauhan

Hello, I had a similar issue and did a short investigation on it. I found the following

In the node_modules/react-bootstrap-table-next/lib/src/utils.js there is get function that accepts two parameters (target, field) as it is shown below

function get(target, field) {
  var directGet = target[field];
  if (directGet !== undefined && directGet !== null) {
    return directGet;
  }

  var pathArray = splitNested(field);
  var result = void 0;
  try {
    result = pathArray.reduce(function (curr, path) {
      return curr[path];
    }, target);
  } catch (e) {}
  return result;
}

The problem is that in some cases the target parameter is undefined and that throws that error.

So I wrapped the entire body function inside the try/catch block in order to catch the error as it is shown below

function get(target, field) {
var result = void 0;
  try {
  var directGet = target[field];
  if (directGet !== undefined && directGet !== null) {
    return directGet;
  }

  var pathArray = splitNested(field);
    result = pathArray.reduce(function (curr, path) {
      return curr[path];
    }, target);
  } catch (e) {}
  return result;
}

I hope that this will be useful to you too. This is not a proper fix though. The developers of the library has to take a look at it :)

myapos avatar Dec 12 '21 21:12 myapos

Thanks @myapos will check with that solution, between for the current project I have implemented https://react-table.tanstack.com/ package.

sandipthemes avatar Dec 13 '21 03:12 sandipthemes

Had the same error related in the issue #1660. My solution was the same as @myapos, also made the pull request (#1662), but had no response and it hasn't been merged.

guizombas avatar Dec 14 '21 15:12 guizombas

I made a PR too. I hope the developers will merge at least one of them. It is a simple fix.

myapos avatar Dec 14 '21 15:12 myapos

@smchauhan @sandipthemes

ardynugraha avatar Jan 24 '22 06:01 ardynugraha

Faced same issue and implemented my own pagination component

and here how I'm using it.

ahmedalatawi avatar May 07 '22 06:05 ahmedalatawi

I am facing the same issue what is the solution

chsunilkumar33 avatar May 31 '22 06:05 chsunilkumar33

Faced same issue and implemented my own pagination component

and here how I'm using it.

This just works great, thanks for this

Huzaifaahmed20 avatar Dec 29 '22 09:12 Huzaifaahmed20

In case you are using pagination that need to fetch new data from the api on page change you need to enable the "remote" prop and you need to handle onTableChange by yourself. documentation

kamenpalyov avatar Mar 08 '23 13:03 kamenpalyov

Just pass - remote={{pagination: true } } in BootstrapTable. It will work

KirtiN10 avatar Mar 09 '23 08:03 KirtiN10