@king-design/intact 3.4.3-beta.2 → 3.4.4

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 (174) hide show
  1. package/components/button/demos/disabled.md +14 -3
  2. package/components/button/demos/group.md +3 -3
  3. package/components/button/group.ts +5 -0
  4. package/components/button/group.vdt +2 -2
  5. package/components/button/index.md +2 -1
  6. package/components/button/index.vdt +1 -1
  7. package/components/button/styles.ts +18 -5
  8. package/components/dialog/styles.ts +3 -3
  9. package/components/dropdown/item.ts +7 -2
  10. package/components/editable/demos/textarea.md +53 -0
  11. package/components/editable/index.md +7 -1
  12. package/components/editable/index.spec.ts +27 -0
  13. package/components/editable/index.ts +4 -1
  14. package/components/editable/index.vdt +13 -4
  15. package/components/editable/styles.ts +1 -1
  16. package/components/ellipsis/demos/hoverable.md +23 -0
  17. package/components/ellipsis/index.ts +4 -1
  18. package/components/ellipsis/index.vdt +3 -1
  19. package/components/input/demos/size.md +9 -1
  20. package/components/input/styles.ts +12 -2
  21. package/components/menu/styles.ts +0 -3
  22. package/components/select/demos/immutable.md +7 -6
  23. package/components/select/index.spec.ts +31 -0
  24. package/components/select/useImmutable.ts +1 -1
  25. package/components/switch/styles.ts +5 -0
  26. package/components/table/cell.ts +3 -2
  27. package/components/table/cell.vdt +13 -4
  28. package/components/table/column.ts +2 -0
  29. package/components/table/column.vdt +4 -3
  30. package/components/table/demos/asyncTree.md +73 -0
  31. package/components/table/demos/ellipsis.md +29 -0
  32. package/components/table/demos/fixFooter.md +52 -0
  33. package/components/table/demos/footer.md +38 -0
  34. package/components/table/demos/tree.md +22 -10
  35. package/components/table/index.md +5 -0
  36. package/components/table/row.ts +27 -17
  37. package/components/table/row.vdt +4 -2
  38. package/components/table/styles.ts +27 -3
  39. package/components/table/table.ts +8 -2
  40. package/components/table/table.vdt +18 -3
  41. package/components/table/useColumns.ts +24 -1
  42. package/components/table/useTree.ts +9 -2
  43. package/components/tip/demos/icon.md +53 -0
  44. package/components/tip/demos/size.md +39 -0
  45. package/components/tip/index.md +2 -0
  46. package/components/tip/index.ts +17 -1
  47. package/components/tip/index.vdt +38 -5
  48. package/components/tip/styles.ts +84 -3
  49. package/components/tooltip/demos/always.md +6 -0
  50. package/components/tooltip/demos/content.md +17 -2
  51. package/components/tooltip/index.spec.ts +21 -2
  52. package/components/tooltip/tooltip.ts +4 -1
  53. package/components/transfer/index.vdt +2 -4
  54. package/components/tree/demos/loading.md +3 -0
  55. package/components/treeSelect/demos/basic.md +1 -0
  56. package/components/treeSelect/index.vdt +1 -0
  57. package/components/upload/demos/files.md +1 -0
  58. package/components/upload/index.vdt +4 -1
  59. package/components/upload/styles.ts +1 -0
  60. package/es/components/button/group.d.ts +1 -0
  61. package/es/components/button/group.js +4 -0
  62. package/es/components/button/group.vdt.js +3 -2
  63. package/es/components/button/index.vdt.js +1 -1
  64. package/es/components/button/styles.js +6 -6
  65. package/es/components/diagram/shapes/callout.d.ts +1 -1
  66. package/es/components/diagram/shapes/circle.d.ts +1 -1
  67. package/es/components/diagram/shapes/document.d.ts +1 -1
  68. package/es/components/diagram/shapes/ellipse.d.ts +1 -1
  69. package/es/components/diagram/shapes/hexagon.d.ts +1 -1
  70. package/es/components/diagram/shapes/image.d.ts +1 -1
  71. package/es/components/diagram/shapes/parallelogram.d.ts +1 -1
  72. package/es/components/diagram/shapes/rectangle.d.ts +1 -1
  73. package/es/components/diagram/shapes/square.d.ts +1 -1
  74. package/es/components/diagram/shapes/text.d.ts +1 -1
  75. package/es/components/dialog/styles.js +3 -3
  76. package/es/components/dropdown/item.js +5 -2
  77. package/es/components/editable/index.d.ts +2 -0
  78. package/es/components/editable/index.js +4 -2
  79. package/es/components/editable/index.spec.js +39 -0
  80. package/es/components/editable/index.vdt.js +17 -6
  81. package/es/components/editable/styles.d.ts +1 -0
  82. package/es/components/editable/styles.js +3 -0
  83. package/es/components/ellipsis/index.d.ts +1 -0
  84. package/es/components/ellipsis/index.js +4 -2
  85. package/es/components/ellipsis/index.vdt.js +3 -1
  86. package/es/components/input/styles.js +11 -1
  87. package/es/components/menu/styles.js +1 -1
  88. package/es/components/select/index.spec.js +47 -0
  89. package/es/components/switch/styles.js +1 -1
  90. package/es/components/table/cell.d.ts +2 -0
  91. package/es/components/table/cell.vdt.js +18 -5
  92. package/es/components/table/column.d.ts +1 -0
  93. package/es/components/table/column.js +1 -0
  94. package/es/components/table/column.vdt.js +16 -12
  95. package/es/components/table/row.d.ts +3 -1
  96. package/es/components/table/row.js +24 -15
  97. package/es/components/table/row.vdt.js +6 -2
  98. package/es/components/table/styles.d.ts +49 -0
  99. package/es/components/table/styles.js +3 -2
  100. package/es/components/table/table.d.ts +4 -0
  101. package/es/components/table/table.js +4 -1
  102. package/es/components/table/table.vdt.js +29 -4
  103. package/es/components/table/useColumns.d.ts +9 -0
  104. package/es/components/table/useColumns.js +29 -1
  105. package/es/components/table/useTree.d.ts +1 -1
  106. package/es/components/table/useTree.js +30 -2
  107. package/es/components/tip/index.d.ts +6 -1
  108. package/es/components/tip/index.js +12 -1
  109. package/es/components/tip/index.vdt.js +25 -5
  110. package/es/components/tip/styles.js +44 -2
  111. package/es/components/tooltip/index.spec.js +99 -67
  112. package/es/components/tooltip/tooltip.d.ts +1 -0
  113. package/es/components/tooltip/tooltip.js +14 -2
  114. package/es/components/transfer/index.vdt.js +2 -4
  115. package/es/components/treeSelect/index.vdt.js +1 -0
  116. package/es/components/upload/index.vdt.js +4 -1
  117. package/es/components/upload/styles.js +1 -1
  118. package/es/index.d.ts +2 -2
  119. package/es/index.js +2 -2
  120. package/es/site/data/components/button/demos/disabled/index.d.ts +1 -0
  121. package/es/site/data/components/button/demos/disabled/index.js +1 -0
  122. package/es/site/data/components/button/demos/disabled/react.d.ts +1 -0
  123. package/es/site/data/components/button/demos/disabled/react.js +27 -8
  124. package/es/site/data/components/button/demos/group/react.js +2 -2
  125. package/es/site/data/components/editable/demos/textarea/index.d.ts +16 -0
  126. package/es/site/data/components/editable/demos/textarea/index.js +21 -0
  127. package/es/site/data/components/editable/demos/textarea/react.d.ts +17 -0
  128. package/es/site/data/components/editable/demos/textarea/react.js +72 -0
  129. package/es/site/data/components/ellipsis/demos/hoverable/index.d.ts +6 -0
  130. package/es/site/data/components/ellipsis/demos/hoverable/index.js +14 -0
  131. package/es/site/data/components/ellipsis/demos/hoverable/react.d.ts +5 -0
  132. package/es/site/data/components/ellipsis/demos/hoverable/react.js +21 -0
  133. package/es/site/data/components/input/demos/size/react.js +20 -0
  134. package/es/site/data/components/select/demos/immutable/index.d.ts +2 -2
  135. package/es/site/data/components/select/demos/immutable/index.js +1 -1
  136. package/es/site/data/components/select/demos/immutable/react.d.ts +1 -1
  137. package/es/site/data/components/select/demos/immutable/react.js +5 -5
  138. package/es/site/data/components/table/demos/asyncTree/index.d.ts +20 -0
  139. package/es/site/data/components/table/demos/asyncTree/index.js +53 -0
  140. package/es/site/data/components/table/demos/asyncTree/react.d.ts +20 -0
  141. package/es/site/data/components/table/demos/asyncTree/react.js +76 -0
  142. package/es/site/data/components/table/demos/ellipsis/index.d.ts +11 -0
  143. package/es/site/data/components/table/demos/ellipsis/index.js +24 -0
  144. package/es/site/data/components/table/demos/ellipsis/react.d.ts +10 -0
  145. package/es/site/data/components/table/demos/ellipsis/react.js +43 -0
  146. package/es/site/data/components/table/demos/fixFooter/index.d.ts +6 -0
  147. package/es/site/data/components/table/demos/fixFooter/index.js +14 -0
  148. package/es/site/data/components/table/demos/fixFooter/react.d.ts +5 -0
  149. package/es/site/data/components/table/demos/fixFooter/react.js +69 -0
  150. package/es/site/data/components/table/demos/footer/index.d.ts +12 -0
  151. package/es/site/data/components/table/demos/footer/index.js +25 -0
  152. package/es/site/data/components/table/demos/footer/react.d.ts +11 -0
  153. package/es/site/data/components/table/demos/footer/react.js +46 -0
  154. package/es/site/data/components/table/demos/tree/react.js +18 -2
  155. package/es/site/data/components/tip/demos/icon/index.d.ts +9 -0
  156. package/es/site/data/components/tip/demos/icon/index.js +19 -0
  157. package/es/site/data/components/tip/demos/icon/react.d.ts +8 -0
  158. package/es/site/data/components/tip/demos/icon/react.js +54 -0
  159. package/es/site/data/components/tip/demos/size/index.d.ts +9 -0
  160. package/es/site/data/components/tip/demos/size/index.js +19 -0
  161. package/es/site/data/components/tip/demos/size/react.d.ts +8 -0
  162. package/es/site/data/components/tip/demos/size/react.js +39 -0
  163. package/es/site/data/components/tooltip/demos/always/react.js +5 -0
  164. package/es/site/data/components/tooltip/demos/content/index.d.ts +2 -0
  165. package/es/site/data/components/tooltip/demos/content/index.js +3 -1
  166. package/es/site/data/components/tooltip/demos/content/react.d.ts +2 -0
  167. package/es/site/data/components/tooltip/demos/content/react.js +21 -3
  168. package/es/site/data/components/treeSelect/demos/basic/react.js +2 -1
  169. package/es/site/data/components/upload/demos/files/index.js +3 -0
  170. package/es/site/data/components/upload/demos/files/react.js +3 -0
  171. package/es/site/src/pages/font/index.js +1 -1
  172. package/es/site/src/pages/font/styles.js +1 -1
  173. package/index.ts +2 -2
  174. package/package.json +2 -2
