SingleSelectTable.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import React, { Component } from 'react';
  2. import PropTypes from 'prop-types';
  3. import { Table, Radio, Pagination } from 'antd';
  4. import styles from './SingleSelectTable.less';
  5. export default class SingleSelectTable extends Component {
  6. static defaultProps = {
  7. loading: false,
  8. columns: [],
  9. dataSource: [],
  10. pagination: false,
  11. };
  12. static propTypes = {
  13. loading: PropTypes.bool,
  14. columns: PropTypes.array,
  15. dataSource: PropTypes.array,
  16. pagination: PropTypes.oneOfType([
  17. PropTypes.object,
  18. PropTypes.bool,
  19. ]),
  20. };
  21. state = {
  22. selectedRowKeys: null,
  23. };
  24. handleRowClick = (record) => {
  25. this.setState({
  26. selectedRowKeys: record.key,
  27. });
  28. this.props.onSingleTransfer(record);
  29. };
  30. handleRowSelectChange = (key) => {
  31. this.setState({
  32. selectedRowKeys: key,
  33. });
  34. };
  35. handleTableChange = (page, pageSize) => {
  36. this.props.onChange(page, pageSize);
  37. };
  38. render() {
  39. const { loading, columns, dataSource, pagination } = this.props;
  40. const { selectedRowKeys } = this.state;
  41. const rowSelection = {
  42. type: 'radio',
  43. selectedRowKeys,
  44. onChange: this.handleRowSelectChange,
  45. };
  46. const onRowClick = (record) => {
  47. return {
  48. onClick: () => this.handleRowSelectChange(record.key),
  49. };
  50. };
  51. const renderTableFooter = (paginationProps) => {
  52. if (paginationProps) {
  53. return (
  54. <Pagination
  55. {...paginationProps}
  56. onChange={this.handleTableChange}
  57. />
  58. );
  59. } else {
  60. return false;
  61. }
  62. };
  63. return (
  64. <Table
  65. bordered
  66. loading={loading}
  67. footer={() => renderTableFooter(pagination)}
  68. columns={columns}
  69. dataSource={dataSource}
  70. pagination={false}
  71. rowKey={record => record.key}
  72. rowSelection={rowSelection}
  73. onChange={this.handleTableChange}
  74. onRow={onRowClick}
  75. className={styles.table}
  76. scroll={{ y: 400 }}
  77. />
  78. );
  79. }
  80. }