index.jsx 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import React, { useState, useEffect } from 'react';
  2. import { Table, Tooltip, Tag } from '@douyinfe/semi-ui';
  3. import './index.scss';
  4. const Title = ({ title }) => <span style={{ fontSize: '12px', color: '#333', wordBreak: 'keep-all' }}>{title}</span>;
  5. const dataTotalSize = 46;
  6. const defaultData = (() => {
  7. const _data = [];
  8. for (let i = 0; i < dataTotalSize; i++) {
  9. const seed = Math.random() > 0.5 ? 1 : -1;
  10. let age = 40 + seed * Math.ceil(i / 3);
  11. let name = `Edward King ${i}`;
  12. _data.push({
  13. key: '' + i,
  14. name: seed > 0 ? name : 'XX',
  15. age,
  16. address: seed > 0 ? `London, Park Lane no. ${i} Lake Park` : `Zhonguancun ${i}`,
  17. description: `My name is ${name}, I am ${age} years old, living in New York No. ${i + 1} Lake Park.`,
  18. });
  19. }
  20. return _data;
  21. })();
  22. const Demo = () => {
  23. const [columns, setColumns] = useState([]);
  24. const [dataSource, setDataSource] = useState([]);
  25. useEffect(() => {
  26. const columns = [
  27. {
  28. title: <Title title="Name" />,
  29. dataIndex: 'name',
  30. // width: 150,
  31. render: (text, record) => text,
  32. fixed: 'left',
  33. },
  34. {
  35. title: <Title title="Age" />,
  36. dataIndex: 'age',
  37. // width: 150,
  38. render: (text, record) => text,
  39. fixed: 'left',
  40. },
  41. {
  42. title: <Title title="Address" />,
  43. dataIndex: 'address',
  44. render: (text, record) => text,
  45. },
  46. ];
  47. for (let i = 1; i <= 25; i++) {
  48. const seed = Math.random() > 0.5 ? 1 : -1;
  49. const dataIndex = seed > 0 ? 'name' : 'description';
  50. columns.push({
  51. title: <Title title={dataIndex} />,
  52. dataIndex,
  53. render: (text, record) => text,
  54. });
  55. }
  56. columns.push({
  57. title: <Title title="Address" />,
  58. dataIndex: 'address',
  59. render: (text, record) => text,
  60. fixed: 'right',
  61. });
  62. const dataSource = [...defaultData];
  63. setDataSource(dataSource);
  64. setColumns(columns);
  65. }, []);
  66. const scroll = {
  67. // x: '160%',
  68. // y: 400,
  69. };
  70. const wrapStyle = {
  71. // maxWidth: 3600,
  72. };
  73. return (
  74. <div style={wrapStyle}>
  75. <Table
  76. className={'massive-columns-table-auto-width'}
  77. bordered
  78. columns={columns}
  79. dataSource={dataSource}
  80. // dataSource={[]}
  81. scroll={scroll}
  82. expandedRowRender={(record, index, expanded) => (
  83. <article style={{ margin: 0 }}>
  84. <p>{record.description}</p>
  85. </article>
  86. )}
  87. hideExpandedColumn={false}
  88. expandCellFixed={true}
  89. rowSelection={{ fixed: 'left' }}
  90. size={'middle'}
  91. />
  92. </div>
  93. );
  94. };
  95. Demo.parameters = {
  96. chromatic: { disableSnapshot: true },
  97. };
  98. export default Demo;