import React, { useState } from 'react'; import { Icon, Button, Form, Popover, Tag } from '../../index'; import TreeSelect from '../index'; import { flattenDeep } from 'lodash'; import CustomTrigger from './CustomTrigger'; import { IconCreditCard } from '@douyinfe/semi-icons'; const TreeNode = TreeSelect.TreeNode; export default { title: 'TreeSelect', parameters: { chromatic: { disableSnapshot: true }, }, } const treeData1 = [ { label: 'Node1', value: '0-0', key: '0-0', children: [ { label: 'Child Node1', value: '0-0-1', key: '0-0-1', }, { label: 'Child Node2', value: '0-0-2', key: '0-0-2', }, ], }, { label: 'Node2', value: '0-1', key: '0-1', }, ]; const treeData2 = [ { label: '亚洲', value: 'yazhou', key: 'yazhou', children: [ { label: '中国', value: 'zhongguo', key: 'zhongguo', children: [ { label: '北京', value: 'beijing', key: 'beijing', }, { label: '上海', value: 'shanghai', key: 'shanghai', }, ], }, // { // label: '日本', // value: 'riben', // key: 'riben', // children: [ // { // label: '东京', // value: 'dongjing', // key: 'dongjing' // }, // { // label: '大阪', // value: 'daban', // key: 'daban' // } // ] // }, ], }, { label: '北美洲', value: 'beimeizhou', key: 'beimeizhou', children: [ { label: '美国', value: 'meiguo', key: 'meiguo', }, { label: '加拿大', value: 'jianada', key: 'jianada', }, ], }, ]; const treeDataWithoutValue = [ { label: '亚洲', key: 'yazhou', children: [ { label: '中国', key: 'zhongguo', disabled: true, children: [ { label: '北京', key: 'beijing', }, { label: '上海', key: 'shanghai', }, ], }, { label: '日本', key: 'riben', children: [ { label: '东京', key: 'dongjing', }, { label: '大阪', key: 'daban', }, ], }, ], }, { label: '北美洲', key: 'beimeizhou', children: [ { label: '美国', key: 'meiguo', }, { label: '加拿大', key: 'jianada', }, ], }, ]; class SimpleTree extends React.Component { render() { return (
console.log('expand', e, expanded, node)} onSelect={(e, bool) => console.log('select', e, bool)} onChange={(e, node) => console.log('change', e, node)} />

); } } export const _TreeSelect = () => { const treeData = [ { label: '亚洲', value: 'Asia', key: '0', children: [ { label: '中国', value: 'China', key: '0-0', children: [ { label: '北京', value: 'Beijing', key: '0-0-0', }, { label: '上海', value: 'Shanghai', key: '0-0-1', }, ], }, ], }, { label: '北美洲', value: 'North America', key: '1', }, ]; return ( ); }; _TreeSelect.story = { name: 'tree select', }; export const Searchable = () => (




); Searchable.story = { name: 'searchable', }; export const SearchPosition = () => ( <>





); SearchPosition.story = { name: 'searchPosition', }; export const PrefixSuffixInsetLabel = () => (
} treeNodeFilterProp="value" placeholder="Please select" />

1234} treeNodeFilterProp="value" placeholder="Please select" />





