diff --git a/packages/webapp/src/components/App.tsx b/packages/webapp/src/components/App.tsx index 1a78ef10e..d8f3d21a1 100644 --- a/packages/webapp/src/components/App.tsx +++ b/packages/webapp/src/components/App.tsx @@ -1,4 +1,5 @@ // @ts-nocheck +import { lazy, Suspense } from 'react'; import { Router, Switch, Route } from 'react-router'; import { createBrowserHistory } from 'history'; import { QueryClientProvider, QueryClient } from 'react-query'; @@ -11,25 +12,26 @@ import 'moment/locale/es-us'; import AppIntlLoader from './AppIntlLoader'; import { EnsureAuthenticated } from '@/components/Guards/EnsureAuthenticated'; import GlobalErrors from '@/containers/GlobalErrors/GlobalErrors'; -import DashboardPrivatePages from '@/components/Dashboard/PrivatePages'; -import { Authentication } from '@/containers/Authentication/Authentication'; -import LazyLoader from '@/components/LazyLoader'; import { SplashScreen, DashboardThemeProvider } from '../components'; import { queryConfig } from '../hooks/query/base'; -import { EnsureUserEmailVerified } from './Guards/EnsureUserEmailVerified'; -import { EnsureAuthNotAuthenticated } from './Guards/EnsureAuthNotAuthenticated'; import { EnsureUserEmailNotVerified } from './Guards/EnsureUserEmailNotVerified'; -const EmailConfirmation = LazyLoader({ - loader: () => import('@/containers/Authentication/EmailConfirmation'), -}); -const RegisterVerify = LazyLoader({ - loader: () => import('@/containers/Authentication/RegisterVerify'), -}); -const OneClickDemoPage = LazyLoader({ - loader: () => import('@/containers/OneClickDemo/OneClickDemoPage'), -}); +const DashboardPrivatePages = lazy( + () => import('@/components/Dashboard/PrivatePages'), +); +const AuthenticationPage = lazy( + () => import('@/containers/Authentication/AuthenticationPage'), +); +const EmailConfirmation = lazy( + () => import('@/containers/Authentication/EmailConfirmation'), +); +const RegisterVerify = lazy( + () => import('@/containers/Authentication/RegisterVerify'), +); +const OneClickDemoPage = lazy( + () => import('@/containers/OneClickDemo/OneClickDemoPage'), +); /** * App inner. @@ -38,36 +40,27 @@ function AppInsider({ history }) { return (
- - - } /> - - - - - - - + + + + } /> + + + + + + + - - - - - - - - - - - - - - - - - - - + } + /> + } /> + } /> + + + diff --git a/packages/webapp/src/components/Dashboard/PrivatePages.tsx b/packages/webapp/src/components/Dashboard/PrivatePages.tsx index 85e91dead..fc81a9b55 100644 --- a/packages/webapp/src/components/Dashboard/PrivatePages.tsx +++ b/packages/webapp/src/components/Dashboard/PrivatePages.tsx @@ -1,35 +1,37 @@ // @ts-nocheck -import React from 'react'; +import React, { lazy } from 'react'; import { Switch, Route } from 'react-router'; import Dashboard from '@/components/Dashboard/Dashboard'; -import SetupWizardPage from '@/containers/Setup/WizardSetupPage'; -import EnsureOrganizationIsReady from '../Guards/EnsureOrganizationIsReady'; -import EnsureOrganizationIsNotReady from '../Guards/EnsureOrganizationIsNotReady'; import { PrivatePagesProvider } from './PrivatePagesProvider'; +import EnsureOrganizationIsReady from '../Guards/EnsureOrganizationIsReady'; +import { EnsureAuthenticated } from '../Guards/EnsureAuthenticated'; +import { EnsureUserEmailVerified } from '../Guards/EnsureUserEmailVerified'; import '@/style/pages/Dashboard/Dashboard.scss'; +const SetupWizardPage = lazy( + () => import('@/containers/Setup/WizardSetupPage'), +); /** * Dashboard inner private pages. */ export default function DashboardPrivatePages() { return ( - - - - - - - - - - - - - - - + + + + + } /> + + + + + + + + + ); } diff --git a/packages/webapp/src/components/LazyLoader.tsx b/packages/webapp/src/components/LazyLoader.tsx deleted file mode 100644 index 99008d973..000000000 --- a/packages/webapp/src/components/LazyLoader.tsx +++ /dev/null @@ -1,22 +0,0 @@ -// @ts-nocheck -import * as React from 'react'; -import * as Loadable from 'react-loadable'; - -const Loader = (config) => - Loadable({ - loading: (props) => { - if (props.error) { - /* tslint:disable */ - console.error(`======= DefaultLoader Error =======`); - console.error(props.error); - console.error(`======= DefaultLoader Error =======`); - /* tslint:enable */ - return null; - } - return null; - }, - delay: 250, - ...config - }); - -export default Loader; diff --git a/packages/webapp/src/components/Preferences/PreferencesContentRoute.tsx b/packages/webapp/src/components/Preferences/PreferencesContentRoute.tsx index 9de4144f6..199b08a56 100644 --- a/packages/webapp/src/components/Preferences/PreferencesContentRoute.tsx +++ b/packages/webapp/src/components/Preferences/PreferencesContentRoute.tsx @@ -1,21 +1,33 @@ // @ts-nocheck -import React from 'react'; +import React, { Suspense } from 'react'; import { Route, Switch } from 'react-router-dom'; -import preferencesRoutes from '@/routes/preferences'; +import { getPreferenceRoutes } from '@/routes/preferences'; +import { Spinner } from '@blueprintjs/core'; +import { Box } from '../Layout'; export default function DashboardContentRoute() { + const preferencesRoutes = getPreferenceRoutes(); + return ( - - {preferencesRoutes.map((route, index) => ( - - ))} - + + + + } + > + + {preferencesRoutes.map((route, index) => ( + + ))} + + ); } diff --git a/packages/webapp/src/containers/Authentication/Authentication.tsx b/packages/webapp/src/containers/Authentication/Authentication.tsx index 408dc78f0..e82856b04 100644 --- a/packages/webapp/src/containers/Authentication/Authentication.tsx +++ b/packages/webapp/src/containers/Authentication/Authentication.tsx @@ -2,10 +2,12 @@ import { Route, Switch, useLocation } from 'react-router-dom'; import BodyClassName from 'react-body-classname'; import styled from 'styled-components'; +import { Suspense } from 'react'; import { TransitionGroup, CSSTransition } from 'react-transition-group'; +import { Spinner } from '@blueprintjs/core'; import authenticationRoutes from '@/routes/authentication'; -import { Icon, FormattedMessage as T } from '@/components'; +import { Box, Icon, FormattedMessage as T } from '@/components'; import { AuthMetaBootProvider } from './AuthMetaBoot'; import '@/style/pages/Authentication/Auth.scss'; @@ -20,7 +22,15 @@ export function Authentication() { - + + + + } + > + + diff --git a/packages/webapp/src/containers/Authentication/AuthenticationPage.tsx b/packages/webapp/src/containers/Authentication/AuthenticationPage.tsx new file mode 100644 index 000000000..522d157c1 --- /dev/null +++ b/packages/webapp/src/containers/Authentication/AuthenticationPage.tsx @@ -0,0 +1,10 @@ +import { EnsureAuthNotAuthenticated } from "@/components/Guards/EnsureAuthNotAuthenticated"; +import { Authentication } from "./Authentication"; + +export default function AuthenticationPage() { + return ( + + + + ); +} diff --git a/packages/webapp/src/containers/Setup/WizardSetupPage.tsx b/packages/webapp/src/containers/Setup/WizardSetupPage.tsx index d61eb39bd..56b9de509 100644 --- a/packages/webapp/src/containers/Setup/WizardSetupPage.tsx +++ b/packages/webapp/src/containers/Setup/WizardSetupPage.tsx @@ -2,14 +2,17 @@ import React from 'react'; import SetupRightSection from './SetupRightSection'; import SetupLeftSection from './SetupLeftSection'; +import EnsureOrganizationIsNotReady from '@/components/Guards/EnsureOrganizationIsNotReady'; import '@/style/pages/Setup/SetupPage.scss'; export default function WizardSetupPage() { return ( -
- - -
+ +
+ + +
+
); -}; \ No newline at end of file +} diff --git a/packages/webapp/src/routes/authentication.tsx b/packages/webapp/src/routes/authentication.tsx index 7ce79dbbc..ed2e25e40 100644 --- a/packages/webapp/src/routes/authentication.tsx +++ b/packages/webapp/src/routes/authentication.tsx @@ -1,43 +1,35 @@ // @ts-nocheck -import LazyLoader from '@/components/LazyLoader'; +import { lazy } from 'react'; const BASE_URL = '/auth'; export default [ { path: `${BASE_URL}/login`, - component: LazyLoader({ - loader: () => import('@/containers/Authentication/Login'), - }), + component: lazy(() => import('@/containers/Authentication/Login')), }, { path: `${BASE_URL}/send_reset_password`, - component: LazyLoader({ - loader: () => import('@/containers/Authentication/SendResetPassword'), - }), + component: lazy( + () => import('@/containers/Authentication/SendResetPassword'), + ), }, { path: `${BASE_URL}/reset_password/:token`, - component: LazyLoader({ - loader: () => import('@/containers/Authentication/ResetPassword'), - }), + component: lazy(() => import('@/containers/Authentication/ResetPassword')), }, { path: `${BASE_URL}/invite/:token/accept`, - component: LazyLoader({ - loader: () => import('@/containers/Authentication/InviteAccept'), - }), + component: lazy(() => import('@/containers/Authentication/InviteAccept')), }, { path: `${BASE_URL}/register/email_confirmation`, - component: LazyLoader({ - loader: () => import('@/containers/Authentication/EmailConfirmation'), - }), + component: lazy( + () => import('@/containers/Authentication/EmailConfirmation'), + ), }, { path: `${BASE_URL}/register`, - component: LazyLoader({ - loader: () => import('@/containers/Authentication/Register'), - }), + component: lazy(() => import('@/containers/Authentication/Register')), }, ]; diff --git a/packages/webapp/src/routes/preferences.tsx b/packages/webapp/src/routes/preferences.tsx index 58f69f77f..5a9795c4d 100644 --- a/packages/webapp/src/routes/preferences.tsx +++ b/packages/webapp/src/routes/preferences.tsx @@ -1,88 +1,96 @@ // @ts-nocheck import { lazy } from 'react'; -import General from '@/containers/Preferences/General/General'; -import Users from '../containers/Preferences/Users/Users'; -import Roles from '../containers/Preferences/Users/Roles/RolesForm/RolesFormPage'; -import Accountant from '@/containers/Preferences/Accountant/Accountant'; -import Currencies from '@/containers/Preferences/Currencies/Currencies'; -import Item from '@/containers/Preferences/Item'; -// import SMSIntegration from '../containers/Preferences/SMSIntegration'; -import DefaultRoute from '../containers/Preferences/DefaultRoute'; -import Warehouses from '../containers/Preferences/Warehouses'; -import Branches from '../containers/Preferences/Branches'; -import Invoices from '../containers/Preferences/Invoices/PreferencesInvoices'; -import { PreferencesCreditNotes } from '../containers/Preferences/CreditNotes/PreferencesCreditNotes'; -import { PreferencesEstimates } from '@/containers/Preferences/Estimates/PreferencesEstimates'; -import { PreferencesReceipts } from '@/containers/Preferences/Receipts/PreferencesReceipts'; - -import BillingPage from '@/containers/Subscriptions/BillingPage'; const BASE_URL = '/preferences'; -export default [ +export const getPreferenceRoutes = () => [ { path: `${BASE_URL}/general`, - component: General, + component: lazy(() => import('@/containers/Preferences/General/General')), exact: true, }, { path: `${BASE_URL}/users`, - component: Users, + component: lazy(() => import('../containers/Preferences/Users/Users')), exact: true, }, { path: `${BASE_URL}/invoices`, - component: Invoices, + component: lazy( + () => import('../containers/Preferences/Invoices/PreferencesInvoices'), + ), exact: true, }, { path: `${BASE_URL}/credit-notes`, - component: PreferencesCreditNotes, + component: lazy(() => + import( + '../containers/Preferences/CreditNotes/PreferencesCreditNotes' + ).then((module) => ({ default: module.PreferencesCreditNotes })), + ), exact: true, }, { path: `${BASE_URL}/estimates`, - component: PreferencesEstimates, + component: lazy(() => + import('@/containers/Preferences/Estimates/PreferencesEstimates').then( + (module) => ({ default: module.PreferencesEstimates }), + ), + ), exact: true, }, { path: `${BASE_URL}/receipts`, - component: PreferencesReceipts, + component: lazy(() => + import('@/containers/Preferences/Receipts/PreferencesReceipts').then( + (module) => ({ default: module.PreferencesReceipts }), + ), + ), exact: true, }, { path: `${BASE_URL}/roles`, - component: Roles, + component: lazy( + () => + import('../containers/Preferences/Users/Roles/RolesForm/RolesFormPage'), + ), exact: true, }, { path: `${BASE_URL}/roles/:id`, - component: Roles, + component: lazy( + () => + import('../containers/Preferences/Users/Roles/RolesForm/RolesFormPage'), + ), exact: true, }, { path: `${BASE_URL}/currencies`, - component: Currencies, + component: lazy( + () => import('@/containers/Preferences/Currencies/Currencies'), + ), exact: true, }, { path: `${BASE_URL}/warehouses`, - component: Warehouses, + component: lazy(() => import('../containers/Preferences/Warehouses')), exact: true, }, { path: `${BASE_URL}/branches`, - component: Branches, + component: lazy(() => import('../containers/Preferences/Branches')), exact: true, }, { path: `${BASE_URL}/accountant`, - component: Accountant, + component: lazy( + () => import('@/containers/Preferences/Accountant/Accountant'), + ), exact: true, }, { path: `${BASE_URL}/items`, - component: Item, + component: lazy(() => import('@/containers/Preferences/Item')), exact: true, }, // { @@ -92,12 +100,12 @@ export default [ // }, { path: `${BASE_URL}/billing`, - component: BillingPage, + component: lazy(() => import('@/containers/Subscriptions/BillingPage')), exact: true, }, { path: `${BASE_URL}/`, - component: DefaultRoute, + component: lazy(() => import('../containers/Preferences/DefaultRoute')), exact: true, }, ];