1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-05-03 01:18:43 +02:00
unleash.unleash/frontend/src/component/common/AnimateOnMount/AnimateOnMount.tsx
Nuno Góis b496990f79
chore: add no unused imports biome rule (#5855)
Adds a Biome rule for "no unused imports", which is something we
sometimes have trouble catching.

We're adding this as a warning for now. It is safely and easily fixable
with `yarn lint:fix`.


![image](https://github.com/Unleash/unleash/assets/14320932/fd84dea8-6b20-4ba5-bfd8-047b9dcf2bff)

![image](https://github.com/Unleash/unleash/assets/14320932/990bb0b0-760a-4c5e-8136-d957e902bf0b)
2024-01-11 12:44:05 +00:00

66 lines
1.6 KiB
TypeScript

import { CSSProperties, useEffect, useState, useRef, FC } from 'react';
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
interface IAnimateOnMountProps {
mounted: boolean;
enter: CSSProperties;
start: CSSProperties;
leave?: CSSProperties;
onStart?: () => void;
onEnd?: () => void;
}
const AnimateOnMount: FC<IAnimateOnMountProps> = ({
mounted,
enter,
start,
leave,
children,
onStart,
onEnd,
}) => {
const [show, setShow] = useState(mounted);
const [styles, setStyles] = useState<CSSProperties>({});
const mountedRef = useRef<null | boolean>(null);
useEffect(() => {
if (mountedRef.current !== mounted || mountedRef === null) {
if (mounted) {
setShow(true);
onStart?.();
setTimeout(() => {
setStyles(enter);
}, 50);
} else {
if (!leave) {
setShow(false);
}
setStyles(leave || {});
}
}
}, [mounted, enter, onStart, leave]);
const onTransitionEnd = () => {
if (!mounted) {
setShow(false);
onEnd?.();
}
};
return (
<ConditionallyRender
condition={show}
show={
<div
onTransitionEnd={onTransitionEnd}
style={{ ...start, ...styles }}
>
{children}
</div>
}
/>
);
};
export default AnimateOnMount;