diff --git a/packages/ui/src/providers/RouteTransition/ProgressBar/index.tsx b/packages/ui/src/providers/RouteTransition/ProgressBar/index.tsx index 643685f08..3816d3e38 100644 --- a/packages/ui/src/providers/RouteTransition/ProgressBar/index.tsx +++ b/packages/ui/src/providers/RouteTransition/ProgressBar/index.tsx @@ -1,11 +1,12 @@ 'use client' -import React, { useEffect } from 'react' +import React, { useEffect, useRef } from 'react' import { useRouteTransition } from '../index.js' import './index.scss' const transitionDuration = 200 const baseClass = 'progress-bar' +const initialDelay = 150 /** * Renders a progress bar that shows the progress of a route transition. @@ -23,13 +24,24 @@ const baseClass = 'progress-bar' export const ProgressBar = () => { const { isTransitioning, transitionProgress } = useRouteTransition() const [progressToShow, setProgressToShow] = React.useState(null) + const shouldDelayProgress = useRef(true) useEffect(() => { let clearTimerID: NodeJS.Timeout + let delayTimerID: NodeJS.Timeout if (isTransitioning) { - setProgressToShow(transitionProgress) + if (shouldDelayProgress.current) { + delayTimerID = setTimeout(() => { + setProgressToShow(transitionProgress) + shouldDelayProgress.current = false + }, initialDelay) + } else { + setProgressToShow(transitionProgress) + } } else { + shouldDelayProgress.current = true + // Fast forward to 100% when the transition is complete // Then fade out the progress bar directly after setProgressToShow(1) @@ -41,7 +53,10 @@ export const ProgressBar = () => { }, transitionDuration * 2) } - return () => clearTimeout(clearTimerID) + return () => { + clearTimeout(clearTimerID) + clearTimeout(delayTimerID) + } }, [isTransitioning, transitionProgress]) if (typeof progressToShow === 'number') { @@ -64,4 +79,6 @@ export const ProgressBar = () => { ) } + + return null } diff --git a/tsconfig.base.json b/tsconfig.base.json index ffd7ec771..c461af5dc 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -31,7 +31,7 @@ } ], "paths": { - "@payload-config": ["./test/_community/config.ts"], + "@payload-config": ["./test/admin/config.ts"], "@payloadcms/live-preview": ["./packages/live-preview/src"], "@payloadcms/live-preview-react": ["./packages/live-preview-react/src/index.ts"], "@payloadcms/live-preview-vue": ["./packages/live-preview-vue/src/index.ts"],