Skip to content

Commit fffed60

Browse files
authored
feat(cra-template-seed): add route based code splitting and lazy loading of edit component (#961)
1 parent d242835 commit fffed60

File tree

4 files changed

+32
-22
lines changed

4 files changed

+32
-22
lines changed

packages/cra-template-seed/template/src/pages/Todo/Edit/TodoEdit.js

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
import React from 'react';
1+
import React, { Suspense, lazy } from 'react';
22
import { Helmet } from 'react-helmet';
33
import { useTodo } from '../../../hooks/services/useTodos';
44

5-
import { Spinner } from '@ui5/webcomponents-react/lib/Spinner';
5+
import { BusyIndicator } from '@ui5/webcomponents-react/lib/BusyIndicator';
66
import NavBack from '../../../components/NavBack/NavBack';
77
import CenteredContent from '../../../components/Layout/CenteredContent';
8-
import TodoEditForm from './TodoEditForm';
8+
9+
const TodoEditForm = lazy(() => import('./TodoEditForm'));
910

1011
const onSubmitEditForm = (values, actions) => {
1112
actions.setSubmitting(true);
@@ -24,8 +25,13 @@ const TodoEdit = ({ match }) => {
2425
<NavBack />
2526
<CenteredContent>
2627
<br />
27-
{isLoading && <Spinner />}
28-
{isSuccess && <TodoEditForm data={data.data.todos} onSubmitHandler={onSubmitEditForm} />}
28+
{isLoading && <BusyIndicator active />}
29+
30+
{isSuccess && (
31+
<Suspense fallback={<BusyIndicator active />}>
32+
<TodoEditForm data={data.data.todos} onSubmitHandler={onSubmitEditForm} />
33+
</Suspense>
34+
)}
2935
</CenteredContent>
3036
</>
3137
);

packages/cra-template-seed/template/src/pages/Todo/List/TodoList.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ import { TitleLevel } from '@ui5/webcomponents-react/lib/TitleLevel';
99
import { Text } from '@ui5/webcomponents-react/lib/Text';
1010
import { getUrl } from '../../../util/browser/BrowserProvider';
1111
import ComponentWithAuthorizationRestriction from '../../../auth/ComponentWithAuthorizationRestriction';
12-
import TodoListPaginatedItems from './TodoListPaginatedItems';
1312
import CenteredContent from '../../../components/Layout/CenteredContent';
13+
import TodoListPaginatedItems from './TodoListPaginatedItems';
1414

1515
const TodoList = () => {
1616
const history = useHistory();
@@ -54,7 +54,7 @@ const TodoList = () => {
5454
<Text>{isIE() ? 'This Text is rendered only for IE' : 'This Text is rendered only when is NOT IE'}</Text>
5555
</p>
5656

57-
<Title level={TitleLevel.H3}>Pagination + Edition (Formik and Yup)</Title>
57+
<Title level={TitleLevel.H3}>Lazy Loading + Pagination + Edition (Formik and Yup)</Title>
5858
<br />
5959
<TodoListPaginatedItems />
6060
</CenteredContent>

packages/cra-template-seed/template/src/pages/Todo/List/TodoListPaginatedItems.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { useTodos } from '../../../hooks/services/useTodos';
44

55
import { List } from '@ui5/webcomponents-react/lib/List';
66
import { StandardListItem } from '@ui5/webcomponents-react/lib/StandardListItem';
7-
import { Spinner } from '@ui5/webcomponents-react/lib/Spinner';
7+
import { BusyIndicator } from '@ui5/webcomponents-react/lib/BusyIndicator';
88
import { Title } from '@ui5/webcomponents-react/lib/Title';
99
import { TitleLevel } from '@ui5/webcomponents-react/lib/TitleLevel';
1010
import { Pagination } from '../../../components/Pagination/Pagination';
@@ -23,7 +23,7 @@ const TodoListPaginatedItems = () => {
2323
return (
2424
<div>
2525
{isLoading ? (
26-
<Spinner />
26+
<BusyIndicator active />
2727
) : (
2828
<>
2929
<Title level={TitleLevel.H5}>{`Records (${resolvedData.numberOfElements} / ${resolvedData.totalElements})`}</Title>

packages/cra-template-seed/template/src/routes/Routes.js

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,27 @@
1-
import React from 'react';
1+
import React, { lazy, Suspense } from 'react';
22
import { Route, Switch, Redirect } from 'react-router-dom';
33
import { getUrl } from '../util/browser/BrowserProvider';
44

5+
import { BusyIndicator } from '@ui5/webcomponents-react/lib/BusyIndicator';
56
import RouteWithAuthorizationRestriction from '../auth/RouteWithAuthorizationRestriction';
6-
import TodoList from '../pages/Todo/List/TodoList';
7-
import TodoEdit from '../pages/Todo/Edit/TodoEdit';
8-
import NotFound from '../pages/Fallback/NotFound';
9-
import Buggy from '../pages/Fallback/Buggy';
7+
8+
const TodoList = lazy(() => import('../pages/Todo/List/TodoList'));
9+
const TodoEdit = lazy(() => import('../pages/Todo/Edit/TodoEdit'));
10+
const NotFound = lazy(() => import('../pages/Fallback/NotFound'));
11+
const Buggy = lazy(() => import('../pages/Fallback/Buggy'));
1012

1113
const Routes = () => {
1214
return (
13-
<Switch>
14-
<Redirect path={getUrl('HOME')} exact to={getUrl('TODO_LIST')} />
15-
<RouteWithAuthorizationRestriction allowedAuthorities={['canAccessTodoListPage']} authorityKey="permissions" path={getUrl('TODO_LIST')} component={TodoList} />
16-
<RouteWithAuthorizationRestriction allowedAuthorities={['canAccessTodoEditPage']} authorityKey="permissions" path={getUrl('TODO_EDIT')} component={TodoEdit} />
17-
<Route path={getUrl('BUGGY')} exact component={Buggy} />
18-
<Route path={getUrl('NOT_FOUND')} exact component={NotFound} />
19-
<Route path={getUrl('ANY')} component={NotFound} />
20-
</Switch>
15+
<Suspense fallback={<BusyIndicator active />}>
16+
<Switch>
17+
<Redirect path={getUrl('HOME')} exact to={getUrl('TODO_LIST')} />
18+
<RouteWithAuthorizationRestriction allowedAuthorities={['canAccessTodoListPage']} authorityKey="permissions" path={getUrl('TODO_LIST')} component={TodoList} />
19+
<RouteWithAuthorizationRestriction allowedAuthorities={['canAccessTodoEditPage']} authorityKey="permissions" path={getUrl('TODO_EDIT')} component={TodoEdit} />
20+
<Route path={getUrl('BUGGY')} exact component={Buggy} />
21+
<Route path={getUrl('NOT_FOUND')} exact component={NotFound} />
22+
<Route path={getUrl('ANY')} component={NotFound} />
23+
</Switch>
24+
</Suspense>
2125
);
2226
};
2327

0 commit comments

Comments
 (0)