@douyinfe/semi-ui 2.10.2-alpha.0 → 2.10.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/cascader/index.tsx +4 -2
  2. package/dist/umd/semi-ui.js +4827 -3239
  3. package/dist/umd/semi-ui.js.map +1 -1
  4. package/dist/umd/semi-ui.min.js +1 -1
  5. package/dist/umd/semi-ui.min.js.map +1 -1
  6. package/lib/cjs/cascader/index.js +4 -2
  7. package/lib/cjs/form/baseForm.d.ts +1 -1
  8. package/lib/cjs/form/field.d.ts +1 -1
  9. package/lib/cjs/modal/confirm.d.ts +5 -5
  10. package/lib/cjs/select/index.js +27 -24
  11. package/lib/cjs/table/Body/BaseRow.d.ts +1 -0
  12. package/lib/cjs/table/Body/BaseRow.js +22 -0
  13. package/lib/cjs/table/HeadTable.d.ts +2 -1
  14. package/lib/cjs/table/HeadTable.js +2 -1
  15. package/lib/cjs/table/Table.d.ts +1 -1
  16. package/lib/cjs/table/Table.js +2 -0
  17. package/lib/cjs/typography/title.d.ts +1 -1
  18. package/lib/es/cascader/index.js +4 -2
  19. package/lib/es/form/baseForm.d.ts +1 -1
  20. package/lib/es/form/field.d.ts +1 -1
  21. package/lib/es/modal/confirm.d.ts +5 -5
  22. package/lib/es/select/index.js +23 -21
  23. package/lib/es/table/Body/BaseRow.d.ts +1 -0
  24. package/lib/es/table/Body/BaseRow.js +22 -0
  25. package/lib/es/table/HeadTable.d.ts +2 -1
  26. package/lib/es/table/HeadTable.js +2 -1
  27. package/lib/es/table/Table.d.ts +1 -1
  28. package/lib/es/table/Table.js +2 -0
  29. package/lib/es/typography/title.d.ts +1 -1
  30. package/package.json +9 -9
  31. package/scrollList/_story/ScrollList/index.js +1 -1
  32. package/select/index.tsx +3 -1
  33. package/table/Body/BaseRow.tsx +15 -0
  34. package/table/HeadTable.tsx +3 -1
  35. package/table/Table.tsx +2 -0
  36. package/table/_story/v2/FixedOnHeaderRow/index.jsx +134 -0
  37. package/table/_story/v2/index.js +2 -1
  38. package/upload/_story/upload.stories.js +1 -0
@@ -96,7 +96,8 @@ HeadTable.propTypes = {
96
96
  }),
97
97
  selectedRowKeysSet: PropTypes.instanceOf(_Set).isRequired,
98
98
  showHeader: PropTypes.bool,
99
- onDidUpdate: PropTypes.func
99
+ onDidUpdate: PropTypes.func,
100
+ onHeaderRow: PropTypes.func
100
101
  };
