@appbuckets/react-ui
Version:
Just Another React UI Framework
189 lines (182 loc) • 5.79 kB
JavaScript
'use strict';
var tslib = require('tslib');
var React = require('react');
var clsx = require('clsx');
var reactTransitionGroup = require('react-transition-group');
var reactUiCore = require('@appbuckets/react-ui-core');
var transitions = require('@appbuckets/react-ui-styles/transitions');
require('../BucketTheme/BucketTheme.js');
var BucketContext = require('../BucketTheme/BucketContext.js');
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);
/* --------
* Component Render
* -------- */
var Fade = React__namespace.forwardRef(function (receivedProps, ref) {
/** Get component props */
var props = BucketContext.useWithDefaultProps('fade', receivedProps);
var appear = props.appear,
children = props.children,
easing = props.easing,
mountOnEnter = props.mountOnEnter,
style = props.style,
timeout = props.timeout,
visible = props.visible,
unMountOnExit = props.unMountOnExit,
userDefinedOnEnterHandler = props.onEnter,
userDefinedOnExitHandler = props.onExit,
userDefinedOnEnteringHandler = props.onEntering,
userDefinedOnExitingHandler = props.onExiting,
userDefinedOnEnteredHandler = props.onEntered,
userDefinedOnExitedHandler = props.onExited;
/** Initialize Ref */
var nodeRef = React__namespace.useRef(null);
var foreignRef = reactUiCore.useForkRef(
children === null || children === void 0 ? void 0 : children.ref,
ref
);
var handleRef = reactUiCore.useForkRef(nodeRef, foreignRef);
/** Normalize transition handler */
var normalizedTransitionCallback = function (callback) {
return function (maybeIsAppearing) {
if (callback && nodeRef.current) {
var node = nodeRef.current;
/** onEnter and onExit callbacks have different arguments length */
if (maybeIsAppearing !== undefined) {
callback(node, maybeIsAppearing);
} else {
callback(node);
}
}
};
};
var handleEntering = normalizedTransitionCallback(
userDefinedOnEnteringHandler
);
var handleEnter = normalizedTransitionCallback(function (node, isAppearing) {
/** Restart animation */
transitions.reflow(node);
/** Get transition props */
var transitionProps = transitions.getTransitionProps(
{ style: style, timeout: timeout, easing: easing },
{ mode: 'enter' }
);
/** Set CSS for Transition */
node.style.webkitTransition = transitions.createTransitionStyle(
'opacity',
transitionProps
);
node.style.transition = transitions.createTransitionStyle(
'opacity',
transitionProps
);
/** Call user defined handler */
if (userDefinedOnEnterHandler) {
userDefinedOnEnterHandler(node, isAppearing);
}
});
var handleEntered = normalizedTransitionCallback(userDefinedOnEnteredHandler);
var handleExiting = normalizedTransitionCallback(userDefinedOnExitingHandler);
var handleExit = normalizedTransitionCallback(function (node) {
/** Get transition props */
var transitionProps = transitions.getTransitionProps(
{ style: style, timeout: timeout, easing: easing },
{ mode: 'exit' }
);
/** Set CSS for Transition */
node.style.webkitTransition = transitions.createTransitionStyle(
'opacity',
transitionProps
);
node.style.transition = transitions.createTransitionStyle(
'opacity',
transitionProps
);
/** Call user defined handler */
if (userDefinedOnExitHandler) {
userDefinedOnExitHandler(node);
}
});
var handleExited = normalizedTransitionCallback(userDefinedOnExitedHandler);
// ----
// Component Render
// ----
return React__namespace.createElement(
reactTransitionGroup.Transition,
{
appear: appear,
in: visible,
nodeRef: nodeRef,
mountOnEnter: mountOnEnter,
unmountOnExit: unMountOnExit,
timeout: timeout || 300,
onEnter: handleEnter,
onEntering: handleEntering,
onEntered: handleEntered,
onExit: handleExit,
onExiting: handleExiting,
onExited: handleExited,
},
function (state) {
var classes = clsx__default['default'](
state,
'transitionable fade',
children === null || children === void 0
? void 0
: children.props.className
);
return (
!reactUiCore.childrenUtils.isNil(children) &&
React__namespace.createElement(
reactUiCore.Ref,
{ innerRef: handleRef },
React__namespace.cloneElement(children, {
className: classes,
style: tslib.__assign(
tslib.__assign(
{
visibility:
state === 'exited' && !visible ? 'hidden' : undefined,
},
style
),
children === null || children === void 0
? void 0
: children.props.style
),
})
)
);
}
);
});
Fade.displayName = 'Fade';
module.exports = Fade;