Skip to content

Commit c701c04

Browse files
Merge pull request #157 from glennflanagan/release/2.8.0
Release/2.8.0
2 parents d27ae14 + c06e0cd commit c701c04

File tree

6 files changed

+6806
-4201
lines changed

6 files changed

+6806
-4201
lines changed

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,12 @@ Is called when the Collapsible is opening.
115115
### **onClosing** | *function*
116116
Is called when the Collapsible is closing.
117117

118+
### **onTriggerOpening** | *function*
119+
Is called when the Collapsible open trigger is clicked. Like onOpening except it isn't called when the open prop is updated.
120+
121+
### **onTriggerClosing** | *function*
122+
Is called when the Collapsible close trigger is clicked. Like onClosing except it isn't called when the open prop is updated.
123+
118124
### **lazyRender** | *bool* | default: false
119125
Set this to true to postpone rendering of all of the content of the Collapsible until before it's opened for the first time
120126

__tests__/index.js

Lines changed: 67 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,20 @@ configure({ adapter: new Adapter() });
99

1010
const dummyEvent = { preventDefault: () => {}};
1111

12-
describe('<Collapsbile />', () => {
12+
class CollapsibleStateContainer extends React.Component {
13+
constructor(props) {
14+
super(props);
15+
this.state = {open: !this.props.changeOpenTo};
16+
}
17+
componentDidMount(){
18+
this.setState({open: this.props.changeOpenTo});
19+
}
20+
render() {
21+
return <Collapsible {...this.props} open={this.state.open}/>;
22+
}
23+
}
24+
25+
describe('<Collapsible />', () => {
1326
it('renders an element with the class `.Collapsible`.', () => {
1427
const wrapper = shallow(<Collapsible />);
1528
expect(wrapper.is('.Collapsible')).toEqual(true);
@@ -22,8 +35,8 @@ describe('<Collapsbile />', () => {
2235

2336
it('given a closed Collapsible fires the onOpening prop when clicked to open', () => {
2437
const mockOnOpening = jest.fn();
25-
const collapsbile = shallow(<Collapsible trigger='Hello World' onOpening={mockOnOpening}/> );
26-
const trigger = collapsbile.find('.Collapsible__trigger');
38+
const collapsible = shallow(<Collapsible trigger='Hello World' onOpening={mockOnOpening}/> );
39+
const trigger = collapsible.find('.Collapsible__trigger');
2740

2841
expect(trigger).toHaveLength(1);
2942
trigger.simulate('click', dummyEvent);
@@ -32,8 +45,8 @@ describe('<Collapsbile />', () => {
3245

3346
it('given an open Collapsible fires the onClosing prop when clicked to close', () => {
3447
const mockOnClosing = jest.fn();
35-
const collapsbile = mount(<Collapsible open trigger='Hello World' onClosing={mockOnClosing}/> );
36-
const trigger = collapsbile.find('.Collapsible__trigger');
48+
const collapsible = mount(<Collapsible open trigger='Hello World' onClosing={mockOnClosing}/> );
49+
const trigger = collapsible.find('.Collapsible__trigger');
3750

3851
expect(trigger).toHaveLength(1);
3952
trigger.simulate('click', dummyEvent);
@@ -42,8 +55,8 @@ describe('<Collapsbile />', () => {
4255

4356
it('given a closed Collapsible it fires the onOpen prop after the transistion', () => {
4457
const mockOnOpen = jest.fn();
45-
const collapsbile = shallow(<Collapsible open trigger='Hello World' onOpen={mockOnOpen}>Some Content</Collapsible> );
46-
const outer = collapsbile.find('.Collapsible__contentOuter');
58+
const collapsible = shallow(<Collapsible open trigger='Hello World' onOpen={mockOnOpen}>Some Content</Collapsible> );
59+
const outer = collapsible.find('.Collapsible__contentOuter');
4760

4861
expect(outer).toHaveLength(1);
4962
outer.simulate('transitionEnd', dummyEvent);
@@ -52,8 +65,8 @@ describe('<Collapsbile />', () => {
5265

5366
it('given an open Collapsible it fires the onClose prop after the transistion', () => {
5467
const mockOnClose = jest.fn();
55-
const collapsbile = shallow(<Collapsible trigger='Hello World' onClose={mockOnClose}>Some Content</Collapsible> );
56-
const outer = collapsbile.find('.Collapsible__contentOuter');
68+
const collapsible = shallow(<Collapsible trigger='Hello World' onClose={mockOnClose}>Some Content</Collapsible> );
69+
const outer = collapsible.find('.Collapsible__contentOuter');
5770

5871
expect(outer).toHaveLength(1);
5972
outer.simulate('transitionEnd', dummyEvent);
@@ -62,11 +75,53 @@ describe('<Collapsbile />', () => {
6275

6376
it('given a Collapsible with the handleTriggerClick prop, the handleTriggerClick prop gets fired', () => {
6477
const mockHandleTriggerClick = jest.fn();
65-
const collapsbile = shallow(<Collapsible handleTriggerClick={mockHandleTriggerClick} trigger="Hello world" />);
66-
const trigger = collapsbile.find('.Collapsible__trigger');
78+
const collapsible = shallow(<Collapsible handleTriggerClick={mockHandleTriggerClick} trigger="Hello world" />);
79+
const trigger = collapsible.find('.Collapsible__trigger');
6780

6881
expect(trigger).toHaveLength(1);
6982
trigger.simulate('click', dummyEvent);
7083
expect(mockHandleTriggerClick.mock.calls).toHaveLength(1);
7184
})
72-
})
85+
86+
describe('onTriggerOpening prop', () => {
87+
it('is called when a closed Collapsible is triggered', () => {
88+
const mockOnTriggerOpening = jest.fn();
89+
const collapsible = mount(<Collapsible trigger='Hello World' onTriggerOpening={mockOnTriggerOpening} />);
90+
const trigger = collapsible.find('.Collapsible__trigger');
91+
92+
expect(trigger).toHaveLength(1);
93+
trigger.simulate('click', dummyEvent);
94+
expect(mockOnTriggerOpening.mock.calls).toHaveLength(1);
95+
});
96+
97+
it("is not called when a closed collapsible's open prop changes to true", () => {
98+
const mockOnTriggerOpening = jest.fn();
99+
const collapsible = mount(<CollapsibleStateContainer changeOpenTo={true} trigger='Hello World' onTriggerOpening={mockOnTriggerOpening} />);
100+
const trigger = collapsible.find('.Collapsible__trigger');
101+
102+
expect(trigger).toHaveLength(1);
103+
expect(mockOnTriggerOpening.mock.calls).toHaveLength(0);
104+
});
105+
});
106+
107+
describe('onTriggerClosing prop', () => {
108+
it('is called when an open Collapsible is triggered', () => {
109+
const mockOnTriggerClosing = jest.fn();
110+
const collapsible = mount(<Collapsible open trigger='Hello World' onTriggerClosing={mockOnTriggerClosing} />);
111+
const trigger = collapsible.find('.Collapsible__trigger');
112+
113+
expect(trigger).toHaveLength(1);
114+
trigger.simulate('click', dummyEvent);
115+
expect(mockOnTriggerClosing.mock.calls).toHaveLength(1);
116+
});
117+
118+
it("is not called when an open collapsible's open prop changes to false", () => {
119+
const mockOnTriggerClosing = jest.fn();
120+
const collapsible = mount(<CollapsibleStateContainer changeOpenTo={false} trigger='Hello World' onTriggerClosing={mockOnTriggerClosing} />);
121+
const trigger = collapsible.find('.Collapsible__trigger');
122+
123+
expect(trigger).toHaveLength(1);
124+
expect(mockOnTriggerClosing.mock.calls).toHaveLength(0);
125+
});
126+
});
127+
})

index.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ export interface CollapsibleProps extends React.HTMLProps<Collapsible> {
2121
onClose?: () => void;
2222
onOpening?: () => void;
2323
onClosing?: () => void;
24+
onTriggerOpening?: () => void;
25+
onTriggerClosing?: () => void;
2426
trigger: string | React.ReactElement<any>;
2527
triggerWhenOpen?: string | React.ReactElement<any>;
2628
triggerDisabled?: boolean;

0 commit comments

Comments
 (0)