react-outer-click
Advanced tools
Comparing version 3.3.1 to 3.4.0
# Changelog | ||
## v3.4.0 - 2020-10-25 | ||
### Added | ||
- Added type checking of `refs` parameter in `useOuterClick` hook. | ||
### Changed | ||
- Updated `handler` parameter of `useOuterClick` hook to allow `null`. | ||
- Updated `propTypes` to only be defined in non-production environments. | ||
- Updated devDependencies. | ||
- Updated React import to avoid using default import. | ||
### Removed | ||
- Removed `defaultProps` in favour of default values in object destructuring. | ||
## v3.3.1 - 2020-08-26 | ||
@@ -92,3 +109,3 @@ | ||
- Additional props are now passed to wrapper div inside `OuterClick` component. | ||
- Additional props are now passed to wrapper div inside `OuterClick` component. | ||
@@ -106,3 +123,3 @@ ## v2.0.0 - 2019-06-02 | ||
- **BREAKING** `OuterClick` component renders a wrapper `div` element (instead of using [`findDOMNode()`](https://reactjs.org/docs/react-dom.html#finddomnode).) | ||
- **BREAKING** Updated `children` prop-type of `OuterClick` component to be required. | ||
- **BREAKING** Updated `children` prop-type of `OuterClick` component to be required. | ||
- Bumped up version of [prop-types](https://www.npmjs.com/package/prop-types) to v15.7.2. | ||
@@ -109,0 +126,0 @@ - Changed `OuterClick` component to be functional and use hooks internally. |
@@ -17,3 +17,2 @@ 'use strict'; | ||
var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes); | ||
var React__default = /*#__PURE__*/_interopDefaultLegacy(React); | ||
var useComposedRef__default = /*#__PURE__*/_interopDefaultLegacy(useComposedRef); | ||
@@ -27,8 +26,16 @@ var useLatest__default = /*#__PURE__*/_interopDefaultLegacy(useLatest); | ||
var useOuterClick = function useOuterClick(refs, handler) { | ||
if (handler === void 0) { | ||
handler = function handler() {}; | ||
} | ||
if (process.env.NODE_ENV !== 'production') { | ||
if (Array.isArray(refs)) { | ||
refs.forEach(function (ref, i) { | ||
if (typeof ref !== 'object' || ref === null) { | ||
throw new TypeError("Expected `refs[" + i + "]` to be of type `object`, but received type `" + typeof ref + "`"); | ||
} | ||
}); | ||
} else if (typeof refs !== 'object' || refs === null) { | ||
throw new TypeError("Expected `refs` to be of type `array` or `object`, but received type `" + typeof refs + "`"); | ||
} | ||
if (process.env.NODE_ENV !== 'production' && typeof handler !== 'function') { | ||
throw new TypeError("Expected \"handler\" to be a function, not " + typeof handler + "."); | ||
if (typeof handler !== 'function' && handler != null) { | ||
throw new TypeError("Expected `handler` to be of type `function`, but received type `" + typeof handler + "`"); | ||
} | ||
} | ||
@@ -42,3 +49,3 @@ | ||
return ref.current && ref.current !== event.target && !ref.current.contains(event.target); | ||
})) { | ||
}) && handerRef.current != null) { | ||
handerRef.current(event); | ||
@@ -54,29 +61,31 @@ } | ||
}; | ||
}, []); | ||
}, []); // eslint-disable-line react-hooks/exhaustive-deps | ||
}; | ||
var OuterClick = /*#__PURE__*/React__default['default'].forwardRef(function (props, outerRef) { | ||
var Element = props.as, | ||
children = props.children, | ||
onOuterClick = props.onOuterClick, | ||
rest = _objectWithoutPropertiesLoose__default['default'](props, ["as", "children", "onOuterClick"]); | ||
var OuterClick = /*#__PURE__*/React.forwardRef(function OuterClick(_ref, userRef) { | ||
var _ref$as = _ref.as, | ||
Element = _ref$as === void 0 ? 'div' : _ref$as, | ||
_ref$children = _ref.children, | ||
children = _ref$children === void 0 ? null : _ref$children, | ||
_ref$onOuterClick = _ref.onOuterClick, | ||
onOuterClick = _ref$onOuterClick === void 0 ? null : _ref$onOuterClick, | ||
rest = _objectWithoutPropertiesLoose__default['default'](_ref, ["as", "children", "onOuterClick"]); | ||
var innerRef = React.useRef(); | ||
var ref = useComposedRef__default['default'](innerRef, outerRef); | ||
useOuterClick(innerRef, onOuterClick); | ||
return /*#__PURE__*/React__default['default'].createElement(Element, _extends__default['default']({}, rest, { | ||
var libRef = React.useRef(); | ||
var ref = useComposedRef__default['default'](libRef, userRef); | ||
useOuterClick(libRef, onOuterClick); | ||
return /*#__PURE__*/React.createElement(Element, _extends__default['default']({}, rest, { | ||
ref: ref | ||
}), children); | ||
}); | ||
OuterClick.defaultProps = { | ||
as: 'div', | ||
children: null | ||
}; | ||
OuterClick.propTypes = { | ||
as: PropTypes__default['default'].elementType, | ||
children: PropTypes__default['default'].node, | ||
onOuterClick: PropTypes__default['default'].func.isRequired | ||
}; | ||
if (process.env.NODE_ENV !== 'production') { | ||
OuterClick.propTypes = { | ||
as: PropTypes__default['default'].elementType, | ||
children: PropTypes__default['default'].node, | ||
onOuterClick: PropTypes__default['default'].func | ||
}; | ||
} | ||
exports.OuterClick = OuterClick; | ||
exports.useOuterClick = useOuterClick; |
import _extends from '@babel/runtime/helpers/extends'; | ||
import _objectWithoutPropertiesLoose from '@babel/runtime/helpers/objectWithoutPropertiesLoose'; | ||
import PropTypes from 'prop-types'; | ||
import React, { useEffect, useRef } from 'react'; | ||
import { useEffect, forwardRef, useRef, createElement } from 'react'; | ||
import useComposedRef from 'use-composed-ref'; | ||
@@ -13,8 +13,16 @@ import useLatest from 'use-latest'; | ||
var useOuterClick = function useOuterClick(refs, handler) { | ||
if (handler === void 0) { | ||
handler = function handler() {}; | ||
} | ||
if (process.env.NODE_ENV !== 'production') { | ||
if (Array.isArray(refs)) { | ||
refs.forEach(function (ref, i) { | ||
if (typeof ref !== 'object' || ref === null) { | ||
throw new TypeError("Expected `refs[" + i + "]` to be of type `object`, but received type `" + typeof ref + "`"); | ||
} | ||
}); | ||
} else if (typeof refs !== 'object' || refs === null) { | ||
throw new TypeError("Expected `refs` to be of type `array` or `object`, but received type `" + typeof refs + "`"); | ||
} | ||
if (process.env.NODE_ENV !== 'production' && typeof handler !== 'function') { | ||
throw new TypeError("Expected \"handler\" to be a function, not " + typeof handler + "."); | ||
if (typeof handler !== 'function' && handler != null) { | ||
throw new TypeError("Expected `handler` to be of type `function`, but received type `" + typeof handler + "`"); | ||
} | ||
} | ||
@@ -28,3 +36,3 @@ | ||
return ref.current && ref.current !== event.target && !ref.current.contains(event.target); | ||
})) { | ||
}) && handerRef.current != null) { | ||
handerRef.current(event); | ||
@@ -40,28 +48,30 @@ } | ||
}; | ||
}, []); | ||
}, []); // eslint-disable-line react-hooks/exhaustive-deps | ||
}; | ||
var OuterClick = /*#__PURE__*/React.forwardRef(function (props, outerRef) { | ||
var Element = props.as, | ||
children = props.children, | ||
onOuterClick = props.onOuterClick, | ||
rest = _objectWithoutPropertiesLoose(props, ["as", "children", "onOuterClick"]); | ||
var OuterClick = /*#__PURE__*/forwardRef(function OuterClick(_ref, userRef) { | ||
var _ref$as = _ref.as, | ||
Element = _ref$as === void 0 ? 'div' : _ref$as, | ||
_ref$children = _ref.children, | ||
children = _ref$children === void 0 ? null : _ref$children, | ||
_ref$onOuterClick = _ref.onOuterClick, | ||
onOuterClick = _ref$onOuterClick === void 0 ? null : _ref$onOuterClick, | ||
rest = _objectWithoutPropertiesLoose(_ref, ["as", "children", "onOuterClick"]); | ||
var innerRef = useRef(); | ||
var ref = useComposedRef(innerRef, outerRef); | ||
useOuterClick(innerRef, onOuterClick); | ||
return /*#__PURE__*/React.createElement(Element, _extends({}, rest, { | ||
var libRef = useRef(); | ||
var ref = useComposedRef(libRef, userRef); | ||
useOuterClick(libRef, onOuterClick); | ||
return /*#__PURE__*/createElement(Element, _extends({}, rest, { | ||
ref: ref | ||
}), children); | ||
}); | ||
OuterClick.defaultProps = { | ||
as: 'div', | ||
children: null | ||
}; | ||
OuterClick.propTypes = { | ||
as: PropTypes.elementType, | ||
children: PropTypes.node, | ||
onOuterClick: PropTypes.func.isRequired | ||
}; | ||
if (process.env.NODE_ENV !== 'production') { | ||
OuterClick.propTypes = { | ||
as: PropTypes.elementType, | ||
children: PropTypes.node, | ||
onOuterClick: PropTypes.func | ||
}; | ||
} | ||
export { OuterClick, useOuterClick }; |
{ | ||
"name": "react-outer-click", | ||
"version": "3.3.1", | ||
"version": "3.4.0", | ||
"description": "React component and hook which detect mouse clicks outside of itself.", | ||
@@ -12,6 +12,8 @@ "main": "lib/index.cjs.js", | ||
"build": "rollup -c", | ||
"coverage": "jest --coverage", | ||
"lint": "eslint .", | ||
"format": "prettier --write .", | ||
"prepare": "npm run build", | ||
"test": "echo \"Error: no test specified\" && exit 1" | ||
"prepublishOnly": "npm run test", | ||
"test": "jest" | ||
}, | ||
@@ -48,5 +50,8 @@ "repository": { | ||
"@rollup/plugin-babel": "^5.2.0", | ||
"@testing-library/jest-dom": "^5.11.4", | ||
"@testing-library/react": "^10.4.9", | ||
"babel-eslint": "^10.1.0", | ||
"eslint": "^7.7.0", | ||
"eslint-config-prettier": "^6.11.0", | ||
"eslint-plugin-jest": "^23.20.0", | ||
"eslint-plugin-prettier": "^3.1.4", | ||
@@ -56,9 +61,12 @@ "eslint-plugin-react": "^7.20.6", | ||
"husky": "^4.2.5", | ||
"jest": "^26.4.2", | ||
"lint-staged": "^10.2.13", | ||
"prettier": "^2.1.0", | ||
"rollup": "^2.26.5" | ||
"prettier": "^2.1.1", | ||
"react": "^16.13.1", | ||
"react-dom": "^16.13.1", | ||
"rollup": "^2.26.7" | ||
}, | ||
"peerDependencies": { | ||
"react": "^16.8.0" | ||
"react": ">=16.8.0" | ||
} | ||
} |
No tests
QualityPackage does not have any tests. This is a strong signal of a poorly maintained or low quality package.
Found 1 instance in 1 package
14441
139
0
21
4