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.
@@ -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.0",
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.14.6",
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 (!isOneOf('click', trigger) && !isOneOf('active', trigger)) {
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
+ });