Skip to content

Commit 2c087de

Browse files
authored
perf: split imports into smaller chunks (#528)
1 parent 30ff35d commit 2c087de

File tree

2 files changed

+51
-11
lines changed

2 files changed

+51
-11
lines changed

src/modules/main/Activity.tsx

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,58 @@
1-
import { FC } from 'react';
1+
import { FC, lazy, Suspense, SuspenseProps } from 'react';
22

33
import { ActivityType } from '@/interfaces/interactionProcess';
44

55
import { useLocalContext } from '@graasp/apps-query-client';
66
import { useActivityContext } from '../context/ActivityContext';
7-
import ResponseCollection from '../responseCollection/ResponseCollection';
8-
import ResponseEvaluation from '../responseEvaluation/ResponseEvaluation';
97
import OrchestrationBar from '../orchestration/OrchestrationBar';
108
import { useSettings } from '../context/SettingsContext';
11-
import ResultsView from '../results/ResultsView';
9+
import Loader from '../common/Loader';
10+
11+
const ActivitySuspense: FC<SuspenseProps> = (props) => (
12+
<Suspense fallback={<Loader />} {...props}>
13+
{props.children}
14+
</Suspense>
15+
);
16+
17+
const getResponseEvaluation = (): JSX.Element => {
18+
const ResponseEvaluation = lazy(
19+
() => import('../responseEvaluation/ResponseEvaluation.js'),
20+
);
21+
return (
22+
<ActivitySuspense>
23+
<ResponseEvaluation />
24+
</ActivitySuspense>
25+
);
26+
};
27+
28+
const getResultsView = (): JSX.Element => {
29+
const ResultsView = lazy(() => import('../results/ResultsView.js'));
30+
return (
31+
<ActivitySuspense>
32+
<ResultsView />
33+
</ActivitySuspense>
34+
);
35+
};
36+
37+
const getResponseCollection = (): JSX.Element => {
38+
const ResponseCollection = lazy(
39+
() => import('../responseCollection/ResponseCollection.js'),
40+
);
41+
return (
42+
<ActivitySuspense>
43+
<ResponseCollection />
44+
</ActivitySuspense>
45+
);
46+
};
1247

1348
const getActivityComponent = (activity: ActivityType): JSX.Element => {
1449
switch (activity) {
1550
case ActivityType.Evaluation:
16-
return <ResponseEvaluation />;
51+
return getResponseEvaluation();
1752
case ActivityType.Results:
18-
return <ResultsView />;
53+
return getResultsView();
1954
default:
20-
return <ResponseCollection />;
55+
return getResponseCollection();
2156
}
2257
};
2358

src/modules/main/BuilderView.tsx

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { SyntheticEvent, useMemo, useState } from 'react';
1+
import { lazy, Suspense, SyntheticEvent, useMemo, useState } from 'react';
22
import { useTranslation } from 'react-i18next';
33

44
import { Paper, Stack } from '@mui/material';
@@ -16,8 +16,8 @@ import {
1616
} from '@/config/selectors';
1717

1818
import TabPanel from '../common/TabPanel';
19-
import SettingsView from '../settings/Settings';
2019
import Activity from './Activity';
20+
import Loader from '../common/Loader';
2121

2222
interface TabType {
2323
tabLabel: string;
@@ -26,6 +26,7 @@ interface TabType {
2626
}
2727

2828
const BuilderView = (): JSX.Element => {
29+
const SettingsView = lazy(() => import('../settings/Settings.js'));
2930
const [selectedTab, setSelectedTab] = useState<number>(0);
3031
const { t } = useTranslation();
3132
const handleChange = (event: SyntheticEvent, value: number): void => {
@@ -50,10 +51,14 @@ const BuilderView = (): JSX.Element => {
5051
const settingsTab = useMemo(
5152
() => ({
5253
tabLabel: t('SETTINGS_TAB'),
53-
tabChild: <SettingsView />,
54+
tabChild: (
55+
<Suspense fallback={<Loader />}>
56+
<SettingsView />
57+
</Suspense>
58+
),
5459
tabSelector: SETTINGS_TAB_CY,
5560
}),
56-
[t],
61+
[SettingsView, t],
5762
);
5863

5964
// const ideasViewTab = useMemo(

0 commit comments

Comments
 (0)