12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- /* eslint-disable react/destructuring-assignment */
- import React, { FC, ReactNode } from 'react';
- import { Transition } from '@douyinfe/semi-animation-react';
- import { toInteger } from 'lodash';
- import { TabPaneTransitionProps } from './interface';
- const TabPaneTransition: FC<TabPaneTransitionProps> = (props = {}) => {
- const direction = props.direction ? 1 : -1;
- const { mode } = props;
- let { motion } = props;
- const ratio = 60;
- if (typeof motion === 'function') {
- motion = motion(props);
- } else if (!motion || typeof motion !== 'object') {
- motion = {};
- }
- if (mode === 'vertical') {
- return (
- <Transition
- {...props}
- config={{ tension: 612, friction: 32 }}
- from={{ translateY: direction * ratio, opacity: 0 }}
- enter={{ translateY: 0, opacity: { val: 1, duration: 200 } } as any}
- leave={{ translateY: -1 * direction * ratio, opacity: { val: 0, duration: 200 } } as any}
- {...motion}
- >
- {typeof props.children === 'function' ?
- ({ translateY, opacity }: { translateY: number;opacity: number }): ReactNode => {
- // delete translateX in 0 in case of zIndex problems.
- const finalState = toInteger(translateY) === 0 ? { opacity } : {
- transform: `translateY(${toInteger(translateY)}px)`,
- opacity,
- };
- return props.children(finalState);
- } :
- props.children}
- </Transition>
- );
- }
- return (
- <Transition
- {...props}
- config={{ tension: 612, friction: 32 }}
- from={{ translateX: direction * ratio, opacity: 0 }}
- enter={{ translateX: 0, opacity: { val: 1, duration: 200 } } as any}
- leave={{ translateX: -1 * direction * ratio, opacity: { val: 0, duration: 200 } } as any}
- {...motion}
- >
- {typeof props.children === 'function' ?
- ({ translateX, opacity }: { translateX: number;opacity: number }): ReactNode => {
- // delete translateX in 0 in case of zIndex problems.
- const finalState = toInteger(translateX) === 0 ? { opacity } : {
- transform: `translateX(${toInteger(translateX)}px)`,
- opacity,
- };
- return props.children(finalState);
- } :
- props.children}
- </Transition>
- );
- };
- export default TabPaneTransition;
|