Skip to content

Commit 594bb7e

Browse files
authored
[docs] Extract nprogress from documentation page into a hook (expo#16056)
1 parent c78e4df commit 594bb7e

File tree

3 files changed

+28
-11
lines changed

3 files changed

+28
-11
lines changed

docs/common/use-nprogress.ts

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { useRouter } from 'next/router';
2+
import nprogress from 'nprogress';
3+
import { useEffect } from 'react';
4+
5+
/**
6+
* Set up nprogress using NextJS Router events.
7+
* This hook listens to these three events:
8+
* - routeChangeStart → start
9+
* - routeChangeComplete → done
10+
* - routeChangeError → done
11+
*/
12+
export function useNProgress() {
13+
const router = useRouter();
14+
15+
useEffect(function didMount() {
16+
router.events.on('routeChangeStart', nprogress.start);
17+
router.events.on('routeChangeComplete', nprogress.done);
18+
router.events.on('routeChangeError', nprogress.done);
19+
20+
return function didUnmount() {
21+
router.events.off('routeChangeStart', nprogress.start);
22+
router.events.off('routeChangeComplete', nprogress.done);
23+
router.events.off('routeChangeError', nprogress.done);
24+
};
25+
}, []);
26+
}

docs/components/DocumentationPage.tsx

-11
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { css } from '@emotion/react';
22
import { theme } from '@expo/styleguide';
33
import some from 'lodash/some';
44
import Router, { NextRouter } from 'next/router';
5-
import NProgress from 'nprogress';
65
import * as React from 'react';
76

87
import * as Utilities from '~/common/utilities';
@@ -80,17 +79,7 @@ export default class DocumentationPage extends React.Component<Props, State> {
8079
if (this.layoutRef.current) {
8180
window.__sidebarScroll = this.layoutRef.current.getSidebarScrollTop();
8281
}
83-
NProgress.start();
8482
});
85-
86-
Router.events.on('routeChangeComplete', () => {
87-
NProgress.done();
88-
});
89-
90-
Router.events.on('routeChangeError', () => {
91-
NProgress.done();
92-
});
93-
9483
window.addEventListener('resize', this.handleResize);
9584
}
9685

docs/pages/_app.tsx

+2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import React, { useState, useEffect } from 'react';
99
import { TrackPageView } from '~/common/analytics';
1010
import { preprocessSentryError } from '~/common/sentry-utilities';
1111
import * as markdown from '~/common/translate-markdown';
12+
import { useNProgress } from '~/common/use-nprogress';
1213
import DocumentationElements from '~/components/page-higher-order/DocumentationElements';
1314

1415
import 'react-diff-view/style/index.css';
@@ -52,6 +53,7 @@ export function reportWebVitals({ id, name, label, value }: NextWebVitalsMetric)
5253
function App({ Component, pageProps }: AppProps) {
5354
const googleAnalyticsId = 'UA-107832480-3';
5455
const [shouldLoadAnalytics, setShouldLoadAnalytics] = useState(false);
56+
useNProgress();
5557

5658
useEffect(() => {
5759
setShouldLoadAnalytics(true);

0 commit comments

Comments
 (0)