36 lines
1.0 KiB
TypeScript
36 lines
1.0 KiB
TypeScript
import { useRef } from '../lib/teact/teact';
|
|
|
|
import useForceUpdate from './useForceUpdate';
|
|
import useLastCallback from './useLastCallback';
|
|
import useSyncEffect from './useSyncEffect';
|
|
|
|
export default function useForumPanelRender(isForumPanelOpen = false) {
|
|
const shouldRenderForumPanelRef = useRef(isForumPanelOpen);
|
|
const isAnimationStartedRef = useRef(false);
|
|
const forceUpdate = useForceUpdate();
|
|
|
|
useSyncEffect(() => {
|
|
if (isForumPanelOpen) {
|
|
shouldRenderForumPanelRef.current = true;
|
|
}
|
|
}, [isForumPanelOpen]);
|
|
|
|
const handleForumPanelAnimationEnd = useLastCallback(() => {
|
|
shouldRenderForumPanelRef.current = false;
|
|
isAnimationStartedRef.current = false;
|
|
forceUpdate();
|
|
});
|
|
|
|
const handleForumPanelAnimationStart = useLastCallback(() => {
|
|
isAnimationStartedRef.current = true;
|
|
forceUpdate();
|
|
});
|
|
|
|
return {
|
|
shouldRenderForumPanel: shouldRenderForumPanelRef.current,
|
|
isAnimationStarted: isAnimationStartedRef.current,
|
|
handleForumPanelAnimationEnd,
|
|
handleForumPanelAnimationStart,
|
|
};
|
|
}
|