diff --git a/packages/client/public/locales/en/Settings.json b/packages/client/public/locales/en/Settings.json
index 6765d48c65..3207c225b2 100644
--- a/packages/client/public/locales/en/Settings.json
+++ b/packages/client/public/locales/en/Settings.json
@@ -258,6 +258,7 @@
"Statistics": "Statistics",
"StorageManagement": "Storage management",
"StoragePeriod": "Storage period",
+ "StorageQuotaWarningDescription": "Storage quota of {{quotaLimit}} is enabled for users of this {{productName}}. Limitations can occur during data import.",
"StudioTimeLanguageSettings": "Language and Time Zone Settings",
"Submit": "Submit",
"SuccessfullySaveGreetingSettingsMessage": "Welcome Page settings have been successfully saved",
@@ -307,6 +308,7 @@
"UseUpperCase": "Use capital letters",
"WantToCancelDataImport": "Do you want to cancel data import?",
"WantToCancelUpload": "Do you want to cancel the upload?",
+ "WantToContinue": "Do you want to continue or change the user storage quota?",
"WhiteLabel": "Logo settings",
"WhiteLabelHelper": "Use images with a transparent background. (PNG, SVG, JPG)",
"WhiteLabelSubtitle": "Enter your company name, upload the logo, and customize the styling to match your branding.",
diff --git a/packages/client/src/components/dialogs/WarningQuotaDialog/WarningQuotaDialog.tsx b/packages/client/src/components/dialogs/WarningQuotaDialog/WarningQuotaDialog.tsx
new file mode 100644
index 0000000000..f2bb612863
--- /dev/null
+++ b/packages/client/src/components/dialogs/WarningQuotaDialog/WarningQuotaDialog.tsx
@@ -0,0 +1,78 @@
+// (c) Copyright Ascensio System SIA 2009-2024
+//
+// This program is a free software product.
+// You can redistribute it and/or modify it under the terms
+// of the GNU Affero General Public License (AGPL) version 3 as published by the Free Software
+// Foundation. In accordance with Section 7(a) of the GNU AGPL its Section 15 shall be amended
+// to the effect that Ascensio System SIA expressly excludes the warranty of non-infringement of
+// any third-party rights.
+//
+// This program is distributed WITHOUT ANY WARRANTY, without even the implied warranty
+// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, see
+// the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
+//
+// You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, EU, LV-1021.
+//
+// The interactive user interfaces in modified source and object code versions of the Program must
+// display Appropriate Legal Notices, as required under Section 5 of the GNU AGPL version 3.
+//
+// Pursuant to Section 7(b) of the License you must retain the original Product logo when
+// distributing the program. Pursuant to Section 7(e) we decline to grant you any rights under
+// trademark law for use of our trademarks.
+//
+// All the Product's GUI elements, including illustrations and icon sets, as well as technical writing
+// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
+// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
+
+import {
+ ModalDialog,
+ ModalDialogType,
+} from "@docspace/shared/components/modal-dialog";
+
+import { convertBytes } from "@docspace/client/src/pages/PortalSettings/utils/convertBytes";
+import { Button, ButtonSize } from "@docspace/shared/components/button";
+import { Text } from "@docspace/shared/components/text";
+import { WarningQuotaDialogProps } from "./WarningQuotaDialog.types";
+
+export const WarningQuotaDialog = ({
+ t,
+ visible,
+ onClickRedirect,
+ onCloseDialog,
+ defaultQuota,
+}: WarningQuotaDialogProps) => {
+ return (
+
+ {t("Common:Warning")}
+
+
+ {t("Settings:StorageQuotaWarningDescription", {
+ quotaLimit: convertBytes(defaultQuota),
+ productName: t("Common:ProductName"),
+ })}
+
+ {t("Settings:WantToContinue")}
+
+
+
+
+
+
+ );
+};
diff --git a/packages/client/src/components/dialogs/WarningQuotaDialog/WarningQuotaDialog.types.ts b/packages/client/src/components/dialogs/WarningQuotaDialog/WarningQuotaDialog.types.ts
new file mode 100644
index 0000000000..2d887912d4
--- /dev/null
+++ b/packages/client/src/components/dialogs/WarningQuotaDialog/WarningQuotaDialog.types.ts
@@ -0,0 +1,35 @@
+// (c) Copyright Ascensio System SIA 2009-2024
+//
+// This program is a free software product.
+// You can redistribute it and/or modify it under the terms
+// of the GNU Affero General Public License (AGPL) version 3 as published by the Free Software
+// Foundation. In accordance with Section 7(a) of the GNU AGPL its Section 15 shall be amended
+// to the effect that Ascensio System SIA expressly excludes the warranty of non-infringement of
+// any third-party rights.
+//
+// This program is distributed WITHOUT ANY WARRANTY, without even the implied warranty
+// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, see
+// the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
+//
+// You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, EU, LV-1021.
+//
+// The interactive user interfaces in modified source and object code versions of the Program must
+// display Appropriate Legal Notices, as required under Section 5 of the GNU AGPL version 3.
+//
+// Pursuant to Section 7(b) of the License you must retain the original Product logo when
+// distributing the program. Pursuant to Section 7(e) we decline to grant you any rights under
+// trademark law for use of our trademarks.
+//
+// All the Product's GUI elements, including illustrations and icon sets, as well as technical writing
+// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
+// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
+
+import { TTranslation } from "@docspace/shared/types";
+
+export interface WarningQuotaDialogProps {
+ t: TTranslation;
+ visible: boolean;
+ onCloseDialog: () => void;
+ onClickRedirect: () => void;
+ defaultQuota: number;
+}
diff --git a/packages/client/src/components/dialogs/WarningQuotaDialog/index.ts b/packages/client/src/components/dialogs/WarningQuotaDialog/index.ts
new file mode 100644
index 0000000000..b88cc390a0
--- /dev/null
+++ b/packages/client/src/components/dialogs/WarningQuotaDialog/index.ts
@@ -0,0 +1,26 @@
+// (c) Copyright Ascensio System SIA 2009-2024
+//
+// This program is a free software product.
+// You can redistribute it and/or modify it under the terms
+// of the GNU Affero General Public License (AGPL) version 3 as published by the Free Software
+// Foundation. In accordance with Section 7(a) of the GNU AGPL its Section 15 shall be amended
+// to the effect that Ascensio System SIA expressly excludes the warranty of non-infringement of
+// any third-party rights.
+//
+// This program is distributed WITHOUT ANY WARRANTY, without even the implied warranty
+// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, see
+// the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
+//
+// You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, EU, LV-1021.
+//
+// The interactive user interfaces in modified source and object code versions of the Program must
+// display Appropriate Legal Notices, as required under Section 5 of the GNU AGPL version 3.
+//
+// Pursuant to Section 7(b) of the License you must retain the original Product logo when
+// distributing the program. Pursuant to Section 7(e) we decline to grant you any rights under
+// trademark law for use of our trademarks.
+//
+// All the Product's GUI elements, including illustrations and icon sets, as well as technical writing
+// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
+// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
+export { WarningQuotaDialog } from "./WarningQuotaDialog";
diff --git a/packages/client/src/pages/PortalSettings/categories/data-import/components/SelectFileStep.tsx b/packages/client/src/pages/PortalSettings/categories/data-import/components/SelectFileStep.tsx
index cecb98fcf1..ee9133268e 100644
--- a/packages/client/src/pages/PortalSettings/categories/data-import/components/SelectFileStep.tsx
+++ b/packages/client/src/pages/PortalSettings/categories/data-import/components/SelectFileStep.tsx
@@ -25,11 +25,13 @@
// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
import { useState, useRef, useEffect, useCallback } from "react";
+import { useNavigate } from "react-router-dom";
import { inject, observer } from "mobx-react";
import { CancelUploadDialog } from "SRC_DIR/components/dialogs";
import { isMobile, isTablet, mobile } from "@docspace/shared/utils/device";
import styled from "styled-components";
+import { WarningQuotaDialog } from "SRC_DIR/components/dialogs/WarningQuotaDialog";
import { Text } from "@docspace/shared/components/text";
import { Button, ButtonSize } from "@docspace/shared/components/button";
import { FileInput } from "@docspace/shared/components/file-input";
@@ -154,14 +156,18 @@ const SelectFileStep = (props: SelectFileStepProps) => {
migratingWorkspace,
setMigratingWorkspace,
uploadFiles,
+ defaultUsersQuota,
+ isDefaultUsersQuotaSet,
+ warningQuotaDialogVisible,
+ setWarningQuotaDialogVisible,
} = props as InjectedSelectFileStepProps;
const [isSaveDisabled, setIsSaveDisabled] = useState(
migratorName === migratingWorkspace,
);
const [progress, setProgress] = useState(0);
+ const [defaultQuota, setDefaultQuota] = useState(0);
const [isInfiniteProgress, setIsInfiniteProgress] = useState(true);
-
const [isNetworkError, setIsNetworkError] = useState(false);
const [isFileError, setIsFileError] = useState(false);
const [isBackupEmpty, setIsBackupEmpty] = useState(false);
@@ -173,6 +179,16 @@ const SelectFileStep = (props: SelectFileStepProps) => {
const [failTries, setFailTries] = useState(FAIL_TRIES);
const uploadInterval = useRef();
+ const navigate = useNavigate();
+
+ useEffect(() => {
+ setWarningQuotaDialogVisible(isDefaultUsersQuotaSet);
+ setDefaultQuota(defaultUsersQuota ?? 0);
+ }, [isDefaultUsersQuotaSet, setWarningQuotaDialogVisible, defaultUsersQuota]);
+
+ const onClickRedirect = () => {
+ navigate("/portal-settings/management/disk-space");
+ };
const handleError = useCallback(
(message?: string) => {
@@ -477,44 +493,66 @@ const SelectFileStep = (props: SelectFileStepProps) => {
isSixthStep={false}
/>
)}
+
+ {warningQuotaDialogVisible && (
+ setWarningQuotaDialogVisible(false)}
+ onClickRedirect={onClickRedirect}
+ defaultQuota={defaultQuota}
+ />
+ )}
);
};
-export default inject(({ dialogsStore, importAccountsStore }) => {
- const {
- initMigrations,
- getMigrationStatus,
- setUsers,
- fileLoadingStatus,
- setLoadingStatus,
- cancelMigration,
- setWorkspace,
- incrementStep,
- files,
- setFiles,
- migratingWorkspace,
- setMigratingWorkspace,
- uploadFiles,
- } = importAccountsStore;
- const { cancelUploadDialogVisible, setCancelUploadDialogVisible } =
- dialogsStore;
+export default inject(
+ ({ dialogsStore, importAccountsStore, currentQuotaStore }) => {
+ const {
+ initMigrations,
+ getMigrationStatus,
+ setUsers,
+ fileLoadingStatus,
+ setLoadingStatus,
+ cancelMigration,
+ setWorkspace,
+ incrementStep,
+ files,
+ setFiles,
+ migratingWorkspace,
+ setMigratingWorkspace,
+ uploadFiles,
+ } = importAccountsStore;
+ const {
+ cancelUploadDialogVisible,
+ setCancelUploadDialogVisible,
+ warningQuotaDialogVisible,
+ setWarningQuotaDialogVisible,
+ } = dialogsStore;
- return {
- initMigrations,
- getMigrationStatus,
- setUsers,
- fileLoadingStatus,
- setLoadingStatus,
- cancelMigration,
- cancelUploadDialogVisible,
- setCancelUploadDialogVisible,
- setWorkspace,
- incrementStep,
- files,
- setFiles,
- migratingWorkspace,
- setMigratingWorkspace,
- uploadFiles,
- };
-})(observer(SelectFileStep));
+ const { isDefaultUsersQuotaSet, defaultUsersQuota } = currentQuotaStore;
+
+ return {
+ initMigrations,
+ getMigrationStatus,
+ setUsers,
+ fileLoadingStatus,
+ setLoadingStatus,
+ cancelMigration,
+ cancelUploadDialogVisible,
+ setCancelUploadDialogVisible,
+ setWorkspace,
+ incrementStep,
+ files,
+ setFiles,
+ migratingWorkspace,
+ setMigratingWorkspace,
+ uploadFiles,
+ defaultUsersQuota,
+ isDefaultUsersQuotaSet,
+ warningQuotaDialogVisible,
+ setWarningQuotaDialogVisible,
+ };
+ },
+)(observer(SelectFileStep));
diff --git a/packages/client/src/pages/PortalSettings/categories/data-import/types/index.ts b/packages/client/src/pages/PortalSettings/categories/data-import/types/index.ts
index 28b0fbe881..d1afff72b9 100644
--- a/packages/client/src/pages/PortalSettings/categories/data-import/types/index.ts
+++ b/packages/client/src/pages/PortalSettings/categories/data-import/types/index.ts
@@ -70,6 +70,10 @@ export interface InjectedSelectFileStepProps extends SelectFileStepProps {
migratingWorkspace: TStore["importAccountsStore"]["migratingWorkspace"];
setMigratingWorkspace: TStore["importAccountsStore"]["setMigratingWorkspace"];
uploadFiles: TStore["importAccountsStore"]["uploadFiles"];
+ defaultUsersQuota: TStore["currentQuotaStore"]["defaultUsersQuota"];
+ isDefaultUsersQuotaSet: TStore["currentQuotaStore"]["isDefaultUsersQuotaSet"];
+ warningQuotaDialogVisible: TStore["dialogsStore"]["warningQuotaDialogVisible"];
+ setWarningQuotaDialogVisible: TStore["dialogsStore"]["setWarningQuotaDialogVisible"];
}
export interface DataImportProps {}
diff --git a/packages/client/src/pages/PortalSettings/utils/convertBytes.ts b/packages/client/src/pages/PortalSettings/utils/convertBytes.ts
new file mode 100644
index 0000000000..be35ce6483
--- /dev/null
+++ b/packages/client/src/pages/PortalSettings/utils/convertBytes.ts
@@ -0,0 +1,45 @@
+// (c) Copyright Ascensio System SIA 2009-2024
+//
+// This program is a free software product.
+// You can redistribute it and/or modify it under the terms
+// of the GNU Affero General Public License (AGPL) version 3 as published by the Free Software
+// Foundation. In accordance with Section 7(a) of the GNU AGPL its Section 15 shall be amended
+// to the effect that Ascensio System SIA expressly excludes the warranty of non-infringement of
+// any third-party rights.
+//
+// This program is distributed WITHOUT ANY WARRANTY, without even the implied warranty
+// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, see
+// the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
+//
+// You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, EU, LV-1021.
+//
+// The interactive user interfaces in modified source and object code versions of the Program must
+// display Appropriate Legal Notices, as required under Section 5 of the GNU AGPL version 3.
+//
+// Pursuant to Section 7(b) of the License you must retain the original Product logo when
+// distributing the program. Pursuant to Section 7(e) we decline to grant you any rights under
+// trademark law for use of our trademarks.
+//
+// All the Product's GUI elements, including illustrations and icon sets, as well as technical writing
+// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
+// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
+
+export const convertBytes = (bytes: number) => {
+ if (bytes < 1024) {
+ return `${bytes} bytes`;
+ }
+ const kilobytes = bytes / 1024;
+ if (kilobytes < 1024) {
+ return `${Math.floor(kilobytes)} KB`;
+ }
+ const megabytes = kilobytes / 1024;
+ if (megabytes < 1024) {
+ return `${Math.floor(megabytes)} MB`;
+ }
+ const gigabytes = megabytes / 1024;
+ if (gigabytes < 1024) {
+ return `${Math.floor(gigabytes)} GB`;
+ }
+ const terabytes = gigabytes / 1024;
+ return `${Math.floor(terabytes)} TB`;
+};
diff --git a/packages/client/src/store/DialogsStore.js b/packages/client/src/store/DialogsStore.js
index a642cfe6a8..59bd7784f8 100644
--- a/packages/client/src/store/DialogsStore.js
+++ b/packages/client/src/store/DialogsStore.js
@@ -128,6 +128,8 @@ class DialogsStore {
file: null,
};
+ warningQuotaDialogVisible = false;
+
constructor(
authStore,
treeFoldersStore,
@@ -549,6 +551,10 @@ class DialogsStore {
file,
};
};
+
+ setWarningQuotaDialogVisible = (visible) => {
+ this.warningQuotaDialogVisible = visible;
+ };
}
export default DialogsStore;