Merge branch 'develop' into feature/display-file-extension

This commit is contained in:
Elyor Djalilov 2024-08-09 16:32:46 +05:00
commit 149d5bcb2c
7 changed files with 299 additions and 37 deletions

View File

@ -258,6 +258,10 @@
"Statistics": "Statistics",
"StorageManagement": "Storage management",
"StoragePeriod": "Storage period",
"StorageQuotaWarningDescription": "Storage quota is enabled for this {{productName}}: {{quotaLimits}}. Limitations can occur during data import.",
"RoomsQuotaLimit": "{{roomsQuotaLimit}} for rooms",
"UsersQuotaLimit": "{{usersQuotaLimit}} for users",
"TenantQuotaLimit": "{{tenantQuotaLimit}} for {{productName}}",
"StudioTimeLanguageSettings": "Language and Time Zone Settings",
"Submit": "Submit",
"SuccessfullySaveGreetingSettingsMessage": "Welcome Page settings have been successfully saved",
@ -307,6 +311,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.",

View File

@ -0,0 +1,116 @@
// (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 { getConvertedSize } from "@docspace/shared/utils/common";
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,
defaultRoomsQuota,
defaultUsersQuota,
tenantCustomQuota,
isDefaultRoomsQuotaSet,
isDefaultUsersQuotaSet,
isTenantCustomQuotaSet,
}: WarningQuotaDialogProps) => {
const getWarningDescription = () => {
const quotaLimits = [];
if (isDefaultRoomsQuotaSet) {
quotaLimits.push(
t("Settings:RoomsQuotaLimit", {
roomsQuotaLimit: getConvertedSize(t, defaultRoomsQuota),
}),
);
}
if (isDefaultUsersQuotaSet) {
quotaLimits.push(
t("Settings:UsersQuotaLimit", {
usersQuotaLimit: getConvertedSize(t, defaultUsersQuota),
}),
);
}
if (isTenantCustomQuotaSet) {
quotaLimits.push(
t("Settings:TenantQuotaLimit", {
tenantQuotaLimit: getConvertedSize(t, tenantCustomQuota),
productName: t("Common:ProductName"),
}),
);
}
if (quotaLimits.length === 0) {
return "";
}
return t("Settings:StorageQuotaWarningDescription", {
quotaLimits: quotaLimits.join(", "),
productName: t("Common:ProductName"),
});
};
return (
<ModalDialog
autoMaxHeight
visible={visible}
onClose={onCloseDialog}
displayType={ModalDialogType.modal}
>
<ModalDialog.Header>{t("Common:Warning")}</ModalDialog.Header>
<ModalDialog.Body>
<Text noSelect style={{ marginBottom: "16px" }}>
{getWarningDescription()}
</Text>
<Text noSelect>{t("Settings:WantToContinue")}</Text>
</ModalDialog.Body>
<ModalDialog.Footer>
<Button
label={t("Common:ChangeQuota")}
size={ButtonSize.normal}
primary
onClick={onClickRedirect}
scale
/>
<Button
label={t("Common:ContinueButton")}
size={ButtonSize.normal}
onClick={onCloseDialog}
scale
/>
</ModalDialog.Footer>
</ModalDialog>
);
};

View File

@ -0,0 +1,40 @@
// (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;
defaultRoomsQuota: number;
defaultUsersQuota: number;
tenantCustomQuota: number;
isDefaultRoomsQuotaSet?: boolean;
isDefaultUsersQuotaSet?: boolean;
isTenantCustomQuotaSet?: boolean;
}

View File

@ -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";

View File

