|
|
@@ -1,5 +1,18 @@
|
|
|
import React, { PureComponent } from 'react';
|
|
|
import { Manager, Popper as ReactPopper, Reference } from 'react-popper';
|
|
|
+import Transition from 'react-transition-group/Transition';
|
|
|
+
|
|
|
+const defaultTransitionStyles = {
|
|
|
+ transition: 'opacity 200ms linear',
|
|
|
+ opacity: 0,
|
|
|
+};
|
|
|
+
|
|
|
+const transitionStyles = {
|
|
|
+ exited: { opacity: 0 },
|
|
|
+ entering: { opacity: 0 },
|
|
|
+ entered: { opacity: 1 },
|
|
|
+ exiting: { opacity: 0 },
|
|
|
+};
|
|
|
|
|
|
interface Props {
|
|
|
renderContent: (content: any) => any;
|
|
|
@@ -13,6 +26,7 @@ class Popper extends PureComponent<Props> {
|
|
|
render() {
|
|
|
const { children, renderContent, show, placement, refClassName } = this.props;
|
|
|
const { content } = this.props;
|
|
|
+
|
|
|
return (
|
|
|
<Manager>
|
|
|
<Reference>
|
|
|
@@ -22,20 +36,31 @@ class Popper extends PureComponent<Props> {
|
|
|
</div>
|
|
|
)}
|
|
|
</Reference>
|
|
|
- {show && (
|
|
|
- <ReactPopper placement={placement}>
|
|
|
- {({ ref, style, placement, arrowProps }) => {
|
|
|
- return (
|
|
|
- <div ref={ref} style={style} data-placement={placement} className="popper">
|
|
|
- <div className="popper__background">
|
|
|
- {renderContent(content)}
|
|
|
- <div ref={arrowProps.ref} data-placement={placement} className="popper__arrow" />
|
|
|
+ <Transition in={show} timeout={100}>
|
|
|
+ {transitionState => (
|
|
|
+ <ReactPopper placement={placement}>
|
|
|
+ {({ ref, style, placement, arrowProps }) => {
|
|
|
+ return (
|
|
|
+ <div
|
|
|
+ ref={ref}
|
|
|
+ style={{
|
|
|
+ ...style,
|
|
|
+ ...defaultTransitionStyles,
|
|
|
+ ...transitionStyles[transitionState],
|
|
|
+ }}
|
|
|
+ data-placement={placement}
|
|
|
+ className="popper"
|
|
|
+ >
|
|
|
+ <div className="popper__background">
|
|
|
+ {renderContent(content)}
|
|
|
+ <div ref={arrowProps.ref} data-placement={placement} className="popper__arrow" />
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- );
|
|
|
- }}
|
|
|
- </ReactPopper>
|
|
|
- )}
|
|
|
+ );
|
|
|
+ }}
|
|
|
+ </ReactPopper>
|
|
|
+ )}
|
|
|
+ </Transition>
|
|
|
</Manager>
|
|
|
);
|
|
|
}
|