Просмотр исходного кода

panel-header: Add fade in transition to tooltip

Johannes Schill 7 лет назад
Родитель
Сommit
78e93a3a0f
1 измененных файлов с 38 добавлено и 13 удалено
  1. 38 13
      public/app/core/components/Tooltip/Popper.tsx

+ 38 - 13
public/app/core/components/Tooltip/Popper.tsx

@@ -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>
     );
   }