From 6fc6d13ed5a0263cb5252f34d83e4074b82b7523 Mon Sep 17 00:00:00 2001 From: afc163 Date: Thu, 26 Oct 2017 17:46:01 +0800 Subject: [PATCH] Refactor TagSelect --- src/components/TagSelect/demo/expandable.md | 33 +++++++ src/components/TagSelect/demo/simple.md | 19 ++-- src/components/TagSelect/index.js | 98 ++++++--------------- src/components/TagSelect/index.less | 21 ++--- src/components/TagSelect/index.md | 15 +--- src/routes/List/CoverCardList.js | 30 +++---- src/routes/List/FilterCardList.js | 24 ++--- src/routes/List/SearchList.js | 24 ++--- 8 files changed, 118 insertions(+), 146 deletions(-) create mode 100644 src/components/TagSelect/demo/expandable.md diff --git a/src/components/TagSelect/demo/expandable.md b/src/components/TagSelect/demo/expandable.md new file mode 100644 index 00000000..72df4e82 --- /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 c081e794..9e7a13a4 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 7394152f..62017143 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 bc02cc89..ae1941fb 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 72f8d382..59ab8f31 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 cf4da3b1..595b575a 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 a8523eac..2bc3bb66 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 a37f21e8..555be319 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')( - - 类目一 - 类目二 - 类目三 - 类目四 - - 类目五 - 类目六 - + + 类目一 + 类目二 + 类目三 + 类目四 + 类目五 + 类目六 + 类目七 + 类目八 + 类目九 + 类目十 + 类目十一 + 类目十二 )} -- GitLab