@@ -185,6 +185,11 @@ export const makeStyles = cache(function makeStyles(k: string) {
185
185
  `
186
186
  })}
187
187
 
188
+ &.${k}-small .${k}-switch-on,
189
+ &.${k}-small .${k}-switch-off {
190
+ font-size: 10px;
191
+ }
192
+
188
193
  // checked
189
194
  &.${k}-checked {
190
195
  .${k}-switch-bar,
@@ -1,4 +1,4 @@
1
- import {Component, Props, VNodeComponentClass, IntactDom} from 'intact';
1
+ import {Component, Props, VNodeComponentClass, IntactDom, inject} from 'intact';
2
2
  import template from './cell.vdt';
3
3
  import type {TableColumnProps} from './column';
4
4
  import type {TableProps} from './table';
@@ -18,11 +18,12 @@ export interface TableCellProps {
18
18
  rowspan: number
19
19
  onClickArrow: (e: MouseEvent) => void
20
20
  hasChildren: boolean
21
+ loaded: boolean
22
+ spreadArrowIndex: number
21
23
  }
22
24
 
23
25
  export class TableCell extends Component<TableCellProps> {
24
26
  static template = template;
25
-
26
27
  private config = useConfigContext();
27
28
 
28
29
  $update(
@@ -3,16 +3,19 @@ import {get, noop} from 'intact-shared';
3
3
  import {Button} from '../button';
4
4
  import {Icon} from '../icon';
5
5
  import {getTextByChildren} from '../utils';
6
+ import {Ellipsis} from '../ellipsis';
6
7
 
7
8
  const {
8
9
  props, rowIndex, columnIndex, offset,
9
10
  data, checkType, indent, grid,
10
- colspan, rowspan, onClickArrow, hasChildren,
11
+ colspan, rowspan, onClickArrow, hasChildren, loaded,
12
+ spreadArrowIndex
11
13
  } = this.get();
12
14
  const { k } = this.config;
13
15
 
14
16
  const blocks = props.$blocks;
15
17
  let children = get(data, props.key);
18
+ const isTree = !spreadArrowIndex ? columnIndex === 0 : columnIndex === spreadArrowIndex
16
19
  if (blocks) {
17
20
  const template = blocks.template || blocks.default;
18
21
  if (template) {
@@ -20,8 +23,12 @@ if (blocks) {
20
23
  }
21
24
  }
22
25
 
26
+ if (props.ellipsis) {
27
+ children = <Ellipsis>{children}</Ellipsis>
28
+ }
29
+
23
30
  let {className, style} = getClassAndStyleForFixed(props, offset, k, checkType);
24
- if (columnIndex === 0 && indent) {
31
+ if (isTree && indent) {
25
32
  style || (style = {});
26
33
  style.paddingLeft = `${indent}px`;
27
34
  }
@@ -37,12 +44,14 @@ const classNameObj = {
37
44
  rowspan={rowspan}
38
45
  colspan={colspan}
39
46
  >
40
- <Button v-if={columnIndex === 0 && hasChildren}
47
+ <Button v-if={hasChildren && isTree}
41
48
  type="none" icon circle size="mini"
42
49
  class={`${k}-table-arrow`}
43
50
  ev-click={onClickArrow}
51
+ disabled={loaded === false}
44
52
  >
45
- <Icon class={`${k}-icon-right`} size="small" />
53
+ <Icon v-if={loaded !== false} class={`${k}-icon-right`} size="small" />
54
+ <Icon v-else class={`${k}-tree-icon ion-load-c`} rotate />
46
55
  </Button>
47
56
  {children}
48
57
  </td>
@@ -18,6 +18,7 @@ export interface TableColumnProps {
18
18
  exportCell?: (data: any, index: number) => string
19
19
  minWidth?: number
20
20
  hidden?: boolean
21
+ ellipsis?: boolean
21
22
 
22
23
  // passed by Table
23
24
  // offset: number
@@ -58,6 +59,7 @@ const typeDefs: Required<TypeDefs<TableColumnProps>> = {
58
59
  exportCell: Function,
59
60
  minWidth: Number,
60
61
  hidden: Boolean,
62
+ ellipsis: Boolean,
61
63
 
62
64
  // offset: null,
63
65
  cols: null,
@@ -1,4 +1,5 @@
1
1
  import {getClassAndStyleForFixed} from './useFixedColumns';
2
+ import {getStyleForLastColumn} from './useColumns';
2
3
  import {Dropdown, DropdownMenu, DropdownItem} from '../dropdown';
3
4
  import {Button} from '../button';
4
5
  import {Icon} from '../icon';
@@ -11,7 +12,7 @@ import {linkEvent} from 'intact';
11
12
  import {context as TableContext} from './useColumns';
12
13
  import {context as ResizableContext} from './useResizable';
13
14
  import {context as FixedColumnsContext} from './useFixedColumns';
14
- import {stopPropagation} from '../utils';
15
+ import {stopPropagation, addStyle} from '../utils';
15
16
  import {Input} from '../input';
16
17
  import {_$} from '../../i18n';
17
18
  import {ignoreSortable} from './useSortable';
@@ -25,7 +26,7 @@ const {
25
26
  const { k } = this.config;
26
27
 
27
28
  <TableContext.Consumer>
28
- {checkType => {
29
+ {({checkType, lastCellKey, lastCellStyle}) => {
29
30
  return <GroupContext.Consumer>
30
31
  {({group: currentGroup, onChange}) => {
31
32
  return <SortableContext.Consumer>
@@ -46,7 +47,7 @@ const { k } = this.config;
46
47
 
47
48
  let checked;
48
49
  return <th className={classNameObj}
49
- style={style}
50
+ style={key === lastCellKey ? addStyle(style, lastCellStyle) : style}
50
51
  title={isStringOrNumber(title) ? title : null}
51
52
  ev-click={sortable ? linkEvent(key, onChangeSort) : null}
52
53
  colspan={cols}
@@ -0,0 +1,73 @@
1
+ ---
2
+ title: 树形表格异步加载
3
+ order: 33
4
+ ---
5
+
6
+ 添加`load`数据加载函数即可实现异步加载子节点功能,组件会传入当前节点对象作为参数,函数可以返回
7
+ 数组或者异步返回数组作为当前异步加载的子节点。如果子节点还可以进一步展开,可以将`children`属性
8
+ 设为空数组`[]`,否则不指定`children`则表示该节点为叶子节点。
9
+
10
+ 组件默认遇到`children`为`[]`空数组的情况就会去进行异步加载,你可以通过`loaded`属性设为`true`来
11
+ 标识该子节点已经加载完成,无需再次加载
12
+
13
+ > 组件在该行数据异步加载完成后,会往原始数据上自动添加`loaded=true`。你也可以手动指定某行数据
14
+ > `loaded=true`,这样即使组件发现该行数据`children`为空`[]`,也不会去加载了
15
+
16
+ ```vdt
17
+ import {Table, TableColumn} from 'kpc';
18
+
19
+ <Table data={this.get('data')} rowKey={data => data.name} load={this.loadData}>
20
+ <TableColumn key="name" title="Name" />
21
+ <TableColumn key="size" title="Size">
22
+ <b:template args="[data]">
23
+ {data.size}MB
24
+ </b:template>
25
+ </TableColumn>
26
+ </Table>
27
+ ```
28
+
29
+ ```ts
30
+ import {bind} from 'kpc';
31
+ interface Props {
32
+ data: NonNullable<any>
33
+ }
34
+ export default class extends Component<Props> {
35
+ static template = template;
36
+
37
+ static defaults() {
38
+ return {
39
+ data: [
40
+ {
41
+ name: 'Audios',
42
+ size: 12,
43
+ children: []
44
+ },
45
+ {
46
+ name: 'Images',
47
+ size: 14,
48
+ children: []
49
+ },
50
+ {
51
+ name: 'doc.pdf',
52
+ size: 18,
53
+ },
54
+ ]
55
+ }
56
+ }
57
+
58
+ @bind
59
+ loadData(node: any) {
60
+ return new Promise<void>(resolve => {
61
+ setTimeout(() => {
62
+ node.children = [
63
+ {name: 'child1', size: 17},
64
+ {name: 'child2', size: 15, loaded: true},
65
+ ];
66
+ this.set('data', [...this.get('data')]);
67
+
68
+ resolve();
69
+ }, 2000);
70
+ });
71
+ }
72
+ }
73
+ ```
@@ -0,0 +1,29 @@
1
+ ---
2
+ title: 超长省略
3
+ order: 34
4
+ ---
5
+
6
+ 通过设置`TableColumn`的`ellipsis`属性,可以指定列超长省略
7
+
8
+ ```vdt
9
+ import {Table, TableColumn} from 'kpc';
10
+
11
+ <Table data={this.get('data')} resizable>
12
+ <TableColumn key="a" title="Title 1" minWidth={200} ellipsis/>
13
+ <TableColumn key="b" title="Title 2" minWidth={300} />
14
+ </Table>
15
+ ```
16
+
17
+ ```ts
18
+ export default class extends Component {
19
+ static template = template;
20
+ static defaults() {
21
+ return {
22
+ data: [
23
+ {a: '测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长', b: 'Cell 1-2'},
24
+ {a: 'Cell 2-1', b: 'Cell 2-2'}
25
+ ]
26
+ };
27
+ }
28
+ }
29
+ ```
@@ -0,0 +1,52 @@
1
+ ---
2
+ title: footer固定
3
+ order: 35
4
+ ---
5
+
6
+ `fixFooter`:设置自定义footer固定,类型`boolean`,默认:`false`;
7
+ 设置为`true`时表示固定高度,`tbody`的高度自适应,但需要自己定义表格高度
8
+
9
+
10
+ ```vdt
11
+ import {Table, TableColumn} from 'kpc';
12
+
13
+ <div class="wrapper">
14
+ <Table
15
+ data={[{a: 'footer不固定'}, {a: '下拉'}, {a: 'yeah!'}, {a: '你好'}, {a: '我很好'}]}
16
+ >
17
+ <TableColumn key="a" title="footer不固定" />
18
+ <b:footer>
19
+ <span>自定义footer</span>
20
+ </b:footer>
21
+ </Table>
22
+ <Table
23
+ data={[{a: 'footer固定啦'}, {a: '下拉'}, {a: 'yeah!'}, {a: '你好'}, {a: '我很好'}]}
24
+ fixFooter
25
+ >
26
+ <TableColumn key="a" title="footer固定" />
27
+ <b:footer>
28
+ <span>自定义footer</span>
29
+ </b:footer>
30
+ </Table>
31
+ <Table
32
+ data={[{a: 'footer固定啦'}, {a: '下拉'}, {a: 'yeah!'}, {a: '你好'}, {a: '我很好'}]}
33
+ fixFooter
34
+ fixHeader
35
+ >
36
+ <TableColumn key="a" title="footer,header同时固定" />
37
+ <b:footer>
38
+ <span>自定义footer</span>
39
+ </b:footer>
40
+ </Table>
41
+ </div>
42
+ ```
43
+
44
+ ```styl
45
+ .wrapper
46
+ display flex
47
+ .k-table
48
+ margin-left: 20px
49
+ flex: 1
50
+ .k-table-wrapper
51
+ height: 200px!important
52
+ ```
@@ -0,0 +1,38 @@
1
+ ---
2
+ title: 自定义footer
3
+ order: 32
4
+ ---
5
+
6
+
7
+ ```vdt
8
+ import {Table, TableColumn} from 'kpc';
9
+
10
+ <div>
11
+ <Table data={this.get('data')} resizable>
12
+ <TableColumn key="a" title="Title 1" minWidth={200}/>
13
+ <TableColumn key="b" title="Title 2" minWidth={300}/>
14
+ <b:footer>
15
+ <div class="footer">自定义底部</div>
16
+ </b:footer>
17
+ </Table>
18
+ </div>
19
+ ```
20
+
21
+ ```styl
22
+ .k-table
23
+ margin-bottom 20px
24
+ ```
25
+
26
+ ```ts
27
+ export default class extends Component {
28
+ static template = template;
29
+ static defaults() {
30
+ return {
31
+ data: [
32
+ {a: 'Cell 1-1', b: 'Cell 1-2'},
33
+ {a: 'Cell 2-1', b: 'Cell 2-2'}
34
+ ],
35
+ };
36
+ }
37
+ }
38
+ ```
@@ -11,19 +11,31 @@ order: 24
11
11
 
12
12
  树形表格下,必须通过`rowKey`指定每行的`key`
13
13
 
14
- > 如果数据中恰好存在`children`字段,但是你又不想展示树形表格,将`childrenKey`设为`false`即可
14
+ > 如果数据中恰好存在`children`字段,但是你又不想展示树形表格,将`childrenKey`设为`false`即可。
15
+ > 假如你的数据为:`{name: 'xxx', books: [{name: 'a'}, {name: 'b'}]}`,想把books展示成子树,
16
+ > 可以指定`childrenKey="books"`
15
17
 
16
18
  ```vdt
17
19
  import {Table, TableColumn} from 'kpc';
18
-
19
- <Table data={this.get('data')} rowKey={data => data.name}>
20
- <TableColumn key="name" title="Name" />
21
- <TableColumn key="size" title="Size">
22
- <b:template args="[data]">
23
- {data.size}MB
24
- </b:template>
25
- </TableColumn>
26
- </Table>
20
+ <div>
21
+ <Table data={this.get('data')} rowKey={data => data.name}>
22
+ <TableColumn key="name" title="Name" />
23
+ <TableColumn key="size" title="Size">
24
+ <b:template args="[data]">
25
+ {data.size}MB
26
+ </b:template>
27
+ </TableColumn>
28
+ </Table>
29
+ <h4>自定义展开Icon位置</h4>
30
+ <Table data={this.get('data')} rowKey={data => data.name} spreadArrowIndex={1}>
31
+ <TableColumn key="name" title="Name" />
32
+ <TableColumn key="size" title="Size">
33
+ <b:template args="[data]">
34
+ {data.size}MB
35
+ </b:template>
36
+ </TableColumn>
37
+ </Table>
38
+ </div>
27
39
  ```
28
40
 
29
41
  ```ts
@@ -45,6 +45,9 @@ sidebar: doc
45
45
  | animation | 是否开启动效,默认开启。可以通过`true` `false`全部设置,或者通过数组单独设置行和列的动效 | `boolean` &#124 `[boolean, boolean]` | `true` |
46
46
  | hideHeader | 是否隐藏表头 | `boolean` | `false` |
47
47
  | pagination | 是否支持分页 | `boolean` &#124; `PaginationProps` | `false` |
48
+ | fixFooter | `table`给定需要固定高度时,自定义footer固定 | `boolean` | `false` |
49
+ | load | 指定异步加载节点数据的函数,该函数通过`Promise`返回数组来添加子节点数据 | <code>(node: any) => Promise<void> &#124; void</code> | `undefined` |
50
+ | spreadArrowIndex | 指定树形表格展开Icon的所在列,默认在第一列 | `number` | `0` |
48
51
 
49
52
  ```ts
50
53
  import {Props} from 'intact';
@@ -113,6 +116,7 @@ export interface PaginationProps {
113
116
  | minWidth | 指定当前列拖动时的最小宽度,优先级高于`Table`的`minColWidth` | `number` | `undefined` |
114
117
  | className | 给当前列添加className | `string` &#124; `Record<string, any>` | `undefined` |
115
118
  | hidden | 是否隐藏当前列,仅为不可见,不影响`exportTable`导出表格 | `boolean` | `false` |
119
+ | ellipsis | 是否开启超长省略 | `boolean` | `false` |
116
120
 
117
121
  ```ts
118
122
  import {VNode} from 'intact';
@@ -132,6 +136,7 @@ export type TableColumnGroupItem = {
132
136
  | empty | 自定义无数据展示模板 | - |
133
137
  | expand | 指定行展开后要展示的模板内容 | `([data: T, index: number]) => Children` |
134
138
  | tooltip | 行提示内容 | `([data: T, index: number]) => Children` |
139
+ | footer | 自定义`Table`底部 | - |
135
140
 
136
141
  ## TableColumn
137
142
 
@@ -14,6 +14,7 @@ import {bind} from '../utils';
14
14
  import type {TableGrid} from './useMerge';
15
15
  import { isEqualObject } from '../utils';
16
16
  import { useConfigContext } from '../config';
17
+ import { hasOwn } from 'intact-shared';
17
18
 
18
19
  export interface TableRowProps {
19
20
  key: TableRowKey
@@ -34,10 +35,12 @@ export interface TableRowProps {
34
35
  spreaded: boolean
35
36
  hasChildren: boolean
36
37
  indent: number
37
- onToggleSpreadRow: (key: TableRowKey) => void
38
+ onToggleSpreadRow: (key: TableRowKey, rowData?: any) => void
38
39
  onBeforeUnmount: (key: TableRowKey) => void
39
40
  offsetMap: Record<Key, number>
40
41
  animation: boolean
42
+ spreadArrowIndex: number
43
+ loaded: boolean
41
44
 
42
45
  draggable: boolean
43
46
  draggingKey: TableRowKey | null
@@ -65,20 +68,27 @@ export class TableRow extends Component<TableRowProps> {
65
68
  const nextProps = nextVNode.props as TableRowProps;
66
69
 
67
70
  let isSame = true;
68
- let key: keyof TableRowProps;
69
- for (key in lastProps) {
70
- // ignore index
71
- if (key === 'index') continue;
72
- const lastValue = lastProps[key];
73
- const nextValue = nextProps[key];
74
- // deeply compare for offsetMap
75
- if (key === 'offsetMap' && isEqualObject(lastValue, nextValue)) {
76
- continue;
77
- }
78
-
79
- if (lastValue !== nextValue) {
80
- isSame = false;
81
- break;
71
+ if (hasOwn.call(this, 'vueInstance')) {
72
+ // In Vue, we may change value by modifing the same reference,
73
+ // and the new row may be expanded by click tree arrow
74
+ // so we can not compare in this case, #1030
75
+ isSame = false;
76
+ } else {
77
+ let key: keyof TableRowProps;
78
+ for (key in lastProps) {
79
+ // ignore index
80
+ if (key === 'index') continue;
81
+ const lastValue = lastProps[key];
82
+ const nextValue = nextProps[key];
83
+ // deeply compare for offsetMap
84
+ if (key === 'offsetMap' && isEqualObject(lastValue, nextValue)) {
85
+ continue;
86
+ }
87
+
88
+ if (lastValue !== nextValue) {
89
+ isSame = false;
90
+ break;
91
+ }
82
92
  }
83
93
  }
84
94
 
@@ -109,8 +119,8 @@ export class TableRow extends Component<TableRowProps> {
109
119
  @bind
110
120
  onClickArrow(e: MouseEvent) {
111
121
  e.stopPropagation();
112
- const {onToggleSpreadRow, key} = this.get();
113
- onToggleSpreadRow(key);
122
+ const {onToggleSpreadRow, key, data} = this.get();
123
+ onToggleSpreadRow(key, data);
114
124
  }
115
125
 
116
126
  @bind
@@ -11,7 +11,8 @@ const {
11
11
  grid, index: rowIndex, indeterminate,
12
12
  allDisabled, selected, /* hidden, */spreaded,
13
13
  hasChildren, indent, key, offsetMap,
14
- draggable, draggingKey, animation,
14
+ draggable, draggingKey, animation, loaded,
15
+ spreadArrowIndex
15
16
  } = this.get();
16
17
  const { k } = this.config;
17
18
 
@@ -71,13 +72,13 @@ cols.forEach((props, columnIndex) => {
71
72
  if (!render) return;
72
73
 
73
74
  const columnKey = props.key;
74
-
75
75
  vNodes.push(
76
76
  <TableCell
77
77
  props={props}
78
78
  columnIndex={columnIndex}
79
79
  rowIndex={rowIndex}
80
80
  data={data}
81
+ loaded={loaded}
81
82
  offset={offsetMap[columnKey]}
82
83
  checkType={checkType}
83
84
  indent={indent}
@@ -87,6 +88,7 @@ cols.forEach((props, columnIndex) => {
87
88
  onClickArrow={this.onClickArrow}
88
89
  hasChildren={hasChildren}
89
90
  key={columnKey}
91
+ spreadArrowIndex={spreadArrowIndex}
90
92
  />
91
93
  );
92
94
  });
@@ -77,6 +77,8 @@ setDefault(() => {
77
77
  makeGroupMenuStyles?.clearCache();
78
78
  });
79
79
 
80
+ export {table};
81
+
80
82
  export const makeStyles = cache(function makeStyles(k: string) {
81
83
  return css`
82
84
  font-size: ${table.fontSize};
@@ -90,7 +92,7 @@ export const makeStyles = cache(function makeStyles(k: string) {
90
92
  }
91
93
  table {
92
94
  width: 100%;
93
- // border-collapse: collapse;
95
+ border-collapse: separate;
94
96
  border-spacing: 0;
95
97
  table-layout: fixed;
96
98
  // td,
@@ -104,8 +106,6 @@ export const makeStyles = cache(function makeStyles(k: string) {
104
106
  text-align: ${table.thead.textAlign};
105
107
  font-size: ${table.thead.fontSize};
106
108
  font-weight: ${table.thead.fontWeight};
107
- position: sticky;
108
- top: 0;
109
109
  z-index: 2;
110
110
  tr {
111
111
  height: ${table.thead.height};
@@ -114,6 +114,15 @@ export const makeStyles = cache(function makeStyles(k: string) {
114
114
  }
115
115
  }
116
116
  }
117
+ tfoot {
118
+ z-index: 2;
119
+ tr {
120
+ td {
121
+ border-top: ${table.border};
122
+ border-bottom-color: transparent;
123
+ }
124
+ }
125
+ }
117
126
  th {
118
127
  padding: ${table.thead.padding};
119
128
  position: relative;
@@ -376,6 +385,21 @@ export const makeStyles = cache(function makeStyles(k: string) {
376
385
  .${k}-table-wrapper {
377
386
  height: 100%;
378
387
  }
388
+ thead {
389
+ position: sticky;
390
+ top: 0;
391
+ }
392
+ }
393
+ // fixFooter
394
+ &.${k}-fix-footer {
395
+ min-height: 0;
396
+ .${k}-table-wrapper {
397
+ height: 100%;
398
+ }
399
+ tfoot {
400
+ position: sticky;
401
+ bottom: 0;
402
+ }
379
403
  }
380
404
  `;
381
405
  });
@@ -1,4 +1,4 @@
1
- import {Component, TypeDefs} from 'intact';
1
+ import {Component, TypeDefs, provide} from 'intact';
2
2
  import template from './table.vdt';
3
3
  import {useColumns} from './useColumns';
4
4
  import {useFixedColumns} from './useFixedColumns';
@@ -65,6 +65,9 @@ export interface TableProps<
65
65
  animation?: boolean | [boolean, boolean]
66
66
  hideHeader?: boolean
67
67
  pagination?: boolean | PaginationProps
68
+ fixFooter?: boolean
69
+ spreadArrowIndex?: number
70
+ load?: (value: T) => Promise<void> | void
68
71
  }
69
72
 
70
73
  export interface TableEvents<T = any, K extends TableRowKey = number> {
@@ -82,6 +85,7 @@ export interface TableBlocks<T = unknown> {
82
85
  empty: null
83
86
  tooltip: [T, number]
84
87
  expand: [T, number]
88
+ footer: null
85
89
  }
86
90
 
87
91
  type CheckType = 'checkbox' | 'radio' | 'none'
@@ -130,6 +134,9 @@ const typeDefs: Required<TypeDefs<TableProps<unknown>>> = {
130
134
  animation: [Boolean, Array],
131
135
  hideHeader: Boolean,
132
136
  pagination: [Boolean, Object],
137
+ fixFooter: Boolean,
138
+ spreadArrowIndex: Number,
139
+ load: Function,
133
140
  };
134
141
 
135
142
  const defaults = (): Partial<TableProps> => ({
@@ -166,7 +173,6 @@ export class Table<
166
173
  static typeDefs = typeDefs;
167
174
  static defaults = defaults;
168
175
  static events = events;
169
-
170
176
  // use public for unit test to get paginationRef
171
177
  public pagination = usePagination();
172
178
  private tree = useTree(this.pagination.data);