refactor(core): use manual upgrade to replace auto migration when web setup (#5022)

1. Split logic in `packages/common/infra/src/blocksuite/index.ts` to multiple single files
2. Move migration logic from setup to upgrade module, to prevent auto migration problems and loading problem
This commit is contained in:
Joooye_34
2023-11-23 02:26:06 +00:00
parent 3710bcdc14
commit 4c8d54b3a7
21 changed files with 947 additions and 1026 deletions

View File

@@ -1,4 +1,3 @@
import { WorkspaceFlavour } from '@affine/env/workspace';
import { rootWorkspacesMetadataAtom } from '@affine/workspace/atom';
import { getBlockSuiteWorkspaceAtom } from '@toeverything/infra/__internal__/workspace';
import {
@@ -6,7 +5,11 @@ import {
currentWorkspaceIdAtom,
getCurrentStore,
} from '@toeverything/infra/atom';
import { guidCompatibilityFix } from '@toeverything/infra/blocksuite';
import type { MigrationPoint } from '@toeverything/infra/blocksuite';
import {
checkWorkspaceCompatibility,
guidCompatibilityFix,
} from '@toeverything/infra/blocksuite';
import { useSetAtom } from 'jotai';
import { type ReactElement, useEffect } from 'react';
import {
@@ -49,22 +52,9 @@ export const loader: LoaderFunction = async args => {
const workspace = await rootStore.get(workspaceAtom);
workspaceLoaderLogger.info('workspace loaded');
if (currentMetadata.flavour === WorkspaceFlavour.AFFINE_CLOUD) {
return (() => {
guidCompatibilityFix(workspace.doc);
const blockVersions = workspace.meta.blockVersions;
if (!blockVersions) {
return true;
}
for (const [flavour, schema] of workspace.schema.flavourSchemaMap) {
if (blockVersions[flavour] !== schema.version) {
return true;
}
}
return false;
})();
}
return null;
guidCompatibilityFix(workspace.doc);
return checkWorkspaceCompatibility(workspace);
};
export const Component = (): ReactElement => {
@@ -81,10 +71,10 @@ export const Component = (): ReactElement => {
}
}, [params, setCurrentWorkspaceId]);
const incompatible = useLoaderData();
const migration = useLoaderData() as MigrationPoint | undefined;
return (
<AffineErrorBoundary height="100vh">
<WorkspaceLayout incompatible={!!incompatible}>
<WorkspaceLayout migration={migration}>
<Outlet />
</WorkspaceLayout>
</AffineErrorBoundary>