index.jsx 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import { SideSheet, Table, Dropdown, Tag, Button } from '../../..';
  2. import React, { useMemo, useState, useEffect } from 'react';
  3. export default function Demo(props = {}) {
  4. const [visible, setVisible] = useState(false);
  5. const dropdown = useMemo(
  6. () => (
  7. <Dropdown
  8. clickToHide
  9. render={
  10. <Dropdown.Menu>
  11. <Dropdown.Item onClick={() => setVisible(true)}>Show SideSheet</Dropdown.Item>
  12. </Dropdown.Menu>
  13. }
  14. >
  15. <Tag>Hover Me</Tag>
  16. </Dropdown>
  17. ),
  18. []
  19. );
  20. const columns = useMemo(() => [
  21. {
  22. title: 'Name',
  23. dataIndex: 'name',
  24. render: text => <a>{text}</a>,
  25. fixed: 'left',
  26. width: 150,
  27. },
  28. {
  29. title: 'Age',
  30. dataIndex: 'age',
  31. },
  32. {
  33. title: 'Address',
  34. dataIndex: 'address',
  35. },
  36. {
  37. render: () => <div>{dropdown}</div>,
  38. fixed: 'right',
  39. width: 150,
  40. },
  41. ]);
  42. const dataTotalSize = 46;
  43. const data = useMemo(() => {
  44. const _data = [];
  45. for (let i = 0; i < dataTotalSize; i++) {
  46. let age = (i * 1000) % 149 ;
  47. let name = `Edward King ${i}`;
  48. _data.push({
  49. key: '' + i,
  50. name,
  51. age,
  52. address: `London, Park Lane no. ${i} Lake Park`,
  53. description: `My name is ${name}, I am ${age} years old, living in New York No. ${i + 1} Lake Park.`,
  54. });
  55. }
  56. return _data;
  57. }, [dataTotalSize]);
  58. const sideSheet = useMemo(
  59. () => (
  60. <SideSheet
  61. title="自定义尺寸的侧边栏"
  62. visible={visible}
  63. onCancel={() => setVisible(false)}
  64. width={'50vw'}
  65. height={'100vh'}
  66. style={{ overflow: 'auto' }}
  67. >
  68. <Table
  69. columns={columns}
  70. dataSource={data}
  71. scroll={{ x: '150%', y: 400 }}
  72. rowSelection={{ fixed: true }}
  73. />
  74. </SideSheet>
  75. ),
  76. [visible]
  77. );
  78. return (
  79. <div>
  80. <div>
  81. <Button onClick={() => setVisible(true)}>Show side sheet</Button>
  82. </div>
  83. {sideSheet}
  84. </div>
  85. );
  86. }