Merge branch 'master' into develop

# Conflicts:
#	packages/client/src/routes/client.js
#	packages/client/src/routes/confirm.js
#	packages/client/src/routes/general.js
#	packages/client/src/routes/portalSettings.js
#	packages/common/package.json
#	packages/components/scrollbar/styled-scrollbar.js
#	packages/editor/package.json
#	packages/shared/package.json
#	packages/shared/utils/component-loader.ts
This commit is contained in:
Alexey Safronov 2024-03-04 17:38:42 +04:00
commit 77b5986876
9 changed files with 329 additions and 208 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "docspace", "name": "docspace",
"version": "2.0.3", "version": "2.0.4",
"private": true, "private": true,
"workspaces": { "workspaces": {
"packages": [ "packages": [

View File

@ -1,6 +1,6 @@
{ {
"name": "@docspace/client", "name": "@docspace/client",
"version": "2.0.3", "version": "2.0.4",
"private": true, "private": true,
"homepage": "", "homepage": "",
"scripts": { "scripts": {

View File

@ -5,7 +5,7 @@ import loadable from "@loadable/component";
import PrivateRoute from "../components/PrivateRouteWrapper"; import PrivateRoute from "../components/PrivateRouteWrapper";
import PublicRoute from "../components/PublicRouteWrapper"; import PublicRoute from "../components/PublicRouteWrapper";
import Error404 from "@docspace/shared/components/errors/Error404"; import Error404 from "@docspace/shared/components/errors/Error404";
import componentLoader from "@docspace/shared/utils/component-loader";
import ErrorBoundary from "../components/ErrorBoundaryWrapper"; import ErrorBoundary from "../components/ErrorBoundaryWrapper";
import FilesView from "SRC_DIR/pages/Home/View/Files"; import FilesView from "SRC_DIR/pages/Home/View/Files";
@ -14,41 +14,52 @@ import SettingsView from "SRC_DIR/pages/Home/View/Settings";
import { generalRoutes } from "./general"; import { generalRoutes } from "./general";
const Client = loadable(() => import("../Client")); const Client = loadable(() => componentLoader(() => import("../Client")));
const Home = loadable(() => import("../pages/Home")); const Home = loadable(() => componentLoader(() => import("../pages/Home")));
const Sdk = loadable(() => import("../pages/Sdk")); const Sdk = loadable(() => componentLoader(() => import("../pages/Sdk")));
const FormGallery = loadable(() => import("../pages/FormGallery")); const FormGallery = loadable(() =>
const PublicRoom = loadable(() => import("../pages/PublicRoom")); componentLoader(() => import("../pages/FormGallery")),
const About = loadable(() => import("../pages/About"));
const Wizard = loadable(() => import("../pages/Wizard"));
const PreparationPortal = loadable(() => import("../pages/PreparationPortal"));
const PortalUnavailable = loadable(() => import("../pages/PortalUnavailable"));
const ErrorUnavailable = loadable(
() => import("../components/ErrorUnavailableWrapper"),
); );
const AccessRestricted = loadable( const PublicRoom = loadable(() =>
() => import("@docspace/shared/components/errors/AccessRestricted"), componentLoader(() => import("../pages/PublicRoom")),
);
const About = loadable(() => componentLoader(() => import("../pages/About")));
const Wizard = loadable(() => componentLoader(() => import("../pages/Wizard")));
const PreparationPortal = loadable(() =>
componentLoader(() => import("../pages/PreparationPortal")),
);
const PortalUnavailable = loadable(() =>
componentLoader(() => import("../pages/PortalUnavailable")),
);
const ErrorUnavailable = loadable(() =>
componentLoader(() => import("../components/ErrorUnavailableWrapper")),
); );
const Error401 = loadable( const Error401 = loadable(() =>
() => import("@docspace/shared/components/errors/Error401"), componentLoader(() => import("@docspace/shared/components/errors/Error401")),
); );
const Error403 = loadable( const Error403 = loadable(() =>
() => import("@docspace/shared/components/errors/Error403"), componentLoader(() => import("@docspace/shared/components/errors/Error403")),
); );
const Error520 = loadable(() => import("../components/Error520Wrapper")); const Error520 = loadable(() =>
componentLoader(() => import("../components/Error520Wrapper")),
const ErrorAccessRestricted = loadable(
() => import("@docspace/shared/components/errors/AccessRestricted"),
); );
const ErrorOffline = loadable( const ErrorAccessRestricted = loadable(() =>
() => import("@docspace/shared/components/errors/ErrorOffline"), componentLoader(
() => import("@docspace/shared/components/errors/AccessRestricted"),
),
);
const ErrorOffline = loadable(() =>
componentLoader(
() => import("@docspace/shared/components/errors/ErrorOffline"),
),
); );
const ClientRoutes = [ const ClientRoutes = [
@ -413,7 +424,7 @@ const ClientRoutes = [
element: ( element: (
<PublicRoute> <PublicRoute>
<ErrorBoundary> <ErrorBoundary>
<AccessRestricted /> <ErrorAccessRestricted />
</ErrorBoundary> </ErrorBoundary>
</PublicRoute> </PublicRoute>
), ),

View File

@ -3,52 +3,69 @@ import loadable from "@loadable/component";
import ConfirmRoute from "../helpers/confirmRoute"; import ConfirmRoute from "../helpers/confirmRoute";
import ErrorBoundary from "../components/ErrorBoundaryWrapper"; import ErrorBoundary from "../components/ErrorBoundaryWrapper";
import componentLoader from "@docspace/shared/utils/component-loader";
import Error404 from "@docspace/shared/components/errors/Error404"; import Error404 from "@docspace/shared/components/errors/Error404";
import { AuthenticatedAction } from "../helpers/enums"; import { AuthenticatedAction } from "../helpers/enums";
const Confirm = loadable(() => import("../pages/Confirm")); const Confirm = loadable(() =>
componentLoader(() => import("../pages/Confirm")),
);
const ActivateUserForm = loadable( const ActivateUserForm = loadable(() =>
() => import("../pages/Confirm/sub-components/activateUser") componentLoader(() => import("../pages/Confirm/sub-components/activateUser")),
); );
const CreateUserForm = loadable( const CreateUserForm = loadable(() =>
() => import("../pages/Confirm/sub-components/createUser") componentLoader(() => import("../pages/Confirm/sub-components/createUser")),
); );
const ChangePasswordForm = loadable( const ChangePasswordForm = loadable(() =>
() => import("../pages/Confirm/sub-components/changePassword") componentLoader(
() => import("../pages/Confirm/sub-components/changePassword"),
),
); );
const ActivateEmailForm = loadable( const ActivateEmailForm = loadable(() =>
() => import("../pages/Confirm/sub-components/activateEmail") componentLoader(
() => import("../pages/Confirm/sub-components/activateEmail"),
),
); );
const ChangeEmailForm = loadable( const ChangeEmailForm = loadable(() =>
() => import("../pages/Confirm/sub-components/changeEmail") componentLoader(() => import("../pages/Confirm/sub-components/changeEmail")),
); );
const ChangePhoneForm = loadable( const ChangePhoneForm = loadable(() =>
() => import("../pages/Confirm/sub-components/changePhone") componentLoader(() => import("../pages/Confirm/sub-components/changePhone")),
); );
const ProfileRemoveForm = loadable( const ProfileRemoveForm = loadable(() =>
() => import("../pages/Confirm/sub-components/profileRemove") componentLoader(
() => import("../pages/Confirm/sub-components/profileRemove"),
),
); );
const ChangeOwnerForm = loadable( const ChangeOwnerForm = loadable(() =>
() => import("../pages/Confirm/sub-components/changeOwner") componentLoader(() => import("../pages/Confirm/sub-components/changeOwner")),
); );
const TfaAuthForm = loadable( const TfaAuthForm = loadable(() =>
() => import("../pages/Confirm/sub-components/tfaAuth") componentLoader(() => import("../pages/Confirm/sub-components/tfaAuth")),
); );
const TfaActivationForm = loadable( const TfaActivationForm = loadable(() =>
() => import("../pages/Confirm/sub-components/tfaActivation") componentLoader(
() => import("../pages/Confirm/sub-components/tfaActivation"),
),
); );
const RemovePortal = loadable( const RemovePortal = loadable(() =>
() => import("../pages/Confirm/sub-components/removePortal") componentLoader(() => import("../pages/Confirm/sub-components/removePortal")),
); );
const DeactivatePortal = loadable( const DeactivatePortal = loadable(() =>
() => import("../pages/Confirm/sub-components/deactivatePortal") componentLoader(
() => import("../pages/Confirm/sub-components/deactivatePortal"),
),
); );
const ContinuePortal = loadable( const ContinuePortal = loadable(() =>
() => import("../pages/Confirm/sub-components/continuePortal") componentLoader(
() => import("../pages/Confirm/sub-components/continuePortal"),
),
);
const Auth = loadable(() =>
componentLoader(() => import("../pages/Confirm/sub-components/auth")),
); );
const Auth = loadable(() => import("../pages/Confirm/sub-components/auth"));
const confirmRoutes = [ const confirmRoutes = [
{ {

View File

@ -1,11 +1,13 @@
import React from "react"; import React from "react";
import { Navigate } from "react-router-dom"; import { Navigate } from "react-router-dom";
import loadable from "@loadable/component"; import loadable from "@loadable/component";
import PrivateRoute from "../components/PrivateRouteWrapper"; import PrivateRoute from "../components/PrivateRouteWrapper";
import componentLoader from "@docspace/shared/utils/component-loader";
const Profile = loadable(() => import("../pages/Profile")); const Profile = loadable(() =>
componentLoader(() => import("../pages/Profile")),
);
const generalRoutes = [ const generalRoutes = [
{ {

View File

@ -4,174 +4,242 @@ import loadable from "@loadable/component";
import PrivateRoute from "../components/PrivateRouteWrapper"; import PrivateRoute from "../components/PrivateRouteWrapper";
import ErrorBoundary from "../components/ErrorBoundaryWrapper"; import ErrorBoundary from "../components/ErrorBoundaryWrapper";
import componentLoader from "@docspace/shared/utils/component-loader";
import Error404 from "@docspace/shared/components/errors/Error404"; import Error404 from "@docspace/shared/components/errors/Error404";
import { generalRoutes } from "./general"; import { generalRoutes } from "./general";
const PortalSettings = loadable(() => import("../pages/PortalSettings")); const PortalSettings = loadable(() =>
componentLoader(() => import("../pages/PortalSettings")),
const CustomizationSettings = loadable(
() => import("../pages/PortalSettings/categories/common/index.js"),
);
const LanguageAndTimeZoneSettings = loadable(
() =>
import(
"../pages/PortalSettings/categories/common/Customization/language-and-time-zone"
),
);
const WelcomePageSettings = loadable(
() =>
import(
"../pages/PortalSettings/categories/common/Customization/welcome-page-settings"
),
);
const DNSSettings = loadable(
() =>
import(
"../pages/PortalSettings/categories/common/Customization/dns-settings"
),
);
const PortalRenaming = loadable(
() =>
import(
"../pages/PortalSettings/categories/common/Customization/portal-renaming"
),
);
const WhiteLabel = loadable(
() => import("../pages/PortalSettings/categories/common/Branding/whitelabel"),
);
const CompanyInfoSettings = loadable(
() =>
import(
"../pages/PortalSettings/categories/common/Branding/companyInfoSettings"
),
);
const AdditionalResources = loadable(
() =>
import(
"../pages/PortalSettings/categories/common/Branding/additionalResources"
),
);
const SecuritySettings = loadable(
() => import("../pages/PortalSettings/categories/security/index.js"),
);
const TfaPage = loadable(
() => import("../pages/PortalSettings/categories/security/access-portal/tfa"),
);
const PasswordStrengthPage = loadable(
() =>
import(
"../pages/PortalSettings/categories/security/access-portal/passwordStrength"
),
);
const TrustedMailPage = loadable(
() =>
import(
"../pages/PortalSettings/categories/security/access-portal/trustedMail"
),
);
const IpSecurityPage = loadable(
() =>
import(
"../pages/PortalSettings/categories/security/access-portal/ipSecurity"
),
);
const BruteForceProtectionPage = loadable(
() =>
import(
"../pages/PortalSettings/categories/security/access-portal/bruteForceProtection"
),
);
const AdminMessagePage = loadable(
() =>
import(
"../pages/PortalSettings/categories/security/access-portal/adminMessage"
),
);
const SessionLifetimePage = loadable(
() =>
import(
"../pages/PortalSettings/categories/security/access-portal/sessionLifetime"
),
);
const Integration = loadable(
() => import("../pages/PortalSettings/categories/integration"),
);
const Payments = loadable(
() => import("../pages/PortalSettings/categories/payments"),
);
const Statistics = loadable(
() => import("../pages/PortalSettings/categories/storage-management"),
);
const QuotaPerRoom = loadable(
() =>
import(
"../pages/PortalSettings/categories/storage-management/sub-components/QuotaPerRoom.js"
),
);
const QuotaPerUser = loadable(
() =>
import(
"../pages/PortalSettings/categories/storage-management/sub-components/QuotaPerUser.js"
),
);
const ThirdParty = loadable(
() =>
import(
"../pages/PortalSettings/categories/integration/ThirdPartyServicesSettings"
),
); );
const DocumentService = loadable( const Statistics = loadable(() =>
() => componentLoader(
import("../pages/PortalSettings/categories/integration/DocumentService"), () => import("../pages/PortalSettings/categories/storage-management"),
),
);
const QuotaPerRoom = loadable(() =>
componentLoader(
() =>
import(
"../pages/PortalSettings/categories/storage-management/sub-components/QuotaPerRoom.js"
),
),
);
const QuotaPerUser = loadable(() =>
componentLoader(
() =>
import(
"../pages/PortalSettings/categories/storage-management/sub-components/QuotaPerUser.js"
),
),
); );
const SingleSignOn = loadable( const CustomizationSettings = loadable(() =>
() => import("../pages/PortalSettings/categories/integration/SingleSignOn"), componentLoader(
() => import("../pages/PortalSettings/categories/common/index.js"),
),
); );
const SPSettings = loadable( const LanguageAndTimeZoneSettings = loadable(() =>
() => componentLoader(
import( () =>
"../pages/PortalSettings/categories/integration/SingleSignOn/SPSettings" import(
), "../pages/PortalSettings/categories/common/Customization/language-and-time-zone"
),
),
); );
const SPMetadata = loadable( const WelcomePageSettings = loadable(() =>
() => componentLoader(
import( () =>
"../pages/PortalSettings/categories/integration/SingleSignOn/ProviderMetadata" import(
), "../pages/PortalSettings/categories/common/Customization/welcome-page-settings"
),
),
);
const DNSSettings = loadable(() =>
componentLoader(
() =>
import(
"../pages/PortalSettings/categories/common/Customization/dns-settings"
),
),
);
const PortalRenaming = loadable(() =>
componentLoader(
() =>
import(
"../pages/PortalSettings/categories/common/Customization/portal-renaming"
),
),
);
const WhiteLabel = loadable(() =>
componentLoader(
() =>
import("../pages/PortalSettings/categories/common/Branding/whitelabel"),
),
);
const CompanyInfoSettings = loadable(() =>
componentLoader(
() =>
import(
"../pages/PortalSettings/categories/common/Branding/companyInfoSettings"
),
),
);
const AdditionalResources = loadable(() =>
componentLoader(
() =>
import(
"../pages/PortalSettings/categories/common/Branding/additionalResources"
),
),
);
const SecuritySettings = loadable(() =>
componentLoader(
() => import("../pages/PortalSettings/categories/security/index.js"),
),
);
const TfaPage = loadable(() =>
componentLoader(
() =>
import("../pages/PortalSettings/categories/security/access-portal/tfa"),
),
);
const PasswordStrengthPage = loadable(() =>
componentLoader(
() =>
import(
"../pages/PortalSettings/categories/security/access-portal/passwordStrength"
),
),
);
const TrustedMailPage = loadable(() =>
componentLoader(
() =>
import(
"../pages/PortalSettings/categories/security/access-portal/trustedMail"
),
),
);
const IpSecurityPage = loadable(() =>
componentLoader(
() =>
import(
"../pages/PortalSettings/categories/security/access-portal/ipSecurity"
),
),
);
const BruteForceProtectionPage = loadable(() =>
componentLoader(
() =>
import(
"../pages/PortalSettings/categories/security/access-portal/bruteForceProtection"
),
),
);
const AdminMessagePage = loadable(() =>
componentLoader(
() =>
import(
"../pages/PortalSettings/categories/security/access-portal/adminMessage"
),
),
);
const SessionLifetimePage = loadable(() =>
componentLoader(
() =>
import(
"../pages/PortalSettings/categories/security/access-portal/sessionLifetime"
),
),
);
const Integration = loadable(() =>
componentLoader(
() => import("../pages/PortalSettings/categories/integration"),
),
);
const Payments = loadable(() =>
componentLoader(() => import("../pages/PortalSettings/categories/payments")),
);
// const ThirdParty = loadable(() =>
// componentLoader(
// () =>
// import(
// "../pages/PortalSettings/categories/integration/ThirdPartyServicesSettings"
// ),
// ),
// );
// const DocumentService = loadable(() =>
// componentLoader(
// () =>
// import("../pages/PortalSettings/categories/integration/DocumentService"),
// ),
// );
// const SingleSignOn = loadable(() =>
// componentLoader(
// () => import("../pages/PortalSettings/categories/integration/SingleSignOn"),
// ),
// );
const SPSettings = loadable(() =>
componentLoader(
() =>
import(
"../pages/PortalSettings/categories/integration/SingleSignOn/SPSettings"
),
),
);
const SPMetadata = loadable(() =>
componentLoader(
() =>
import(
"../pages/PortalSettings/categories/integration/SingleSignOn/ProviderMetadata"
),
),
); );
const DeveloperTools = loadable( const DeveloperTools = loadable(() =>
() => import("../pages/PortalSettings/categories/developer-tools/index.js"), componentLoader(
() => import("../pages/PortalSettings/categories/developer-tools/index.js"),
),
); );
const WebhookHistory = loadable( const WebhookHistory = loadable(() =>
() => componentLoader(
import( () =>
"../pages/PortalSettings/categories/developer-tools/Webhooks/WebhookHistory" import(
), "../pages/PortalSettings/categories/developer-tools/Webhooks/WebhookHistory"
),
),
); );
const WebhookDetails = loadable( const WebhookDetails = loadable(() =>
() => componentLoader(
import( () =>
"../pages/PortalSettings/categories/developer-tools/Webhooks/WebhookEventDetails" import(
), "../pages/PortalSettings/categories/developer-tools/Webhooks/WebhookEventDetails"
),
),
); );
const Backup = loadable( const Backup = loadable(() =>
() => import("../pages/PortalSettings/categories/data-management/index"), componentLoader(
() => import("../pages/PortalSettings/categories/data-management/index"),
),
); );
const DeleteDataPage = loadable( const DeleteDataPage = loadable(() =>
() => import("../pages/PortalSettings/categories/delete-data"), componentLoader(
() => import("../pages/PortalSettings/categories/delete-data"),
),
); );
const RestoreBackup = loadable( const RestoreBackup = loadable(() =>
() => componentLoader(
import( () =>
"../pages/PortalSettings/categories/data-management/backup/restore-backup/index" import(
), "../pages/PortalSettings/categories/data-management/backup/restore-backup/index"
),
),
); );
const Bonus = loadable(() => import("../pages/Bonus")); const Bonus = loadable(() => componentLoader(() => import("../pages/Bonus")));
const SimpleRoom = loadable( const SimpleRoom = loadable(
() => () =>

View File

@ -1,6 +1,6 @@
{ {
"name": "@docspace/login", "name": "@docspace/login",
"version": "2.0.3", "version": "2.0.4",
"private": true, "private": true,
"homepage": "/login", "homepage": "/login",
"scripts": { "scripts": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@docspace/shared", "name": "@docspace/shared",
"version": "2.0.3", "version": "2.0.4",
"private": true, "private": true,
"scripts": { "scripts": {
"build": "echo 'skip it'", "build": "echo 'skip it'",
@ -175,3 +175,4 @@
"react-dom": "^18.2.0" "react-dom": "^18.2.0"
} }
} }

View File

@ -0,0 +1,22 @@
export default function componentLoader(
lazyComponent: Function,
attemptsLeft: number = 3
) {
return new Promise((resolve, reject) => {
lazyComponent()
.then(resolve)
.catch((error: unknown) => {
// let us retry after 1500 ms
setTimeout(() => {
if (attemptsLeft === 1) {
reject(error);
return;
}
componentLoader(lazyComponent, attemptsLeft - 1).then(
resolve,
reject
);
}, 1500);
});
});
}