Files
madbase/control-plane-ui/node_modules/react-smooth/src/AnimateGroupChild.js
Vlad Durnea cffdf8af86
Some checks failed
CI/CD Pipeline / unit-tests (push) Failing after 1m16s
CI/CD Pipeline / integration-tests (push) Failing after 2m32s
CI/CD Pipeline / lint (push) Successful in 5m22s
CI/CD Pipeline / e2e-tests (push) Has been skipped
CI/CD Pipeline / build (push) Has been skipped
wip:milestone 0 fixes
2026-03-15 12:35:42 +02:00

87 lines
2.0 KiB
JavaScript

import React, { Component, Children } from 'react';
import { Transition } from 'react-transition-group';
import PropTypes from 'prop-types';
import Animate from './Animate';
const parseDurationOfSingleTransition = (options = {}) => {
const { steps, duration } = options;
if (steps && steps.length) {
return steps.reduce(
(result, entry) => result + (Number.isFinite(entry.duration) && entry.duration > 0 ? entry.duration : 0),
0,
);
}
if (Number.isFinite(duration)) {
return duration;
}
return 0;
};
class AnimateGroupChild extends Component {
constructor() {
super();
this.state = {
isActive: false,
};
}
handleStyleActive(style) {
if (style) {
const onAnimationEnd = style.onAnimationEnd
? () => {
style.onAnimationEnd();
}
: null;
this.setState({
...style,
onAnimationEnd,
isActive: true,
});
}
}
handleEnter = (node, isAppearing) => {
const { appearOptions, enterOptions } = this.props;
this.handleStyleActive(isAppearing ? appearOptions : enterOptions);
};
handleExit = () => {
const { leaveOptions } = this.props;
this.handleStyleActive(leaveOptions);
};
parseTimeout() {
const { appearOptions, enterOptions, leaveOptions } = this.props;
return (
parseDurationOfSingleTransition(appearOptions) +
parseDurationOfSingleTransition(enterOptions) +
parseDurationOfSingleTransition(leaveOptions)
);
}
render() {
const { children, appearOptions, enterOptions, leaveOptions, ...props } = this.props;
return (
<Transition {...props} onEnter={this.handleEnter} onExit={this.handleExit} timeout={this.parseTimeout()}>
{() => <Animate {...this.state}>{Children.only(children)}</Animate>}
</Transition>
);
}
}
AnimateGroupChild.propTypes = {
appearOptions: PropTypes.object,
enterOptions: PropTypes.object,
leaveOptions: PropTypes.object,
children: PropTypes.element,
};
export default AnimateGroupChild;