mirror of
https://github.com/toeverything/AFFiNE.git
synced 2024-11-24 10:44:07 +03:00
fix(core): incorrect blocksuite data format (#4039)
This commit is contained in:
parent
82f8ac50de
commit
00e7cf9a06
@ -33,8 +33,9 @@ import { usePassiveWorkspaceEffect } from '@toeverything/infra/__internal__/reac
|
|||||||
import { currentWorkspaceIdAtom } from '@toeverything/infra/atom';
|
import { currentWorkspaceIdAtom } from '@toeverything/infra/atom';
|
||||||
import { useAtom, useAtomValue, useSetAtom } from 'jotai';
|
import { useAtom, useAtomValue, useSetAtom } from 'jotai';
|
||||||
import type { PropsWithChildren, ReactElement } from 'react';
|
import type { PropsWithChildren, ReactElement } from 'react';
|
||||||
import { lazy, Suspense, useCallback } from 'react';
|
import { lazy, Suspense, useCallback, useEffect } from 'react';
|
||||||
import { useLocation, useParams } from 'react-router-dom';
|
import { useLocation, useParams } from 'react-router-dom';
|
||||||
|
import { Map as YMap } from 'yjs';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
openQuickSearchModalAtom,
|
openQuickSearchModalAtom,
|
||||||
@ -134,6 +135,23 @@ export const WorkspaceLayoutInner = ({ children }: PropsWithChildren) => {
|
|||||||
const [currentWorkspace] = useCurrentWorkspace();
|
const [currentWorkspace] = useCurrentWorkspace();
|
||||||
const { openPage } = useNavigateHelper();
|
const { openPage } = useNavigateHelper();
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
// hotfix for blockVersions
|
||||||
|
// this is a mistake in the
|
||||||
|
// 0.8.0 ~ 0.8.1
|
||||||
|
// 0.8.0-beta.0 ~ 0.8.0-beta.3
|
||||||
|
// 0.9.0-canary.0 ~ 0.9.0-canary.3
|
||||||
|
const meta = currentWorkspace.blockSuiteWorkspace.doc.getMap('meta');
|
||||||
|
const blockVersions = meta.get('blockVersions');
|
||||||
|
if (!(blockVersions instanceof YMap)) {
|
||||||
|
console.log('fixing blockVersions');
|
||||||
|
meta.set(
|
||||||
|
'blockVersions',
|
||||||
|
new YMap(Object.entries(blockVersions as Record<string, number>))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}, [currentWorkspace.blockSuiteWorkspace.doc]);
|
||||||
|
|
||||||
usePassiveWorkspaceEffect(currentWorkspace.blockSuiteWorkspace);
|
usePassiveWorkspaceEffect(currentWorkspace.blockSuiteWorkspace);
|
||||||
|
|
||||||
const [, setOpenWorkspacesModal] = useAtom(openWorkspacesModalAtom);
|
const [, setOpenWorkspacesModal] = useAtom(openWorkspacesModalAtom);
|
||||||
|
@ -23,6 +23,7 @@ export const loader: LoaderFunction = async () => {
|
|||||||
const target = (lastId && meta.find(({ id }) => id === lastId)) || meta.at(0);
|
const target = (lastId && meta.find(({ id }) => id === lastId)) || meta.at(0);
|
||||||
if (target) {
|
if (target) {
|
||||||
const targetWorkspace = getWorkspace(target.id);
|
const targetWorkspace = getWorkspace(target.id);
|
||||||
|
|
||||||
const nonTrashPages = targetWorkspace.meta.pageMetas.filter(
|
const nonTrashPages = targetWorkspace.meta.pageMetas.filter(
|
||||||
({ trash }) => !trash
|
({ trash }) => !trash
|
||||||
);
|
);
|
||||||
|
@ -50,9 +50,11 @@ export const migrateToLatestDatabase = async (path: string) => {
|
|||||||
const update = (
|
const update = (
|
||||||
await connection.getUpdates(isRoot ? undefined : doc.guid)
|
await connection.getUpdates(isRoot ? undefined : doc.guid)
|
||||||
).map(update => update.data);
|
).map(update => update.data);
|
||||||
// Buffer[] -> Uint8Array
|
// Buffer[] -> Uint8Array[]
|
||||||
const data = new Uint8Array(Buffer.concat(update).buffer);
|
const data = update.map(update => new Uint8Array(update));
|
||||||
|
data.forEach(data => {
|
||||||
applyUpdate(doc, data);
|
applyUpdate(doc, data);
|
||||||
|
});
|
||||||
// trigger data manually
|
// trigger data manually
|
||||||
if (isRoot) {
|
if (isRoot) {
|
||||||
doc.getMap('meta');
|
doc.getMap('meta');
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import type { PageMeta, Workspace } from '@blocksuite/store';
|
import type { PageMeta, Workspace } from '@blocksuite/store';
|
||||||
import { createIndexeddbStorage } from '@blocksuite/store';
|
import { createIndexeddbStorage } from '@blocksuite/store';
|
||||||
import type { createStore, WritableAtom } from 'jotai/vanilla';
|
import type { createStore, WritableAtom } from 'jotai/vanilla';
|
||||||
|
import { Array as YArray, Doc as YDoc, Map as YMap } from 'yjs';
|
||||||
|
|
||||||
export async function buildShowcaseWorkspace(
|
export async function buildShowcaseWorkspace(
|
||||||
workspace: Workspace,
|
workspace: Workspace,
|
||||||
@ -27,7 +28,9 @@ export async function buildShowcaseWorkspace(
|
|||||||
'affine:bookmark': 1,
|
'affine:bookmark': 1,
|
||||||
'affine:database': 2,
|
'affine:database': 2,
|
||||||
};
|
};
|
||||||
workspace.doc.getMap('meta').set('blockVersions', showcaseWorkspaceVersions);
|
workspace.doc
|
||||||
|
.getMap('meta')
|
||||||
|
.set('blockVersions', new YMap(Object.entries(showcaseWorkspaceVersions)));
|
||||||
const prototypes = {
|
const prototypes = {
|
||||||
tags: {
|
tags: {
|
||||||
options: [
|
options: [
|
||||||
@ -201,7 +204,6 @@ import { applyUpdate, encodeStateAsUpdate } from 'yjs';
|
|||||||
const migrationOrigin = 'affine-migration';
|
const migrationOrigin = 'affine-migration';
|
||||||
|
|
||||||
import type { Schema } from '@blocksuite/store';
|
import type { Schema } from '@blocksuite/store';
|
||||||
import { Array as YArray, Doc as YDoc, Map as YMap } from 'yjs';
|
|
||||||
|
|
||||||
type XYWH = [number, number, number, number];
|
type XYWH = [number, number, number, number];
|
||||||
|
|
||||||
@ -495,7 +497,11 @@ const upgradeV2ToV3 = async (options: UpgradeOptions): Promise<boolean> => {
|
|||||||
const spaces = rootDoc.getMap('spaces') as YMap<any>;
|
const spaces = rootDoc.getMap('spaces') as YMap<any>;
|
||||||
const meta = rootDoc.getMap('meta') as YMap<unknown>;
|
const meta = rootDoc.getMap('meta') as YMap<unknown>;
|
||||||
const versions = meta.get('blockVersions') as YMap<number>;
|
const versions = meta.get('blockVersions') as YMap<number>;
|
||||||
if (versions.get('affine:database') === 3) {
|
if ('affine:database' in versions) {
|
||||||
|
if (versions['affine:database'] === 3) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (versions.get('affine:database') === 3) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
const schema = options.getSchema();
|
const schema = options.getSchema();
|
||||||
@ -516,7 +522,12 @@ const upgradeV2ToV3 = async (options: UpgradeOptions): Promise<boolean> => {
|
|||||||
space
|
space
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
if ('affine:database' in versions) {
|
||||||
|
versions['affine:database'] = 3;
|
||||||
|
meta.set('blockVersions', new YMap(Object.entries(versions)));
|
||||||
|
} else {
|
||||||
versions.set('affine:database', 3);
|
versions.set('affine:database', 3);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user