81 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
| /* eslint-disable no-console,func-names,react/no-multi-comp */
 | |
| import Table from '../index'
 | |
| import '../assets/index.less'
 | |
| import BaseMixin from '../../_util/BaseMixin'
 | |
| 
 | |
| const ResizeableTitle = (h, props, children) => {
 | |
|   console.log(props)
 | |
|   const { width, ...restProps } = props
 | |
| 
 | |
|   if (!width) {
 | |
|     return <th {...restProps} >{children}</th>
 | |
|   }
 | |
|   return (
 | |
|     <th {...restProps} width={width}>{children}</th>
 | |
|   )
 | |
| }
 | |
| 
 | |
| export default {
 | |
|   mixins: [BaseMixin],
 | |
|   data () {
 | |
|     return {
 | |
|       columns: [
 | |
|         { title: 'title1', dataIndex: 'a', key: 'a', width: 100 },
 | |
|         { id: '123', title: 'title2', dataIndex: 'b', key: 'b', width: 100 },
 | |
|         { title: 'title3', dataIndex: 'c', key: 'c', width: 200 },
 | |
|         {
 | |
|           title: 'Operations', dataIndex: '', key: 'd', customRender: () => {
 | |
|             return <a href='#'>Operations</a>
 | |
|           },
 | |
|         },
 | |
|       ],
 | |
|       data: [
 | |
|         { a: '123', key: '1' },
 | |
|         { a: 'cdd', b: 'edd', key: '2' },
 | |
|         { a: '1333', c: 'eee', d: 2, key: '3' },
 | |
|       ],
 | |
|       components: {
 | |
|         header: {
 | |
|           cell: ResizeableTitle,
 | |
|         },
 | |
|       },
 | |
|     }
 | |
|   },
 | |
|   methods: {
 | |
|     handleResize (index) {
 | |
|       return (e, { size }) => {
 | |
|         this.setState(({ columns }) => {
 | |
|           const nextColumns = [...columns]
 | |
|           nextColumns[index] = {
 | |
|             ...nextColumns[index],
 | |
|             width: size.width,
 | |
|           }
 | |
|           return { columns: nextColumns }
 | |
|         })
 | |
|       }
 | |
|     },
 | |
|   },
 | |
| 
 | |
|   render () {
 | |
|     const columns = this.columns.map((col, index) => ({
 | |
|       ...col,
 | |
|       customHeaderCell: (column) => ({
 | |
|         props: {
 | |
|           width: column.width,
 | |
|         },
 | |
|         on: {
 | |
|           resize: this.handleResize(index),
 | |
|         },
 | |
|       }),
 | |
|     }))
 | |
| 
 | |
|     return (
 | |
|       <div>
 | |
|         <h2>Integrate with react-resizable</h2>
 | |
|         <Table components={this.components} columns={columns} data={this.data} />
 | |
|       </div>
 | |
|     )
 | |
|   },
 | |
| }
 | |
| 
 |