Whenever I select next page I am loosing selected rows of the previous page in Material-table
I am using material-table remote data and using MT default paging. Here is link
https://material-table.com/#/docs/features/remote-data
Please help me in guiding what should I write in onSelectionChange method.
I tried the below solution but still, it’s not working
Selection and Remote Data Pagination on Material Table React
How can I use tableRef.onRowSelected to update the UI via the onRowClick property?
Here is my code:
cimport React from 'react';
import {IconProps} from '@material-ui/core';
import {forwardRef} from 'react';
import AddBox from '@material-ui/icons/AddBox';
import ArrowDownward from '@material-ui/icons/ArrowDownward';
import Check from '@material-ui/icons/Check';
import ChevronLeft from '@material-ui/icons/ChevronLeft';
import ChevronRight from '@material-ui/icons/ChevronRight';
import Clear from '@material-ui/icons/Clear';
import DeleteOutline from '@material-ui/icons/DeleteOutline';
import axios from 'axios';
import '../../node_modules/antd/dist/antd.css';
import Build from '@material-ui/icons/Build';
import FilterList from '@material-ui/icons/FilterList';
import FirstPage from '@material-ui/icons/FirstPage';
import LastPage from '@material-ui/icons/LastPage';
import Remove from '@material-ui/icons/Remove';
import SaveAlt from '@material-ui/icons/SaveAlt';
import Search from '@material-ui/icons/Search';
import ViewColumn from '@material-ui/icons/ViewColumn';
import Cancel from '@material-ui/icons/Cancel';
import Visibility from '@material-ui/icons/Visibility';
import Refresh from '@material-ui/icons/Refresh';
import {
Form,
Select,
InputNumber,
Input,
Switch,
Radio,
Slider,
Button,
Upload,
Icon,
Rate,
Checkbox,
Row,
Col,
Tooltip,
icon,
Modal,
message, Card
} from 'antd';
import MaterialTable from "material-table";
const ReactDomServer = require("react-dom/server")
const tableIcons = {
Cancel: forwardRef((props, ref) => <Cancel {...props} ref={ref}/>),
Refresh: forwardRef((props, ref) => <Refresh {...props} ref={ref}/>),
Add: forwardRef((props, ref) => <AddBox {...props} ref={ref}/>),
Check: forwardRef((props, ref) => <Check {...props} ref={ref}/>),
Clear: forwardRef((props, ref) => <Clear {...props} ref={ref}/>),
Delete: forwardRef((props, ref) => <DeleteOutline {...props} ref={ref}/>),
DetailPanel: forwardRef((props, ref) => <ChevronRight {...props} ref={ref}/>),
Build: forwardRef((props, ref) => <Build {...props} ref={ref}/>),
Export: forwardRef((props, ref) => <SaveAlt {...props} ref={ref}/>),
Filter: forwardRef((props, ref) => <FilterList {...props} ref={ref}/>),
FirstPage: forwardRef((props, ref) => <FirstPage {...props} ref={ref}/>),
LastPage: forwardRef((props, ref) => <LastPage {...props} ref={ref}/>),
NextPage: forwardRef((props, ref) => <ChevronRight {...props} ref={ref}/>),
PreviousPage: forwardRef((props, ref) => <ChevronLeft {...props} ref={ref}/>),
ResetSearch: forwardRef((props, ref) => <Clear {...props} ref={ref}/>),
Search: forwardRef((props, ref) => <Search {...props} ref={ref}/>),
SortArrow: forwardRef((props, ref) => <ArrowDownward {...props} ref={ref}/>),
ThirdStateCheck: forwardRef((props, ref) => <Remove {...props} ref={ref}/>),
ViewColumn: forwardRef((props, ref) => <ViewColumn {...props} ref={ref}/>),
Visibility: forwardRef((props, ref) => <Visibility {...props} ref={ref}/>)
};
const {Option} = Select;
var formItems = "";
var items = "";
var value = "";
var certvalue = "";
var inputvalues = [];
export default class ManageRequests extends React.Component {
// tableRef = React.createRef()
constructor(props) {
super(props);
var selectedRows=[];
this.state= {selectedRows: [],setSelectedRows: []}
this.tableRef = React.createRef();
}
handleSelectionChange(rows) {
const displayedIds = this.tableRef.current.dataManager.data.map(result => result._id)
console.log(displayedIds)
const selectedRowsNotDisplayed = this.state.selectedRows.filter(selectedRow => {
return !displayedIds.includes(selectedRow._id)
})
console.log(selectedRowsNotDisplayed)
var selectedRows =[...selectedRowsNotDisplayed, ...rows]
this.setState({selectedRows});
console.log(selectedRows)
//alert(JSON.stringify(selectedRows))
//this.tableRef.current.onSelectionChange(selectedRows);
}
render() {
// this.props.visible = true;
var {visible, onCancel, onCreate, form} = this.props;
return <Modal
destroyOnClose={true}
visible={visible}
title="Manage Requests"
okText="Create"
onCancel={onCancel}
onOk={onCreate}
width="400"
cancelButtonProps={{style: {display: 'none'}}}
okButtonProps={{style: {display: 'none'}}}
>
<MaterialTable icons={tableIcons}
data={this.state.data} icons={tableIcons}
tableRef={this.tableRef}
title="Your Requests"
options={{
actionsColumnIndex: -1,
grouping: true,
showTextRowsSelected: false,
//search:false,
selection: true,
selectionProps: rowData => ({
disabled: rowData.status === "Successful",
color: 'primary',
// showTextRowsSelected: true
})
}}
onSelectionChange={rows => this.handleSelectionChange(rows)}
columns={[
{
title: 'Request ID',
field: 'requestid',
},
{title: 'Created Date', field: 'createddate'},
{title: 'Created By', field: 'createdby'},
{title: 'Devices', field: 'Devices'},
{title: 'Domains', field: 'Domains'},
{title: 'Status', field: 'status'},
]}
data={query =>
new Promise((resolve, reject) => {
let url = 'http://localhost:5000/getRequest?'
/*if(query.search)
{
let url = 'http://localhost:5000/getRequest?querysearch'
}*/
url += 'per_page=' + query.pageSize
url += '&page=' + (query.page + 1)
fetch(url)
.then(response => response.json())
.then(result => {
const selectedRows = this.state.selectedRows;
// console.log(result.data);
console.log(selectedRows)
const selectedData = result.data.map(row => selectedRows.find(selected => "selected._id" === "row._id") ? { ...row, tableData: { checked: true } } : row)
console.log(selectedData)
console.log(result.data)
resolve({
data: result.data.filter(pub=> pub.requestid.includes(query.search)||pub.createdby.includes(query.search)|| pub.Devices.includes(query.search) || pub.status.includes(query.search)),
page:result.page -1,
totalCount: result.total,
})
})
})
}
actions={[
{
icon: () => <Build/>,
tooltip: 'Create Rollout',
// eslint-disable-next-line no-restricted-globals
onClick: (evt, data) => {
alert('You want to delete ' + data + 'and length ' + data.length + ' rows')
// this.tableRef.current.onAllSelected(true)
//rowData.tableData.checked
this.setState({visible: false});
}
}
]}
/>
</Modal>;
}
}