mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-24 01:42:55 +08:00
feat(core): make the synchronous animation trigger less frequently (#6412)
This commit is contained in:
@@ -196,17 +196,37 @@ const useSyncEngineSyncProgress = () => {
|
|||||||
((syncing && progress !== undefined) || isOverCapacity || !isOnline),
|
((syncing && progress !== undefined) || isOverCapacity || !isOnline),
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
const usePauseAnimation = (timeToResume = 5000) => {
|
||||||
|
const [paused, setPaused] = useState(false);
|
||||||
|
|
||||||
|
const resume = useCallback(() => {
|
||||||
|
setPaused(false);
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
const pause = useCallback(() => {
|
||||||
|
setPaused(true);
|
||||||
|
if (timeToResume > 0) {
|
||||||
|
setTimeout(resume, timeToResume);
|
||||||
|
}
|
||||||
|
}, [resume, timeToResume]);
|
||||||
|
|
||||||
|
return { paused, pause };
|
||||||
|
};
|
||||||
|
|
||||||
const WorkspaceInfo = ({ name }: { name: string }) => {
|
const WorkspaceInfo = ({ name }: { name: string }) => {
|
||||||
const { message, active } = useSyncEngineSyncProgress();
|
const { message, active } = useSyncEngineSyncProgress();
|
||||||
const currentWorkspace = useService(Workspace);
|
const currentWorkspace = useService(Workspace);
|
||||||
const isCloud = currentWorkspace.flavour === WorkspaceFlavour.AFFINE_CLOUD;
|
const isCloud = currentWorkspace.flavour === WorkspaceFlavour.AFFINE_CLOUD;
|
||||||
const { progress } = useDocEngineStatus();
|
const { progress } = useDocEngineStatus();
|
||||||
|
const { paused, pause } = usePauseAnimation();
|
||||||
|
|
||||||
// to make sure that animation will play first time
|
// to make sure that animation will play first time
|
||||||
const [delayActive, setDelayActive] = useState(false);
|
const [delayActive, setDelayActive] = useState(false);
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const delayOpen = 300;
|
if (paused) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const delayOpen = 0;
|
||||||
const delayClose = 200;
|
const delayClose = 200;
|
||||||
let timer: ReturnType<typeof setTimeout>;
|
let timer: ReturnType<typeof setTimeout>;
|
||||||
if (active) {
|
if (active) {
|
||||||
@@ -216,10 +236,11 @@ const WorkspaceInfo = ({ name }: { name: string }) => {
|
|||||||
} else {
|
} else {
|
||||||
timer = setTimeout(() => {
|
timer = setTimeout(() => {
|
||||||
setDelayActive(active);
|
setDelayActive(active);
|
||||||
|
pause();
|
||||||
}, delayClose);
|
}, delayClose);
|
||||||
}
|
}
|
||||||
return () => clearTimeout(timer);
|
return () => clearTimeout(timer);
|
||||||
}, [active]);
|
}, [active, pause, paused]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={styles.workspaceInfoSlider} data-active={delayActive}>
|
<div className={styles.workspaceInfoSlider} data-active={delayActive}>
|
||||||
|
|||||||
Reference in New Issue
Block a user