101
102
  HeadTable.defaultProps = {
102
103
  handleBodyScroll: _noop
@@ -294,7 +294,7 @@ declare class Table<RecordType extends Record<string, any>> extends BaseComponen
294
294
  defaultCurrentPage?: number;
295
295
  onPageChange?: (currentPage: number) => void;
296
296
  onPageSizeChange?: (newPageSize: number) => void;
297
- onChange: (currentPage: number, pageSize: number) => void;
297
+ onChange: ((currentPage: number, pageSize: number) => void) | ((currentPage: number, currentPageSize: number) => void);
298
298
  prevText?: React.ReactNode;
299
299
  nextText?: React.ReactNode;
300
300
  showSizeChanger?: boolean;
@@ -658,6 +658,7 @@ class Table extends BaseComponent {
658
658
  components,
659
659
  headerRef,
660
660
  bodyRef,
661
+ onHeaderRow,
661
662
  rowSelection,
662
663
  dataSource,
663
664
  bodyHasScrollBar,
@@ -678,6 +679,7 @@ class Table extends BaseComponent {
678
679
  scroll: scroll,
679
680
  showHeader: showHeader,
680
681
  selectedRowKeysSet: selectedRowKeysSet,
682
+ onHeaderRow: onHeaderRow,
681
683
  dataSource: dataSource,
682
684
  bodyHasScrollBar: bodyHasScrollBar
683
685
  }) : null;
@@ -37,7 +37,7 @@ export default class Title extends PureComponent<TitleProps> {
37
37
  underline: PropTypes.Requireable<boolean>;
38
38
  strong: PropTypes.Requireable<boolean>;
39
39
  type: PropTypes.Requireable<"warning" | "success" | "primary" | "tertiary" | "secondary" | "danger" | "quaternary">;
40
- heading: PropTypes.Requireable<1 | 2 | 3 | 4 | 5 | 6>;
40
+ heading: PropTypes.Requireable<4 | 2 | 1 | 3 | 5 | 6>;
41
41
  style: PropTypes.Requireable<object>;
42
42
  className: PropTypes.Requireable<string>;
43
43
  component: PropTypes.Requireable<string>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@douyinfe/semi-ui",
3
- "version": "2.10.2-alpha.0",
3
+ "version": "2.10.3",
4
4
  "description": "",
5
5
  "main": "lib/cjs/index.js",
6
6
  "module": "lib/es/index.js",
@@ -14,12 +14,12 @@
14
14
  },
15
15
  "dependencies": {
16
16
  "@babel/runtime-corejs3": "^7.15.4",
17
- "@douyinfe/semi-animation": "2.10.1",
18
- "@douyinfe/semi-animation-react": "2.10.2-alpha.0",
19
- "@douyinfe/semi-foundation": "2.10.1",
20
- "@douyinfe/semi-icons": "2.10.1",
21
- "@douyinfe/semi-illustrations": "2.10.1",
22
- "@douyinfe/semi-theme-default": "2.10.1",
17
+ "@douyinfe/semi-animation": "2.10.2",
18
+ "@douyinfe/semi-animation-react": "2.10.2",
19
+ "@douyinfe/semi-foundation": "2.10.2",
20
+ "@douyinfe/semi-icons": "2.10.2",
21
+ "@douyinfe/semi-illustrations": "2.10.2",
22
+ "@douyinfe/semi-theme-default": "2.10.2",
23
23
  "@types/react-window": "^1.8.2",
24
24
  "async-validator": "^3.5.0",
25
25
  "classnames": "^2.2.6",
@@ -69,13 +69,13 @@
69
69
  ],
70
70
  "author": "",
71
71
  "license": "MIT",
72
- "gitHead": "0af26368c88d1654b57ca177c18ed1d92b1b8b61",
72
+ "gitHead": "ef532c5e54c212bad8b8ff90f824544beaa0ff64",
73
73
  "devDependencies": {
74
74
  "@babel/plugin-proposal-decorators": "^7.15.8",
75
75
  "@babel/plugin-transform-runtime": "^7.15.8",
76
76
  "@babel/preset-env": "^7.15.8",
77
77
  "@babel/preset-react": "^7.14.5",
78
- "@douyinfe/semi-scss-compile": "2.10.1",
78
+ "@douyinfe/semi-scss-compile": "2.10.2",
79
79
  "@storybook/addon-knobs": "^6.3.1",
80
80
  "@types/lodash": "^4.14.176",
81
81
  "babel-loader": "^8.2.2",
@@ -11,7 +11,7 @@ class ScrollListDemo extends React.Component {
11
11
  };
12
12
 
13
13
  this.list = new Array(20).fill(0).map((itm, index) => {
14
- return { value: index, disabled: Math.random() + 0.2 > 1 };
14
+ return { value: index };
15
15
  });
16
16
  }
17
17
 
package/select/index.tsx CHANGED
@@ -28,6 +28,7 @@ import { isSemiIcon } from '../_utils';
28
28
  import { Subtract } from 'utility-types';
29
29
 
30
30
  import warning from '@douyinfe/semi-foundation/utils/warning';
31
+ import { getUuidShort } from '@douyinfe/semi-foundation/utils/uuid';
31
32
 
32
33
  import '@douyinfe/semi-foundation/select/select.scss';
33
34
  import { Locale } from '../locale/interface';
@@ -340,7 +341,7 @@ class Select extends BaseComponent<SelectProps, SelectState> {
340
341
  isHovering: false,
341
342
  };
342
343
  /* Generate random string */
343
- this.selectOptionListID = Math.random().toString(36).slice(2);
344
+ this.selectOptionListID = '';
344
345
  this.virtualizeListRef = React.createRef();
345
346
  this.inputRef = React.createRef();
346
347
  this.triggerRef = React.createRef();
@@ -559,6 +560,7 @@ class Select extends BaseComponent<SelectProps, SelectState> {
559
560
 
560
561
  componentDidMount() {
561
562
  this.foundation.init();
563
+ this.selectOptionListID = getUuidShort();
562
564
  }
563
565
 
564
566
  componentWillUnmount() {
@@ -153,6 +153,21 @@ export default class TableRow extends BaseComponent<BaseRowProps, Record<string,
153
153
  this.foundation = new TableRowFoundation(this.adapter);
154
154
  }
155
155
 
156
+ componentDidMount() {
157
+ // fix #745
158
+ // didmount/willUnmount may be called twice when React.StrictMode is true in React 18, we need to ensure that this.cache.customRowProps is correct
159
+ const {
160
+ onRow,
161
+ index,
162
+ record,
163
+ } = this.props;
164
+ const customRowProps = this.adapter.getCache('customRowProps');
165
+ if (typeof customRowProps === 'undefined') {
166
+ const { className: customClassName, style: customStyle, ...rowProps } = onRow(record, index) || {};
167
+ this.adapter.setCache('customRowProps', { ...rowProps });
168
+ }
169
+ }
170
+
156
171
  shouldComponentUpdate(nextProps: BaseRowProps) {
157
172
  /**
158
173
  * Shallow comparison of incoming props to simulate PureComponent
@@ -6,7 +6,7 @@ import classnames from 'classnames';
6
6
 
7
7
  import ColGroup from './ColGroup';
8
8
  import TableHeader from './TableHeader';
9
- import { Fixed, TableComponents, Scroll, BodyScrollEvent, ColumnProps } from './interface';
9
+ import { Fixed, TableComponents, Scroll, BodyScrollEvent, ColumnProps, OnHeaderRow } from './interface';
10
10
 
11
11
  export interface HeadTableProps {
12
12
  [x: string]: any;
@@ -23,6 +23,7 @@ export interface HeadTableProps {
23
23
  selectedRowKeysSet: Set<any>;
24
24
  showHeader?: boolean;
25
25
  onDidUpdate?: (ref: React.MutableRefObject<any>) => void;
26
+ onHeaderRow?: OnHeaderRow<any>;
26
27
  }
27
28
 
28
29
  /**
@@ -46,6 +47,7 @@ class HeadTable extends React.PureComponent<HeadTableProps> {
46
47
  selectedRowKeysSet: PropTypes.instanceOf(Set).isRequired, // Useful when update is selected
47
48
  showHeader: PropTypes.bool,
48
49
  onDidUpdate: PropTypes.func,
50
+ onHeaderRow: PropTypes.func,
49
51
  };
50
52
 
51
53
  static defaultProps = {
package/table/Table.tsx CHANGED
@@ -1089,6 +1089,7 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
1089
1089
  components,
1090
1090
  headerRef,
1091
1091
  bodyRef,
1092
+ onHeaderRow,
1092
1093
  rowSelection,
1093
1094
  dataSource,
1094
1095
  bodyHasScrollBar,
@@ -1110,6 +1111,7 @@ class Table<RecordType extends Record<string, any>> extends BaseComponent<Normal
1110
1111
  scroll={scroll}
1111
1112
  showHeader={showHeader}
1112
1113
  selectedRowKeysSet={selectedRowKeysSet}
1114
+ onHeaderRow={onHeaderRow}
1113
1115
  dataSource={dataSource}
1114
1116
  bodyHasScrollBar={bodyHasScrollBar}
1115
1117
  />
@@ -0,0 +1,134 @@
1
+ import React, { useState, useMemo, useEffect } from 'react';
2
+ import { Table, Avatar, Toast } from '@douyinfe/semi-ui';
3
+ import * as dateFns from 'date-fns';
4
+
5
+ App.storyName = 'fix onHeaderRow';
6
+
7
+ /**
8
+ * test with cypress
9
+ */
10
+ export default function App() {
11
+ const [dataSource, setData] = useState([]);
12
+ const DAY = 24 * 60 * 60 * 1000;
13
+ const figmaIconUrl = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png';
14
+
15
+ const columns = [
16
+ {
17
+ title: '标题',
18
+ dataIndex: 'name',
19
+ fixed: true,
20
+ width: 250,
21
+ render: (text, record, index) => {
22
+ return (
23
+ <div>
24
+ <Avatar size="small" shape="square" src={figmaIconUrl} style={{ marginRight: 12 }}></Avatar>
25
+ {text}
26
+ </div>
27
+ );
28
+ },
29
+ filters: [
30
+ {
31
+ text: 'Semi Design 设计稿',
32
+ value: 'Semi Design 设计稿',
33
+ },
34
+ {
35
+ text: 'Semi Pro 设计稿',
36
+ value: 'Semi Pro 设计稿',
37
+ },
38
+ ],
39
+ onFilter: (value, record) => record.name.includes(value),
40
+ },
41
+ {
42
+ title: '大小',
43
+ dataIndex: 'size',
44
+ width: 200,
45
+ sorter: (a, b) => (a.size - b.size > 0 ? 1 : -1),
46
+ render: text => `${text} KB`,
47
+ },
48
+ {
49
+ title: '所有者',
50
+ dataIndex: 'owner',
51
+ width: 200,
52
+ render: (text, record, index) => {
53
+ return (
54
+ <div>
55
+ <Avatar size="small" color={record.avatarBg} style={{ marginRight: 4 }}>
56
+ {typeof text === 'string' && text.slice(0, 1)}
57
+ </Avatar>
58
+ {text}
59
+ </div>
60
+ );
61
+ },
62
+ },
63
+ {
64
+ title: '更新日期',
65
+ dataIndex: 'updateTime',
66
+ width: 200,
67
+ sorter: (a, b) => (a.updateTime - b.updateTime > 0 ? 1 : -1),
68
+ render: value => {
69
+ return dateFns.format(new Date(value), 'yyyy-MM-dd');
70
+ },
71
+ },
72
+ {
73
+ title: '',
74
+ dataIndex: 'operate',
75
+ fixed: 'right',
76
+ align: 'center',
77
+ width: 100,
78
+ },
79
+ ];
80
+
81
+ const scroll = useMemo(() => ({ y: 300, x: 1200 }), []);
82
+ const rowSelection = useMemo(
83
+ () => ({
84
+ onChange: (selectedRowKeys, selectedRows) => {
85
+ console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);
86
+ },
87
+ getCheckboxProps: record => ({
88
+ disabled: record.name === 'Michael James', // Column configuration not to be checked
89
+ name: record.name,
90
+ }),
91
+ fixed: true,
92
+ }),
93
+ []
94
+ );
95
+
96
+ const getData = () => {
97
+ const data = [];
98
+ for (let i = 0; i < 46; i++) {
99
+ const isSemiDesign = i % 2 === 0;
100
+ const randomNumber = (i * 1000) % 199;
101
+ data.push({
102
+ key: '' + i,
103
+ name: isSemiDesign ? `Semi Design 设计稿${i}.fig` : `Semi Pro 设计稿${i}.fig`,
104
+ owner: isSemiDesign ? '姜鹏志' : '郝宣',
105
+ size: randomNumber,
106
+ updateTime: new Date().valueOf() + randomNumber * DAY,
107
+ avatarBg: isSemiDesign ? 'grey' : 'red',
108
+ });
109
+ }
110
+ return data;
111
+ };
112
+
113
+ useEffect(() => {
114
+ const data = getData();
115
+ setData(data);
116
+ }, []);
117
+
118
+ return (
119
+ <Table
120
+ onHeaderRow={(columns, index) => {
121
+ return {
122
+ onClick: event => {
123
+ console.log(event);
124
+ Toast.info('header click');
125
+ }, // 点击表头行
126
+ };
127
+ }}
128
+ columns={columns}
129
+ dataSource={dataSource}
130
+ rowSelection={rowSelection}
131
+ scroll={scroll}
132
+ />
133
+ );
134
+ }
@@ -4,4 +4,5 @@ export { default as FixedZIndex } from './FixedZIndex';
4
4
  export { default as FixedHeaderMerge } from './FixedHeaderMerge';
5
5
  export { default as FixedResizable } from './FixedResizable';
6
6
  export { default as FixedExpandedRow } from './FixedExpandedRow';
7
- export { default as FixedMemoryLeak } from './FixedMemoryLeak';
7
+ export { default as FixedMemoryLeak } from './FixedMemoryLeak';
8
+ export { default as FixedOnHeaderRow } from './FixedOnHeaderRow';
@@ -581,6 +581,7 @@ export const Draggable = () => (
581
581
  <Upload
582
582
  {...commonProps}
583
583
  style={{ marginTop: 10, height: 300 }}
584
+ // directory
584
585
  draggable={true}
585
586
  dragMainText={'点击上传文件或拖拽文件到这里'}
586
587
  ></Upload>