Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Hotfix/2.2.1 #628

Merged
merged 15 commits into from
Sep 5, 2019
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
# 更新日志

## 2.2.1

- 修复 `<Select />` 多选时历史数据污染的问题 [#606](https://github.com/XiaoMi/hiui/issues/606)
- 修复 `<Checkbox />` data 无法更新的问题 [#603](https://github.com/XiaoMi/hiui/issues/603)
- 修复 `<Radio />` data 无法更新的问题 [#607](https://github.com/XiaoMi/hiui/issues/607)
- 修复 `<Notification />` 组件销毁没有清空定时器的问题 [#624](https://github.com/XiaoMi/hiui/issues/624)
- 修复 `<Notification />` onClose 失效的问题 [#627](https://github.com/XiaoMi/hiui/issues/627)
- 修复 `<DatePicker />` 长度不够展示时间被遮挡的问题 [#615](https://github.com/XiaoMi/hiui/issues/615)
- 修复 `<Counter />` 部分情况下出现 NaN 的问题 [#593](https://github.com/XiaoMi/hiui/issues/593)
- 修复 `<Form />` 动态渲染的时候 removeField 数量不正确的问题 [#636](https://github.com/XiaoMi/hiui/issues/636)

## 2.2.0

- 新增 `<Carousel />` 走马灯组件 [#115](https://github.com/XiaoMi/hiui/issues/115)
Expand Down
12 changes: 5 additions & 7 deletions components/form/Form.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,11 @@ class Form extends Component {
}

removeField (prop) {
const fields = this.state.fields.filter(
(field) => field.props.field !== prop
)

this.setState({
fields
})
this.setState((prevState) => ({
fields: prevState.fields.filter(
(field) => field.props.field !== prop
)
}))
}

validate (cb) {
Expand Down
2 changes: 1 addition & 1 deletion components/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ export { default as Pagination } from './pagination'
export { default as Tabs } from './tabs'
export { default as Table } from './table'
export { default as Notification } from './notification'
export { handleNotificate } from './notification/HandleNotification'
export { default as handleNotificate } from './notification/HandleNotification'
export { default as Modal } from './modal'
export { default as Alert } from './alert'
export { default as Panel } from './panel'
Expand Down
2 changes: 1 addition & 1 deletion components/loading/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ function deprecatedOpen ({ target, tip } = {}) {
}

function openWrapper (target, options) {
if (target === null || (target && React.isValidElement(React.cloneElement(target)))) {
if (arguments.length >= 2) {
open(target, options)
} else {
return deprecatedOpen(target)
Expand Down
11 changes: 8 additions & 3 deletions components/notice/Notice.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,22 @@ import { CSSTransition } from 'react-transition-group'

export default class Notice extends Component {
state = { open: false }
openTimer = null
closeTimer = null
componentDidMount () {
this.setState({
open: true
})
if (this.props.duration !== null) {
setTimeout(() => {
this.openTimer = setTimeout(() => {
this.setState({ open: false })
}, this.props.duration || 3000)
}
}

componentWillUnmount () {
clearTimeout(this.openTimer)
clearTimeout(this.closeTimer)
}
closeNotice = e => {
if (e) {
e.stopPropagation()
Expand All @@ -32,7 +37,7 @@ export default class Notice extends Component {
timeout={0}
classNames={`hi-${prefix}`}
onExited={() => {
setTimeout(() => this.closeNotice(), 300)
this.closeTimer = setTimeout(() => this.closeNotice(), 300)
}}
>
<div className={classNames(`hi-${prefix}`, { [`hi-${prefix}--${type}`]: type })}>
Expand Down
5 changes: 4 additions & 1 deletion components/notice/NoticeContainer.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,10 @@ export default class NoticeContainer extends Component {
<Notice
key={notice.key}
id={notice.key}
onClose={this.removeNotice}
onClose={noticeId => {
this.removeNotice(noticeId)
notice.onClose && notice.onClose()
}}
duration={notice.duration}
prefix={prefix}
type={notice.type}
Expand Down
4 changes: 3 additions & 1 deletion components/notification/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import './style/index'
import React from 'react'
import Button from '../button'
import classNames from 'classnames'
import handleNotificate from './HandleNotification'
import _handleNotificate from './HandleNotification'

const iconMap = {
success: 'chenggong',
Expand All @@ -12,6 +12,8 @@ const iconMap = {
info: 'tishi'
}

export const handleNotificate = _handleNotificate

const notification = {
close: key => {
notice.close('notification', key)
Expand Down
47 changes: 19 additions & 28 deletions components/select/Select.js
Original file line number Diff line number Diff line change
Expand Up @@ -119,26 +119,27 @@ class Select extends Component {
}

componentWillReceiveProps (nextProps) {
if (!shallowEqual(nextProps.value, this.props.value)) {
const selectedItems = this.resetSelectedItems(
nextProps.value,
this.state.dropdownItems
) // 异步获取时会从内部改变dropdownItems,所以不能从list取

this.setState({
selectedItems
})
}
if (!shallowEqual(nextProps.data, this.props.data)) {
const selectedItems = this.resetSelectedItems(
nextProps.value,
nextProps.value || this.state.selectedItems,
nextProps.data,
true
)
this.setState({
selectedItems,
dropdownItems: cloneDeep(nextProps.data)
})
} else {
if (!shallowEqual(nextProps.value, this.props.value)) {
const selectedItems = this.resetSelectedItems(
nextProps.value,
this.state.dropdownItems
) // 异步获取时会从内部改变dropdownItems,所以不能从list取

this.setState({
selectedItems
})
}
}
}

Expand Down Expand Up @@ -166,24 +167,14 @@ class Select extends Component {
return dataSource && !!dataSource.url
}

resetSelectedItems (value, dropdownItems, listChanged = false) {
resetSelectedItems (value, dropdownItems = [], listChanged = false) {
const values = this.parseValue(value)
const selectedItems =
listChanged && this.props.type === 'multiple'
? this.state.selectedItems
: [] // 如果是多选,dropdownItems有改动,需要保留之前的选中值

dropdownItems &&
dropdownItems.map((item) => {
if (values.indexOf(item.id) !== -1) {
const itemIndex = selectedItems.findIndex((sItem) => {
// 多选时检查是否已选中
return sItem.id === item.id
})

itemIndex === -1 && selectedItems.push(item)
}
})
let selectedItems = []
dropdownItems.forEach(item => {
if (values.includes(item.id)) {
selectedItems.push(item)
}
})
return selectedItems
}

Expand Down
2 changes: 1 addition & 1 deletion components/tooltip/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class Tooltip extends Component {
}
// 兼容处理 button disabled tooltip 不消失的问题
compatDisabledBtn = el => {
if (el.type.IS_HI_COMPONENT && el.props.disabled) {
if (el && el.type && el.type.IS_HI_COMPONENT && el.props.disabled) {
return React.cloneElement(el, {
style: {
...el.props.style,
Expand Down
2 changes: 1 addition & 1 deletion docs/demo/modal/section-size.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import DocViewer from '../../../libs/doc-viewer'
import Button from '../../../components/button'
import Modal from '../../../components/modal'
import Radio from '../../../components/radio'
const desc = '通过 size 自定义尺寸,可使用 large、normal、small,默认为 default'
const desc = '通过 size 自定义尺寸,可使用 large、default、small,默认为 default'
const prefix = 'modal-size'
const code = `import React from 'react'
import Button from '@hi-ui/hiui/es/button'
Expand Down
11 changes: 11 additions & 0 deletions docs/zh-CN/components/changelog.mdx
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
# 更新日志

## 2.2.1

- 修复 `<Select />` 多选时历史数据污染的问题 [#606](https://github.com/XiaoMi/hiui/issues/606)
- 修复 `<Checkbox />` data 无法更新的问题 [#603](https://github.com/XiaoMi/hiui/issues/603)
- 修复 `<Radio />` data 无法更新的问题 [#607](https://github.com/XiaoMi/hiui/issues/607)
- 修复 `<Notification />` 组件销毁没有清空定时器的问题 [#624](https://github.com/XiaoMi/hiui/issues/624)
- 修复 `<Notification />` onClose 失效的问题 [#627](https://github.com/XiaoMi/hiui/issues/627)
- 修复 `<DatePicker />` 长度不够展示时间被遮挡的问题 [#615](https://github.com/XiaoMi/hiui/issues/615)
- 修复 `<Counter />` 部分情况下出现 NaN 的问题 [#593](https://github.com/XiaoMi/hiui/issues/593)
- 修复 `<Form />` 动态渲染的时候 removeField 数量不正确的问题 [#636](https://github.com/XiaoMi/hiui/issues/636)

## 2.2.0

- 新增 `<Carousel />` 走马灯组件 [#115](https://github.com/XiaoMi/hiui/issues/115)
Expand Down
2 changes: 1 addition & 1 deletion docs/zh-CN/components/dropdown.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ import { Badge } from '@libs'
| onClick | 点击后的回调 | (item: DataItem)=> void | - | - |
| prefix | 前缀内容 | string \| ReactNode | - | - |
| suffix | 后缀内容 | string \| ReactNode | - | - |
| trigger | 下拉菜单触发方式 | string \| string [] | 'click' \| 'contextmenu' \| 'hover' | 'click' |
| trigger | 下拉菜单触发方式 | string \| string [] | 'click' \| 'contextmenu' | 'click' |

## Type

Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@hi-ui/hiui",
"version": "2.2.0",
"version": "2.2.1",
"description": "HIUI for React",
"scripts": {
"test": "node_modules/.bin/standard && node_modules/.bin/stylelint --config .stylelintrc 'components/**/*.scss'",
Expand Down