Web: Client: Data Import: complete routing logic

This commit is contained in:
Vladimir Khvan 2024-07-01 15:35:58 +05:00
parent 4b893a82c5
commit 252a09aeed
7 changed files with 165 additions and 14 deletions

View File

@ -24,6 +24,7 @@
// 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 { useLayoutEffect } from "react";
import { inject, observer } from "mobx-react"; import { inject, observer } from "mobx-react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
@ -35,8 +36,17 @@ import StepLayout from "../sub-components/StepLayout";
import { InjectedWorkspaceProps, WorkspaceProps, TFunciton } from "../types"; import { InjectedWorkspaceProps, WorkspaceProps, TFunciton } from "../types";
const GoogleWorkspace = (props: WorkspaceProps) => { const GoogleWorkspace = (props: WorkspaceProps) => {
const { theme, filteredUsers, step, organizationName } = const {
props as InjectedWorkspaceProps; theme,
filteredUsers,
step,
setStep,
organizationName,
migratingWorkspace,
migrationPhase,
isMigrationInit,
setIsMigrationInit,
} = props as InjectedWorkspaceProps;
const { t, ready }: { t: TFunciton; ready: boolean } = useTranslation([ const { t, ready }: { t: TFunciton; ready: boolean } = useTranslation([
"Common, SMTPSettings, Settings", "Common, SMTPSettings, Settings",
@ -48,6 +58,19 @@ const GoogleWorkspace = (props: WorkspaceProps) => {
organizationName, 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 <SelectFileLoader />; if (!ready) return <SelectFileLoader />;
return ( return (
@ -65,7 +88,16 @@ const GoogleWorkspace = (props: WorkspaceProps) => {
}; };
export default inject<TStore>(({ settingsStore, importAccountsStore }) => { export default inject<TStore>(({ settingsStore, importAccountsStore }) => {
const { filteredUsers, step, setStep, setWorkspace } = importAccountsStore; const {
filteredUsers,
step,
setStep,
setWorkspace,
migrationPhase,
migratingWorkspace,
isMigrationInit,
setIsMigrationInit,
} = importAccountsStore;
const { theme, organizationName } = settingsStore; const { theme, organizationName } = settingsStore;
return { return {
@ -75,5 +107,9 @@ export default inject<TStore>(({ settingsStore, importAccountsStore }) => {
step, step,
setStep, setStep,
setWorkspace, setWorkspace,
migrationPhase,
migratingWorkspace,
isMigrationInit,
setIsMigrationInit,
}; };
})(observer(GoogleWorkspace)); })(observer(GoogleWorkspace));

View File

@ -24,6 +24,7 @@
// 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 { useLayoutEffect } from "react";
import { inject, observer } from "mobx-react"; import { inject, observer } from "mobx-react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
@ -35,8 +36,17 @@ import StepLayout from "../sub-components/StepLayout";
import { InjectedWorkspaceProps, WorkspaceProps, TFunciton } from "../types"; import { InjectedWorkspaceProps, WorkspaceProps, TFunciton } from "../types";
const NextcloudWorkspace = (props: WorkspaceProps) => { const NextcloudWorkspace = (props: WorkspaceProps) => {
const { theme, filteredUsers, step, organizationName } = const {
props as InjectedWorkspaceProps; theme,
filteredUsers,
step,
setStep,
organizationName,
migratingWorkspace,
migrationPhase,
isMigrationInit,
setIsMigrationInit,
} = props as InjectedWorkspaceProps;
const { t, ready }: { t: TFunciton; ready: boolean } = useTranslation([ const { t, ready }: { t: TFunciton; ready: boolean } = useTranslation([
"Common, SMTPSettings, Settings", "Common, SMTPSettings, Settings",
@ -48,6 +58,19 @@ const NextcloudWorkspace = (props: WorkspaceProps) => {
organizationName, 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 <SelectFileLoader />; if (!ready) return <SelectFileLoader />;
return ( return (
@ -65,7 +88,16 @@ const NextcloudWorkspace = (props: WorkspaceProps) => {
}; };
export default inject<TStore>(({ settingsStore, importAccountsStore }) => { export default inject<TStore>(({ settingsStore, importAccountsStore }) => {
const { filteredUsers, step, setStep, setWorkspace } = importAccountsStore; const {
filteredUsers,
step,
setStep,
setWorkspace,
migratingWorkspace,
migrationPhase,
isMigrationInit,
setIsMigrationInit,
} = importAccountsStore;
const { theme, organizationName } = settingsStore; const { theme, organizationName } = settingsStore;
return { return {
@ -75,5 +107,9 @@ export default inject<TStore>(({ settingsStore, importAccountsStore }) => {
setStep, setStep,
setWorkspace, setWorkspace,
organizationName, organizationName,
migratingWorkspace,
migrationPhase,
isMigrationInit,
setIsMigrationInit,
}; };
})(observer(NextcloudWorkspace)); })(observer(NextcloudWorkspace));

View File

@ -24,6 +24,7 @@
// 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 { useLayoutEffect } from "react";
import { inject, observer } from "mobx-react"; import { inject, observer } from "mobx-react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
@ -35,8 +36,17 @@ import StepLayout from "../sub-components/StepLayout";
import { InjectedWorkspaceProps, WorkspaceProps, TFunciton } from "../types"; import { InjectedWorkspaceProps, WorkspaceProps, TFunciton } from "../types";
const OnlyofficeWorkspace = (props: WorkspaceProps) => { const OnlyofficeWorkspace = (props: WorkspaceProps) => {
const { theme, filteredUsers, step, organizationName } = const {
props as InjectedWorkspaceProps; theme,
filteredUsers,
step,
setStep,
organizationName,
migratingWorkspace,
migrationPhase,
isMigrationInit,
setIsMigrationInit,
} = props as InjectedWorkspaceProps;
const { t, ready }: { t: TFunciton; ready: boolean } = useTranslation([ const { t, ready }: { t: TFunciton; ready: boolean } = useTranslation([
"Common, SMTPSettings, Settings", "Common, SMTPSettings, Settings",
@ -48,6 +58,19 @@ const OnlyofficeWorkspace = (props: WorkspaceProps) => {
organizationName, 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 <SelectFileLoader />; if (!ready) return <SelectFileLoader />;
return ( return (
@ -65,7 +88,16 @@ const OnlyofficeWorkspace = (props: WorkspaceProps) => {
}; };
export default inject<TStore>(({ settingsStore, importAccountsStore }) => { export default inject<TStore>(({ settingsStore, importAccountsStore }) => {
const { filteredUsers, step, setStep, setWorkspace } = importAccountsStore; const {
filteredUsers,
step,
setStep,
setWorkspace,
migrationPhase,
migratingWorkspace,
isMigrationInit,
setIsMigrationInit,
} = importAccountsStore;
const { theme, organizationName } = settingsStore; const { theme, organizationName } = settingsStore;
return { return {
@ -75,5 +107,9 @@ export default inject<TStore>(({ settingsStore, importAccountsStore }) => {
setStep, setStep,
setWorkspace, setWorkspace,
organizationName, organizationName,
migrationPhase,
migratingWorkspace,
isMigrationInit,
setIsMigrationInit,
}; };
})(observer(OnlyofficeWorkspace)); })(observer(OnlyofficeWorkspace));

View File

@ -72,6 +72,8 @@ const ImportCompleteStep = (props: ImportCompleteStepProps) => {
getMigrationStatus, getMigrationStatus,
setStep, setStep,
setWorkspace, setWorkspace,
setMigratingWorkspace,
setMigrationPhase,
} = props as InjectedImportCompleteStepProps; } = props as InjectedImportCompleteStepProps;
const [isChecked, setIsChecked] = useState(false); const [isChecked, setIsChecked] = useState(false);
@ -114,6 +116,8 @@ const ImportCompleteStep = (props: ImportCompleteStepProps) => {
clearMigration(); clearMigration();
setStep(1); setStep(1);
setWorkspace(""); setWorkspace("");
setMigratingWorkspace("");
setMigrationPhase("");
}; };
useEffect(() => { useEffect(() => {
@ -189,6 +193,8 @@ export default inject<TStore>(({ importAccountsStore }) => {
getMigrationStatus, getMigrationStatus,
setStep, setStep,
setWorkspace, setWorkspace,
setMigratingWorkspace,
setMigrationPhase,
} = importAccountsStore; } = importAccountsStore;
return { return {
@ -199,5 +205,7 @@ export default inject<TStore>(({ importAccountsStore }) => {
getMigrationStatus, getMigrationStatus,
setStep, setStep,
setWorkspace, setWorkspace,
setMigratingWorkspace,
setMigrationPhase,
}; };
})(observer(ImportCompleteStep)); })(observer(ImportCompleteStep));

View File

@ -54,6 +54,7 @@ const DataImport = (props: DataImportProps) => {
setIsMigrationInit, setIsMigrationInit,
setLoadingStatus, setLoadingStatus,
setMigratingWorkspace, setMigratingWorkspace,
setMigrationPhase,
} = props as InjectedDataImportProps; } = props as InjectedDataImportProps;
const { t } = useTranslation(["Settings"]); const { t } = useTranslation(["Settings"]);
@ -75,13 +76,29 @@ const DataImport = (props: DataImportProps) => {
const { parseResult, isCompleted } = response; const { parseResult, isCompleted } = response;
if (parseResult.operation === "parse" && isCompleted) { if (parseResult.operation === "parse") {
setUsers(parseResult);
setWorkspace(parseResult.migratorName); setWorkspace(parseResult.migratorName);
setMigratingWorkspace(parseResult.migratorName); setMigratingWorkspace(parseResult.migratorName);
setFiles(parseResult.files); 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, getMigrationStatus,
@ -89,8 +106,8 @@ const DataImport = (props: DataImportProps) => {
setWorkspace, setWorkspace,
setMigratingWorkspace, setMigratingWorkspace,
setFiles, setFiles,
setIsMigrationInit,
setLoadingStatus, setLoadingStatus,
setMigrationPhase,
]); ]);
useEffect(() => { useEffect(() => {
@ -126,6 +143,7 @@ export default inject<TStore>(
setIsMigrationInit, setIsMigrationInit,
setLoadingStatus, setLoadingStatus,
setMigratingWorkspace, setMigratingWorkspace,
setMigrationPhase,
} = importAccountsStore; } = importAccountsStore;
const { setDocumentTitle } = authStore; const { setDocumentTitle } = authStore;
@ -147,6 +165,7 @@ export default inject<TStore>(
setIsMigrationInit, setIsMigrationInit,
setLoadingStatus, setLoadingStatus,
setMigratingWorkspace, setMigratingWorkspace,
setMigrationPhase,
}; };
}, },
)(observer(DataImport)); )(observer(DataImport));

View File

@ -89,6 +89,7 @@ export interface InjectedDataImportProps extends DataImportProps {
setIsMigrationInit: TStore["importAccountsStore"]["setIsMigrationInit"]; setIsMigrationInit: TStore["importAccountsStore"]["setIsMigrationInit"];
setLoadingStatus: TStore["importAccountsStore"]["setLoadingStatus"]; setLoadingStatus: TStore["importAccountsStore"]["setLoadingStatus"];
setMigratingWorkspace: TStore["importAccountsStore"]["setMigratingWorkspace"]; setMigratingWorkspace: TStore["importAccountsStore"]["setMigratingWorkspace"];
setMigrationPhase: TStore["importAccountsStore"]["setMigrationPhase"];
} }
export interface WorkspaceProps {} export interface WorkspaceProps {}
@ -97,7 +98,12 @@ export interface InjectedWorkspaceProps extends WorkspaceProps {
theme: TStore["settingsStore"]["theme"]; theme: TStore["settingsStore"]["theme"];
filteredUsers: TStore["importAccountsStore"]["filteredUsers"]; filteredUsers: TStore["importAccountsStore"]["filteredUsers"];
step: TStore["importAccountsStore"]["step"]; step: TStore["importAccountsStore"]["step"];
setStep: TStore["importAccountsStore"]["setStep"];
migratingWorkspace: TStore["importAccountsStore"]["migratingWorkspace"];
migrationPhase: TStore["importAccountsStore"]["migrationPhase"];
organizationName: TStore["settingsStore"]["organizationName"]; organizationName: TStore["settingsStore"]["organizationName"];
isMigrationInit: TStore["importAccountsStore"]["isMigrationInit"];
setIsMigrationInit: TStore["importAccountsStore"]["setIsMigrationInit"];
} }
export interface LayoutProps { export interface LayoutProps {
@ -461,4 +467,6 @@ export interface InjectedImportCompleteStepProps
getMigrationStatus: TStore["importAccountsStore"]["getMigrationStatus"]; getMigrationStatus: TStore["importAccountsStore"]["getMigrationStatus"];
setStep: TStore["importAccountsStore"]["setStep"]; setStep: TStore["importAccountsStore"]["setStep"];
setWorkspace: TStore["importAccountsStore"]["setWorkspace"]; setWorkspace: TStore["importAccountsStore"]["setWorkspace"];
setMigratingWorkspace: TStore["importAccountsStore"]["setMigratingWorkspace"];
setMigrationPhase: TStore["importAccountsStore"]["setMigrationPhase"];
} }

View File

@ -62,6 +62,8 @@ type CheckedAccountTypes = "withEmail" | "withoutEmail" | "result";
type LoadingState = "none" | "upload" | "proceed" | "done"; type LoadingState = "none" | "upload" | "proceed" | "done";
type TMigrationPhase = "" | "setup" | "migrating" | "complete";
class ImportAccountsStore { class ImportAccountsStore {
services: TWorkspaceService[] = []; services: TWorkspaceService[] = [];
@ -109,6 +111,8 @@ class ImportAccountsStore {
importProjectFiles: true, importProjectFiles: true,
}; };
migrationPhase: TMigrationPhase = "";
constructor() { constructor() {
makeAutoObservable(this); makeAutoObservable(this);
} }
@ -150,6 +154,10 @@ class ImportAccountsStore {
this.step -= 1; this.step -= 1;
}; };
setMigrationPhase = (phase: TMigrationPhase) => {
this.migrationPhase = phase;
};
setWorkspace = (workspace: TWorkspaceService | "") => { setWorkspace = (workspace: TWorkspaceService | "") => {
this.workspace = workspace; this.workspace = workspace;
}; };