1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-11-10 01:19:53 +01:00
unleash.unleash/frontend/src/component/common/AnimateOnMount/AnimateOnMount.tsx
olav 3959e846e8 refactor: fix misc TS errors (#729)
* refactor: update test deps

* refactor: remove unused ts-expect-error annotations

* refactor: add missing arg and return types

* refactor: the loading prop is optional

* refactor: add missing arg and return types

* reafactor: fix value arg type

* refactor: fix missing array type

* refactor: the parameters field is an array

* refactor: use undefined instead of null in state

* refactor: add missing params type

* refactor: add missing children prop

* refactor: add missing array type

* refactor: add missing React imports

* refactor: use correct IProjectEnvironment type

* refactor: type errors as unknown

* refactor: the index prop is required

* refactor: fix date prop type

* refactor: fix tooltip placement prop type

* refactor: fix environments state type

* refactor: add missing arg types

* refactor: add guard for undefined field

* refactor: fix ChangePassword prop types

* refactor: fix MUI import paths

* refactor: add missing arg type

* refactor: fix showDialog prop type

* refactor: remove unused openUpdateDialog prop

* refactor: add missing non-null assertion

* refactor: remove unused types prop

* refactor: stricten API error handler types

* refactor: add missing undefined check

* refactor: add missing IProject id field

* refactor: fix ConditionallyRender condition prop types

* refactor: remove unused args

* refactor: add AddVariant prop types

* refactor: add types to UIContext

* refactor: fix event arg type

* refactor: add missing default impressionData field

* refactor: fix handleDeleteEnvironment prop args

* refactor: fix IFeatureMetrics field requirements

* refactor: add missing element types to ConditionallyRender

* refactor: remove unused ProjectAccess projectId prop

* refactor: add missing undefined check

* refactor: fix getCreateTogglePath arg type

* refactor: add missing IStrategyPayload import

* refactor: remove unused user arg

* refactor: add missing event arg type

* refactor: add missing style object types

* refactor: improve userApiErrors prop type

* refactor: the Dialogue onClose prop is optional

* refactor: fix the AddonEvents setEventValue prop type
2022-02-25 10:55:39 +01:00

67 lines
1.6 KiB
TypeScript

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