1234} dropdownStyle={{ maxHeight: 400, overflow: 'auto' }} treeData={treeData2} placeholder="Please select" />
); PrefixSuffixInsetLabel.story = { name: 'prefix suffix insetLabel', }; PrefixSuffixInsetLabel.parameters = { chromatic: { disableSnapshot: false }, } export const ValidateStatus = () => (
console.log('expand', e, expanded, node)} onSelect={(e, bool) => console.log('select', e, bool)} onChange={e => console.log('change', e)} />

); ValidateStatus.story = { name: 'validate status', }; ValidateStatus.parameters = { chromatic: { disableSnapshot: false }, } export const Multiple = () => (
console.log('expand', e, expanded, node)} onSelect={(e, bool) => console.log('select', e, bool)} onChange={e => console.log('change', e)} />

); Multiple.story = { name: 'multiple', }; export const MaxTagCount = () => (
{/*

*/}
); MaxTagCount.story = { name: 'maxTagCount', }; export const MultipleSearchable = () => (
); MultipleSearchable.story = { name: 'multiple searchable', }; export const DefaultValues = () => (






); DefaultValues.story = { name: 'default values', }; export const Disabled = () => (




); Disabled.story = { name: 'disabled', }; Disabled.parameters = { chromatic: { disableSnapshot: false }, } export const OptionLabelProp = () => ( <> ); OptionLabelProp.story = { name: 'optionLabelProp', }; export const ValueInArray = () => ( <> console.log(args)} treeNodeFilterProp="value" treeNodeLabelProp="value" placeholder="Please select" /> ); ValueInArray.story = { name: 'valueInArray', }; export const OnBlurOnFocus = () => ( <>
single
console.log('blur', args)} onFocus={(...args) => console.log('focus', args)} placeholder="Please select" />
multiple
console.log('blur', args)} onFocus={(...args) => console.log('focus', args)} placeholder="Please select" /> ); OnBlurOnFocus.story = { name: 'onBlur/onFocus', }; export const LeafOnly = () => (
console.log('expand', e, expanded, node)} onSelect={(e, bool) => console.log('select', e, bool)} onChange={e => console.log('change', e)} />
); LeafOnly.story = { name: 'leafOnly', }; class Demo extends React.Component { constructor() { super(); this.state = { value: 'shanghai', }; } onChange(value) { this.setState({ value }); } render() { return ( this.onChange(e)} /> ); } } export const ControlledComponentSingle = () => ; ControlledComponentSingle.story = { name: 'controlled Component single', }; class Demo2 extends React.Component { constructor() { super(); this.state = { value: ['Shanghai'], }; } onChange(value) { this.setState({ value }); } render() { console.log(this.state.value); const treeData = [ { label: '亚洲', value: 'Asia', key: '0', children: [ { label: '中国', value: 'China', key: '0-0', children: [ { label: '北京', value: 'Beijing', key: '0-0-0', }, { label: '上海', value: 'Shanghai', key: '0-0-1', }, ], }, ], }, { label: '北美洲', value: 'North America', key: '1', }, ]; return ( this.onChange(e)} /> ); } } export const ControlledComponentMultiple = () => ; ControlledComponentMultiple.story = { name: 'controlled Component multiple', }; class Demo3 extends React.Component { constructor() { super(); this.state = { value: ['Shanghai'], }; } // 获取最底层值 getDeepChildrensByNode = node => { return flattenDeep( node.map(item => { if (item.children) { return this.getDeepChildrensByNode(item.children); } return item.value; }) ); }; onChange(value, node) { console.log('onchange', value); value = this.getDeepChildrensByNode(node); console.log('modifiled', value); this.setState({ value }); } render() { const treeData = [ { label: '亚洲', value: 'Asia', key: '0', children: [ { label: '中国', value: 'China', key: '0-0', children: [ { label: '北京', value: 'Beijing', key: '0-0-0', }, { label: '上海', value: 'Shanghai', key: '0-0-1', }, ], }, ], }, { label: '北美洲', value: 'North America', key: '1', }, ]; return ( this.onChange(e, node)} /> ); } } export const ControlledComponentMultipleValueModified = () => ; ControlledComponentMultipleValueModified.story = { name: 'controlled Component multiple value modified', }; class ConvertDemo extends React.Component { constructor(props) { super(props); this.formApi = null; } handleChange = val => { let finalVal = val; let firstClassOption = ['Asia', 'North America']; // 在这里去做你的value替换逻辑 console.log('originVal:' + val); if (val.length === 1) { // do nothing } else { if (val.every(item => firstClassOption.includes(item))) { finalVal = val[val.length - 1]; } } console.log('finalVal:' + finalVal); return finalVal; }; render() { const treeData = [ { label: '亚洲', value: 'Asia', key: '0', children: [ { label: '中国', value: 'China', key: '0-0', children: [ { label: '北京', value: 'Beijing', key: '0-0-0', }, { label: '上海', value: 'Shanghai', key: '0-0-1', }, ], }, ], }, { label: '北美洲', value: 'North America', key: '1', }, ]; return (
); } } export const _ConvertDemo = () => ; _ConvertDemo.story = { name: 'convert demo', }; export const TreeselectDefaultOpenInPopover = () => ( this.onChange(e, node)} /> } > ); TreeselectDefaultOpenInPopover.story = { name: 'treeselect defaultOpen in popover', }; export const CustomTriggerDemo = () => ; CustomTriggerDemo.story = { name: 'custom trigger' }; const AutoParentDemo = () => { const [expandedKeys, setExpandedKeys] = useState(['beimeizhou']); const [selectedKeys, setSelectedKeys] = useState(['beimeizhou']); const [autoExpandParent, setAutoExpandParent] = useState(true); const onExpand = expandedKeys => { console.log('onExpand', expandedKeys); // if not set autoExpandParent to false, if children expanded, parent can not collapse. // or, you can remove all expanded children keys. setExpandedKeys(expandedKeys); setAutoExpandParent(false); }; const onSelect = (selectedKeys, info) => { console.log('onSelect:', info); setSelectedKeys(selectedKeys); }; return (
); }; export const AutoExpandParent = () => ( <> ); AutoExpandParent.story = { name: 'autoExpandParent', }; export const TreeWithoutValueProps = () => ( console.log(args)} /> ); TreeWithoutValueProps.story = { name: 'tree without value props', }; export const TreeSelectRenderSelectedItem = () => { const treeData = [ { label: '亚洲', value: 'Asia', key: '0', children: [ { label: '中国', value: 'China', key: '0-0', children: [ { label: '北京', value: 'Beijing', key: '0-0-0', }, { label: '上海', value: 'Shanghai', key: '0-0-1', }, ], }, ], }, { label: '北美洲', value: 'North America', key: '1', }, { label: '南美洲', value: 'South America', key: '2', }, { label: '南极洲', value: 'Antarctica', key: '3', }, ]; return ( <>

单选

`${item.value}-${item.label}`} />

多选

({ content: `${item.value}-${item.label}`, isRenderInTag: true, })} />

