Merge branch 'develop' into feature/display-file-extension
This commit is contained in:
commit
149d5bcb2c
@ -258,6 +258,10 @@
|
|||||||
"Statistics": "Statistics",
|
"Statistics": "Statistics",
|
||||||
"StorageManagement": "Storage management",
|
"StorageManagement": "Storage management",
|
||||||
"StoragePeriod": "Storage period",
|
"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",
|
"StudioTimeLanguageSettings": "Language and Time Zone Settings",
|
||||||
"Submit": "Submit",
|
"Submit": "Submit",
|
||||||
"SuccessfullySaveGreetingSettingsMessage": "Welcome Page settings have been successfully saved",
|
"SuccessfullySaveGreetingSettingsMessage": "Welcome Page settings have been successfully saved",
|
||||||
@ -307,6 +311,7 @@
|
|||||||
"UseUpperCase": "Use capital letters",
|
"UseUpperCase": "Use capital letters",
|
||||||
"WantToCancelDataImport": "Do you want to cancel data import?",
|
"WantToCancelDataImport": "Do you want to cancel data import?",
|
||||||
"WantToCancelUpload": "Do you want to cancel the upload?",
|
"WantToCancelUpload": "Do you want to cancel the upload?",
|
||||||
|
"WantToContinue": "Do you want to continue or change the user storage quota?",
|
||||||
"WhiteLabel": "Logo settings",
|
"WhiteLabel": "Logo settings",
|
||||||
"WhiteLabelHelper": "Use images with a transparent background. (PNG, SVG, JPG)",
|
"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.",
|
"WhiteLabelSubtitle": "Enter your company name, upload the logo, and customize the styling to match your branding.",
|
||||||
|
@ -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>
|
||||||
|
);
|
||||||
|
};
|
@ -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;
|
||||||
|
}
|
@ -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";
|
@ -25,11 +25,13 @@
|
|||||||
// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||||
|
|
||||||
import { useState, useRef, useEffect, useCallback } from "react";
|
import { useState, useRef, useEffect, useCallback } from "react";
|
||||||
|
import { useNavigate } from "react-router-dom";
|
||||||
import { inject, observer } from "mobx-react";
|
import { inject, observer } from "mobx-react";
|
||||||
import { CancelUploadDialog } from "SRC_DIR/components/dialogs";
|
import { CancelUploadDialog } from "SRC_DIR/components/dialogs";
|
||||||
import { isMobile, isTablet, mobile } from "@docspace/shared/utils/device";
|
import { isMobile, isTablet, mobile } from "@docspace/shared/utils/device";
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
|
|
||||||
|
import { WarningQuotaDialog } from "SRC_DIR/components/dialogs/WarningQuotaDialog";
|
||||||
import { Text } from "@docspace/shared/components/text";
|
import { Text } from "@docspace/shared/components/text";
|
||||||
import { Button, ButtonSize } from "@docspace/shared/components/button";
|
import { Button, ButtonSize } from "@docspace/shared/components/button";
|
||||||
import { FileInput } from "@docspace/shared/components/file-input";
|
import { FileInput } from "@docspace/shared/components/file-input";
|
||||||
@ -154,6 +156,14 @@ const SelectFileStep = (props: SelectFileStepProps) => {
|
|||||||
migratingWorkspace,
|
migratingWorkspace,
|
||||||
setMigratingWorkspace,
|
setMigratingWorkspace,
|
||||||
uploadFiles,
|
uploadFiles,
|
||||||
|
defaultUsersQuota = 0,
|
||||||
|
defaultRoomsQuota = 0,
|
||||||
|
tenantCustomQuota = 0,
|
||||||
|
isDefaultUsersQuotaSet,
|
||||||
|
isDefaultRoomsQuotaSet,
|
||||||
|
isTenantCustomQuotaSet,
|
||||||
|
warningQuotaDialogVisible,
|
||||||
|
setWarningQuotaDialogVisible,
|
||||||
} = props as InjectedSelectFileStepProps;
|
} = props as InjectedSelectFileStepProps;
|
||||||
|
|
||||||
const [isSaveDisabled, setIsSaveDisabled] = useState(
|
const [isSaveDisabled, setIsSaveDisabled] = useState(
|
||||||
@ -161,7 +171,6 @@ const SelectFileStep = (props: SelectFileStepProps) => {
|
|||||||
);
|
);
|
||||||
const [progress, setProgress] = useState(0);
|
const [progress, setProgress] = useState(0);
|
||||||
const [isInfiniteProgress, setIsInfiniteProgress] = useState(true);
|
const [isInfiniteProgress, setIsInfiniteProgress] = useState(true);
|
||||||
|
|
||||||
const [isNetworkError, setIsNetworkError] = useState(false);
|
const [isNetworkError, setIsNetworkError] = useState(false);
|
||||||
const [isFileError, setIsFileError] = useState(false);
|
const [isFileError, setIsFileError] = useState(false);
|
||||||
const [isBackupEmpty, setIsBackupEmpty] = useState(false);
|
const [isBackupEmpty, setIsBackupEmpty] = useState(false);
|
||||||
@ -173,6 +182,20 @@ const SelectFileStep = (props: SelectFileStepProps) => {
|
|||||||
|
|
||||||
const [failTries, setFailTries] = useState(FAIL_TRIES);
|
const [failTries, setFailTries] = useState(FAIL_TRIES);
|
||||||
const uploadInterval = useRef<number>();
|
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(
|
const handleError = useCallback(
|
||||||
(message?: string) => {
|
(message?: string) => {
|
||||||
@ -477,11 +500,27 @@ const SelectFileStep = (props: SelectFileStepProps) => {
|
|||||||
isSixthStep={false}
|
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>
|
</Wrapper>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default inject<TStore>(({ dialogsStore, importAccountsStore }) => {
|
export default inject<TStore>(
|
||||||
|
({ dialogsStore, importAccountsStore, currentQuotaStore }) => {
|
||||||
const {
|
const {
|
||||||
initMigrations,
|
initMigrations,
|
||||||
getMigrationStatus,
|
getMigrationStatus,
|
||||||
@ -497,8 +536,21 @@ export default inject<TStore>(({ dialogsStore, importAccountsStore }) => {
|
|||||||
setMigratingWorkspace,
|
setMigratingWorkspace,
|
||||||
uploadFiles,
|
uploadFiles,
|
||||||
} = importAccountsStore;
|
} = importAccountsStore;
|
||||||
const { cancelUploadDialogVisible, setCancelUploadDialogVisible } =
|
const {
|
||||||
dialogsStore;
|
cancelUploadDialogVisible,
|
||||||
|
setCancelUploadDialogVisible,
|
||||||
|
warningQuotaDialogVisible,
|
||||||
|
setWarningQuotaDialogVisible,
|
||||||
|
} = dialogsStore;
|
||||||
|
|
||||||
|
const {
|
||||||
|
isDefaultRoomsQuotaSet,
|
||||||
|
isDefaultUsersQuotaSet,
|
||||||
|
isTenantCustomQuotaSet,
|
||||||
|
defaultUsersQuota,
|
||||||
|
defaultRoomsQuota,
|
||||||
|
tenantCustomQuota,
|
||||||
|
} = currentQuotaStore;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
initMigrations,
|
initMigrations,
|
||||||
@ -516,5 +568,14 @@ export default inject<TStore>(({ dialogsStore, importAccountsStore }) => {
|
|||||||
migratingWorkspace,
|
migratingWorkspace,
|
||||||
setMigratingWorkspace,
|
setMigratingWorkspace,
|
||||||
uploadFiles,
|
uploadFiles,
|
||||||
|
defaultUsersQuota,
|
||||||
|
defaultRoomsQuota,
|
||||||
|
tenantCustomQuota,
|
||||||
|
isDefaultRoomsQuotaSet,
|
||||||
|
isDefaultUsersQuotaSet,
|
||||||
|
isTenantCustomQuotaSet,
|
||||||
|
warningQuotaDialogVisible,
|
||||||
|
setWarningQuotaDialogVisible,
|
||||||
};
|
};
|
||||||
})(observer(SelectFileStep));
|
},
|
||||||
|
)(observer(SelectFileStep));
|
||||||
|
@ -70,6 +70,14 @@ export interface InjectedSelectFileStepProps extends SelectFileStepProps {
|
|||||||
migratingWorkspace: TStore["importAccountsStore"]["migratingWorkspace"];
|
migratingWorkspace: TStore["importAccountsStore"]["migratingWorkspace"];
|
||||||
setMigratingWorkspace: TStore["importAccountsStore"]["setMigratingWorkspace"];
|
setMigratingWorkspace: TStore["importAccountsStore"]["setMigratingWorkspace"];
|
||||||
uploadFiles: TStore["importAccountsStore"]["uploadFiles"];
|
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 {}
|
export interface DataImportProps {}
|
||||||
|
@ -128,6 +128,8 @@ class DialogsStore {
|
|||||||
file: null,
|
file: null,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
warningQuotaDialogVisible = false;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
authStore,
|
authStore,
|
||||||
treeFoldersStore,
|
treeFoldersStore,
|
||||||
@ -549,6 +551,10 @@ class DialogsStore {
|
|||||||
file,
|
file,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
setWarningQuotaDialogVisible = (visible) => {
|
||||||
|
this.warningQuotaDialogVisible = visible;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export default DialogsStore;
|
export default DialogsStore;
|
||||||
|
Loading…
Reference in New Issue
Block a user