diff --git a/packages/client/src/pages/PortalSettings/categories/data-import/GoogleWorkspace/Stepper/SelectUsersStep/AccountsTable/RowView/index.js b/packages/client/src/pages/PortalSettings/categories/data-import/GoogleWorkspace/Stepper/SelectUsersStep/AccountsTable/RowView/index.js deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/client/src/pages/PortalSettings/categories/data-import/GoogleWorkspace/Stepper/SelectUsersStep/AccountsTable/TableView/UsersTableRow.js b/packages/client/src/pages/PortalSettings/categories/data-import/GoogleWorkspace/Stepper/SelectUsersStep/AccountsTable/TableView/UsersTableRow.js deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/client/src/pages/PortalSettings/categories/data-import/GoogleWorkspace/Stepper/SelectUsersTypeStep/AccountsTable/RowView/UsersTypeRowContent.js b/packages/client/src/pages/PortalSettings/categories/data-import/GoogleWorkspace/Stepper/SelectUsersTypeStep/AccountsTable/RowView/UsersTypeRowContent.js deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/client/src/pages/PortalSettings/categories/data-import/GoogleWorkspace/Stepper/SelectUsersTypeStep/AccountsTable/RowView/index.js b/packages/client/src/pages/PortalSettings/categories/data-import/GoogleWorkspace/Stepper/SelectUsersTypeStep/AccountsTable/RowView/index.js deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/client/src/pages/PortalSettings/categories/data-import/GoogleWorkspace/Stepper/SelectUsersTypeStep/AccountsTable/TableView/index.js b/packages/client/src/pages/PortalSettings/categories/data-import/GoogleWorkspace/Stepper/SelectUsersTypeStep/AccountsTable/TableView/index.js deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/client/src/pages/PortalSettings/categories/data-import/GoogleWorkspace/index.js b/packages/client/src/pages/PortalSettings/categories/data-import/GoogleWorkspace/index.js deleted file mode 100644 index e69de29bb2..0000000000 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 20b312f818..b5ae424415 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 @@ -51,11 +51,7 @@ const GoogleWorkspace = (props: WorkspaceProps) => { "Common, SMTPSettings, Settings", ]); - const StepsData = getStepsData( - t, - filteredUsers.length === 0, - t("Common:OrganizationName"), - ); + const StepsData = getStepsData(t, filteredUsers.length === 0); useLayoutEffect(() => { if (migratingWorkspace === "GoogleWorkspace" && !isMigrationInit) { @@ -68,6 +64,7 @@ const GoogleWorkspace = (props: WorkspaceProps) => { } setIsMigrationInit(true); } + // eslint-disable-next-line react-hooks/exhaustive-deps }, []); if (!ready) return ; @@ -81,7 +78,6 @@ const GoogleWorkspace = (props: WorkspaceProps) => { title={StepsData[step - 1].title} description={StepsData[step - 1].description} component={StepsData[step - 1].component} - organizationName={t("Common:OrganizationName")} /> ); }; diff --git a/packages/client/src/pages/PortalSettings/categories/data-import/NextCloudWorkspace/Stepper/SelectUsersStep/AccountsTable/RowView/UsersRowContent.js b/packages/client/src/pages/PortalSettings/categories/data-import/NextCloudWorkspace/Stepper/SelectUsersStep/AccountsTable/RowView/UsersRowContent.js deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/client/src/pages/PortalSettings/categories/data-import/NextCloudWorkspace/Stepper/SelectUsersStep/AccountsTable/TableView/UsersTableRow.js b/packages/client/src/pages/PortalSettings/categories/data-import/NextCloudWorkspace/Stepper/SelectUsersStep/AccountsTable/TableView/UsersTableRow.js deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/client/src/pages/PortalSettings/categories/data-import/NextCloudWorkspace/Stepper/SelectUsersTypeStep/AccountsTable/TableView/UsersTableRow.js b/packages/client/src/pages/PortalSettings/categories/data-import/NextCloudWorkspace/Stepper/SelectUsersTypeStep/AccountsTable/TableView/UsersTableRow.js deleted file mode 100644 index e69de29bb2..0000000000 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 d8841c720e..d1064a75a5 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 @@ -64,6 +64,7 @@ const NextcloudWorkspace = (props: WorkspaceProps) => { } setIsMigrationInit(true); } + // eslint-disable-next-line react-hooks/exhaustive-deps }, []); if (!ready) return ; diff --git a/packages/client/src/pages/PortalSettings/categories/data-import/OnlyofficeWorkspace/Stepper/SelectUsersStep/AccountsTable/RowView/index.js b/packages/client/src/pages/PortalSettings/categories/data-import/OnlyofficeWorkspace/Stepper/SelectUsersStep/AccountsTable/RowView/index.js deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/client/src/pages/PortalSettings/categories/data-import/OnlyofficeWorkspace/Stepper/SelectUsersStep/AccountsTable/TableView/index.js b/packages/client/src/pages/PortalSettings/categories/data-import/OnlyofficeWorkspace/Stepper/SelectUsersStep/AccountsTable/TableView/index.js deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/client/src/pages/PortalSettings/categories/data-import/OnlyofficeWorkspace/Stepper/SelectUsersTypeStep/AccountsTable/RowView/UsersTypeRowContent.js b/packages/client/src/pages/PortalSettings/categories/data-import/OnlyofficeWorkspace/Stepper/SelectUsersTypeStep/AccountsTable/RowView/UsersTypeRowContent.js deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/client/src/pages/PortalSettings/categories/data-import/OnlyofficeWorkspace/Stepper/SelectUsersTypeStep/AccountsTable/RowView/index.js b/packages/client/src/pages/PortalSettings/categories/data-import/OnlyofficeWorkspace/Stepper/SelectUsersTypeStep/AccountsTable/RowView/index.js deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/client/src/pages/PortalSettings/categories/data-import/OnlyofficeWorkspace/Stepper/SelectUsersTypeStep/AccountsTable/TableView/UsersTypeTableRow.js b/packages/client/src/pages/PortalSettings/categories/data-import/OnlyofficeWorkspace/Stepper/SelectUsersTypeStep/AccountsTable/TableView/UsersTypeTableRow.js deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/client/src/pages/PortalSettings/categories/data-import/OnlyofficeWorkspace/Stepper/SelectUsersTypeStep/AccountsTable/TableView/index.js b/packages/client/src/pages/PortalSettings/categories/data-import/OnlyofficeWorkspace/Stepper/SelectUsersTypeStep/AccountsTable/TableView/index.js deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/client/src/pages/PortalSettings/categories/data-import/OnlyofficeWorkspace/index.js b/packages/client/src/pages/PortalSettings/categories/data-import/OnlyofficeWorkspace/index.js deleted file mode 100644 index e69de29bb2..0000000000 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 1401834c11..8a27c0a7b5 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 @@ -64,6 +64,7 @@ const OnlyofficeWorkspace = (props: WorkspaceProps) => { } setIsMigrationInit(true); } + // eslint-disable-next-line react-hooks/exhaustive-deps }, []); if (!ready) return ; diff --git a/packages/client/src/pages/PortalSettings/categories/data-import/StyledDataImport.ts b/packages/client/src/pages/PortalSettings/categories/data-import/StyledDataImport.ts index 84f22df0dc..3f4537e536 100644 --- a/packages/client/src/pages/PortalSettings/categories/data-import/StyledDataImport.ts +++ b/packages/client/src/pages/PortalSettings/categories/data-import/StyledDataImport.ts @@ -24,7 +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 styled, { css } from "styled-components"; +import styled from "styled-components"; import { tablet, mobile } from "@docspace/shared/utils/device"; import { TableContainer } from "@docspace/shared/components/table"; diff --git a/packages/client/src/pages/PortalSettings/categories/data-import/components/AddEmailsStep/AccountsTable/RowView/index.tsx b/packages/client/src/pages/PortalSettings/categories/data-import/components/AddEmailsStep/AccountsTable/RowView/index.tsx index 75d0e164ac..b55c538804 100644 --- a/packages/client/src/pages/PortalSettings/categories/data-import/components/AddEmailsStep/AccountsTable/RowView/index.tsx +++ b/packages/client/src/pages/PortalSettings/categories/data-import/components/AddEmailsStep/AccountsTable/RowView/index.tsx @@ -29,15 +29,25 @@ import { inject, observer } from "mobx-react"; import { tablet } from "@docspace/shared/utils/device"; import styled from "styled-components"; +import { EmptyScreenContainer } from "@docspace/shared/components/empty-screen-container"; +import { IconButton } from "@docspace/shared/components/icon-button"; +import { Link, LinkType } from "@docspace/shared/components/link"; +import { Box } from "@docspace/shared/components/box"; import { RowContainer } from "@docspace/shared/components/row-container"; import { Row } from "@docspace/shared/components/row"; import { Text } from "@docspace/shared/components/text"; +import EmptyScreenUserReactSvgUrl from "PUBLIC_DIR/images/empty_screen_user.react.svg?url"; +import ClearEmptyFilterSvgUrl from "PUBLIC_DIR/images/clear.empty.filter.svg?url"; import { TEnhancedMigrationUser } from "@docspace/shared/api/settings/types"; import UsersRow from "./UsersRow"; import { AddEmailRowProps, RowViewProps } from "../../../../types"; const StyledRowContainer = styled(RowContainer)` margin: 0 0 20px; + + .clear-icon { + margin-inline-end: 8px; + } `; const StyledRow = styled(Row)` @@ -71,6 +81,7 @@ const RowView = (props: RowViewProps) => { toggleAccount, toggleAllAccounts, isAccountChecked, + setSearchValue, } = props as AddEmailRowProps; const [openedEmailKey, setOpenedEmailKey] = useState(""); @@ -85,6 +96,8 @@ const RowView = (props: RowViewProps) => { const handleToggle = (user: TEnhancedMigrationUser) => toggleAccount(user, checkedAccountType); + const onClearFilter = () => setSearchValue(""); + const isIndeterminate = checkedUsers.withoutEmail.length > 0 && checkedUsers.withoutEmail.length !== usersWithFilledEmails.length; @@ -95,26 +108,56 @@ const RowView = (props: RowViewProps) => { return ( - - {t("Common:Name")} - - {accountsData.map((data) => ( - handleToggle(data)} - isChecked={isAccountChecked(data.key, checkedAccountType)} - isEmailOpen={openedEmailKey === data.key} - setOpenedEmailKey={setOpenedEmailKey} + {accountsData.length > 0 ? ( + <> + + {t("Common:Name")} + + {accountsData.map((data) => ( + handleToggle(data)} + isChecked={isAccountChecked(data.key, checkedAccountType)} + isEmailOpen={openedEmailKey === data.key} + setOpenedEmailKey={setOpenedEmailKey} + /> + ))} + + ) : ( + + + + {t("Common:ClearFilter")} + + + } /> - ))} + )} ); }; @@ -126,6 +169,7 @@ export default inject(({ importAccountsStore }) => { toggleAccount, toggleAllAccounts, isAccountChecked, + setSearchValue, } = importAccountsStore; return { @@ -134,5 +178,6 @@ export default inject(({ importAccountsStore }) => { toggleAccount, toggleAllAccounts, isAccountChecked, + setSearchValue, }; })(observer(RowView)); diff --git a/packages/client/src/pages/PortalSettings/categories/data-import/components/AddEmailsStep/AccountsTable/TableView/index.tsx b/packages/client/src/pages/PortalSettings/categories/data-import/components/AddEmailsStep/AccountsTable/TableView/index.tsx index 188484b32e..38aa64408a 100644 --- a/packages/client/src/pages/PortalSettings/categories/data-import/components/AddEmailsStep/AccountsTable/TableView/index.tsx +++ b/packages/client/src/pages/PortalSettings/categories/data-import/components/AddEmailsStep/AccountsTable/TableView/index.tsx @@ -27,7 +27,13 @@ import { useState, useRef } from "react"; import { inject, observer } from "mobx-react"; +import { EmptyScreenContainer } from "@docspace/shared/components/empty-screen-container"; +import { IconButton } from "@docspace/shared/components/icon-button"; +import { Link, LinkType } from "@docspace/shared/components/link"; +import { Box } from "@docspace/shared/components/box"; import { TableBody } from "@docspace/shared/components/table"; +import EmptyScreenUserReactSvgUrl from "PUBLIC_DIR/images/empty_screen_user.react.svg?url"; +import ClearEmptyFilterSvgUrl from "PUBLIC_DIR/images/clear.empty.filter.svg?url"; import UsersTableHeader from "./UsersTableHeader"; import UsersTableRow from "./UsersTableRow"; import { StyledTableContainer } from "../../../../StyledDataImport"; @@ -45,13 +51,13 @@ const TableView = (props: TableViewProps) => { t, sectionWidth, accountsData, - userId, checkedUsers, toggleAccount, toggleAllAccounts, isAccountChecked, users, + setSearchValue, } = props as AddEmailTableProps; const [openedEmailKey, setOpenedEmailKey] = useState(""); const tableRef = useRef(null); @@ -67,6 +73,10 @@ const TableView = (props: TableViewProps) => { checkedAccountType, ); + const onClearFilter = () => { + setSearchValue(""); + }; + const columnStorageName = `${COLUMNS_SIZE}=${userId}`; const columnInfoPanelStorageName = `${INFO_PANEL_COLUMNS_SIZE}=${userId}`; @@ -76,44 +86,74 @@ const TableView = (props: TableViewProps) => { return ( - 0 && - checkedUsers.withoutEmail.length === usersWithFilledEmails.length - } - toggleAll={toggleAll} - /> - {}} - > - {accountsData.map((data) => ( - 0 ? ( + <> + toggleAccount(data, checkedAccountType)} - isEmailOpen={openedEmailKey === data.key} - setOpenedEmailKey={setOpenedEmailKey} + sectionWidth={sectionWidth} + tableRef={tableRef} + columnStorageName={columnStorageName} + columnInfoPanelStorageName={columnInfoPanelStorageName} + isIndeterminate={isIndeterminate} + isChecked={ + usersWithFilledEmails.length > 0 && + checkedUsers.withoutEmail.length === usersWithFilledEmails.length + } + toggleAll={toggleAll} /> - ))} - + {}} + > + {accountsData.map((data) => ( + toggleAccount(data, checkedAccountType)} + isEmailOpen={openedEmailKey === data.key} + setOpenedEmailKey={setOpenedEmailKey} + /> + ))} + + + ) : ( + + + + {t("Common:ClearFilter")} + + + } + /> + )} ); }; @@ -126,6 +166,7 @@ export default inject(({ userStore, importAccountsStore }) => { toggleAccount, toggleAllAccounts, isAccountChecked, + setSearchValue, } = importAccountsStore; return { @@ -135,5 +176,6 @@ export default inject(({ userStore, importAccountsStore }) => { toggleAccount, toggleAllAccounts, isAccountChecked, + setSearchValue, }; })(observer(TableView)); diff --git a/packages/client/src/pages/PortalSettings/categories/data-import/components/AddEmailsStep/index.tsx b/packages/client/src/pages/PortalSettings/categories/data-import/components/AddEmailsStep/index.tsx index 7957773a39..93c0cc7ada 100644 --- a/packages/client/src/pages/PortalSettings/categories/data-import/components/AddEmailsStep/index.tsx +++ b/packages/client/src/pages/PortalSettings/categories/data-import/components/AddEmailsStep/index.tsx @@ -51,7 +51,6 @@ const REFRESH_TIMEOUT = 100; const AddEmailsStep = (props: AddEmailsStepProps) => { const { t, - incrementStep, decrementStep, users, @@ -67,10 +66,8 @@ const AddEmailsStep = (props: AddEmailsStepProps) => { setWorkspace, setMigratingWorkspace, setMigrationPhase, - cancelUploadDialogVisible, setCancelUploadDialogVisible, - quotaCharacteristics, } = props as InjectedAddEmailsStepProps; @@ -97,8 +94,8 @@ const AddEmailsStep = (props: AddEmailsStepProps) => { const filteredAccounts = dataPortion.filter( (data) => data.firstName?.toLowerCase().startsWith(searchValue.toLowerCase()) || - data.displayName.toLowerCase().startsWith(searchValue.toLowerCase()) || - data.email.toLowerCase().startsWith(searchValue.toLowerCase()), + data.displayName?.toLowerCase().startsWith(searchValue.toLowerCase()) || + data.email?.toLowerCase().startsWith(searchValue.toLowerCase()), ); const handleStepIncrement = () => { @@ -190,12 +187,15 @@ const AddEmailsStep = (props: AddEmailsStepProps) => { )} ) : ( - - {t("Settings:WithoutEmailHint")} - + <> + + {t("Settings:WithoutEmailHint")} + + {Buttons} + )} - {Buttons} + {filteredAccounts.length > 0 && Buttons} {cancelUploadDialogVisible && ( { const { t, migratorName, - incrementStep, setIsLoading, proceedFileMigration, @@ -50,8 +49,7 @@ const ImportProcessingStep = (props: ImportProcessingStepProps) => { } = props as InjectedImportProcessingStepProps; const [percent, setPercent] = useState(0); - const [isVisible, setIsVisible] = useState(false); - + const [isVisibleProgress, setIsVisibleProgress] = useState(false); const [failTries, setFailTries] = useState(FAIL_TRIES); const uploadInterval = useRef(); @@ -59,7 +57,7 @@ const ImportProcessingStep = (props: ImportProcessingStepProps) => { const handleFileMigration = async () => { setIsLoading(true); setPercent(0); - setIsVisible(true); + setIsVisibleProgress(true); try { await proceedFileMigration(migratorName); @@ -78,17 +76,12 @@ const ImportProcessingStep = (props: ImportProcessingStepProps) => { } setPercent(res.progress); - - if (res.progress > 10) { - setIsVisible(false); - } else { - setIsVisible(true); - } + setIsVisibleProgress(res.progress <= 10); if (res.isCompleted || res.progress === 100) { clearInterval(uploadInterval.current); setIsLoading(false); - setIsVisible(false); + setIsVisibleProgress(false); setPercent(100); setTimeout(() => { incrementStep(); @@ -111,7 +104,7 @@ const ImportProcessingStep = (props: ImportProcessingStepProps) => { diff --git a/packages/client/src/pages/PortalSettings/categories/data-import/components/ImportStep.tsx b/packages/client/src/pages/PortalSettings/categories/data-import/components/ImportStep.tsx index 16d0ce79bb..5875fe0f67 100644 --- a/packages/client/src/pages/PortalSettings/categories/data-import/components/ImportStep.tsx +++ b/packages/client/src/pages/PortalSettings/categories/data-import/components/ImportStep.tsx @@ -180,6 +180,7 @@ const ImportStep = (props: ImportStepProps) => { workspace: t("Common:ProductName"), sectionIcon: RoomsIcon, }} + isDisabled={false} /> + props.theme.client.settings.migration.workspaceBackground}; gap: 0; } } @@ -133,19 +135,15 @@ const FAIL_TRIES = 2; const SelectFileStep = (props: SelectFileStepProps) => { const { + t, isMultipleUpload, migratorName, acceptedExtensions, - - t, incrementStep, setWorkspace, - cancelUploadDialogVisible, setCancelUploadDialogVisible, - - initMigrationName, - singleFileUploading, + initMigrations, getMigrationStatus, setUsers, cancelMigration, @@ -153,9 +151,9 @@ const SelectFileStep = (props: SelectFileStepProps) => { setLoadingStatus, files, setFiles, - multipleFileUploading, migratingWorkspace, setMigratingWorkspace, + uploadFiles, } = props as InjectedSelectFileStepProps; const [isSaveDisabled, setIsSaveDisabled] = useState( @@ -174,9 +172,18 @@ const SelectFileStep = (props: SelectFileStepProps) => { const [chunkSize, setChunkSize] = useState(0); const [failTries, setFailTries] = useState(FAIL_TRIES); - const uploadInterval = useRef(); + const handleError = useCallback( + (message?: string) => { + toastr.error(message || t("Common:SomethingWentWrong")); + setIsFileError(true); + setLoadingStatus("none"); + clearInterval(uploadInterval.current); + }, + [t, setLoadingStatus], + ); + const poolStatus = useCallback(async () => { try { const res = await getMigrationStatus(); @@ -187,29 +194,24 @@ const SelectFileStep = (props: SelectFileStepProps) => { } if (!res) { - toastr.error(t("Common:SomethingWentWrong")); - setLoadingStatus("none"); - clearInterval(uploadInterval.current); + handleError(); return; } if (res.parseResult.failedArchives.length > 0 || res.error) { - toastr.error(res.error); - setIsFileError(true); - setLoadingStatus("none"); - clearInterval(uploadInterval.current); + handleError(res.error); return; } if (res.isCompleted || res.progress === 100) { clearInterval(uploadInterval.current); - if ( + + const totalUsers = res.parseResult.users.length + - res.parseResult.existUsers.length + - res.parseResult.withoutEmailUsers.length > - 0 - ) { - setUsers(res.parseResult); + res.parseResult.existUsers.length + + res.parseResult.withoutEmailUsers.length; + + if (totalUsers > 0) { setIsBackupEmpty(false); setLoadingStatus("done"); setUsers(res.parseResult); @@ -228,15 +230,8 @@ const SelectFileStep = (props: SelectFileStepProps) => { setIsInfiniteProgress(false); } } catch (error) { - if (error instanceof Error) { - if (error.message === "Network Error") { - setIsNetworkError(true); - } - toastr.error(error || t("Common:SomethingWentWrong")); - setIsFileError(true); - setLoadingStatus("none"); - clearInterval(uploadInterval.current); - } + handleError(error as string); + setIsNetworkError(true); } }, [ failTries, @@ -244,49 +239,31 @@ const SelectFileStep = (props: SelectFileStepProps) => { isInfiniteProgress, setLoadingStatus, setUsers, - t, + handleError, ]); const onUploadFile = async (file: File | File[]) => { try { - if (file instanceof Array) { - setFiles(file.map((item) => item.name)); - await multipleFileUploading( - file, - setProgress, - isAbort, - setChunk, - startChunk, - setChunkSize, - chunkSize, - ); - } else { - setFiles([file.name]); - await singleFileUploading( - file, - setProgress, - isAbort, - setChunk, - startChunk, - setChunkSize, - chunkSize, - ); - } + const filesData = Array.isArray(file) ? file : [file]; + setFiles(filesData.map((item) => item.name)); + + await uploadFiles( + filesData, + setProgress, + isAbort, + setChunk, + startChunk, + setChunkSize, + chunkSize, + ); if (isAbort.current) return; - await initMigrationName(migratorName); + await initMigrations(migratorName); setLoadingStatus("proceed"); } catch (error) { - if (error instanceof Error) { - if (error.message === "Network Error") { - setIsNetworkError(true); - } - - toastr.error(error || t("Common:SomethingWentWrong")); - setIsFileError(true); - setLoadingStatus("none"); - } + handleError(error as string); + setIsNetworkError(true); } finally { isAbort.current = false; } @@ -300,6 +277,7 @@ const SelectFileStep = (props: SelectFileStepProps) => { setProgress(0); setIsFileError(false); + setIsBackupEmpty(false); setIsSaveDisabled(true); setLoadingStatus("upload"); setFailTries(FAIL_TRIES); @@ -405,6 +383,7 @@ const SelectFileStep = (props: SelectFileStepProps) => { } accept={acceptedExtensions} size={InputSize.base} + isMultiple={migratorName === "GoogleWorkspace"} /> {fileLoadingStatus === "upload" || fileLoadingStatus === "proceed" ? ( @@ -418,6 +397,7 @@ const SelectFileStep = (props: SelectFileStepProps) => {