多选 + isRenderInTag=false

({ content: ( {item.value} ), isRenderInTag: false, })} /> ); }; TreeSelectRenderSelectedItem.story = { name: 'treeSelect renderSelectedItem', }; const DisableStrictlyDemo = () => { const [value, setValue] = useState(['Shanghai']); const treeData = [ { label: '亚洲', value: 'Asia', key: '0', children: [ { label: '中国', value: 'China', key: '0-0', disabled: true, children: [ { label: '北京', value: 'Beijing', key: '0-0-0', }, { label: '上海', value: 'Shanghai', key: '0-0-1', }, ], }, { label: '日本', value: 'Japan', key: '0-1', }, ], }, { label: '北美洲', value: 'North America', key: '1', }, ]; return (
setValue(value)} />
); }; export const DisabledStrictly = () => ( <> ); DisabledStrictly.story = { name: 'disabledStrictly', }; export const CheckRelationDemo = () => { const treeData = [ { label: 'Asia', value: 'Asia', key: '0', children: [ { label: 'China', value: 'China', key: '0-0', children: [ { label: 'Beijing', value: 'Beijing', key: '0-0-0', }, { label: 'Shanghai', value: 'Shanghai', key: '0-0-1', }, { label: 'Chengdu', value: 'Chengdu', key: '0-0-2', }, ], }, { label: 'Japan', value: 'Japan', key: '0-1', children: [ { label: 'Osaka', value: 'Osaka', key: '0-1-0' } ] }, ], }, { label: 'North America', value: 'North America', key: '1', children: [ { label: 'United States', value: 'United States', key: '1-0' }, { label: 'Canada', value: 'Canada', key: '1-1' } ] } ]; const [value, setValue] = useState('China'); const [value2, setValue2] = useState(); const [value3, setValue3] = useState(); const style = { width: 300, }; const dropdownStyle = { maxHeight: 400, overflow: 'auto' }; const handleChange = value => { console.log(value); setValue(value); }; const handleChange2 = value => { console.log(value); setValue2(value); }; const handleChange3 = value => { console.log(value); setValue3(value); }; return ( <>
checkRelation='unRelated'


checkRelation='unRelated' + maxTagCount=2


checkRelation='unRelated' + maxTagCount=2 + 开启搜索


checkRelation='unRelated' + maxTagCount=2 + 开启搜索 + searchBox in trigger


checkRelation='unRelated' + 中国节点为 disabled


checkRelation='unRelated' + 中国节点为 disabled + 严格禁用


checkRelation='unRelated' + defaultValue 为 China


checkRelation='unRelated' + defaultValue 为 China + 开启搜索


checkRelation='unRelated' + defaultValue 为 China + 开启搜索 + searchBox in trigger + showClear


checkRelation='unRelated' + 受控 + value 初始为 China


checkRelation='unRelated' + 受控 + onChangeWithObject


checkRelation='unRelated' + 受控 + leafOnly,此时 leafOnly 失效


checkRelation='unRelated' + onSelect
console.log('select', value, status, node)} /> ); };