From 575bf2927d271d8e9f1adf0a8a2593779f55bd98 Mon Sep 17 00:00:00 2001 From: Daniel Valdivia <18384552+dvaldivia@users.noreply.github.com> Date: Fri, 19 Nov 2021 10:30:34 -0800 Subject: [PATCH] Lazy Load All Protected Routes (#1240) Signed-off-by: Daniel Valdivia <18384552+dvaldivia@users.noreply.github.com> --- portal-ui/src/screens/Console/Console.tsx | 102 ++++++++++++------ .../src/screens/Console/Users/ListUsers.tsx | 22 ++-- 2 files changed, 82 insertions(+), 42 deletions(-) diff --git a/portal-ui/src/screens/Console/Console.tsx b/portal-ui/src/screens/Console/Console.tsx index 14ffbd8ac..356e7d92e 100644 --- a/portal-ui/src/screens/Console/Console.tsx +++ b/portal-ui/src/screens/Console/Console.tsx @@ -14,7 +14,7 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -import React, { Fragment, useEffect, useState } from "react"; +import React, { Fragment, Suspense, useEffect, useState } from "react"; import { Theme } from "@mui/material/styles"; import createStyles from "@mui/styles/createStyles"; import withStyles from "@mui/styles/withStyles"; @@ -35,42 +35,74 @@ import { ISessionResponse } from "./types"; import { snackBarMessage } from "../../types"; import { snackBarCommon } from "./Common/FormComponents/common/styleLibrary"; import { ErrorResponseHandler } from "../../common/types"; -import Buckets from "./Buckets/Buckets"; -import Policies from "./Policies/Policies"; -import Dashboard from "./Dashboard/Dashboard"; + import Menu from "./Menu/Menu"; import api from "../../common/api"; -import Account from "./Account/Account"; -import Users from "./Users/Users"; -import Groups from "./Groups/Groups"; -import ConfigurationMain from "./Configurations/ConfigurationMain"; -import TenantDetails from "./Tenants/TenantDetails/TenantDetails"; -import License from "./License/License"; -import Trace from "./Trace/Trace"; -import Heal from "./Heal/Heal"; -import Watch from "./Watch/Watch"; -import HealthInfo from "./HealthInfo/HealthInfo"; -import Storage from "./Storage/Storage"; -import Metrics from "./Dashboard/Metrics"; -import Hop from "./Tenants/TenantDetails/hop/Hop"; + import MainError from "./Common/MainError/MainError"; -import AddTenant from "./Tenants/AddTenant/AddTenant"; -import NotificationEndpoints from "./NotificationEndpoints/NotificationEndpoints"; -import AddNotificationEndpoint from "./NotificationEndpoints/AddNotificationEndpoint"; -import NotificationTypeSelector from "./NotificationEndpoints/NotificationTypeSelector"; -import ListTiersConfiguration from "./Configurations/TiersConfiguration/ListTiersConfiguration"; -import TierTypeSelector from "./Configurations/TiersConfiguration/TierTypeSelector"; -import AddTierConfiguration from "./Configurations/TiersConfiguration/AddTierConfiguration"; -import ListTenants from "./Tenants/ListTenants/ListTenants"; -import Tools from "./Tools/Tools"; -import ErrorLogs from "./Logs/ErrorLogs/ErrorLogs"; -import LogsSearchMain from "./Logs/LogSearch/LogsSearchMain"; -import GroupsDetails from "./Groups/GroupsDetails"; -import Speedtest from "./Speedtest/Speedtest"; -import IconsScreen from "./Common/IconsScreen"; + +const Trace = React.lazy(() => import("./Trace/Trace")); +const Heal = React.lazy(() => import("./Heal/Heal")); +const Watch = React.lazy(() => import("./Watch/Watch")); +const HealthInfo = React.lazy(() => import("./HealthInfo/HealthInfo")); +const Storage = React.lazy(() => import("./Storage/Storage")); +const Metrics = React.lazy(() => import("./Dashboard/Metrics")); +const Hop = React.lazy(() => import("./Tenants/TenantDetails/hop/Hop")); + +const AddTenant = React.lazy(() => import("./Tenants/AddTenant/AddTenant")); + +const NotificationEndpoints = React.lazy( + () => import("./NotificationEndpoints/NotificationEndpoints") +); +const AddNotificationEndpoint = React.lazy( + () => import("./NotificationEndpoints/AddNotificationEndpoint") +); +const NotificationTypeSelector = React.lazy( + () => import("./NotificationEndpoints/NotificationTypeSelector") +); + +const ListTiersConfiguration = React.lazy( + () => import("./Configurations/TiersConfiguration/ListTiersConfiguration") +); +const TierTypeSelector = React.lazy( + () => import("./Configurations/TiersConfiguration/TierTypeSelector") +); +const AddTierConfiguration = React.lazy( + () => import("./Configurations/TiersConfiguration/AddTierConfiguration") +); +const ListTenants = React.lazy( + () => import("./Tenants/ListTenants/ListTenants") +); + +const ErrorLogs = React.lazy(() => import("./Logs/ErrorLogs/ErrorLogs")); +const LogsSearchMain = React.lazy( + () => import("./Logs/LogSearch/LogsSearchMain") +); +const GroupsDetails = React.lazy(() => import("./Groups/GroupsDetails")); + +const Tools = React.lazy(() => import("./Tools/Tools")); + +const IconsScreen = React.lazy(() => import("./Common/IconsScreen")); + +const Speedtest = React.lazy(() => import("./Speedtest/Speedtest")); const drawerWidth = 245; +const Buckets = React.lazy(() => import("./Buckets/Buckets")); +const Policies = React.lazy(() => import("./Policies/Policies")); +const Dashboard = React.lazy(() => import("./Dashboard/Dashboard")); + +const Account = React.lazy(() => import("./Account/Account")); +const Users = React.lazy(() => import("./Users/Users")); +const Groups = React.lazy(() => import("./Groups/Groups")); +const ConfigurationMain = React.lazy( + () => import("./Configurations/ConfigurationMain") +); +const TenantDetails = React.lazy( + () => import("./Tenants/TenantDetails/TenantDetails") +); +const License = React.lazy(() => import("./License/License")); + const styles = (theme: Theme) => createStyles({ root: { @@ -509,12 +541,16 @@ const Console = ({ exact path={route.path} children={(routerProps) => ( - + Loading...}> + + )} /> ))} - + Loading...}> + + {allowedRoutes.length > 0 ? ( diff --git a/portal-ui/src/screens/Console/Users/ListUsers.tsx b/portal-ui/src/screens/Console/Users/ListUsers.tsx index 1c2a9f49e..20cbc9f40 100644 --- a/portal-ui/src/screens/Console/Users/ListUsers.tsx +++ b/portal-ui/src/screens/Console/Users/ListUsers.tsx @@ -14,7 +14,7 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -import React, { Fragment, useEffect, useState } from "react"; +import React, { Fragment, Suspense, useEffect, useState } from "react"; import { connect } from "react-redux"; import { Theme } from "@mui/material/styles"; import createStyles from "@mui/styles/createStyles"; @@ -33,7 +33,6 @@ import { } from "../Common/FormComponents/common/styleLibrary"; import { setErrorSnackMessage } from "../../../actions"; import { ErrorResponseHandler } from "../../../common/types"; -import AddUser from "./AddUser"; import DeleteUser from "./DeleteUser"; import AddToGroup from "./BulkAddToGroup"; import TableWrapper from "../Common/TableWrapper/TableWrapper"; @@ -98,6 +97,7 @@ const ListUsers = ({ classes, setErrorSnackMessage, history }: IUsersProps) => { const [records, setRecords] = useState([]); const [loading, setLoading] = useState(true); const [addScreenOpen, setAddScreenOpen] = useState(false); + const [deleteOpen, setDeleteOpen] = useState(false); const [selectedUser, setSelectedUser] = useState(null); const [addGroupOpen, setAddGroupOpen] = useState(false); @@ -187,16 +187,20 @@ const ListUsers = ({ classes, setErrorSnackMessage, history }: IUsersProps) => { }, ]; + const AddUser = React.lazy(() => import("./AddUser")); + return ( {addScreenOpen && ( - { - closeAddModalAndRefresh(); - }} - /> + Loading...}> + { + closeAddModalAndRefresh(); + }} + /> + )} {policyOpen && (