<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>