@ -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,6 +156,14 @@ const SelectFileStep = (props: SelectFileStepProps) => {
migratingWorkspace,
setMigratingWorkspace,
uploadFiles,
defaultUsersQuota = 0,
defaultRoomsQuota = 0,
tenantCustomQuota = 0,
isDefaultUsersQuotaSet,
isDefaultRoomsQuotaSet,
isTenantCustomQuotaSet,
warningQuotaDialogVisible,
setWarningQuotaDialogVisible,
} = props as InjectedSelectFileStepProps;
const [isSaveDisabled, setIsSaveDisabled] = useState(
@ -161,7 +171,6 @@ const SelectFileStep = (props: SelectFileStepProps) => {
);
const [progress, setProgress] = useState(0);
const [isInfiniteProgress, setIsInfiniteProgress] = useState(true);
const [isNetworkError, setIsNetworkError] = useState(false);
const [isFileError, setIsFileError] = useState(false);
const [isBackupEmpty, setIsBackupEmpty] = useState(false);
@ -173,6 +182,20 @@ const SelectFileStep = (props: SelectFileStepProps) => {
const [failTries, setFailTries] = useState(FAIL_TRIES);
const uploadInterval = useRef<number>();
const navigate = useNavigate();
useEffect(() => {
const isQuotaWarningVisible =
isDefaultUsersQuotaSet ||
isDefaultRoomsQuotaSet ||
isTenantCustomQuotaSet;
setWarningQuotaDialogVisible(isQuotaWarningVisible);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [isDefaultUsersQuotaSet, isDefaultRoomsQuotaSet, isTenantCustomQuotaSet]);
const onClickRedirect = () => {
navigate("/portal-settings/management/disk-space");
};
const handleError = useCallback(
(message?: string) => {
@ -477,44 +500,82 @@ const SelectFileStep = (props: SelectFileStepProps) => {
isSixthStep={false}
/>
)}
{warningQuotaDialogVisible && (
<WarningQuotaDialog
t={t}
visible={warningQuotaDialogVisible}
onCloseDialog={() => setWarningQuotaDialogVisible(false)}
onClickRedirect={onClickRedirect}
defaultRoomsQuota={defaultRoomsQuota}
defaultUsersQuota={defaultUsersQuota}
tenantCustomQuota={tenantCustomQuota}
isDefaultRoomsQuotaSet={isDefaultRoomsQuotaSet}
isDefaultUsersQuotaSet={isDefaultUsersQuotaSet}
isTenantCustomQuotaSet={isTenantCustomQuotaSet}
/>
)}
</Wrapper>
);
};
export default inject<TStore>(({ dialogsStore, importAccountsStore }) => {
const {
initMigrations,
getMigrationStatus,
setUsers,
fileLoadingStatus,
setLoadingStatus,
cancelMigration,
setWorkspace,
incrementStep,
files,
setFiles,
migratingWorkspace,
setMigratingWorkspace,
uploadFiles,
} = importAccountsStore;
const { cancelUploadDialogVisible, setCancelUploadDialogVisible } =
dialogsStore;
export default inject<TStore>(
({ 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 {
isDefaultRoomsQuotaSet,
isDefaultUsersQuotaSet,
isTenantCustomQuotaSet,
defaultUsersQuota,
defaultRoomsQuota,
tenantCustomQuota,
} = currentQuotaStore;
return {
initMigrations,
getMigrationStatus,
setUsers,
fileLoadingStatus,
setLoadingStatus,
cancelMigration,
cancelUploadDialogVisible,
setCancelUploadDialogVisible,
setWorkspace,
incrementStep,
files,
setFiles,
migratingWorkspace,
setMigratingWorkspace,
uploadFiles,
defaultUsersQuota,
defaultRoomsQuota,
tenantCustomQuota,
isDefaultRoomsQuotaSet,
isDefaultUsersQuotaSet,
isTenantCustomQuotaSet,
warningQuotaDialogVisible,
setWarningQuotaDialogVisible,
};
},
)(observer(SelectFileStep));

View File

@ -70,6 +70,14 @@ export interface InjectedSelectFileStepProps extends SelectFileStepProps {
migratingWorkspace: TStore["importAccountsStore"]["migratingWorkspace"];
setMigratingWorkspace: TStore["importAccountsStore"]["setMigratingWorkspace"];
uploadFiles: TStore["importAccountsStore"]["uploadFiles"];
defaultUsersQuota: TStore["currentQuotaStore"]["defaultUsersQuota"];
defaultRoomsQuota: TStore["currentQuotaStore"]["defaultRoomsQuota"];
tenantCustomQuota: TStore["currentQuotaStore"]["tenantCustomQuota"];
isDefaultUsersQuotaSet: TStore["currentQuotaStore"]["isDefaultUsersQuotaSet"];
isDefaultRoomsQuotaSet: TStore["currentQuotaStore"]["isDefaultRoomsQuotaSet"];
isTenantCustomQuotaSet: TStore["currentQuotaStore"]["isTenantCustomQuotaSet"];
warningQuotaDialogVisible: TStore["dialogsStore"]["warningQuotaDialogVisible"];
setWarningQuotaDialogVisible: TStore["dialogsStore"]["setWarningQuotaDialogVisible"];
}
export interface DataImportProps {}

View File

@ -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;