Skip to content

Commit a44bb0b

Browse files
charleshansenpivotal
authored andcommitted
fix(expander): Manual triggers work in expanders
[#100595270] Signed-off-by: Elena Sharma <esharma@pivotal.io> Signed-off-by: Charles Hansen <chansen@pivotal.io>
1 parent ae02704 commit a44bb0b

File tree

3 files changed

+39
-17
lines changed

3 files changed

+39
-17
lines changed

library/spec/pivotal-ui-react/expander/expander_spec.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,19 @@ describe('ExpanderContent', function() {
8080
expect('.collapse').not.toHaveClass('in');
8181
});
8282
});
83+
describe('when toggling expanded prop', function() {
84+
beforeEach(function() {
85+
renderComponent.call(this, {expanded: true});
86+
jasmine.clock().tick(1000);
87+
});
88+
89+
it('toggles open/closed', function() {
90+
expect('.collapse').toHaveClass('in');
91+
renderComponent.call(this, {expanded: false});
92+
jasmine.clock().tick(1000);
93+
expect('.collapse').not.toHaveClass('in');
94+
})
95+
})
8396
});
8497

8598
describe('ExpanderTrigger', function() {

library/src/pivotal-ui-react/expander/expander.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ var ExpanderContent = React.createClass({
3333
return {expanded: this.props.expanded};
3434
},
3535

36+
componentWillReceiveProps(nextProps) {
37+
if (nextProps.expanded !== this.props.expanded) {
38+
this.setState({expanded: nextProps.expanded});
39+
}
40+
},
41+
3642
toggle() {
3743
this.setState({expanded: !this.state.expanded});
3844
},

styleguide/docs/react/expander.js

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ Require the subcomponents:
1818
1919
```
2020
var ExpanderContent = require('pui-react-expander').ExpanderContent;
21-
var ExpanderTrigger = require('pui-react-expander').ExpanderTrigger;
2221
```
2322
2423
@@ -34,22 +33,26 @@ See the example below for how to use these components in your own application.
3433
3534
```jsx_example
3635
var MoreInfo = React.createClass({
37-
componentDidMount: function () {
38-
this.refs.infoTrigger.setTarget(this.refs.infoContent);
39-
},
40-
render: function() {
41-
return (
42-
<main>
43-
<ExpanderContent ref="infoContent">
44-
<p className='h1 bg-neutral-2 type-neutral-9'>Content in expander</p>
45-
</ExpanderContent>
46-
<br/>
47-
<ExpanderTrigger ref="infoTrigger">
48-
<button className='btn btn-highlight'>Toggle Content</button>
49-
</ExpanderTrigger>
50-
</main>
51-
)
52-
}
36+
getInitialState() {
37+
return {expanded: false};
38+
},
39+
40+
toggleContent() {
41+
this.setState({expanded: !this.state.expanded});
42+
},
43+
44+
render: function() {
45+
return (
46+
<main>
47+
<ExpanderContent expanded={this.state.expanded}>
48+
<p className='h1 bg-neutral-2 type-neutral-9'>Content in expander</p>
49+
</ExpanderContent>
50+
<button className='btn btn-highlight' onClick={this.toggleContent}>
51+
Toggle Content
52+
</button>
53+
</main>
54+
);
55+
}
5356
});
5457
```
5558

0 commit comments

Comments
 (0)