diff --git a/web/src/components/Changes/Changes.tsx b/web/src/components/Changes/Changes.tsx index 8bb637f14..dc54c3f91 100644 --- a/web/src/components/Changes/Changes.tsx +++ b/web/src/components/Changes/Changes.tsx @@ -79,7 +79,7 @@ export const Changes: React.FC = ({ lazy: !targetBranch || !sourceBranch }) const { - data: activities, + data: prActivities, loading: loadingActivities, error: errorActivities, refetch: refetchActivities @@ -87,7 +87,10 @@ export const Changes: React.FC = ({ path: `/api/v1/repos/${repoMetadata.path}/+/pullreq/${pullRequestMetadata?.number}/activities`, lazy: !pullRequestMetadata?.number }) - + const [activities, setActivities] = useState() + const showSpinner = useMemo(() => { + return loading || (loadingActivities && !activities) + }, [loading, loadingActivities, activities]) const diffStats = useMemo( () => (diffs || []).reduce( @@ -101,6 +104,18 @@ export const Changes: React.FC = ({ [diffs] ) + // Optimization to avoid showing unnecessary loading spinner. The trick is to + // show only the spinner when the component is mounted and not when refetching + // happens after some comments are authored. + useEffect( + function setActivitiesIfNotSet() { + if (prActivities) { + setActivities(prActivities) + } + }, + [prActivities] + ) + useEffect(() => { if (prHasChanged) { refetchActivities() @@ -144,7 +159,7 @@ export const Changes: React.FC = ({ return ( - +