UNPKG

@appbuckets/react-ui

Version:
132 lines (124 loc) 3.45 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var tslib = require('tslib'); var React = require('react'); var clsx = require('clsx'); function _interopDefaultLegacy(e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; } function _interopNamespace(e) { if (e && e.__esModule) return e; var n = Object.create(null); if (e) { Object.keys(e).forEach(function (k) { if (k !== 'default') { var d = Object.getOwnPropertyDescriptor(e, k); Object.defineProperty( n, k, d.get ? d : { enumerable: true, get: function () { return e[k]; }, } ); } }); } n['default'] = e; return Object.freeze(n); } var React__namespace = /*#__PURE__*/ _interopNamespace(React); var clsx__default = /*#__PURE__*/ _interopDefaultLegacy(clsx); function useRipples() { // ---- // Initialize Ripples // ---- var _a = tslib.__read(React__namespace.useState([]), 2), ripples = _a[0], setRipples = _a[1]; // ---- // Show the ripple using click event // ---- var showRipple = React__namespace.useCallback(function (event, props) { var _a; /** If no event, return */ if ( !event || typeof ((_a = event === null || event === void 0 ? void 0 : event.currentTarget) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect) !== 'function' ) { return; } /** Get the absolute position of ripple */ var _b = event.currentTarget.getBoundingClientRect(), left = _b.left, top = _b.top; var x = event.clientX - left; var y = event.clientY - top; var size = Math.min( event.currentTarget.clientHeight, event.currentTarget.clientWidth ); var classes = clsx__default['default']('ripple', { inverted: props === null || props === void 0 ? void 0 : props.inverted, }); /** Add the new Ripple */ setRipples(function (curr) { return tslib.__spreadArray( tslib.__spreadArray([], tslib.__read(curr), false), [ { key: event.timeStamp, className: classes, style: { width: size, height: size, left: x - size / 2, top: y - size / 2, }, }, ], false ); }); }, []); // ---- // Remap Props Array to build Node // ---- var ripplesArray = React__namespace.useMemo( function () { return React__namespace.createElement( 'div', { className: 'ripple-container' }, ripples.map(function (props) { /** Build the handler to remove ripple from array on animation end */ var handleAnimationEnd = function () { setRipples(function (curr) { return curr.filter(function (previous) { return previous.key !== props.key; }); }); }; /** Return the Span Component */ return React__namespace.createElement( 'span', tslib.__assign({}, props, { onAnimationEnd: handleAnimationEnd }) ); }) ); }, [ripples] ); // ---- // Return utility // ---- return [showRipple, ripplesArray]; } exports.useRipples = useRipples;