diff --git a/packages/client/src/pages/PortalSettings/categories/data-import/GoogleWorkspace/index.tsx b/packages/client/src/pages/PortalSettings/categories/data-import/GoogleWorkspace/index.tsx
index 1ad4ee8107..6bd769991d 100644
--- a/packages/client/src/pages/PortalSettings/categories/data-import/GoogleWorkspace/index.tsx
+++ b/packages/client/src/pages/PortalSettings/categories/data-import/GoogleWorkspace/index.tsx
@@ -24,6 +24,7 @@
// 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 { useLayoutEffect } from "react";
import { inject, observer } from "mobx-react";
import { useTranslation } from "react-i18next";
@@ -35,8 +36,17 @@ import StepLayout from "../sub-components/StepLayout";
import { InjectedWorkspaceProps, WorkspaceProps, TFunciton } from "../types";
const GoogleWorkspace = (props: WorkspaceProps) => {
- const { theme, filteredUsers, step, organizationName } =
- props as InjectedWorkspaceProps;
+ const {
+ theme,
+ filteredUsers,
+ step,
+ setStep,
+ organizationName,
+ migratingWorkspace,
+ migrationPhase,
+ isMigrationInit,
+ setIsMigrationInit,
+ } = props as InjectedWorkspaceProps;
const { t, ready }: { t: TFunciton; ready: boolean } = useTranslation([
"Common, SMTPSettings, Settings",
@@ -48,6 +58,19 @@ const GoogleWorkspace = (props: WorkspaceProps) => {
organizationName,
);
+ useLayoutEffect(() => {
+ if (migratingWorkspace === "GoogleWorkspace" && !isMigrationInit) {
+ if (migrationPhase === "setup") {
+ setStep(2);
+ } else if (migrationPhase === "migrating") {
+ setStep(5);
+ } else if (migrationPhase === "complete") {
+ setStep(6);
+ }
+ setIsMigrationInit(true);
+ }
+ }, []);
+
if (!ready) return ;
return (
@@ -65,7 +88,16 @@ const GoogleWorkspace = (props: WorkspaceProps) => {
};
export default inject(({ settingsStore, importAccountsStore }) => {
- const { filteredUsers, step, setStep, setWorkspace } = importAccountsStore;
+ const {
+ filteredUsers,
+ step,
+ setStep,
+ setWorkspace,
+ migrationPhase,
+ migratingWorkspace,
+ isMigrationInit,
+ setIsMigrationInit,
+ } = importAccountsStore;
const { theme, organizationName } = settingsStore;
return {
@@ -75,5 +107,9 @@ export default inject(({ settingsStore, importAccountsStore }) => {
step,
setStep,
setWorkspace,
+ migrationPhase,
+ migratingWorkspace,
+ isMigrationInit,
+ setIsMigrationInit,
};
})(observer(GoogleWorkspace));
diff --git a/packages/client/src/pages/PortalSettings/categories/data-import/NextcloudWorkspace/index.tsx b/packages/client/src/pages/PortalSettings/categories/data-import/NextcloudWorkspace/index.tsx
index 9427868669..5047d7a5fa 100644
--- a/packages/client/src/pages/PortalSettings/categories/data-import/NextcloudWorkspace/index.tsx
+++ b/packages/client/src/pages/PortalSettings/categories/data-import/NextcloudWorkspace/index.tsx
@@ -24,6 +24,7 @@
// 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 { useLayoutEffect } from "react";
import { inject, observer } from "mobx-react";
import { useTranslation } from "react-i18next";
@@ -35,8 +36,17 @@ import StepLayout from "../sub-components/StepLayout";
import { InjectedWorkspaceProps, WorkspaceProps, TFunciton } from "../types";
const NextcloudWorkspace = (props: WorkspaceProps) => {
- const { theme, filteredUsers, step, organizationName } =
- props as InjectedWorkspaceProps;
+ const {
+ theme,
+ filteredUsers,
+ step,
+ setStep,
+ organizationName,
+ migratingWorkspace,
+ migrationPhase,
+ isMigrationInit,
+ setIsMigrationInit,
+ } = props as InjectedWorkspaceProps;
const { t, ready }: { t: TFunciton; ready: boolean } = useTranslation([
"Common, SMTPSettings, Settings",
@@ -48,6 +58,19 @@ const NextcloudWorkspace = (props: WorkspaceProps) => {
organizationName,
);
+ useLayoutEffect(() => {
+ if (migratingWorkspace === "Nextcloud" && !isMigrationInit) {
+ if (migrationPhase === "setup") {
+ setStep(2);
+ } else if (migrationPhase === "migrating") {
+ setStep(6);
+ } else if (migrationPhase === "complete") {
+ setStep(7);
+ }
+ setIsMigrationInit(true);
+ }
+ }, []);
+
if (!ready) return ;
return (
@@ -65,7 +88,16 @@ const NextcloudWorkspace = (props: WorkspaceProps) => {
};
export default inject(({ settingsStore, importAccountsStore }) => {
- const { filteredUsers, step, setStep, setWorkspace } = importAccountsStore;
+ const {
+ filteredUsers,
+ step,
+ setStep,
+ setWorkspace,
+ migratingWorkspace,
+ migrationPhase,
+ isMigrationInit,
+ setIsMigrationInit,
+ } = importAccountsStore;
const { theme, organizationName } = settingsStore;
return {
@@ -75,5 +107,9 @@ export default inject(({ settingsStore, importAccountsStore }) => {
setStep,
setWorkspace,
organizationName,
+ migratingWorkspace,
+ migrationPhase,
+ isMigrationInit,
+ setIsMigrationInit,
};
})(observer(NextcloudWorkspace));
diff --git a/packages/client/src/pages/PortalSettings/categories/data-import/OnlyofficeWorkspace/index.tsx b/packages/client/src/pages/PortalSettings/categories/data-import/OnlyofficeWorkspace/index.tsx
index 318c30930e..9292861782 100644
--- a/packages/client/src/pages/PortalSettings/categories/data-import/OnlyofficeWorkspace/index.tsx
+++ b/packages/client/src/pages/PortalSettings/categories/data-import/OnlyofficeWorkspace/index.tsx
@@ -24,6 +24,7 @@
// 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 { useLayoutEffect } from "react";
import { inject, observer } from "mobx-react";
import { useTranslation } from "react-i18next";
@@ -35,8 +36,17 @@ import StepLayout from "../sub-components/StepLayout";
import { InjectedWorkspaceProps, WorkspaceProps, TFunciton } from "../types";
const OnlyofficeWorkspace = (props: WorkspaceProps) => {
- const { theme, filteredUsers, step, organizationName } =
- props as InjectedWorkspaceProps;
+ const {
+ theme,
+ filteredUsers,
+ step,
+ setStep,
+ organizationName,
+ migratingWorkspace,
+ migrationPhase,
+ isMigrationInit,
+ setIsMigrationInit,
+ } = props as InjectedWorkspaceProps;
const { t, ready }: { t: TFunciton; ready: boolean } = useTranslation([
"Common, SMTPSettings, Settings",
@@ -48,6 +58,19 @@ const OnlyofficeWorkspace = (props: WorkspaceProps) => {
organizationName,
);
+ useLayoutEffect(() => {
+ if (migratingWorkspace === "Workspace" && !isMigrationInit) {
+ if (migrationPhase === "setup") {
+ setStep(2);
+ } else if (migrationPhase === "migrating") {
+ setStep(5);
+ } else if (migrationPhase === "complete") {
+ setStep(6);
+ }
+ setIsMigrationInit(true);
+ }
+ }, []);
+
if (!ready) return ;
return (
@@ -65,7 +88,16 @@ const OnlyofficeWorkspace = (props: WorkspaceProps) => {
};
export default inject(({ settingsStore, importAccountsStore }) => {
- const { filteredUsers, step, setStep, setWorkspace } = importAccountsStore;
+ const {
+ filteredUsers,
+ step,
+ setStep,
+ setWorkspace,
+ migrationPhase,
+ migratingWorkspace,
+ isMigrationInit,
+ setIsMigrationInit,
+ } = importAccountsStore;
const { theme, organizationName } = settingsStore;
return {
@@ -75,5 +107,9 @@ export default inject(({ settingsStore, importAccountsStore }) => {
setStep,
setWorkspace,
organizationName,
+ migrationPhase,
+ migratingWorkspace,
+ isMigrationInit,
+ setIsMigrationInit,
};
})(observer(OnlyofficeWorkspace));
diff --git a/packages/client/src/pages/PortalSettings/categories/data-import/components/ImportCompleteStep.tsx b/packages/client/src/pages/PortalSettings/categories/data-import/components/ImportCompleteStep.tsx
index da0ba3633f..622657b5e1 100644
--- a/packages/client/src/pages/PortalSettings/categories/data-import/components/ImportCompleteStep.tsx
+++ b/packages/client/src/pages/PortalSettings/categories/data-import/components/ImportCompleteStep.tsx
@@ -72,6 +72,8 @@ const ImportCompleteStep = (props: ImportCompleteStepProps) => {
getMigrationStatus,
setStep,
setWorkspace,
+ setMigratingWorkspace,
+ setMigrationPhase,
} = props as InjectedImportCompleteStepProps;
const [isChecked, setIsChecked] = useState(false);
@@ -114,6 +116,8 @@ const ImportCompleteStep = (props: ImportCompleteStepProps) => {
clearMigration();
setStep(1);
setWorkspace("");
+ setMigratingWorkspace("");
+ setMigrationPhase("");
};
useEffect(() => {
@@ -189,6 +193,8 @@ export default inject(({ importAccountsStore }) => {
getMigrationStatus,
setStep,
setWorkspace,
+ setMigratingWorkspace,
+ setMigrationPhase,
} = importAccountsStore;
return {
@@ -199,5 +205,7 @@ export default inject(({ importAccountsStore }) => {
getMigrationStatus,
setStep,
setWorkspace,
+ setMigratingWorkspace,
+ setMigrationPhase,
};
})(observer(ImportCompleteStep));
diff --git a/packages/client/src/pages/PortalSettings/categories/data-import/index.tsx b/packages/client/src/pages/PortalSettings/categories/data-import/index.tsx
index 95b7e4bbb0..d6ea9e2cca 100644
--- a/packages/client/src/pages/PortalSettings/categories/data-import/index.tsx
+++ b/packages/client/src/pages/PortalSettings/categories/data-import/index.tsx
@@ -54,6 +54,7 @@ const DataImport = (props: DataImportProps) => {
setIsMigrationInit,
setLoadingStatus,
setMigratingWorkspace,
+ setMigrationPhase,
} = props as InjectedDataImportProps;
const { t } = useTranslation(["Settings"]);
@@ -75,13 +76,29 @@ const DataImport = (props: DataImportProps) => {
const { parseResult, isCompleted } = response;
- if (parseResult.operation === "parse" && isCompleted) {
- setUsers(parseResult);
+ if (parseResult.operation === "parse") {
setWorkspace(parseResult.migratorName);
setMigratingWorkspace(parseResult.migratorName);
setFiles(parseResult.files);
- setIsMigrationInit(true);
- setLoadingStatus("done");
+
+ if (isCompleted) {
+ setUsers(parseResult);
+ setMigrationPhase("setup");
+ setLoadingStatus("done");
+ } else {
+ setLoadingStatus("proceed");
+ }
+ }
+
+ if (parseResult.operation === "migration") {
+ setWorkspace(parseResult.migratorName);
+ setMigratingWorkspace(parseResult.migratorName);
+
+ if (isCompleted) {
+ setMigrationPhase("complete");
+ } else {
+ setMigrationPhase("migrating");
+ }
}
}, [
getMigrationStatus,
@@ -89,8 +106,8 @@ const DataImport = (props: DataImportProps) => {
setWorkspace,
setMigratingWorkspace,
setFiles,
- setIsMigrationInit,
setLoadingStatus,
+ setMigrationPhase,
]);
useEffect(() => {
@@ -126,6 +143,7 @@ export default inject(
setIsMigrationInit,
setLoadingStatus,
setMigratingWorkspace,
+ setMigrationPhase,
} = importAccountsStore;
const { setDocumentTitle } = authStore;
@@ -147,6 +165,7 @@ export default inject(
setIsMigrationInit,
setLoadingStatus,
setMigratingWorkspace,
+ setMigrationPhase,
};
},
)(observer(DataImport));
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 2f83643dbe..44f76585b7 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
@@ -89,6 +89,7 @@ export interface InjectedDataImportProps extends DataImportProps {
setIsMigrationInit: TStore["importAccountsStore"]["setIsMigrationInit"];
setLoadingStatus: TStore["importAccountsStore"]["setLoadingStatus"];
setMigratingWorkspace: TStore["importAccountsStore"]["setMigratingWorkspace"];
+ setMigrationPhase: TStore["importAccountsStore"]["setMigrationPhase"];
}
export interface WorkspaceProps {}
@@ -97,7 +98,12 @@ export interface InjectedWorkspaceProps extends WorkspaceProps {
theme: TStore["settingsStore"]["theme"];
filteredUsers: TStore["importAccountsStore"]["filteredUsers"];
step: TStore["importAccountsStore"]["step"];
+ setStep: TStore["importAccountsStore"]["setStep"];
+ migratingWorkspace: TStore["importAccountsStore"]["migratingWorkspace"];
+ migrationPhase: TStore["importAccountsStore"]["migrationPhase"];
organizationName: TStore["settingsStore"]["organizationName"];
+ isMigrationInit: TStore["importAccountsStore"]["isMigrationInit"];
+ setIsMigrationInit: TStore["importAccountsStore"]["setIsMigrationInit"];
}
export interface LayoutProps {
@@ -461,4 +467,6 @@ export interface InjectedImportCompleteStepProps
getMigrationStatus: TStore["importAccountsStore"]["getMigrationStatus"];
setStep: TStore["importAccountsStore"]["setStep"];
setWorkspace: TStore["importAccountsStore"]["setWorkspace"];
+ setMigratingWorkspace: TStore["importAccountsStore"]["setMigratingWorkspace"];
+ setMigrationPhase: TStore["importAccountsStore"]["setMigrationPhase"];
}
diff --git a/packages/client/src/store/ImportAccountsStore.ts b/packages/client/src/store/ImportAccountsStore.ts
index 7002534b48..bb444e0146 100644
--- a/packages/client/src/store/ImportAccountsStore.ts
+++ b/packages/client/src/store/ImportAccountsStore.ts
@@ -62,6 +62,8 @@ type CheckedAccountTypes = "withEmail" | "withoutEmail" | "result";
type LoadingState = "none" | "upload" | "proceed" | "done";
+type TMigrationPhase = "" | "setup" | "migrating" | "complete";
+
class ImportAccountsStore {
services: TWorkspaceService[] = [];
@@ -109,6 +111,8 @@ class ImportAccountsStore {
importProjectFiles: true,
};
+ migrationPhase: TMigrationPhase = "";
+
constructor() {
makeAutoObservable(this);
}
@@ -150,6 +154,10 @@ class ImportAccountsStore {
this.step -= 1;
};
+ setMigrationPhase = (phase: TMigrationPhase) => {
+ this.migrationPhase = phase;
+ };
+
setWorkspace = (workspace: TWorkspaceService | "") => {
this.workspace = workspace;
};