Web: Client: Data Import: providers page was translated in ts
This commit is contained in:
parent
ba24fc55fa
commit
87c21c3a59
@ -0,0 +1,185 @@
|
|||||||
|
// (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 { useEffect, useMemo } from "react";
|
||||||
|
import { inject, observer } from "mobx-react";
|
||||||
|
import { useNavigate } from "react-router-dom";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { ReactSVG } from "react-svg";
|
||||||
|
|
||||||
|
import { Link } from "@docspace/shared/components/link";
|
||||||
|
import { Box } from "@docspace/shared/components/box";
|
||||||
|
import { Text } from "@docspace/shared/components/text";
|
||||||
|
|
||||||
|
import GoogleWorkspaceSvgUrl from "PUBLIC_DIR/images/workspace.google.react.svg?url";
|
||||||
|
import NextcloudWorkspaceSvgUrl from "PUBLIC_DIR/images/workspace.nextcloud.react.svg?url";
|
||||||
|
import OnlyofficeWorkspaceSvgUrl from "PUBLIC_DIR/images/workspace.onlyoffice.react.svg?url";
|
||||||
|
import GoogleWorkspaceDarkSvgUrl from "PUBLIC_DIR/images/dark.workspace.google.react.svg?url";
|
||||||
|
import NextcloudWorkspaceDarkSvgUrl from "PUBLIC_DIR/images/dark.workspace.nextcloud.react.svg?url";
|
||||||
|
import OnlyofficeWorkspaceDarkSvgUrl from "PUBLIC_DIR/images/dark.workspace.onlyoffice.react.svg?url";
|
||||||
|
import { TWorkspaceService } from "@docspace/shared/api/settings/types";
|
||||||
|
import { LinkType } from "@docspace/shared/components/link/Link.enums";
|
||||||
|
import DataImportLoader from "../sub-components/DataImportLoader";
|
||||||
|
import { WorkspacesContainer } from "../StyledDataImport";
|
||||||
|
import { ProvidersProps } from "../types";
|
||||||
|
|
||||||
|
const Providers = ({
|
||||||
|
theme,
|
||||||
|
services,
|
||||||
|
setServices,
|
||||||
|
getMigrationList,
|
||||||
|
getMigrationStatus,
|
||||||
|
setDocumentTitle,
|
||||||
|
isMigrationInit,
|
||||||
|
setIsMigrationInit,
|
||||||
|
}: ProvidersProps) => {
|
||||||
|
const navigate = useNavigate();
|
||||||
|
const { t } = useTranslation(["Settings"]);
|
||||||
|
|
||||||
|
const workspacesMap = {
|
||||||
|
GoogleWorkspace: "google",
|
||||||
|
Nextcloud: "nextcloud",
|
||||||
|
Workspace: "onlyoffice",
|
||||||
|
};
|
||||||
|
|
||||||
|
const workspaces = useMemo(() => {
|
||||||
|
const logos = {
|
||||||
|
GoogleWorkspace: theme.isBase
|
||||||
|
? GoogleWorkspaceSvgUrl
|
||||||
|
: GoogleWorkspaceDarkSvgUrl,
|
||||||
|
Nextcloud: theme.isBase
|
||||||
|
? NextcloudWorkspaceSvgUrl
|
||||||
|
: NextcloudWorkspaceDarkSvgUrl,
|
||||||
|
Workspace: theme.isBase
|
||||||
|
? OnlyofficeWorkspaceSvgUrl
|
||||||
|
: OnlyofficeWorkspaceDarkSvgUrl,
|
||||||
|
};
|
||||||
|
|
||||||
|
return services.map((service) => ({
|
||||||
|
title: service,
|
||||||
|
logo: logos[service],
|
||||||
|
}));
|
||||||
|
}, [theme.isBase, services]);
|
||||||
|
|
||||||
|
const handleMigrationCheck = async () => {
|
||||||
|
const migrationStatus = await getMigrationStatus();
|
||||||
|
|
||||||
|
if (
|
||||||
|
migrationStatus &&
|
||||||
|
migrationStatus.parseResult?.failedArchives &&
|
||||||
|
migrationStatus.parseResult.failedArchives.length === 0 &&
|
||||||
|
!migrationStatus.error
|
||||||
|
) {
|
||||||
|
const migratorName = migrationStatus.parseResult.migratorName;
|
||||||
|
|
||||||
|
navigate(`${workspacesMap[migratorName]}?service=${migratorName}`);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const migrationList = await getMigrationList();
|
||||||
|
setIsMigrationInit(true);
|
||||||
|
setServices(migrationList);
|
||||||
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setDocumentTitle(t("DataImport"));
|
||||||
|
handleMigrationCheck();
|
||||||
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
const redirectToWorkspace = (title: TWorkspaceService) => {
|
||||||
|
switch (title) {
|
||||||
|
case "GoogleWorkspace":
|
||||||
|
navigate(`google?service=${title}`);
|
||||||
|
break;
|
||||||
|
case "Nextcloud":
|
||||||
|
navigate(`nextcloud?service=${title}`);
|
||||||
|
break;
|
||||||
|
case "Workspace":
|
||||||
|
navigate(`onlyoffice?service=${title}`);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!isMigrationInit) return <DataImportLoader />;
|
||||||
|
return (
|
||||||
|
<WorkspacesContainer>
|
||||||
|
<Text className="data-import-description">
|
||||||
|
{t("DataImportDescription")}
|
||||||
|
</Text>
|
||||||
|
<Text className="data-import-subtitle">{t("UploadBackupData")}</Text>
|
||||||
|
|
||||||
|
<Box className="workspace-list">
|
||||||
|
{workspaces.map((workspace) => (
|
||||||
|
<Box
|
||||||
|
key={workspace.title}
|
||||||
|
className="workspace-item"
|
||||||
|
onClick={() => redirectToWorkspace(workspace.title)}
|
||||||
|
>
|
||||||
|
<ReactSVG src={workspace.logo} className="workspace-logo" />
|
||||||
|
<Link
|
||||||
|
type={LinkType.page}
|
||||||
|
fontWeight="600"
|
||||||
|
color="#4781D1"
|
||||||
|
isHovered
|
||||||
|
isTextOverflow
|
||||||
|
>
|
||||||
|
{t("Import")}
|
||||||
|
</Link>
|
||||||
|
</Box>
|
||||||
|
))}
|
||||||
|
</Box>
|
||||||
|
</WorkspacesContainer>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
export default inject<TStore>(
|
||||||
|
({ authStore, settingsStore, importAccountsStore }) => {
|
||||||
|
const {
|
||||||
|
services,
|
||||||
|
setServices,
|
||||||
|
getMigrationList,
|
||||||
|
getMigrationStatus,
|
||||||
|
isMigrationInit,
|
||||||
|
setIsMigrationInit,
|
||||||
|
} = importAccountsStore;
|
||||||
|
|
||||||
|
const { setDocumentTitle } = authStore;
|
||||||
|
|
||||||
|
return {
|
||||||
|
services,
|
||||||
|
setServices,
|
||||||
|
getMigrationList,
|
||||||
|
getMigrationStatus,
|
||||||
|
theme: settingsStore.theme,
|
||||||
|
setDocumentTitle,
|
||||||
|
isMigrationInit,
|
||||||
|
setIsMigrationInit,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
)(observer(Providers));
|
@ -24,161 +24,10 @@
|
|||||||
// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
|
// 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
|
// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||||
|
|
||||||
import { useEffect, useMemo } from "react";
|
import Providers from "./components/Providers";
|
||||||
import { inject, observer } from "mobx-react";
|
|
||||||
import { useNavigate } from "react-router-dom";
|
|
||||||
import { withTranslation } from "react-i18next";
|
|
||||||
import { ReactSVG } from "react-svg";
|
|
||||||
|
|
||||||
import { Link } from "@docspace/shared/components/link";
|
const DataImport = () => {
|
||||||
import { Box } from "@docspace/shared/components/box";
|
return <Providers />;
|
||||||
import { Text } from "@docspace/shared/components/text";
|
|
||||||
import { WorkspacesContainer } from "./StyledDataImport";
|
|
||||||
|
|
||||||
import GoogleWorkspaceSvgUrl from "PUBLIC_DIR/images/workspace.google.react.svg?url";
|
|
||||||
import NextcloudWorkspaceSvgUrl from "PUBLIC_DIR/images/workspace.nextcloud.react.svg?url";
|
|
||||||
import OnlyofficeWorkspaceSvgUrl from "PUBLIC_DIR/images/workspace.onlyoffice.react.svg?url";
|
|
||||||
import GoogleWorkspaceDarkSvgUrl from "PUBLIC_DIR/images/dark.workspace.google.react.svg?url";
|
|
||||||
import NextcloudWorkspaceDarkSvgUrl from "PUBLIC_DIR/images/dark.workspace.nextcloud.react.svg?url";
|
|
||||||
import OnlyofficeWorkspaceDarkSvgUrl from "PUBLIC_DIR/images/dark.workspace.onlyoffice.react.svg?url";
|
|
||||||
import DataImportLoader from "./sub-components/DataImportLoader";
|
|
||||||
|
|
||||||
const DataImport = ({
|
|
||||||
t,
|
|
||||||
theme,
|
|
||||||
services,
|
|
||||||
setServices,
|
|
||||||
getMigrationList,
|
|
||||||
getMigrationStatus,
|
|
||||||
setDocumentTitle,
|
|
||||||
isMigrationInit,
|
|
||||||
setIsMigrationInit,
|
|
||||||
}) => {
|
|
||||||
const navigate = useNavigate();
|
|
||||||
|
|
||||||
const google = theme.isBase
|
|
||||||
? GoogleWorkspaceSvgUrl
|
|
||||||
: GoogleWorkspaceDarkSvgUrl;
|
|
||||||
|
|
||||||
const nextcloud = theme.isBase
|
|
||||||
? NextcloudWorkspaceSvgUrl
|
|
||||||
: NextcloudWorkspaceDarkSvgUrl;
|
|
||||||
|
|
||||||
const onlyoffice = theme.isBase
|
|
||||||
? OnlyofficeWorkspaceSvgUrl
|
|
||||||
: OnlyofficeWorkspaceDarkSvgUrl;
|
|
||||||
|
|
||||||
const logos = {
|
|
||||||
GoogleWorkspace: google,
|
|
||||||
Nextcloud: nextcloud,
|
|
||||||
Workspace: onlyoffice,
|
|
||||||
};
|
|
||||||
|
|
||||||
const workspaces = useMemo(() => {
|
|
||||||
return services.map((service) => ({
|
|
||||||
title: service,
|
|
||||||
logo: logos[service],
|
|
||||||
}));
|
|
||||||
}, [theme.isBase, services]);
|
|
||||||
|
|
||||||
const handleMigrationCheck = async () => {
|
|
||||||
const migrationStatus = await getMigrationStatus();
|
|
||||||
|
|
||||||
if (
|
|
||||||
migrationStatus &&
|
|
||||||
migrationStatus.parseResult?.failedArchives &&
|
|
||||||
migrationStatus.parseResult.failedArchives.length === 0 &&
|
|
||||||
!migrationStatus.error
|
|
||||||
) {
|
|
||||||
const workspacesEnum = {
|
|
||||||
GoogleWorkspace: "google",
|
|
||||||
Nextcloud: "nextcloud",
|
|
||||||
Workspace: "onlyoffice",
|
|
||||||
};
|
|
||||||
const migratorName = migrationStatus.parseResult.migratorName;
|
|
||||||
|
|
||||||
navigate(`${workspacesEnum[migratorName]}?service=${migratorName}`);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const migrationList = await getMigrationList();
|
|
||||||
setIsMigrationInit(true);
|
|
||||||
setServices(migrationList);
|
|
||||||
};
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
setDocumentTitle(t("DataImport"));
|
|
||||||
handleMigrationCheck();
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const redirectToWorkspace = (title) => {
|
|
||||||
switch (title) {
|
|
||||||
case "GoogleWorkspace":
|
|
||||||
navigate(`google?service=${title}`);
|
|
||||||
break;
|
|
||||||
case "Nextcloud":
|
|
||||||
navigate(`nextcloud?service=${title}`);
|
|
||||||
break;
|
|
||||||
case "Workspace":
|
|
||||||
navigate(`onlyoffice?service=${title}`);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
if (!isMigrationInit) return <DataImportLoader />;
|
|
||||||
return (
|
|
||||||
<WorkspacesContainer>
|
|
||||||
<Text className="data-import-description">
|
|
||||||
{t("DataImportDescription")}
|
|
||||||
</Text>
|
|
||||||
<Text className="data-import-subtitle">{t("UploadBackupData")}</Text>
|
|
||||||
|
|
||||||
<Box className="workspace-list">
|
|
||||||
{workspaces.map((workspace) => (
|
|
||||||
<Box
|
|
||||||
key={workspace.title}
|
|
||||||
className="workspace-item"
|
|
||||||
onClick={() => redirectToWorkspace(workspace.title)}
|
|
||||||
>
|
|
||||||
<ReactSVG src={workspace.logo} className="workspace-logo" />
|
|
||||||
<Link
|
|
||||||
type="page"
|
|
||||||
fontWeight="600"
|
|
||||||
color="#4781D1"
|
|
||||||
isHovered
|
|
||||||
isTextOverflow
|
|
||||||
>
|
|
||||||
{t("Import")}
|
|
||||||
</Link>
|
|
||||||
</Box>
|
|
||||||
))}
|
|
||||||
</Box>
|
|
||||||
</WorkspacesContainer>
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
export default inject(({ authStore, settingsStore, importAccountsStore }) => {
|
|
||||||
const {
|
|
||||||
services,
|
|
||||||
setServices,
|
|
||||||
getMigrationList,
|
|
||||||
getMigrationStatus,
|
|
||||||
isMigrationInit,
|
|
||||||
setIsMigrationInit,
|
|
||||||
} = importAccountsStore;
|
|
||||||
|
|
||||||
const { setDocumentTitle } = authStore;
|
export default DataImport;
|
||||||
|
|
||||||
return {
|
|
||||||
services,
|
|
||||||
setServices,
|
|
||||||
getMigrationList,
|
|
||||||
getMigrationStatus,
|
|
||||||
theme: settingsStore.theme,
|
|
||||||
setDocumentTitle,
|
|
||||||
isMigrationInit,
|
|
||||||
setIsMigrationInit,
|
|
||||||
};
|
|
||||||
})(withTranslation(["Settings"])(observer(DataImport)));
|
|
||||||
|
@ -0,0 +1,36 @@
|
|||||||
|
// (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 interface ProvidersProps {
|
||||||
|
theme: TStore["settingsStore"]["theme"];
|
||||||
|
services: TStore["importAccountsStore"]["services"];
|
||||||
|
setServices: TStore["importAccountsStore"]["setServices"];
|
||||||
|
getMigrationList: TStore["importAccountsStore"]["getMigrationList"];
|
||||||
|
getMigrationStatus: TStore["importAccountsStore"]["getMigrationStatus"];
|
||||||
|
setDocumentTitle: TStore["authStore"]["setDocumentTitle"];
|
||||||
|
isMigrationInit: TStore["importAccountsStore"]["isMigrationInit"];
|
||||||
|
setIsMigrationInit: TStore["importAccountsStore"]["setIsMigrationInit"];
|
||||||
|
}
|
@ -30,7 +30,7 @@ import { combineUrl } from "@docspace/shared/utils/combineUrl";
|
|||||||
import { makeAutoObservable, runInAction } from "mobx";
|
import { makeAutoObservable, runInAction } from "mobx";
|
||||||
import {
|
import {
|
||||||
migrationList,
|
migrationList,
|
||||||
migrationName,
|
initMigration,
|
||||||
migrationStatus,
|
migrationStatus,
|
||||||
migrationCancel,
|
migrationCancel,
|
||||||
migrationFinish,
|
migrationFinish,
|
||||||
@ -38,64 +38,30 @@ import {
|
|||||||
migrateFile,
|
migrateFile,
|
||||||
migrationClear,
|
migrationClear,
|
||||||
} from "@docspace/shared/api/settings";
|
} from "@docspace/shared/api/settings";
|
||||||
|
import {
|
||||||
type TUser = {
|
TWorkspaceService,
|
||||||
key: string;
|
TSendWelcomeEmailData,
|
||||||
email: string;
|
TMigrationUser,
|
||||||
displayName: string;
|
TMigrationStatusResult,
|
||||||
firstName: string;
|
} from "@docspace/shared/api/settings/types";
|
||||||
userType: string;
|
|
||||||
migratingFiles: {
|
|
||||||
foldersCount: number;
|
|
||||||
filesCount: number;
|
|
||||||
bytesTotal: number;
|
|
||||||
};
|
|
||||||
shouldImport: boolean;
|
|
||||||
};
|
|
||||||
|
|
||||||
type TUsers = {
|
type TUsers = {
|
||||||
new: TUser[];
|
new: TMigrationUser[];
|
||||||
existing: TUser[];
|
existing: TMigrationUser[];
|
||||||
withoutEmail: TUser[];
|
withoutEmail: TMigrationUser[];
|
||||||
result: TUser[];
|
result: TMigrationUser[];
|
||||||
};
|
};
|
||||||
|
|
||||||
type TCheckedUsers = {
|
type TCheckedUsers = {
|
||||||
withEmail: TUser[];
|
withEmail: TMigrationUser[];
|
||||||
withoutEmail: TUser[];
|
withoutEmail: TMigrationUser[];
|
||||||
result: TUser[];
|
result: TMigrationUser[];
|
||||||
};
|
|
||||||
|
|
||||||
type TGroup = {
|
|
||||||
groupName: string;
|
|
||||||
userUidList: string[];
|
|
||||||
shouldImport: boolean;
|
|
||||||
};
|
|
||||||
|
|
||||||
type TResponseData = {
|
|
||||||
migratorName: string;
|
|
||||||
operation: string;
|
|
||||||
failedArchives: string[];
|
|
||||||
users: TUser[];
|
|
||||||
withoutEmailUsers: TUser[];
|
|
||||||
existUsers: TUser[];
|
|
||||||
groups: TGroup[];
|
|
||||||
importPersonalFiles: boolean;
|
|
||||||
importSharedFiles: boolean;
|
|
||||||
importSharedFolders: boolean;
|
|
||||||
importCommonFiles: boolean;
|
|
||||||
importProjectFiles: boolean;
|
|
||||||
importGroups: boolean;
|
|
||||||
successedUsers: number;
|
|
||||||
failedUsers: number;
|
|
||||||
files: string[];
|
|
||||||
errors: string[];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
type CheckedAccountTypes = "withEmail" | "withoutEmail" | "result";
|
type CheckedAccountTypes = "withEmail" | "withoutEmail" | "result";
|
||||||
|
|
||||||
class ImportAccountsStore {
|
class ImportAccountsStore {
|
||||||
services: string[] = [];
|
services: TWorkspaceService[] = [];
|
||||||
|
|
||||||
users: TUsers = {
|
users: TUsers = {
|
||||||
new: [],
|
new: [],
|
||||||
@ -186,7 +152,7 @@ class ImportAccountsStore {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
setUsers = (data: TResponseData) => {
|
setUsers = (data: TMigrationStatusResult) => {
|
||||||
runInAction(() => {
|
runInAction(() => {
|
||||||
this.users = {
|
this.users = {
|
||||||
new: data.users,
|
new: data.users,
|
||||||
@ -227,7 +193,10 @@ class ImportAccountsStore {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
toggleAccount = (account: TUser, checkedAccountType: CheckedAccountTypes) => {
|
toggleAccount = (
|
||||||
|
account: TMigrationUser,
|
||||||
|
checkedAccountType: CheckedAccountTypes,
|
||||||
|
) => {
|
||||||
this.checkedUsers = this.checkedUsers[checkedAccountType].some(
|
this.checkedUsers = this.checkedUsers[checkedAccountType].some(
|
||||||
(user) => user.key === account.key,
|
(user) => user.key === account.key,
|
||||||
)
|
)
|
||||||
@ -248,7 +217,7 @@ class ImportAccountsStore {
|
|||||||
|
|
||||||
toggleAllAccounts = (
|
toggleAllAccounts = (
|
||||||
isChecked: boolean,
|
isChecked: boolean,
|
||||||
accounts: TUser[],
|
accounts: TMigrationUser[],
|
||||||
checkedAccountType: CheckedAccountTypes,
|
checkedAccountType: CheckedAccountTypes,
|
||||||
) => {
|
) => {
|
||||||
this.checkedUsers = isChecked
|
this.checkedUsers = isChecked
|
||||||
@ -305,10 +274,6 @@ class ImportAccountsStore {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
// get numberOfCheckedAccounts() {
|
|
||||||
// return this.checkedAccounts.length;
|
|
||||||
// }
|
|
||||||
|
|
||||||
multipleFileUploading = async (
|
multipleFileUploading = async (
|
||||||
files: File[],
|
files: File[],
|
||||||
setProgress: (progress: number) => void,
|
setProgress: (progress: number) => void,
|
||||||
@ -418,7 +383,7 @@ class ImportAccountsStore {
|
|||||||
this.importOptions = { ...this.importOptions, ...value };
|
this.importOptions = { ...this.importOptions, ...value };
|
||||||
};
|
};
|
||||||
|
|
||||||
setServices = (services: string[]) => {
|
setServices = (services: TWorkspaceService[]) => {
|
||||||
this.services = services;
|
this.services = services;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -428,11 +393,11 @@ class ImportAccountsStore {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// eslint-disable-next-line class-methods-use-this
|
// eslint-disable-next-line class-methods-use-this
|
||||||
initMigrationName = (name: string) => {
|
initMigrationName = (name: TWorkspaceService) => {
|
||||||
return migrationName(name);
|
return initMigration(name);
|
||||||
};
|
};
|
||||||
|
|
||||||
proceedFileMigration = (migratorName: string) => {
|
proceedFileMigration = (migratorName: TWorkspaceService) => {
|
||||||
const users = this.finalUsers.map((item) =>
|
const users = this.finalUsers.map((item) =>
|
||||||
Object.assign(item, { shouldImport: true }),
|
Object.assign(item, { shouldImport: true }),
|
||||||
);
|
);
|
||||||
@ -461,19 +426,16 @@ class ImportAccountsStore {
|
|||||||
|
|
||||||
// eslint-disable-next-line class-methods-use-this
|
// eslint-disable-next-line class-methods-use-this
|
||||||
getMigrationLog = () => {
|
getMigrationLog = () => {
|
||||||
return migrationLog()
|
try {
|
||||||
.then((response) => {
|
return migrationLog();
|
||||||
if (!response || !response.data) return null;
|
} catch (error) {
|
||||||
return response.data;
|
console.log("Request Failed:", { error });
|
||||||
})
|
return Promise.reject(error);
|
||||||
.catch((error) => {
|
}
|
||||||
console.log("Request Failed:", { error });
|
|
||||||
return Promise.reject(error);
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// eslint-disable-next-line class-methods-use-this
|
// eslint-disable-next-line class-methods-use-this
|
||||||
sendWelcomeLetter = (data: { isSendWelcomeEmail: boolean }) => {
|
sendWelcomeLetter = (data: TSendWelcomeEmailData) => {
|
||||||
return migrationFinish(data);
|
return migrationFinish(data);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -46,6 +46,10 @@ import {
|
|||||||
TThirdPartyProvider,
|
TThirdPartyProvider,
|
||||||
TPaymentSettings,
|
TPaymentSettings,
|
||||||
TGetSsoSettings,
|
TGetSsoSettings,
|
||||||
|
TWorkspaceService,
|
||||||
|
TWorkspaceStatusResponse,
|
||||||
|
TMigrationData,
|
||||||
|
TSendWelcomeEmailData,
|
||||||
} from "./types";
|
} from "./types";
|
||||||
|
|
||||||
export async function getSettings(withPassword = false, headers = null) {
|
export async function getSettings(withPassword = false, headers = null) {
|
||||||
@ -1087,28 +1091,30 @@ export function getSendingTestMailStatus() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export function migrationList() {
|
export async function migrationList() {
|
||||||
return request({
|
const res = (await request({
|
||||||
method: "get",
|
method: "get",
|
||||||
url: `/migration/list`,
|
url: `/migration/list`,
|
||||||
});
|
})) as TWorkspaceService[];
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function migrationName(name) {
|
export function initMigration(name: TWorkspaceService) {
|
||||||
return request({
|
return request({
|
||||||
method: "post",
|
method: "post",
|
||||||
url: `/migration/init/${name}`,
|
url: `/migration/init/${name}`,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export function migrationStatus() {
|
export async function migrationStatus() {
|
||||||
return request({
|
const res = (await request({
|
||||||
method: "get",
|
method: "get",
|
||||||
url: `/migration/status`,
|
url: `/migration/status`,
|
||||||
});
|
})) as TWorkspaceStatusResponse;
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function migrateFile(data) {
|
export function migrateFile(data: TMigrationData) {
|
||||||
return request({
|
return request({
|
||||||
method: "post",
|
method: "post",
|
||||||
url: `/migration/migrate`,
|
url: `/migration/migrate`,
|
||||||
@ -1130,11 +1136,13 @@ export function migrationClear() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export function migrationLog() {
|
export async function migrationLog() {
|
||||||
return axios.get("/api/2.0/migration/logs");
|
const response = await axios.get("/api/2.0/migration/logs");
|
||||||
|
if (!response || !response.data) return null;
|
||||||
|
return response.data as string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function migrationFinish(data) {
|
export function migrationFinish(data: TSendWelcomeEmailData) {
|
||||||
return request({
|
return request({
|
||||||
method: "post",
|
method: "post",
|
||||||
url: `/migration/finish`,
|
url: `/migration/finish`,
|
||||||
|
@ -239,3 +239,64 @@ export type TPaymentSettings = {
|
|||||||
};
|
};
|
||||||
max: number;
|
max: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type TWorkspaceService = "Workspace" | "GoogleWorkspace" | "Nextcloud";
|
||||||
|
|
||||||
|
export type TMigrationGroup = {
|
||||||
|
groupName: string;
|
||||||
|
userUidList: string[];
|
||||||
|
shouldImport: boolean;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type TImportOptions = {
|
||||||
|
importGroups: boolean;
|
||||||
|
importPersonalFiles: boolean;
|
||||||
|
importSharedFiles: boolean;
|
||||||
|
importSharedFolders: boolean;
|
||||||
|
importCommonFiles: boolean;
|
||||||
|
importProjectFiles: boolean;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type TMigrationUser = {
|
||||||
|
key: string;
|
||||||
|
email: string;
|
||||||
|
displayName: string;
|
||||||
|
firstName: string;
|
||||||
|
userType: string;
|
||||||
|
migratingFiles: {
|
||||||
|
foldersCount: number;
|
||||||
|
filesCount: number;
|
||||||
|
bytesTotal: number;
|
||||||
|
};
|
||||||
|
shouldImport: boolean;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type TMigrationStatusResult = {
|
||||||
|
migratorName: TWorkspaceService;
|
||||||
|
operation: string;
|
||||||
|
failedArchives: string[];
|
||||||
|
users: TMigrationUser[];
|
||||||
|
withoutEmailUsers: TMigrationUser[];
|
||||||
|
existUsers: TMigrationUser[];
|
||||||
|
groups: TMigrationGroup[];
|
||||||
|
successedUsers: number;
|
||||||
|
failedUsers: number;
|
||||||
|
files: string[];
|
||||||
|
errors: string[];
|
||||||
|
} & TImportOptions;
|
||||||
|
|
||||||
|
export type TWorkspaceStatusResponse =
|
||||||
|
| {
|
||||||
|
error: string;
|
||||||
|
isCompleted: boolean;
|
||||||
|
progress: number;
|
||||||
|
parseResult: TMigrationStatusResult;
|
||||||
|
}
|
||||||
|
| undefined;
|
||||||
|
|
||||||
|
export type TMigrationData = {
|
||||||
|
users: TMigrationUser[];
|
||||||
|
migratorName: TWorkspaceService;
|
||||||
|
} & TImportOptions;
|
||||||
|
|
||||||
|
export type TSendWelcomeEmailData = { isSendWelcomeEmail: boolean };
|
||||||
|
Loading…
Reference in New Issue
Block a user