Skip to content

Commit 2cd65dc

Browse files
张倩e1emeb0t
authored andcommitted
增加collapse对设置index的支持,增加input部分测试
1 parent 620cf17 commit 2cd65dc

File tree

6 files changed

+157
-25
lines changed

6 files changed

+157
-25
lines changed

site/docs/zh-CN/collapse.md

Lines changed: 38 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
:::demo
66
```js
7+
8+
79
render() {
810
const activeName = "1";
911
return (
@@ -37,28 +39,44 @@ render() {
3739

3840
:::demo 通过 `accordion` 属性来设置是否以手风琴模式显示。
3941
```js
42+
constructor(props) {
43+
super(props)
44+
45+
this.state = {
46+
activeName: '1'
47+
}
48+
}
49+
4050
render() {
41-
const activeName = "1";
4251
return (
43-
<Collapse value={activeName} accordion>
44-
<Collapse.Item title="一致性 Consistency" name="1">
45-
<div>与现实生活一致:与现实生活的流程、逻辑保持一致,遵循用户习惯的语言和概念;</div>
46-
<div>在界面中一致:所有的元素和结构需保持一致,比如:设计样式、图标和文本、元素的位置等。</div>
47-
</Collapse.Item>
48-
<Collapse.Item title="反馈 Feedback" name="2">
49-
<div>控制反馈:通过界面样式和交互动效让用户可以清晰的感知自己的操作;</div>
50-
<div>页面反馈:操作后,通过页面元素的变化清晰地展现当前状态。</div>
51-
</Collapse.Item>
52-
<Collapse.Item title="效率 Efficiency" name="3">
53-
<div>简化流程:设计简洁直观的操作流程;</div>
54-
<div>清晰明确:语言表达清晰且表意明确,让用户快速理解进而作出决策;</div>
55-
<div>帮助用户识别:界面简单直白,让用户快速识别而非回忆,减少用户记忆负担。</div>
56-
</Collapse.Item>
57-
<Collapse.Item title="可控 Controllability" name="4">
58-
<div>用户决策:根据场景可给予用户操作建议或安全提示,但不能代替用户进行决策;</div>
59-
<div>结果可控:用户可以自由的进行操作,包括撤销、回退和终止当前操作等。</div>
60-
</Collapse.Item>
61-
</Collapse>
52+
<div>
53+
<Button
54+
type="primary"
55+
style={{marginBottom: '15px'}}
56+
onClick={() => this.setState({ activeName: '3' })}
57+
>
58+
打开第三个
59+
</Button>
60+
<Collapse value={this.state.activeName} accordion>
61+
<Collapse.Item title="一致性 Consistency" name="1">
62+
<div>与现实生活一致:与现实生活的流程、逻辑保持一致,遵循用户习惯的语言和概念;</div>
63+
<div>在界面中一致:所有的元素和结构需保持一致,比如:设计样式、图标和文本、元素的位置等。</div>
64+
</Collapse.Item>
65+
<Collapse.Item title="反馈 Feedback" name="2">
66+
<div>控制反馈:通过界面样式和交互动效让用户可以清晰的感知自己的操作;</div>
67+
<div>页面反馈:操作后,通过页面元素的变化清晰地展现当前状态。</div>
68+
</Collapse.Item>
69+
<Collapse.Item title="效率 Efficiency" name="3">
70+
<div>简化流程:设计简洁直观的操作流程;</div>
71+
<div>清晰明确:语言表达清晰且表意明确,让用户快速理解进而作出决策;</div>
72+
<div>帮助用户识别:界面简单直白,让用户快速识别而非回忆,减少用户记忆负担。</div>
73+
</Collapse.Item>
74+
<Collapse.Item title="可控 Controllability" name="4">
75+
<div>用户决策:根据场景可给予用户操作建议或安全提示,但不能代替用户进行决策;</div>
76+
<div>结果可控:用户可以自由的进行操作,包括撤销、回退和终止当前操作等。</div>
77+
</Collapse.Item>
78+
</Collapse>
79+
</div>
6280
)
6381
}
6482
```

site/docs/zh-CN/input-number.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ constructor(props) {
1010
super(props);
1111

1212
this.state = {
13-
value: 1
13+
value: 0
1414
}
1515
}
1616

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import React from 'react';
2+
import { shallow, mount } from 'enzyme';
3+
4+
import Breadcrumb from '../';
5+
6+
describe('Breadcrumb test', () => {
7+
it('basic usage', () => {
8+
const w = shallow(
9+
<Breadcrumb>
10+
<Breadcrumb.Item>首页</Breadcrumb.Item>
11+
<Breadcrumb.Item>活动管理</Breadcrumb.Item>
12+
</Breadcrumb>
13+
);
14+
expect(w.is('.el-breadcrumb')).toBe(true);
15+
});
16+
17+
it('test children', () => {
18+
const w = mount(
19+
<Breadcrumb separator="">
20+
<Breadcrumb.Item>首页</Breadcrumb.Item>
21+
<Breadcrumb.Item>活动管理</Breadcrumb.Item>
22+
<Breadcrumb.Item>活动列表</Breadcrumb.Item>
23+
<Breadcrumb.Item>活动详情</Breadcrumb.Item>
24+
</Breadcrumb>
25+
);
26+
expect(w.find('.el-breadcrumb__item').length).toBe(4);
27+
});
28+
29+
it('test separator', () => {
30+
const w = mount(
31+
<Breadcrumb separator="/">
32+
<Breadcrumb.Item>首页</Breadcrumb.Item>
33+
<Breadcrumb.Item>活动管理</Breadcrumb.Item>
34+
<Breadcrumb.Item>活动列表</Breadcrumb.Item>
35+
<Breadcrumb.Item>活动详情</Breadcrumb.Item>
36+
</Breadcrumb>
37+
);
38+
expect(w.find('.el-breadcrumb__separator').at(0).text()).toBe('/');
39+
});
40+
});

src/collapse/Collapse.jsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ export default class Collapse extends Component {
2222
};
2323
}
2424

25+
componentWillReceiveProps (nextProps: Object) {
26+
this.setActiveNames(nextProps.value)
27+
}
28+
2529
setActiveNames(activeNames: string | Array<string>): void {
2630
activeNames = [].concat(activeNames);
2731
this.setState({ activeNames }, () => this.props.onChange(activeNames));

src/input/Input.jsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { Component, PropTypes } from '../../libs';
66
import calcTextareaHeight from './calcTextareaHeight'
77

88
type State = {
9-
textareaStyle: null | { height: string }
9+
textareaStyle: { resize: string, height?: string }
1010
}
1111

1212
export default class Input extends Component {
@@ -23,7 +23,7 @@ export default class Input extends Component {
2323
super(props);
2424

2525
this.state = {
26-
textareaStyle: null
26+
textareaStyle: { resize: props.resize }
2727
};
2828
}
2929

@@ -60,7 +60,6 @@ export default class Input extends Component {
6060
if (onChange) {
6161
onChange(e.target.value);
6262
}
63-
6463
this.resizeTextarea();
6564
}
6665

@@ -89,9 +88,10 @@ export default class Input extends Component {
8988

9089
const minRows = autosize.minRows;
9190
const maxRows = autosize.maxRows;
91+
const textareaCalcStyle = calcTextareaHeight(this.refs.textarea, minRows, maxRows);
9292

9393
this.setState({
94-
textareaStyle: calcTextareaHeight(this.refs.textarea, minRows, maxRows)
94+
textareaStyle: Object.assign({}, this.state.textareaStyle, textareaCalcStyle)
9595
});
9696
}
9797

@@ -116,6 +116,7 @@ export default class Input extends Component {
116116
delete otherProps.defaultValue;
117117
}
118118

119+
delete otherProps.resize;
119120
delete otherProps.style;
120121
delete otherProps.autosize;
121122
delete otherProps.onIconClick;
@@ -178,6 +179,7 @@ Input.propTypes = {
178179
// type === 'textarea'
179180
autosize: PropTypes.oneOfType([ PropTypes.bool, PropTypes.object ]),
180181
rows: PropTypes.number,
182+
resize: PropTypes.oneOf(['none', 'both', 'horizontal', 'vertical']),
181183

182184
// event
183185
onFocus: PropTypes.func,

src/input/__test__/Input_test.jsx

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import React from 'react';
2+
import { shallow, mount } from 'enzyme';
3+
import sinon from 'sinon';
4+
5+
import Input from '../';
6+
7+
// const delay = timeout => new Promise(resolve => setTimeout(resolve, timeout));
8+
9+
describe('Input test', () => {
10+
it('create', () => {
11+
const w = shallow(
12+
<Input placeholder="请输入内容" />
13+
);
14+
// to be tested: focus/placeholder/minlength/maxlength
15+
expect(w.hasClass('el-input')).toBeTruthy();
16+
});
17+
18+
it('disabled', () => {
19+
const w = mount(
20+
<Input disabled />
21+
);
22+
expect(w.find('.el-input input').prop('disabled')).toBe(true);
23+
});
24+
25+
it('icon', () => {
26+
const cb = sinon.spy();
27+
const w = mount(
28+
<Input
29+
icon="time"
30+
placeholder="请选择日期"
31+
onIconClick={cb}
32+
/>
33+
);
34+
expect(w.find('.el-icon-time').exists()).toBeTruthy();
35+
36+
w.find('.el-icon-time').simulate('click');
37+
expect(cb.callCount).toBe(1);
38+
});
39+
40+
it('size', () => {
41+
const w = mount(
42+
<Input size="large" />
43+
);
44+
expect(w.hasClass('el-input--large')).toBeTruthy();
45+
});
46+
47+
it('type', () => {
48+
const w = mount(
49+
<Input type="textarea" />
50+
);
51+
expect(w.hasClass('el-textarea')).toBeTruthy();
52+
});
53+
54+
it('rows', () => {
55+
const w = mount(
56+
<Input type="textarea" rows={3} />
57+
);
58+
expect(w.find('.el-textarea__inner').prop('rows')).toBe(3);
59+
});
60+
61+
it('resize', () => {
62+
const w = mount(
63+
<Input type="textarea" resize="both" />
64+
);
65+
expect(w.find('.el-textarea__inner').first().prop('style').resize).toBe('both');
66+
});
67+
68+
});

0 commit comments

Comments
 (0)