<script> /* eslint no-console:0 */ import Tree, { TreeNode } from '../index' import '../assets/index.less' import { gData, getRadioSelectKeys } from './util' import '../../vc-dialog/assets/index.less' import Modal from '../../vc-dialog' import BaseMixin from '../../_util/BaseMixin' export default { mixins: [BaseMixin], data () { return { // expandedKeys: getFilterExpandedKeys(gData, ['0-0-0-key']), expandedKeys: ['0-0-0-key'], autoExpandParent: true, // checkedKeys: ['0-0-0-0-key', '0-0-1-0-key', '0-1-0-0-key'], checkedKeys: ['0-0-0-key'], checkStrictlyKeys: { checked: ['0-0-1-key'], halfChecked: [] }, selectedKeys: [], treeData: [], visible: false, multiple: true, } }, methods: { onExpand (expandedKeys) { console.log('onExpand', arguments) // if not set autoExpandParent to false, if children expanded, parent can not collapse. // or, you can remove all expanded chilren keys. this.setState({ expandedKeys, autoExpandParent: false, }) }, onCheck (checkedKeys) { this.setState({ checkedKeys, }) }, onCheckStrictly (checkedKeys, /* extra*/) { console.log(arguments) // const { checkedNodesPositions } = extra; // const pps = filterParentPosition(checkedNodesPositions.map(i => i.pos)); // console.log(checkedNodesPositions.filter(i => pps.indexOf(i.pos) > -1).map(i => i.node.key)); const cks = { checked: checkedKeys.checked || checkedKeys, halfChecked: [`0-0-${parseInt(Math.random() * 3, 10)}-key`], } this.setState({ // checkedKeys, checkStrictlyKeys: cks, // checkStrictlyKeys: checkedKeys, }) }, onSelect (selectedKeys, info) { console.log('onSelect', selectedKeys, info) this.setState({ selectedKeys, }) }, onRbSelect (selectedKeys, info) { let _selectedKeys = selectedKeys if (info.selected) { _selectedKeys = getRadioSelectKeys(gData, selectedKeys, info.node.eventKey) } this.setState({ selectedKeys: _selectedKeys, }) }, onClose () { this.setState({ visible: false, }) }, handleOk () { this.setState({ visible: false, }) }, showModal () { this.setState({ expandedKeys: ['0-0-0-key', '0-0-1-key'], checkedKeys: ['0-0-0-key'], visible: true, }) // simulate Ajax setTimeout(() => { this.setState({ treeData: [...gData], }) }, 2000) }, triggerChecked () { this.setState({ checkedKeys: [`0-0-${parseInt(Math.random() * 3, 10)}-key`], }) }, }, render () { const loop = data => { return data.map((item) => { if (item.children) { return ( <TreeNode key={item.key} title={item.title} disableCheckbox={item.key === '0-0-0-key'} > {loop(item.children)} </TreeNode> ) } return <TreeNode key={item.key} title={item.title} /> }) } // console.log(getRadioSelectKeys(gData, this.selectedKeys)); return (<div style={{ padding: '0 20px' }}> <h2>dialog</h2> <button class='btn btn-primary' onClick={this.showModal}>show dialog</button> <Modal title='TestDemo' visible={this.visible} onOk={this.handleOk} onClose={this.onClose} > {this.treeData.length ? ( <Tree checkable class='dialog-tree' onExpand={this.onExpand} expandedKeys={this.expandedKeys} autoExpandParent={this.autoExpandParent} onCheck={this.onCheck} checkedKeys={this.checkedKeys} > {loop(this.treeData)} </Tree> ) : 'loading...'} </Modal> <h2>controlled</h2> <Tree checkable onExpand={this.onExpand} expandedKeys={this.expandedKeys} autoExpandParent={this.autoExpandParent} onCheck={this.onCheck} checkedKeys={this.checkedKeys} onSelect={this.onSelect} selectedKeys={this.selectedKeys} > {loop(gData)} </Tree> <button onClick={this.triggerChecked}>trigger checked</button> <h2>checkStrictly</h2> <Tree checkable multiple={this.multiple} defaultExpandAll onExpand={this.onExpand} expandedKeys={this.expandedKeys} onCheck={this.onCheckStrictly} checkedKeys={this.checkStrictlyKeys} checkStrictly > {loop(gData)} </Tree> <h2>radio's behavior select (in the same level)</h2> <Tree multiple defaultExpandAll onSelect={this.onRbSelect} selectedKeys={getRadioSelectKeys(gData, this.selectedKeys) } > {loop(gData)} </Tree> </div>) }, } </script>