rsuite 4.10.0 → 4.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -7
- package/dist/rsuite.js +13 -13
- package/dist/rsuite.min.js +1 -1
- package/dist/rsuite.min.js.map +1 -1
- package/es/Overlay/OverlayTrigger.d.ts +1 -1
- package/es/Overlay/OverlayTrigger.js +12 -1
- package/lib/Overlay/OverlayTrigger.d.ts +1 -1
- package/lib/Overlay/OverlayTrigger.js +12 -1
- package/package.json +2 -2
- package/src/Overlay/OverlayTrigger.d.ts +1 -1
- package/src/Overlay/OverlayTrigger.tsx +22 -1
- package/src/Overlay/test/OverlayTriggerSpec.js +155 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { AnimationEventProps, StandardProps, TypeAttributes } from '../@types/common';
|
|
3
3
|
|
|
4
|
-
export type OverlayTriggerTrigger = 'click' | 'hover' | 'focus' | 'active' | 'none';
|
|
4
|
+
export type OverlayTriggerTrigger = 'click' | 'contextMenu' | 'hover' | 'focus' | 'active' | 'none';
|
|
5
5
|
|
|
6
6
|
export interface TriggerProps extends AnimationEventProps, StandardProps {
|
|
7
7
|
/** Triggering events */
|
|
@@ -49,7 +49,7 @@ function (_React$Component) {
|
|
|
49
49
|
var trigger = _this.props.trigger;
|
|
50
50
|
_this.mouseEnteredToSpeaker = false;
|
|
51
51
|
|
|
52
|
-
if (!isOneOf('click', trigger) && !isOneOf('active', trigger)) {
|
|
52
|
+
if (!isOneOf('click', trigger) && !isOneOf('active', trigger) && !isOneOf('contextMenu', trigger)) {
|
|
53
53
|
_this.hideWithCheck();
|
|
54
54
|
}
|
|
55
55
|
};
|
|
@@ -113,6 +113,10 @@ function (_React$Component) {
|
|
|
113
113
|
}
|
|
114
114
|
};
|
|
115
115
|
|
|
116
|
+
_this.preventDefault = function (event) {
|
|
117
|
+
event.preventDefault();
|
|
118
|
+
};
|
|
119
|
+
|
|
116
120
|
_this.handleDelayedShow = function () {
|
|
117
121
|
var _this$props2 = _this.props,
|
|
118
122
|
delayShow = _this$props2.delayShow,
|
|
@@ -216,6 +220,8 @@ function (_React$Component) {
|
|
|
216
220
|
|
|
217
221
|
if (isOneOf('click', trigger)) {
|
|
218
222
|
overlayProps.onHide = createChainedFunction(this.hide, onHide);
|
|
223
|
+
} else if (isOneOf('contextMenu', trigger)) {
|
|
224
|
+
overlayProps.onHide = createChainedFunction(this.hide, onHide);
|
|
219
225
|
} else if (isOneOf('active', trigger)) {
|
|
220
226
|
overlayProps.onHide = createChainedFunction(this.hide, onHide);
|
|
221
227
|
}
|
|
@@ -245,6 +251,7 @@ function (_React$Component) {
|
|
|
245
251
|
children = _this$props5.children,
|
|
246
252
|
speaker = _this$props5.speaker,
|
|
247
253
|
onClick = _this$props5.onClick,
|
|
254
|
+
onContextMenu = _this$props5.onContextMenu,
|
|
248
255
|
trigger = _this$props5.trigger,
|
|
249
256
|
onMouseOver = _this$props5.onMouseOver,
|
|
250
257
|
onMouseOut = _this$props5.onMouseOut,
|
|
@@ -264,6 +271,10 @@ function (_React$Component) {
|
|
|
264
271
|
props.onClick = createChainedFunction(this.toggleHideAndShow, props.onClick);
|
|
265
272
|
}
|
|
266
273
|
|
|
274
|
+
if (isOneOf('contextMenu', trigger)) {
|
|
275
|
+
props.onContextMenu = createChainedFunction(this.preventDefault, this.toggleHideAndShow, triggerProps.onContextMenu, onContextMenu);
|
|
276
|
+
}
|
|
277
|
+
|
|
267
278
|
if (isOneOf('active', trigger)) {
|
|
268
279
|
props.onClick = createChainedFunction(this.handleDelayedShow, props.onClick);
|
|
269
280
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { AnimationEventProps, StandardProps, TypeAttributes } from '../@types/common';
|
|
3
3
|
|
|
4
|
-
export type OverlayTriggerTrigger = 'click' | 'hover' | 'focus' | 'active' | 'none';
|
|
4
|
+
export type OverlayTriggerTrigger = 'click' | 'contextMenu' | 'hover' | 'focus' | 'active' | 'none';
|
|
5
5
|
|
|
6
6
|
export interface TriggerProps extends AnimationEventProps, StandardProps {
|
|
7
7
|
/** Triggering events */
|
|
@@ -70,7 +70,7 @@ function (_React$Component) {
|
|
|
70
70
|
var trigger = _this.props.trigger;
|
|
71
71
|
_this.mouseEnteredToSpeaker = false;
|
|
72
72
|
|
|
73
|
-
if (!(0, _isOneOf.default)('click', trigger) && !(0, _isOneOf.default)('active', trigger)) {
|
|
73
|
+
if (!(0, _isOneOf.default)('click', trigger) && !(0, _isOneOf.default)('active', trigger) && !(0, _isOneOf.default)('contextMenu', trigger)) {
|
|
74
74
|
_this.hideWithCheck();
|
|
75
75
|
}
|
|
76
76
|
};
|
|
@@ -134,6 +134,10 @@ function (_React$Component) {
|
|
|
134
134
|
}
|
|
135
135
|
};
|
|
136
136
|
|
|
137
|
+
_this.preventDefault = function (event) {
|
|
138
|
+
event.preventDefault();
|
|
139
|
+
};
|
|
140
|
+
|
|
137
141
|
_this.handleDelayedShow = function () {
|
|
138
142
|
var _this$props2 = _this.props,
|
|
139
143
|
delayShow = _this$props2.delayShow,
|
|
@@ -236,6 +240,8 @@ function (_React$Component) {
|
|
|
236
240
|
|
|
237
241
|
if ((0, _isOneOf.default)('click', trigger)) {
|
|
238
242
|
overlayProps.onHide = (0, _createChainedFunction.default)(this.hide, onHide);
|
|
243
|
+
} else if ((0, _isOneOf.default)('contextMenu', trigger)) {
|
|
244
|
+
overlayProps.onHide = (0, _createChainedFunction.default)(this.hide, onHide);
|
|
239
245
|
} else if ((0, _isOneOf.default)('active', trigger)) {
|
|
240
246
|
overlayProps.onHide = (0, _createChainedFunction.default)(this.hide, onHide);
|
|
241
247
|
}
|
|
@@ -265,6 +271,7 @@ function (_React$Component) {
|
|
|
265
271
|
children = _this$props5.children,
|
|
266
272
|
speaker = _this$props5.speaker,
|
|
267
273
|
onClick = _this$props5.onClick,
|
|
274
|
+
onContextMenu = _this$props5.onContextMenu,
|
|
268
275
|
trigger = _this$props5.trigger,
|
|
269
276
|
onMouseOver = _this$props5.onMouseOver,
|
|
270
277
|
onMouseOut = _this$props5.onMouseOut,
|
|
@@ -284,6 +291,10 @@ function (_React$Component) {
|
|
|
284
291
|
props.onClick = (0, _createChainedFunction.default)(this.toggleHideAndShow, props.onClick);
|
|
285
292
|
}
|
|
286
293
|
|
|
294
|
+
if ((0, _isOneOf.default)('contextMenu', trigger)) {
|
|
295
|
+
props.onContextMenu = (0, _createChainedFunction.default)(this.preventDefault, this.toggleHideAndShow, triggerProps.onContextMenu, onContextMenu);
|
|
296
|
+
}
|
|
297
|
+
|
|
287
298
|
if ((0, _isOneOf.default)('active', trigger)) {
|
|
288
299
|
props.onClick = (0, _createChainedFunction.default)(this.handleDelayedShow, props.onClick);
|
|
289
300
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rsuite",
|
|
3
|
-
"version": "4.10.
|
|
3
|
+
"version": "4.10.1",
|
|
4
4
|
"description": "A suite of react components",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"typings": "lib/index.d.ts",
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"react-lifecycles-compat": "^3.0.4",
|
|
64
64
|
"react-virtualized": "^9.21.0",
|
|
65
65
|
"recompose": "^0.30.0",
|
|
66
|
-
"rsuite-table": "^3.
|
|
66
|
+
"rsuite-table": "^3.15.1",
|
|
67
67
|
"schema-typed": "^1.5.1"
|
|
68
68
|
},
|
|
69
69
|
"peerDependencies": {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { AnimationEventProps, StandardProps, TypeAttributes } from '../@types/common';
|
|
3
3
|
|
|
4
|
-
export type OverlayTriggerTrigger = 'click' | 'hover' | 'focus' | 'active' | 'none';
|
|
4
|
+
export type OverlayTriggerTrigger = 'click' | 'contextMenu' | 'hover' | 'focus' | 'active' | 'none';
|
|
5
5
|
|
|
6
6
|
export interface TriggerProps extends AnimationEventProps, StandardProps {
|
|
7
7
|
/** Triggering events */
|
|
@@ -26,6 +26,7 @@ interface TriggerProps {
|
|
|
26
26
|
onMouseOut?: React.MouseEventHandler;
|
|
27
27
|
onBlur?: React.MouseEventHandler;
|
|
28
28
|
onClick?: React.MouseEventHandler;
|
|
29
|
+
onContextMenu?: React.MouseEventHandler;
|
|
29
30
|
onFocus?: React.MouseEventHandler;
|
|
30
31
|
}
|
|
31
32
|
|
|
@@ -81,7 +82,11 @@ class OverlayTrigger extends React.Component<OverlayTriggerProps, OverlayTrigger
|
|
|
81
82
|
handleSpeakerMouseLeave = () => {
|
|
82
83
|
const { trigger } = this.props;
|
|
83
84
|
this.mouseEnteredToSpeaker = false;
|
|
84
|
-
if (
|
|
85
|
+
if (
|
|
86
|
+
!isOneOf('click', trigger) &&
|
|
87
|
+
!isOneOf('active', trigger) &&
|
|
88
|
+
!isOneOf('contextMenu', trigger)
|
|
89
|
+
) {
|
|
85
90
|
this.hideWithCheck();
|
|
86
91
|
}
|
|
87
92
|
};
|
|
@@ -130,6 +135,10 @@ class OverlayTrigger extends React.Component<OverlayTriggerProps, OverlayTrigger
|
|
|
130
135
|
}
|
|
131
136
|
};
|
|
132
137
|
|
|
138
|
+
preventDefault = (event: React.MouseEvent<Element, MouseEvent>) => {
|
|
139
|
+
event.preventDefault();
|
|
140
|
+
};
|
|
141
|
+
|
|
133
142
|
handleDelayedShow = () => {
|
|
134
143
|
const { delayShow, enterable } = this.props;
|
|
135
144
|
const delay = isNil(delayShow) ? this.props.delay : delayShow;
|
|
@@ -197,6 +206,8 @@ class OverlayTrigger extends React.Component<OverlayTriggerProps, OverlayTrigger
|
|
|
197
206
|
|
|
198
207
|
if (isOneOf('click', trigger)) {
|
|
199
208
|
overlayProps.onHide = createChainedFunction(this.hide, onHide);
|
|
209
|
+
} else if (isOneOf('contextMenu', trigger)) {
|
|
210
|
+
overlayProps.onHide = createChainedFunction(this.hide, onHide);
|
|
200
211
|
} else if (isOneOf('active', trigger)) {
|
|
201
212
|
overlayProps.onHide = createChainedFunction(this.hide, onHide);
|
|
202
213
|
}
|
|
@@ -228,6 +239,7 @@ class OverlayTrigger extends React.Component<OverlayTriggerProps, OverlayTrigger
|
|
|
228
239
|
children,
|
|
229
240
|
speaker,
|
|
230
241
|
onClick,
|
|
242
|
+
onContextMenu,
|
|
231
243
|
trigger,
|
|
232
244
|
onMouseOver,
|
|
233
245
|
onMouseOut,
|
|
@@ -254,6 +266,15 @@ class OverlayTrigger extends React.Component<OverlayTriggerProps, OverlayTrigger
|
|
|
254
266
|
props.onClick = createChainedFunction(this.toggleHideAndShow, props.onClick);
|
|
255
267
|
}
|
|
256
268
|
|
|
269
|
+
if (isOneOf('contextMenu', trigger)) {
|
|
270
|
+
props.onContextMenu = createChainedFunction(
|
|
271
|
+
this.preventDefault,
|
|
272
|
+
this.toggleHideAndShow,
|
|
273
|
+
triggerProps.onContextMenu,
|
|
274
|
+
onContextMenu
|
|
275
|
+
);
|
|
276
|
+
}
|
|
277
|
+
|
|
257
278
|
if (isOneOf('active', trigger)) {
|
|
258
279
|
props.onClick = createChainedFunction(this.handleDelayedShow, props.onClick);
|
|
259
280
|
}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import ReactTestUtils from 'react-dom/test-utils';
|
|
3
|
+
import { getDOMNode } from '@test/testUtils';
|
|
4
|
+
|
|
5
|
+
import OverlayTrigger from '../OverlayTrigger';
|
|
6
|
+
import Tooltip from '../../Tooltip';
|
|
7
|
+
|
|
8
|
+
describe('OverlayTrigger', () => {
|
|
9
|
+
it('Should create Whisper element', () => {
|
|
10
|
+
const instance = getDOMNode(
|
|
11
|
+
<OverlayTrigger speaker={<Tooltip>tooltip</Tooltip>}>
|
|
12
|
+
<button type="button">button</button>
|
|
13
|
+
</OverlayTrigger>
|
|
14
|
+
);
|
|
15
|
+
assert.equal(instance.nodeName, 'BUTTON');
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it('Should maintain overlay classname when trigger click', () => {
|
|
19
|
+
const whisper = getDOMNode(
|
|
20
|
+
<OverlayTrigger
|
|
21
|
+
trigger="click"
|
|
22
|
+
speaker={<Tooltip className="test-whisper_click">test</Tooltip>}
|
|
23
|
+
>
|
|
24
|
+
<button>button</button>
|
|
25
|
+
</OverlayTrigger>
|
|
26
|
+
);
|
|
27
|
+
ReactTestUtils.Simulate.click(whisper);
|
|
28
|
+
assert.equal(document.getElementsByClassName('test-whisper_click').length, 1);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it('Should maintain overlay classname when trigger contextMenu', () => {
|
|
32
|
+
const whisper = getDOMNode(
|
|
33
|
+
<OverlayTrigger
|
|
34
|
+
trigger="contextMenu"
|
|
35
|
+
speaker={<Tooltip className="test-whisper_context-menu">test</Tooltip>}
|
|
36
|
+
>
|
|
37
|
+
<button>button</button>
|
|
38
|
+
</OverlayTrigger>
|
|
39
|
+
);
|
|
40
|
+
ReactTestUtils.Simulate.contextMenu(whisper);
|
|
41
|
+
assert.equal(document.getElementsByClassName('test-whisper_context-menu').length, 1);
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it('Should maintain overlay classname when trigger focus', () => {
|
|
45
|
+
const whisper = getDOMNode(
|
|
46
|
+
<OverlayTrigger
|
|
47
|
+
trigger="focus"
|
|
48
|
+
speaker={<Tooltip className="test-whisper_focus">test</Tooltip>}
|
|
49
|
+
>
|
|
50
|
+
<button>button</button>
|
|
51
|
+
</OverlayTrigger>
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
ReactTestUtils.Simulate.focus(whisper);
|
|
55
|
+
assert.equal(document.getElementsByClassName('test-whisper_focus').length, 1);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it('Should maintain overlay classname when trigger mouseOver and setting [trigger="hover"]', () => {
|
|
59
|
+
const whisper = getDOMNode(
|
|
60
|
+
<OverlayTrigger
|
|
61
|
+
trigger="hover"
|
|
62
|
+
speaker={<Tooltip className="test-whisper_hover">test</Tooltip>}
|
|
63
|
+
>
|
|
64
|
+
<button>button</button>
|
|
65
|
+
</OverlayTrigger>
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
ReactTestUtils.Simulate.mouseOver(whisper);
|
|
69
|
+
assert.equal(document.getElementsByClassName('test-whisper_hover').length, 1);
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
it('Should maintain overlay classname when trigger click and setting [trigger="active"] ', () => {
|
|
73
|
+
const whisper = getDOMNode(
|
|
74
|
+
<OverlayTrigger
|
|
75
|
+
trigger="active"
|
|
76
|
+
speaker={<Tooltip className="test-whisper_active">test</Tooltip>}
|
|
77
|
+
>
|
|
78
|
+
<button>button</button>
|
|
79
|
+
</OverlayTrigger>
|
|
80
|
+
);
|
|
81
|
+
|
|
82
|
+
ReactTestUtils.Simulate.click(whisper);
|
|
83
|
+
assert.equal(document.getElementsByClassName('test-whisper_active').length, 1);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it('Should call onClick callback', done => {
|
|
87
|
+
const doneOp = () => {
|
|
88
|
+
done();
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
const whisper = getDOMNode(
|
|
92
|
+
<OverlayTrigger onClick={doneOp} trigger="click" speaker={<Tooltip />}>
|
|
93
|
+
<button>button</button>
|
|
94
|
+
</OverlayTrigger>
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
ReactTestUtils.Simulate.click(whisper);
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
it('Should call onContextMenu callback', done => {
|
|
101
|
+
const doneOp = () => {
|
|
102
|
+
done();
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
const whisper = getDOMNode(
|
|
106
|
+
<OverlayTrigger onContextMenu={doneOp} trigger="contextMenu" speaker={<Tooltip />}>
|
|
107
|
+
<button>button</button>
|
|
108
|
+
</OverlayTrigger>
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
ReactTestUtils.Simulate.contextMenu(whisper);
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
it('Should call onFocus callback', done => {
|
|
115
|
+
const doneOp = () => {
|
|
116
|
+
done();
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
const whisper = getDOMNode(
|
|
120
|
+
<OverlayTrigger onFocus={doneOp} trigger="focus" speaker={<Tooltip />}>
|
|
121
|
+
<button>button</button>
|
|
122
|
+
</OverlayTrigger>
|
|
123
|
+
);
|
|
124
|
+
|
|
125
|
+
ReactTestUtils.Simulate.focus(whisper);
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
it('Should call onMouseOver callback', done => {
|
|
129
|
+
const doneOp = () => {
|
|
130
|
+
done();
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
const whisper = getDOMNode(
|
|
134
|
+
<OverlayTrigger onMouseOver={doneOp} trigger="hover" speaker={<Tooltip />}>
|
|
135
|
+
<button>button</button>
|
|
136
|
+
</OverlayTrigger>
|
|
137
|
+
);
|
|
138
|
+
|
|
139
|
+
ReactTestUtils.Simulate.mouseOver(whisper);
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
it('Should call onMouseOut callback', done => {
|
|
143
|
+
const doneOp = () => {
|
|
144
|
+
done();
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
const whisper = getDOMNode(
|
|
148
|
+
<OverlayTrigger onMouseOut={doneOp} trigger="hover" speaker={<Tooltip />}>
|
|
149
|
+
<button>button</button>
|
|
150
|
+
</OverlayTrigger>
|
|
151
|
+
);
|
|
152
|
+
|
|
153
|
+
ReactTestUtils.Simulate.mouseOut(whisper);
|
|
154
|
+
});
|
|
155
|
+
});
|