Skip to content

Commit e2bffac

Browse files
committed
Bump 0.5.0
1 parent 76951e7 commit e2bffac

10 files changed

+94
-44
lines changed

README.md

+4-2
Original file line numberDiff line numberDiff line change
@@ -96,9 +96,10 @@ For advanced usage, you can override the default handlers; `onMouseEnter` and `o
9696
+ `name` *(`string`|`string[]`)*: A name(s) to specify which tooltip(s) should be used.
9797
+ `content` *(`string`)*: A text content for tooltip.
9898
+ `place` *(`string`|`string[]`)*: A name of direction to specify a location of tooltip.
99+
+ `tagName` *(`string`)*: A tag name of wrapper element. Default is `span`.
99100
+ `delay` *(`boolean`|`number`)*: A number of duration for delay feature.
100101
+ `delayOn` *(`string`)*: A name of timing to enable the delay. `show`, `hide`, or `both`. Default is `hide`.
101-
+ `tagName` *(`string`)*: A tag name of wrapper element. Default is `span`.
102+
+ `onTimeout` *(`Function`)*: A callback function when timeout by delay feature.
102103
+ `onMouseEnter` *(`Function`)*: An event handler of mouseenter.
103104
+ `onMouseLeave` *(`Function`)*: An event handler of mouseleave.
104105

@@ -142,10 +143,11 @@ Please apply this middleware if you want to use 'delay' feature.
142143

143144
### `actions`
144145

145-
#### delay(*action*, *duration = `1500`*)
146+
#### delay(*action*, options = { *duration*: 1500, *callback*: null })
146147

147148
A helper function to enable 'delay' feature.
148149
Internally, it sets a duration of delay to the [meta](https://github.com/acdlite/flux-standard-action#meta) section of given action.
150+
In `options` argument, `duration` is used for duration of delay. `callback` is a callback function which is called after expired delay.
149151

150152
## Development
151153

lib/actions.js

+8-5
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,20 @@ var content = exports.content = (0, _reduxActions.createAction)(CONTENT);
2727
var place = exports.place = (0, _reduxActions.createAction)(PLACE);
2828

2929
var DELAY = exports.DELAY = prefix('delay');
30-
var DEFAULT_DURATION = 1500;
30+
var DURATION = 1500;
3131
function delay(action) {
32-
var duration = arguments.length <= 1 || arguments[1] === undefined ? DEFAULT_DURATION : arguments[1];
32+
var _ref = arguments.length <= 1 || arguments[1] === undefined ? { duration: DURATION } : arguments[1];
33+
34+
var duration = _ref.duration;
35+
var callback = _ref.callback;
3336

3437
if (!action.meta) {
3538
action.meta = {};
3639
}
37-
if (duration === true) {
38-
duration = DEFAULT_DURATION;
40+
if (typeof duration === 'undefined' || duration === true) {
41+
duration = DURATION;
3942
}
40-
action.meta[DELAY] = parseInt(duration);
43+
action.meta[DELAY] = { duration: parseInt(duration), callback: callback };
4144
return action;
4245
}
4346

lib/index.js

+6-4
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ var _tooltip = require('./tooltip');
1010
Object.defineProperty(exports, 'Tooltip', {
1111
enumerable: true,
1212
get: function get() {
13-
return _tooltip.default;
13+
return _interopRequireDefault(_tooltip).default;
1414
}
1515
});
1616

@@ -19,7 +19,7 @@ var _origin = require('./origin');
1919
Object.defineProperty(exports, 'Origin', {
2020
enumerable: true,
2121
get: function get() {
22-
return _origin.default;
22+
return _interopRequireDefault(_origin).default;
2323
}
2424
});
2525

@@ -28,7 +28,7 @@ var _reducer = require('./reducer');
2828
Object.defineProperty(exports, 'reducer', {
2929
enumerable: true,
3030
get: function get() {
31-
return _reducer.default;
31+
return _interopRequireDefault(_reducer).default;
3232
}
3333
});
3434

@@ -37,7 +37,7 @@ var _middleware = require('./middleware');
3737
Object.defineProperty(exports, 'middleware', {
3838
enumerable: true,
3939
get: function get() {
40-
return _middleware.default;
40+
return _interopRequireDefault(_middleware).default;
4141
}
4242
});
4343

@@ -51,5 +51,7 @@ var utils = _interopRequireWildcard(_utils);
5151

5252
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
5353

54+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
55+
5456
exports.actions = actions;
5557
exports.utils = utils;

lib/middleware.js

+8-1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ function middleware(store) {
3737
}
3838

3939
// Setup timeout
40+
var _action$meta$DELAY = action.meta[_actions.DELAY];
41+
var duration = _action$meta$DELAY.duration;
42+
var callback = _action$meta$DELAY.callback;
43+
4044
names.forEach(function (name) {
4145
var newToken = setTimeout(function () {
4246
// Ignore if token is cleared
@@ -48,8 +52,11 @@ function middleware(store) {
4852
// Dispatch original action
4953
delete action.meta[_actions.DELAY];
5054
next(action);
55+
56+
// Notify via callback
57+
callback && callback(action.type, duration, action);
5158
}
52-
}, action.meta[_actions.DELAY]);
59+
}, duration);
5360

5461
// Store timeout token
5562
next((0, _actions.startTimeout)({ name: name, token: newToken }));

lib/origin.js

+12-9
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
'use strict';
22

3-
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
4-
5-
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
6-
73
Object.defineProperty(exports, "__esModule", {
84
value: true
95
});
106

7+
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
8+
9+
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
10+
1111
var _react = require('react');
1212

1313
var _react2 = _interopRequireDefault(_react);
@@ -37,11 +37,13 @@ var Origin = function (_Component) {
3737
key: 'createWithDelay',
3838
value: function createWithDelay(creator) {
3939
var extras = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
40-
var duration = this.props.delay;
40+
var _props = this.props;
41+
var duration = _props.delay;
42+
var callback = _props.onTimeout;
4143

4244
var action = creator(_extends({}, this.props, extras));
43-
if (duration) {
44-
action = (0, _actions.delay)(action, duration || undefined);
45+
if (duration || callback) {
46+
action = (0, _actions.delay)(action, { duration: duration, callback: callback });
4547
}
4648
return action;
4749
}
@@ -55,7 +57,7 @@ var Origin = function (_Component) {
5557

5658
if (!props.onMouseEnter) {
5759
props.onMouseEnter = function (e) {
58-
var action = ['show', 'both'].indexOf(_this2.props.delayOn) !== -1 ? _this2.createWithDelay(_actions.show, { el: e.target }) : (0, _actions.show)(_extends({}, _this2.props, { el: e.target }));
60+
var action = ['show', 'both'].indexOf(_this2.props.delayOn) !== -1 ? _this2.createWithDelay(_actions.show, { origin: e.target }) : (0, _actions.show)(_extends({}, _this2.props, { origin: e.target }));
5961
_this2.props.dispatch(action);
6062
_this2.props.onHover && _this2.props.onHover(e);
6163
};
@@ -115,9 +117,10 @@ var Origin = function (_Component) {
115117
name: _react.PropTypes.oneOfType([_react.PropTypes.string, _react.PropTypes.arrayOf(_react.PropTypes.string)]),
116118
content: _react.PropTypes.string,
117119
place: _react.PropTypes.oneOfType([_react.PropTypes.string, _react.PropTypes.arrayOf(_react.PropTypes.string)]),
120+
tagName: _react.PropTypes.string,
118121
delay: _react.PropTypes.oneOfType([_react.PropTypes.bool, _react.PropTypes.number, _react.PropTypes.string]),
119122
delayOn: _react.PropTypes.oneOf(['show', 'hide', 'both']),
120-
tagName: _react.PropTypes.string,
123+
onTimeout: _react.PropTypes.func,
121124
onMouseEnter: _react.PropTypes.func,
122125
onMouseLeave: _react.PropTypes.func
123126
};

lib/reducer.js

+11-5
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
'use strict';
22

3+
Object.defineProperty(exports, "__esModule", {
4+
value: true
5+
});
6+
37
var _handlers;
48

59
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
610

7-
Object.defineProperty(exports, "__esModule", {
8-
value: true
9-
});
1011
exports.default = reducer;
1112

1213
var _utils = require('./utils');
@@ -18,16 +19,18 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
1819
var initial = {
1920
show: false,
2021
place: 'top',
22+
origin: null,
2123
el: null,
2224
auto: true,
2325
content: null,
2426
timeout: null
2527
};
2628

29+
var SHOW_PROPS = ['origin', 'el', 'place', 'content'];
30+
2731
var handlers = (_handlers = {}, _defineProperty(_handlers, _actions.SHOW, function (state, action) {
28-
var names = ['el', 'place', 'content'];
2932
var props = {};
30-
names.forEach(function (name) {
33+
SHOW_PROPS.forEach(function (name) {
3134
if (action.payload[name]) {
3235
props[name] = action.payload[name];
3336
} else {
@@ -55,6 +58,9 @@ function tooltip() {
5558
var state = arguments.length <= 0 || arguments[0] === undefined ? initial : arguments[0];
5659
var action = arguments[1];
5760

61+
// Check usage of deprecated props
62+
(0, _utils.deprecatedWarning)(action.payload);
63+
5864
var handler = handlers[action.type];
5965
return handler ? handler(state, action) : state;
6066
}

lib/styles.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
'use strict';
22

3-
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
4-
53
Object.defineProperty(exports, "__esModule", {
64
value: true
75
});
6+
7+
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
8+
89
var base = exports.base = {
910
padding: 0,
1011
fontSize: 0,

lib/tooltip.js

+12-8
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
'use strict';
22

3-
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
4-
5-
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
6-
73
Object.defineProperty(exports, "__esModule", {
84
value: true
95
});
106

7+
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
8+
9+
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
10+
1111
var _react = require('react');
1212

1313
var _react2 = _interopRequireDefault(_react);
@@ -52,8 +52,9 @@ var Tooltip = function (_Component) {
5252
return {
5353
// Props from state tree
5454
show: _react.PropTypes.bool.isRequired,
55-
place: _react.PropTypes.oneOfType([_react.PropTypes.string, _react.PropTypes.array]).isRequired,
55+
origin: _react.PropTypes.object,
5656
el: _react.PropTypes.object,
57+
place: _react.PropTypes.oneOfType([_react.PropTypes.string, _react.PropTypes.array]).isRequired,
5758
content: _react.PropTypes.string,
5859
auto: _react.PropTypes.bool.isRequired,
5960
within: _react.PropTypes.func,
@@ -87,11 +88,11 @@ var Tooltip = function (_Component) {
8788
_createClass(Tooltip, [{
8889
key: 'componentWillReceiveProps',
8990
value: function componentWillReceiveProps(nextProps) {
90-
var el = nextProps.el;
9191
var place = nextProps.place;
9292
var content = nextProps.content;
9393

94-
if (el && (this.props.el != el || this.props.place !== place || this.props.content !== content)) {
94+
var origin = (0, _utils.originOrEl)(nextProps);
95+
if (origin && ((0, _utils.originOrEl)(this.props) != origin || this.props.place !== place || this.props.content !== content)) {
9596
this.updatePosition(nextProps);
9697
}
9798
}
@@ -126,14 +127,17 @@ var Tooltip = function (_Component) {
126127
key: 'render',
127128
value: function render() {
128129
var _props2 = this.props;
130+
var show = _props2.show;
129131
var onHover = _props2.onHover;
130132
var onLeave = _props2.onLeave;
133+
134+
var origin = (0, _utils.originOrEl)(this.props);
131135
var _state = this.state;
132136
var place = _state.place;
133137
var offset = _state.offset;
134138

135139
var content = this.children();
136-
var visibility = this.props.el && this.props.show ? 'visible' : 'hidden';
140+
var visibility = origin && show ? 'visible' : 'hidden';
137141
var style = {
138142
base: _extends({}, styles.base, themes.simple.base, { visibility: visibility }, offset),
139143
content: _extends({}, styles.content, themes.simple.content),

lib/utils.js

+29-7
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
'use strict';
22

3+
Object.defineProperty(exports, "__esModule", {
4+
value: true
5+
});
6+
37
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
48

59
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
610

7-
Object.defineProperty(exports, "__esModule", {
8-
value: true
9-
});
1011
exports.position = position;
1112
exports.placement = placement;
1213
exports.opposite = opposite;
@@ -16,6 +17,14 @@ exports.amend = amend;
1617
exports.overDirs = overDirs;
1718
exports.adjust = adjust;
1819
exports.resolve = resolve;
20+
exports.deprecatedWarning = deprecatedWarning;
21+
exports.originOrEl = originOrEl;
22+
23+
var _isDom = require('is-dom');
24+
25+
var _isDom2 = _interopRequireDefault(_isDom);
26+
27+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1928

2029
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
2130

@@ -59,16 +68,15 @@ function position(el) {
5968
*
6069
* @param {string} place - 'top', 'right', 'bottom', or 'left'.
6170
* @param {Object} content - DOM element that contains a content.
62-
* @param {Object} origin - DOM element.
71+
* @param {Object} origin - DOM element or position object.
6372
* @return {Object} contains 'top', 'left', and extra keys.
6473
*/
6574
function placement(place, content, origin) {
6675
var gap = 12;
6776
var dim = dimension(content);
68-
var pos = position(origin);
77+
var pos = (0, _isDom2.default)(origin) ? position(origin) : { top: origin.y, right: origin.x, bottom: origin.y, left: origin.x, width: 0, height: 0 };
6978

7079
var offset = { width: dim.width, height: dim.height };
71-
7280
switch (place) {
7381
case 'top':case 'bottom':
7482
offset.left = pos.left + pos.width * 0.5 - dim.width * 0.5 + 'px';
@@ -230,9 +238,10 @@ function overDirs(tip, el) {
230238
* @return {Object} 'offset': style data to locate, 'place': final direction of the tooltip
231239
*/
232240
function adjust(content, props) {
233-
var origin = props.el;
234241
var auto = props.auto;
235242
var within = props.within;
243+
244+
var origin = originOrEl(props);
236245
var place = props.place;
237246

238247
if (typeof place === 'string') {
@@ -284,4 +293,17 @@ function resolve(obj) {
284293
}
285294

286295
return names;
296+
}
297+
298+
function deprecatedWarning(props) {
299+
if (props && props.el) {
300+
console.warn('DEPRECATED: Use \'origin\' instead of \'el\' in props for Tooltip component or \'show\' action.');
301+
}
302+
if (props && props.el && props.origin) {
303+
console.warn('Do not pass both \'origin\' and \'el\' props at the same time.');
304+
}
305+
}
306+
307+
function originOrEl(props) {
308+
return props.origin || props.el;
287309
}

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "redux-tooltip",
3-
"version": "0.4.6",
3+
"version": "0.5.0",
44
"description": "A tooltip React component for Redux",
55
"main": "./lib/index.js",
66
"repository": {

0 commit comments

Comments
 (0)