diff --git a/src/components/TagSelect/demo/expandable.md b/src/components/TagSelect/demo/expandable.md new file mode 100644 index 0000000000000000000000000000000000000000..72df4e828174310d9facfeda1649b74385ef8924 --- /dev/null +++ b/src/components/TagSelect/demo/expandable.md @@ -0,0 +1,33 @@ +--- +order: 1 +title: 可展开和收起 +--- + +使用 `expandable` 属性,让标签组可以收起,避免过高。 + +````jsx +import TagSelect from 'ant-design-pro/lib/TagSelect'; + +const TagExpand = TagSelect.Expand; + +function handleFormSubmit(checkedValue) { + console.log(checkedValue); +} + +ReactDOM.render( + + 类目一 + 类目二 + 类目三 + 类目四 + 类目五 + 类目六 + 类目七 + 类目八 + 类目九 + 类目十 + 类目十一 + 类目十二 + +, mountNode); +```` diff --git a/src/components/TagSelect/demo/simple.md b/src/components/TagSelect/demo/simple.md index c081e7943dc79f63808d45eb66339a03fc182c59..9e7a13a495d53997b1848d4e04d44f85fd6d1bbf 100644 --- a/src/components/TagSelect/demo/simple.md +++ b/src/components/TagSelect/demo/simple.md @@ -1,6 +1,6 @@ --- order: 0 -title: 基础样例 +title: 基础样例 --- 结合 `Tag` 的 `TagSelect` 组件,方便的应用于筛选类目的业务场景中。 @@ -8,23 +8,18 @@ title: 基础样例 ````jsx import TagSelect from 'ant-design-pro/lib/TagSelect'; -const TagOption = TagSelect.Option; -const TagExpand = TagSelect.Expand; - function handleFormSubmit(checkedValue) { console.log(checkedValue); } ReactDOM.render( - 类目一 - 类目二 - 类目三 - 类目四 - - 类目五 - 类目六 - + 类目一 + 类目二 + 类目三 + 类目四 + 类目五 + 类目六 , mountNode); ```` diff --git a/src/components/TagSelect/index.js b/src/components/TagSelect/index.js index 7394152f93eb59cb9cdfbf4f78ef1483f06237ab..620171430ffb7f9c1d143407bd9d55f3a9ef7b7b 100644 --- a/src/components/TagSelect/index.js +++ b/src/components/TagSelect/index.js @@ -19,13 +19,6 @@ TagSelectOption.defaultProps = { displayName: 'TagSelectOption', }; -const TagSelectExpand = ({ children }) => ( -
{children}
-); -TagSelectExpand.defaultProps = { - displayName: 'TagSelectExpand', -}; - class TagSelect extends PureComponent { static defaultProps = { initialValue: [], @@ -40,18 +33,13 @@ class TagSelect extends PureComponent { onSelectAll = (checked) => { const { onChange } = this.props; let checkedTags = []; - let expanded = this.state.expand; - if (checked) { - const tags = this.getAllTags(); - checkedTags = tags.list; - expanded = tags.expand; + checkedTags = this.getAllTags(); } this.setState({ checkedAll: checked, checkedTags, - expand: expanded, }); if (onChange) { @@ -60,21 +48,11 @@ class TagSelect extends PureComponent { } getAllTags() { - let { expand } = this.state; const { children } = this.props; - - let checkedTags = children.filter(child => child.props.displayName === 'TagSelectOption').map(child => child.props.value); - const expandChild = children.filter(child => child.props.displayName === 'TagSelectExpand')[0]; - if (expandChild) { - checkedTags = checkedTags.concat( - expandChild.props.children.map(child => child.props.value) - ); - expand = true; - } - return { - list: checkedTags, - expand, - }; + const checkedTags = children + .filter(child => child.props.displayName === 'TagSelectOption') + .map(child => child.props.value); + return checkedTags; } handleTagChange = (value, checked) => { @@ -90,13 +68,8 @@ class TagSelect extends PureComponent { const tags = this.getAllTags(); - let checkedAll = false; - if (tags.list.length === checkedTags.length) { - checkedAll = true; - } - this.setState({ - checkedAll, + checkedAll: tags.length === checkedTags.length, checkedTags, }); @@ -113,50 +86,34 @@ class TagSelect extends PureComponent { render() { const { checkedTags, checkedAll, expand } = this.state; - const { children, className, style } = this.props; - - const expandNode = children.filter(child => child.props.displayName === 'TagSelectExpand')[0]; + const { children, className, style, expandable } = this.props; const cls = classNames(styles.tagSelect, className, { - [styles.expandTag]: expandNode, + [styles.hasExpandTag]: expandable, + [styles.expanded]: expand, }); return (
-
- - 全部 - - { - children.filter(child => child.props.displayName === 'TagSelectOption').map(child => React.cloneElement(child, { - key: `tag-select-${child.props.value}`, - checked: checkedTags.indexOf(child.props.value) > -1, - onChange: this.handleTagChange, - })) - } - { - expandNode && ( - - { expand ? '收起' : '展开'} - - ) - } -
+ + 全部 + + { + children.filter(child => child.props.displayName === 'TagSelectOption').map(child => React.cloneElement(child, { + key: `tag-select-${child.props.value}`, + checked: checkedTags.indexOf(child.props.value) > -1, + onChange: this.handleTagChange, + })) + } { - expandNode && ( -
- { - expandNode.props.children.map(child => React.cloneElement(child, { - key: `tag-select-${child.props.value}`, - checked: checkedTags.indexOf(child.props.value) > -1, - onChange: this.handleTagChange, - })) - } -
+ expandable && ( + + { expand ? '收起' : '展开'} + ) }
@@ -165,6 +122,5 @@ class TagSelect extends PureComponent { } TagSelect.Option = TagSelectOption; -TagSelect.Expand = TagSelectExpand; export default TagSelect; diff --git a/src/components/TagSelect/index.less b/src/components/TagSelect/index.less index bc02cc89032c2d13c873ec6d23a81ae780cd0d63..ae1941fb8b65b3b330701ee111fb4ebed3b26763 100644 --- a/src/components/TagSelect/index.less +++ b/src/components/TagSelect/index.less @@ -5,20 +5,18 @@ user-select: none; margin-left: -8px; position: relative; + overflow: hidden; + max-height: 32px; + transition: all .3s; :global { .ant-tag { padding: 0 8px; margin-right: 24px; } } - .expand { - transition: all 0.32s ease; - overflow: hidden; - max-height: 100px; - } - .fold { - .expand(); - max-height: 0; + &.expanded { + transition: all .3s; + max-height: 200px; } .trigger { position: absolute; @@ -28,8 +26,7 @@ font-size: 12px; } } + &.hasExpandTag { + padding-right: 50px; + } } -.expandTag { - padding-right: 50px; -} - diff --git a/src/components/TagSelect/index.md b/src/components/TagSelect/index.md index 72f8d3827d9912efab094449de9e48495a66b34c..59ab8f311b1052ba603989c294cdbf9c96453a5d 100644 --- a/src/components/TagSelect/index.md +++ b/src/components/TagSelect/index.md @@ -1,11 +1,11 @@ --- type: General -title: TagSelect +title: TagSelect subtitle: 标签选择器 cols: 1 --- -倒计时组件。 +一组标签选择器,带全选/展开/收起功能。 ## API @@ -14,13 +14,4 @@ cols: 1 | 参数 | 说明 | 类型 | 默认值 | |----------|------------------------------------------|-------------|-------| | onChange | 标签选择的回调函数 | Function(checkedTags) | | - -### TagSelect.TagOption - -| 参数 | 说明 | 类型 | 默认值 | -|----------|------------------------------------------|-------------|-------| -| value | 对应的值 | string | | - -### TagSelect.TagExpand - -包裹在 `TagSelect.TagExpand` 的元素会被折叠。 +| expandable | 是否展示 `展开/收起` 按钮 | Boolean | false | diff --git a/src/routes/List/CoverCardList.js b/src/routes/List/CoverCardList.js index cf4da3b1456da05295ea690d46b98a8887f199dc..595b575ace90ee36d57b6c9b0761741c849301ac 100644 --- a/src/routes/List/CoverCardList.js +++ b/src/routes/List/CoverCardList.js @@ -13,8 +13,6 @@ import styles from './CoverCardList.less'; const { Option } = Select; const FormItem = Form.Item; -const TagOption = TagSelect.Option; -const TagExpand = TagSelect.Expand; /* eslint react/no-array-index-key: 0 */ @Form.create() @@ -156,21 +154,19 @@ export default class CoverCardList extends PureComponent { {getFieldDecorator('category')( - - 类目一 - 类目二 - 类目三 - 类目四 - 类目五 - 类目六 - 类目七 - 类目八 - 类目九 - 类目十 - - 类目十一 - 类目十二 - + + 类目一 + 类目二 + 类目三 + 类目四 + 类目五 + 类目六 + 类目七 + 类目八 + 类目九 + 类目十 + 类目十一 + 类目十二 )} diff --git a/src/routes/List/FilterCardList.js b/src/routes/List/FilterCardList.js index a8523eac4a37f958526f6344f05a154b9d6b59d6..2bc3bb669020fb9840faf48ae5536bd9f283f63b 100644 --- a/src/routes/List/FilterCardList.js +++ b/src/routes/List/FilterCardList.js @@ -12,8 +12,6 @@ import styles from './FilterCardList.less'; const { Option } = Select; const FormItem = Form.Item; -const TagOption = TagSelect.Option; -const TagExpand = TagSelect.Expand; const formatWan = (val) => { const v = val * 1; @@ -156,15 +154,19 @@ export default class FilterCardList extends PureComponent { {getFieldDecorator('category')( - - 类目一 - 类目二 - 类目三 - 类目四 - - 类目五 - 类目六 - + + 类目一 + 类目二 + 类目三 + 类目四 + 类目五 + 类目六 + 类目七 + 类目八 + 类目九 + 类目十 + 类目十一 + 类目十二 )} diff --git a/src/routes/List/SearchList.js b/src/routes/List/SearchList.js index a37f21e82eb9247246d8a10ea165547ceaa04184..555be3195d91b3597f944c86c6ad52e34dc92380 100644 --- a/src/routes/List/SearchList.js +++ b/src/routes/List/SearchList.js @@ -11,8 +11,6 @@ import styles from './SearchList.less'; const { Option } = Select; const FormItem = Form.Item; -const TagOption = TagSelect.Option; -const TagExpand = TagSelect.Expand; @Form.create() @connect(state => ({ @@ -189,15 +187,19 @@ export default class SearchList extends Component { {getFieldDecorator('category')( - - 类目一 - 类目二 - 类目三 - 类目四 - - 类目五 - 类目六 - + + 类目一 + 类目二 + 类目三 + 类目四 + 类目五 + 类目六 + 类目七 + 类目八 + 类目九 + 类目十 + 类目十一 + 类目十二 )}