index.js 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. /* eslint-disable max-lines-per-function */
  2. import React, { useState } from 'react';
  3. import { Table, Dropdown, Tooltip, Tag, Popover } from '@douyinfe/semi-ui/';
  4. import { IconCaretdown, IconUser } from '@douyinfe/semi-icons';
  5. const CREATOR_MAP = {
  6. ALL: {
  7. value: 0,
  8. desc: '创建者',
  9. },
  10. MINE: {
  11. value: 1,
  12. desc: '只看我的',
  13. },
  14. };
  15. function InTableDemo({}) {
  16. const [currentCreator, setCurrentCreator] = useState({});
  17. const setCreator = type => {
  18. if (type) {
  19. setCurrentCreator(CREATOR_MAP[type] || {});
  20. }
  21. };
  22. const onDropdownVisibleChange = (...args) => console.log('Dropdown onVisibleChange: ', ...args);
  23. const onPopoverVisibleChange = (...args) => console.log('Popover onVisibleChange: ', ...args);
  24. const columns = [
  25. {
  26. title: 'Name',
  27. dataIndex: 'name',
  28. width: 150,
  29. },
  30. {
  31. title: 'Age',
  32. dataIndex: 'age',
  33. width: 150,
  34. },
  35. {
  36. title: 'Address',
  37. dataIndex: 'address',
  38. },
  39. {
  40. title: (
  41. <Dropdown
  42. position={'bottomLeft'}
  43. trigger="click"
  44. onVisibleChange={onDropdownVisibleChange}
  45. render={(
  46. <Dropdown.Menu>
  47. <Dropdown.Item onClick={() => setCreator('ALL')}>创建者</Dropdown.Item>
  48. <Dropdown.Item onClick={() => setCreator('MINE')}>只看我的</Dropdown.Item>
  49. </Dropdown.Menu>
  50. )}
  51. >
  52. <span>{'点击trigger'}</span>
  53. <IconCaretdown />
  54. </Dropdown>
  55. ),
  56. key: 'creator',
  57. render: () => (
  58. <div>
  59. <Dropdown
  60. position={'bottomLeft'}
  61. trigger="click"
  62. onVisibleChange={onDropdownVisibleChange}
  63. render={(
  64. <Dropdown.Menu>
  65. <Dropdown.Item onClick={() => setCreator('ALL')}>创建者</Dropdown.Item>
  66. <Dropdown.Item onClick={() => setCreator('MINE')}>只看我的</Dropdown.Item>
  67. </Dropdown.Menu>
  68. )}
  69. >
  70. <span>
  71. <span>{currentCreator.desc}</span>
  72. <IconCaretdown />
  73. </span>
  74. </Dropdown>
  75. <span
  76. style={{
  77. marginLeft: 10,
  78. }}
  79. >
  80. <Popover
  81. trigger="click"
  82. onVisibleChange={onPopoverVisibleChange}
  83. content={(
  84. <article
  85. style={{
  86. padding: 20,
  87. }}
  88. >
  89. 123
  90. </article>
  91. )}
  92. >
  93. <IconUser />
  94. </Popover>
  95. </span>
  96. </div>
  97. ),
  98. width: 168,
  99. },
  100. {
  101. title: (
  102. <Dropdown
  103. position={'bottomLeft'}
  104. trigger="hover"
  105. onVisibleChange={onDropdownVisibleChange}
  106. render={(
  107. <Dropdown.Menu>
  108. <Dropdown.Item onClick={() => setCreator('ALL')}>创建者</Dropdown.Item>
  109. <Dropdown.Item onClick={() => setCreator('MINE')}>只看我的</Dropdown.Item>
  110. </Dropdown.Menu>
  111. )}
  112. >
  113. <span>{'hover trigger'}</span>
  114. <IconCaretdown />
  115. </Dropdown>
  116. ),
  117. key: 'hover-creator',
  118. render: () => (
  119. <div>
  120. <Dropdown
  121. position={'bottomLeft'}
  122. trigger="hover"
  123. onVisibleChange={onDropdownVisibleChange}
  124. render={(
  125. <Dropdown.Menu>
  126. <Dropdown.Item onClick={() => setCreator('ALL')}>创建者</Dropdown.Item>
  127. <Dropdown.Item onClick={() => setCreator('MINE')}>只看我的</Dropdown.Item>
  128. </Dropdown.Menu>
  129. )}
  130. >
  131. <span>
  132. <span>{currentCreator.desc}</span>
  133. <IconCaretdown />
  134. </span>
  135. </Dropdown>
  136. <span
  137. style={{
  138. marginLeft: 10,
  139. }}
  140. >
  141. <Popover
  142. trigger="hover"
  143. onVisibleChange={onPopoverVisibleChange}
  144. content={(
  145. <article
  146. style={{
  147. padding: 20,
  148. }}
  149. >
  150. 123
  151. </article>
  152. )}
  153. >
  154. <IconUser />
  155. </Popover>
  156. </span>
  157. </div>
  158. ),
  159. width: 168,
  160. },
  161. {
  162. render: (text, record) => (
  163. <Tooltip content={record.description}>
  164. <Tag color="green">Show Info</Tag>
  165. </Tooltip>
  166. ),
  167. width: 150,
  168. },
  169. ];
  170. const dataTotalSize = 43;
  171. const data = [];
  172. for (let i = 0; i < dataTotalSize; i++) {
  173. let age = 40 + i;
  174. let name = `Edward King ${i}`;
  175. data.push({
  176. key: `${i}`,
  177. name,
  178. age,
  179. address: `London, Park Lane no. ${i} Lake Park`,
  180. description: `My name is ${name}, I am ${age} years old, living in New York No. ${i + 1} Lake Park.`,
  181. });
  182. }
  183. return <Table columns={columns} dataSource={data} />;
  184. }
  185. export default InTableDemo;