diff --git a/packages/common/env/package.json b/packages/common/env/package.json index 729f8050d96dd..a08f9177878ab 100644 --- a/packages/common/env/package.json +++ b/packages/common/env/package.json @@ -3,8 +3,8 @@ "private": true, "type": "module", "devDependencies": { - "@blocksuite/global": "0.13.0-canary-202403050653-934469c", - "@blocksuite/store": "0.13.0-canary-202403050653-934469c", + "@blocksuite/global": "0.13.0-canary-202403120738-e15d583", + "@blocksuite/store": "0.13.0-canary-202403120738-e15d583", "react": "18.2.0", "react-dom": "18.2.0", "vitest": "1.3.1" diff --git a/packages/common/env/src/constant.ts b/packages/common/env/src/constant.ts index 179ec41abb75b..4de96957c4b46 100644 --- a/packages/common/env/src/constant.ts +++ b/packages/common/env/src/constant.ts @@ -1,5 +1,5 @@ // This file should has not side effect -import type { Workspace } from '@blocksuite/store'; +import type { DocCollection } from '@blocksuite/store'; declare global { interface Window { @@ -95,12 +95,12 @@ export const Messages = { }; export class PageNotFoundError extends TypeError { - readonly workspace: Workspace; + readonly docCollection: DocCollection; readonly pageId: string; - constructor(workspace: Workspace, pageId: string) { + constructor(docCollection: DocCollection, pageId: string) { super(); - this.workspace = workspace; + this.docCollection = docCollection; this.pageId = pageId; } } diff --git a/packages/common/env/src/filter.ts b/packages/common/env/src/filter.ts index 948d9beda7146..c0c1deb4540b1 100644 --- a/packages/common/env/src/filter.ts +++ b/packages/common/env/src/filter.ts @@ -1,4 +1,4 @@ -import type { Workspace } from '@blocksuite/store'; +import type { DocCollection } from '@blocksuite/store'; import { z } from 'zod'; export const literalValueSchema: z.ZodType = @@ -81,4 +81,4 @@ export const tagSchema = z.object({ }); export type Tag = z.input; -export type PropertiesMeta = Workspace['meta']['properties']; +export type PropertiesMeta = DocCollection['meta']['properties']; diff --git a/packages/common/env/src/global.ts b/packages/common/env/src/global.ts index 68282751b21c0..c3d8b88290cc5 100644 --- a/packages/common/env/src/global.ts +++ b/packages/common/env/src/global.ts @@ -1,6 +1,6 @@ /// import { assertEquals } from '@blocksuite/global/utils'; -import type { Workspace } from '@blocksuite/store'; +import type { DocCollection } from '@blocksuite/store'; import { z } from 'zod'; import { isDesktop, isServer } from './constant.js'; @@ -154,9 +154,9 @@ export function setupGlobal() { globalThis.$AFFINE_SETUP = true; } -export function setupEditorFlags(workspace: Workspace) { +export function setupEditorFlags(docCollection: DocCollection) { Object.entries(runtimeConfig.editorFlags).forEach(([key, value]) => { - workspace.awarenessStore.setFlag( + docCollection.awarenessStore.setFlag( key as keyof BlockSuiteFeatureFlags, value ); diff --git a/packages/common/infra/package.json b/packages/common/infra/package.json index f1d82e141bcd0..f18e3e89f0999 100644 --- a/packages/common/infra/package.json +++ b/packages/common/infra/package.json @@ -17,9 +17,9 @@ "@affine/debug": "workspace:*", "@affine/env": "workspace:*", "@affine/templates": "workspace:*", - "@blocksuite/blocks": "0.13.0-canary-202403050653-934469c", - "@blocksuite/global": "0.13.0-canary-202403050653-934469c", - "@blocksuite/store": "0.13.0-canary-202403050653-934469c", + "@blocksuite/blocks": "0.13.0-canary-202403120738-e15d583", + "@blocksuite/global": "0.13.0-canary-202403120738-e15d583", + "@blocksuite/store": "0.13.0-canary-202403120738-e15d583", "foxact": "^0.2.31", "jotai": "^2.6.5", "jotai-effect": "^0.6.0", @@ -33,8 +33,8 @@ "devDependencies": { "@affine-test/fixtures": "workspace:*", "@affine/templates": "workspace:*", - "@blocksuite/lit": "0.13.0-canary-202403050653-934469c", - "@blocksuite/presets": "0.13.0-canary-202403050653-934469c", + "@blocksuite/lit": "0.13.0-canary-202403120738-e15d583", + "@blocksuite/presets": "0.13.0-canary-202403120738-e15d583", "@testing-library/react": "^14.2.1", "async-call-rpc": "^6.4.0", "react": "^18.2.0", diff --git a/packages/common/infra/src/blocksuite/migration/blocksuite.ts b/packages/common/infra/src/blocksuite/migration/blocksuite.ts index 2fc17d9ac1813..f07a55cd7dc33 100644 --- a/packages/common/infra/src/blocksuite/migration/blocksuite.ts +++ b/packages/common/infra/src/blocksuite/migration/blocksuite.ts @@ -35,7 +35,7 @@ export async function migratePages( console.error(e); } }); - schema.upgradeWorkspace(rootDoc); + schema.upgradeCollection(rootDoc); // Hard code to upgrade page version to 2. // Let e2e to ensure the data version is correct. diff --git a/packages/common/infra/src/blocksuite/migration/workspace.ts b/packages/common/infra/src/blocksuite/migration/workspace.ts index b19a7f71224e6..f39819c8b58b8 100644 --- a/packages/common/infra/src/blocksuite/migration/workspace.ts +++ b/packages/common/infra/src/blocksuite/migration/workspace.ts @@ -1,4 +1,4 @@ -import type { Workspace } from '@blocksuite/store'; +import type { DocCollection } from '@blocksuite/store'; import type { Array as YArray, Doc as YDoc, Map as YMap } from 'yjs'; /** @@ -11,14 +11,14 @@ export enum MigrationPoint { } export function checkWorkspaceCompatibility( - workspace: Workspace, + docCollection: DocCollection, isCloud: boolean ): MigrationPoint | null { // check if there is any key starts with 'space:' on root doc - const spaceMetaObj = workspace.doc.share.get('space:meta') as + const spaceMetaObj = docCollection.doc.share.get('space:meta') as | YMap | undefined; - const docKeys = Array.from(workspace.doc.share.keys()); + const docKeys = Array.from(docCollection.doc.share.keys()); const haveSpaceMeta = !!spaceMetaObj && spaceMetaObj.size > 0; const haveLegacySpace = docKeys.some(key => key.startsWith('space:')); @@ -28,12 +28,12 @@ export function checkWorkspaceCompatibility( } // exit if no pages - if (!workspace.meta.docs?.length) { + if (!docCollection.meta.docs?.length) { return null; } // check guid compatibility - const meta = workspace.doc.getMap('meta') as YMap; + const meta = docCollection.doc.getMap('meta') as YMap; const pages = meta.get('pages') as YArray>; for (const page of pages) { const pageId = page.get('id') as string | undefined; @@ -41,23 +41,23 @@ export function checkWorkspaceCompatibility( return MigrationPoint.GuidFix; } } - const spaces = workspace.doc.getMap('spaces') as YMap; + const spaces = docCollection.doc.getMap('spaces') as YMap; for (const [pageId, _] of spaces) { if (pageId.includes(':')) { return MigrationPoint.GuidFix; } } - const hasVersion = workspace.meta.hasVersion; + const hasVersion = docCollection.meta.hasVersion; if (!hasVersion) { return MigrationPoint.BlockVersion; } // TODO: Catch compatibility error from blocksuite to show upgrade page. // Temporarily follow the check logic of blocksuite. - if ((workspace.meta.docs?.length ?? 0) <= 1) { + if ((docCollection.meta.docs?.length ?? 0) <= 1) { try { - workspace.meta.validateVersion(workspace); + docCollection.meta.validateVersion(docCollection); } catch (e) { console.info('validateVersion error', e); return MigrationPoint.BlockVersion; @@ -65,9 +65,9 @@ export function checkWorkspaceCompatibility( } // From v2, we depend on blocksuite to check and migrate data. - const blockVersions = workspace.meta.blockVersions; + const blockVersions = docCollection.meta.blockVersions; for (const [flavour, version] of Object.entries(blockVersions ?? {})) { - const schema = workspace.schema.flavourSchemaMap.get(flavour); + const schema = docCollection.schema.flavourSchemaMap.get(flavour); if (schema?.version !== version) { return MigrationPoint.BlockVersion; } diff --git a/packages/common/infra/src/initialization/index.ts b/packages/common/infra/src/initialization/index.ts index 032e99a524d8c..9390cc178074b 100644 --- a/packages/common/infra/src/initialization/index.ts +++ b/packages/common/infra/src/initialization/index.ts @@ -1,9 +1,9 @@ import type { WorkspaceFlavour } from '@affine/env/workspace'; import type { + CollectionInfoSnapshot, Doc, DocSnapshot, JobMiddleware, - WorkspaceInfoSnapshot, } from '@blocksuite/store'; import { Job } from '@blocksuite/store'; import { Map as YMap } from 'yjs'; @@ -49,17 +49,17 @@ export async function buildShowcaseWorkspace( ) { const meta = await workspaceManager.createWorkspace( flavour, - async (blockSuiteWorkspace, blobStorage) => { - blockSuiteWorkspace.meta.setName(workspaceName); + async (docCollection, blobStorage) => { + docCollection.meta.setName(workspaceName); const { onboarding } = await import('@affine/templates'); - const info = onboarding['info.json'] as WorkspaceInfoSnapshot; + const info = onboarding['info.json'] as CollectionInfoSnapshot; const blob = onboarding['blob.json'] as { [key: string]: string }; - const migrationMiddleware: JobMiddleware = ({ slots, workspace }) => { + const migrationMiddleware: JobMiddleware = ({ slots, collection }) => { slots.afterImport.on(payload => { if (payload.type === 'page') { - workspace.schema.upgradeDoc( + collection.schema.upgradeDoc( info?.pageVersion ?? 0, {}, payload.page.spaceDoc @@ -69,11 +69,11 @@ export async function buildShowcaseWorkspace( }; const job = new Job({ - workspace: blockSuiteWorkspace, + collection: docCollection, middlewares: [replaceIdMiddleware, migrationMiddleware], }); - job.snapshotToWorkspaceInfo(info); + job.snapshotToCollectionInfo(info); // for now all onboarding assets are considered served via CDN // hack assets so that every blob exists @@ -92,8 +92,8 @@ export async function buildShowcaseWorkspace( }) ); - const newVersions = getLatestVersions(blockSuiteWorkspace.schema); - blockSuiteWorkspace.doc + const newVersions = getLatestVersions(docCollection.schema); + docCollection.doc .getMap('meta') .set('blockVersions', new YMap(Object.entries(newVersions))); diff --git a/packages/common/infra/src/page/manager.ts b/packages/common/infra/src/page/manager.ts index 9725e7e9bcf63..c5ff6705497be 100644 --- a/packages/common/infra/src/page/manager.ts +++ b/packages/common/infra/src/page/manager.ts @@ -20,7 +20,7 @@ export class PageManager { if (!pageRecord) { throw new Error('Page record not found'); } - const blockSuitePage = this.workspace.blockSuiteWorkspace.getDoc(pageId); + const blockSuitePage = this.workspace.docCollection.getDoc(pageId); if (!blockSuitePage) { throw new Error('Page not found'); } diff --git a/packages/common/infra/src/page/record-list.ts b/packages/common/infra/src/page/record-list.ts index c27b359265e4f..5153548953555 100644 --- a/packages/common/infra/src/page/record-list.ts +++ b/packages/common/infra/src/page/record-list.ts @@ -18,7 +18,7 @@ export class PageRecordList { new Observable(subscriber => { const emit = () => { subscriber.next( - this.workspace.blockSuiteWorkspace.meta.docMetas.map( + this.workspace.docCollection.meta.docMetas.map( v => new PageRecord(v.id, this.workspace, this.localState) ) ); @@ -27,7 +27,7 @@ export class PageRecordList { emit(); const dispose = - this.workspace.blockSuiteWorkspace.meta.docMetaUpdated.on(emit).dispose; + this.workspace.docCollection.meta.docMetaUpdated.on(emit).dispose; return () => { dispose(); }; diff --git a/packages/common/infra/src/page/record.ts b/packages/common/infra/src/page/record.ts index e6f109ae64296..b3276b5b7687f 100644 --- a/packages/common/infra/src/page/record.ts +++ b/packages/common/infra/src/page/record.ts @@ -16,7 +16,7 @@ export class PageRecord { meta = LiveData.from( new Observable(subscriber => { const emit = () => { - const meta = this.workspace.blockSuiteWorkspace.meta.docMetas.find( + const meta = this.workspace.docCollection.meta.docMetas.find( page => page.id === this.id ); if (meta === undefined) { @@ -28,7 +28,7 @@ export class PageRecord { emit(); const dispose = - this.workspace.blockSuiteWorkspace.meta.docMetaUpdated.on(emit).dispose; + this.workspace.docCollection.meta.docMetaUpdated.on(emit).dispose; return () => { dispose(); }; @@ -42,7 +42,7 @@ export class PageRecord { ); setMeta(meta: Partial): void { - this.workspace.blockSuiteWorkspace.setDocMeta(this.id, meta); + this.workspace.docCollection.setDocMeta(this.id, meta); } mode: LiveData = LiveData.from( diff --git a/packages/common/infra/src/workspace/__tests__/workspace.spec.ts b/packages/common/infra/src/workspace/__tests__/workspace.spec.ts index a239341a65dba..1a1182ba1fbaa 100644 --- a/packages/common/infra/src/workspace/__tests__/workspace.spec.ts +++ b/packages/common/infra/src/workspace/__tests__/workspace.spec.ts @@ -22,7 +22,7 @@ describe('Workspace System', () => { expect(workspaceListService.workspaceList.value.length).toBe(1); - const page = workspace.blockSuiteWorkspace.createDoc({ + const page = workspace.docCollection.createDoc({ id: 'page0', }); page.load(); @@ -30,7 +30,7 @@ describe('Workspace System', () => { title: new page.Text('test-page'), }); - expect(workspace.blockSuiteWorkspace.docs.size).toBe(1); + expect(workspace.docCollection.docs.size).toBe(1); expect( (page!.getBlockByFlavour('affine:page')[0] as any).title.toString() ).toBe('test-page'); diff --git a/packages/common/infra/src/workspace/context.ts b/packages/common/infra/src/workspace/context.ts index 41e2f8d2481ce..ca7db30229a9b 100644 --- a/packages/common/infra/src/workspace/context.ts +++ b/packages/common/infra/src/workspace/context.ts @@ -18,7 +18,7 @@ * }) */ -import { Workspace as BlockSuiteWorkspace } from '@blocksuite/store'; +import { DocCollection } from '@blocksuite/store'; import { nanoid } from 'nanoid'; import type { Awareness } from 'y-protocols/awareness.js'; import type { Doc as YDoc } from 'yjs'; @@ -29,7 +29,7 @@ import { globalBlockSuiteSchema } from './global-schema'; import type { WorkspaceMetadata } from './metadata'; import { WorkspaceScope } from './service-scope'; -export const BlockSuiteWorkspaceContext = createIdentifier( +export const BlockSuiteWorkspaceContext = createIdentifier( 'BlockSuiteWorkspaceContext' ); @@ -53,7 +53,7 @@ export function configureWorkspaceContext( .addImpl(WorkspaceMetadataContext, workspaceMetadata) .addImpl(WorkspaceIdContext, workspaceMetadata.id) .addImpl(BlockSuiteWorkspaceContext, provider => { - return new BlockSuiteWorkspace({ + return new DocCollection({ id: workspaceMetadata.id, blobStorages: [ () => ({ diff --git a/packages/common/infra/src/workspace/engine/sync/__tests__/engine.spec.ts b/packages/common/infra/src/workspace/engine/sync/__tests__/engine.spec.ts index 6bf9bd4b728bd..7e2580f94ce71 100644 --- a/packages/common/infra/src/workspace/engine/sync/__tests__/engine.spec.ts +++ b/packages/common/infra/src/workspace/engine/sync/__tests__/engine.spec.ts @@ -1,5 +1,5 @@ import { WorkspaceFlavour } from '@affine/env/workspace'; -import { Workspace } from '@blocksuite/store'; +import { DocCollection } from '@blocksuite/store'; import { beforeEach, describe, expect, test, vi } from 'vitest'; import { Doc } from 'yjs'; @@ -26,14 +26,14 @@ describe('SyncEngine', () => { const storage2 = new MemoryMemento(); let prev: any; { - const workspace = new Workspace({ + const docCollection = new DocCollection({ id: 'test', schema: globalBlockSuiteSchema, }); const syncEngine = new SyncEngine( - workspace.doc, + docCollection.doc, new TestingSyncStorage(testMeta, storage), [ new TestingSyncStorage(testMeta, storage1), @@ -42,7 +42,7 @@ describe('SyncEngine', () => { ); syncEngine.start(); - const page = workspace.createDoc({ + const page = docCollection.createDoc({ id: 'page0', }); page.load(); @@ -69,23 +69,23 @@ describe('SyncEngine', () => { ); await syncEngine.waitForSynced(); syncEngine.forceStop(); - prev = workspace.doc.toJSON(); + prev = docCollection.doc.toJSON(); } for (const current of [storage, storage1, storage2]) { - const workspace = new Workspace({ + const docCollection = new DocCollection({ id: 'test', schema: globalBlockSuiteSchema, }); const syncEngine = new SyncEngine( - workspace.doc, + docCollection.doc, new TestingSyncStorage(testMeta, current), [] ); syncEngine.start(); await syncEngine.waitForSynced(); - expect(workspace.doc.toJSON()).toEqual({ + expect(docCollection.doc.toJSON()).toEqual({ ...prev, }); syncEngine.forceStop(); diff --git a/packages/common/infra/src/workspace/engine/sync/__tests__/peer.spec.ts b/packages/common/infra/src/workspace/engine/sync/__tests__/peer.spec.ts index 4bc033a09bd6a..f0cf51d63339c 100644 --- a/packages/common/infra/src/workspace/engine/sync/__tests__/peer.spec.ts +++ b/packages/common/infra/src/workspace/engine/sync/__tests__/peer.spec.ts @@ -1,5 +1,5 @@ import { WorkspaceFlavour } from '@affine/env/workspace'; -import { Workspace } from '@blocksuite/store'; +import { DocCollection } from '@blocksuite/store'; import { beforeEach, describe, expect, test, vi } from 'vitest'; import { MemoryMemento } from '../../../../storage'; @@ -23,19 +23,19 @@ describe('SyncPeer', () => { let prev: any; { - const workspace = new Workspace({ + const docCollection = new DocCollection({ id: 'test', schema: globalBlockSuiteSchema, }); const syncPeer = new SyncPeer( - workspace.doc, + docCollection.doc, new TestingSyncStorage(testMeta, storage) ); await syncPeer.waitForLoaded(); - const page = workspace.createDoc({ + const page = docCollection.createDoc({ id: 'page0', }); page.load(); @@ -62,21 +62,21 @@ describe('SyncPeer', () => { ); await syncPeer.waitForSynced(); syncPeer.stop(); - prev = workspace.doc.toJSON(); + prev = docCollection.doc.toJSON(); } { - const workspace = new Workspace({ + const docCollection = new DocCollection({ id: 'test', schema: globalBlockSuiteSchema, }); const syncPeer = new SyncPeer( - workspace.doc, + docCollection.doc, new TestingSyncStorage(testMeta, storage) ); await syncPeer.waitForSynced(); - expect(workspace.doc.toJSON()).toEqual({ + expect(docCollection.doc.toJSON()).toEqual({ ...prev, }); syncPeer.stop(); @@ -86,21 +86,21 @@ describe('SyncPeer', () => { test('status', async () => { const storage = new MemoryMemento(); - const workspace = new Workspace({ + const docCollection = new DocCollection({ id: 'test', schema: globalBlockSuiteSchema, }); const syncPeer = new SyncPeer( - workspace.doc, + docCollection.doc, new TestingSyncStorage(testMeta, storage) ); expect(syncPeer.status.step).toBe(SyncPeerStep.LoadingRootDoc); await syncPeer.waitForSynced(); expect(syncPeer.status.step).toBe(SyncPeerStep.Synced); - const page = workspace.createDoc({ + const page = docCollection.createDoc({ id: 'page0', }); expect(syncPeer.status.step).toBe(SyncPeerStep.LoadingSubDoc); diff --git a/packages/common/infra/src/workspace/list/index.ts b/packages/common/infra/src/workspace/list/index.ts index ff414bc1d6f6a..3c90a7fa50f4e 100644 --- a/packages/common/infra/src/workspace/list/index.ts +++ b/packages/common/infra/src/workspace/list/index.ts @@ -1,6 +1,6 @@ import { DebugLogger } from '@affine/debug'; import type { WorkspaceFlavour } from '@affine/env/workspace'; -import type { Workspace as BlockSuiteWorkspace } from '@blocksuite/store'; +import type { DocCollection } from '@blocksuite/store'; import { differenceWith } from 'lodash-es'; import { createIdentifier } from '../../di'; @@ -34,7 +34,7 @@ export interface WorkspaceListProvider { */ create( initial: ( - workspace: BlockSuiteWorkspace, + docCollection: DocCollection, blobStorage: BlobStorage ) => Promise ): Promise; @@ -124,7 +124,7 @@ export class WorkspaceListService { async create( flavour: WorkspaceFlavour, initial: ( - workspace: BlockSuiteWorkspace, + docCollection: DocCollection, blobStorage: BlobStorage ) => Promise = () => Promise.resolve() ) { diff --git a/packages/common/infra/src/workspace/list/information.ts b/packages/common/infra/src/workspace/list/information.ts index e143d72e5011f..a9ff2363c587f 100644 --- a/packages/common/infra/src/workspace/list/information.ts +++ b/packages/common/infra/src/workspace/list/information.ts @@ -57,13 +57,13 @@ export class WorkspaceInformation { */ syncWithWorkspace(workspace: Workspace) { this.info = { - avatar: workspace.blockSuiteWorkspace.meta.avatar ?? this.info.avatar, - name: workspace.blockSuiteWorkspace.meta.name ?? this.info.name, + avatar: workspace.docCollection.meta.avatar ?? this.info.avatar, + name: workspace.docCollection.meta.name ?? this.info.name, }; - workspace.blockSuiteWorkspace.meta.commonFieldsUpdated.on(() => { + workspace.docCollection.meta.commonFieldsUpdated.on(() => { this.info = { - avatar: workspace.blockSuiteWorkspace.meta.avatar ?? this.info.avatar, - name: workspace.blockSuiteWorkspace.meta.name ?? this.info.name, + avatar: workspace.docCollection.meta.avatar ?? this.info.avatar, + name: workspace.docCollection.meta.name ?? this.info.name, }; }); } diff --git a/packages/common/infra/src/workspace/manager.ts b/packages/common/infra/src/workspace/manager.ts index c4c8fd756d0a0..49d2451cb16e3 100644 --- a/packages/common/infra/src/workspace/manager.ts +++ b/packages/common/infra/src/workspace/manager.ts @@ -2,7 +2,7 @@ import { DebugLogger } from '@affine/debug'; import { setupEditorFlags } from '@affine/env/global'; import { WorkspaceFlavour } from '@affine/env/workspace'; import { assertEquals } from '@blocksuite/global/utils'; -import type { Workspace as BlockSuiteWorkspace } from '@blocksuite/store'; +import type { DocCollection } from '@blocksuite/store'; import { applyUpdate, encodeStateAsUpdate } from 'yjs'; import { fixWorkspaceVersion } from '../blocksuite'; @@ -105,7 +105,7 @@ export class WorkspaceManager { createWorkspace( flavour: WorkspaceFlavour, initial?: ( - workspace: BlockSuiteWorkspace, + docCollection: DocCollection, blobStorage: BlobStorage ) => Promise ): Promise { @@ -131,9 +131,9 @@ export class WorkspaceManager { const newId = await this.list.create( WorkspaceFlavour.AFFINE_CLOUD, async (ws, bs) => { - applyUpdate(ws.doc, encodeStateAsUpdate(local.blockSuiteWorkspace.doc)); + applyUpdate(ws.doc, encodeStateAsUpdate(local.docCollection.doc)); - for (const subdoc of local.blockSuiteWorkspace.doc.getSubdocs()) { + for (const subdoc of local.docCollection.doc.getSubdocs()) { for (const newSubdoc of ws.doc.getSubdocs()) { if (newSubdoc.guid === subdoc.guid) { applyUpdate(newSubdoc, encodeStateAsUpdate(subdoc)); @@ -191,9 +191,9 @@ export class WorkspaceManager { const workspace = provider.get(Workspace); // apply compatibility fix - fixWorkspaceVersion(workspace.blockSuiteWorkspace.doc); + fixWorkspaceVersion(workspace.docCollection.doc); - setupEditorFlags(workspace.blockSuiteWorkspace); + setupEditorFlags(workspace.docCollection); return workspace; } diff --git a/packages/common/infra/src/workspace/testing.ts b/packages/common/infra/src/workspace/testing.ts index 6f2b364b0f738..8c17e78526bb6 100644 --- a/packages/common/infra/src/workspace/testing.ts +++ b/packages/common/infra/src/workspace/testing.ts @@ -1,5 +1,5 @@ import { WorkspaceFlavour } from '@affine/env/workspace'; -import { Workspace as BlockSuiteWorkspace } from '@blocksuite/store'; +import { DocCollection } from '@blocksuite/store'; import { differenceBy } from 'lodash-es'; import { nanoid } from 'nanoid'; import { applyUpdate, encodeStateAsUpdate } from 'yjs'; @@ -43,7 +43,7 @@ export class TestingLocalWorkspaceListProvider } async create( initial: ( - workspace: BlockSuiteWorkspace, + docCollection: DocCollection, blobStorage: BlobStorage ) => Promise ): Promise { @@ -53,18 +53,18 @@ export class TestingLocalWorkspaceListProvider const blobStorage = new TestingBlobStorage(meta, this.state); const syncStorage = new TestingSyncStorage(meta, this.state); - const workspace = new BlockSuiteWorkspace({ + const docCollection = new DocCollection({ id: id, idGenerator: () => nanoid(), schema: globalBlockSuiteSchema, }); // apply initial state - await initial(workspace, blobStorage); + await initial(docCollection, blobStorage); // save workspace to storage - await syncStorage.push(id, encodeStateAsUpdate(workspace.doc)); - for (const subdocs of workspace.doc.getSubdocs()) { + await syncStorage.push(id, encodeStateAsUpdate(docCollection.doc)); + for (const subdocs of docCollection.doc.getSubdocs()) { await syncStorage.push(subdocs.guid, encodeStateAsUpdate(subdocs)); } @@ -117,7 +117,7 @@ export class TestingLocalWorkspaceListProvider return; } - const bs = new BlockSuiteWorkspace({ + const bs = new DocCollection({ id, schema: globalBlockSuiteSchema, }); diff --git a/packages/common/infra/src/workspace/upgrade.ts b/packages/common/infra/src/workspace/upgrade.ts index 2b57dafce4a01..ef7dcd6c6c53c 100644 --- a/packages/common/infra/src/workspace/upgrade.ts +++ b/packages/common/infra/src/workspace/upgrade.ts @@ -1,7 +1,7 @@ import { Unreachable } from '@affine/env/constant'; import { WorkspaceFlavour } from '@affine/env/workspace'; import { Slot } from '@blocksuite/global/utils'; -import type { Workspace as BlockSuiteWorkspace } from '@blocksuite/store'; +import type { DocCollection } from '@blocksuite/store'; import { applyUpdate, Doc as YDoc, encodeStateAsUpdate } from 'yjs'; import { checkWorkspaceCompatibility, MigrationPoint } from '../blocksuite'; @@ -38,18 +38,18 @@ export class WorkspaceUpgradeController { } constructor( - private readonly blockSuiteWorkspace: BlockSuiteWorkspace, + private readonly docCollection: DocCollection, private readonly sync: SyncEngine, private readonly workspaceMetadata: WorkspaceMetadata ) { - blockSuiteWorkspace.doc.on('update', () => { + docCollection.doc.on('update', () => { this.checkIfNeedUpgrade(); }); } checkIfNeedUpgrade() { const needUpgrade = !!checkWorkspaceCompatibility( - this.blockSuiteWorkspace, + this.docCollection, this.workspaceMetadata.flavour === WorkspaceFlavour.AFFINE_CLOUD ); this.status = { @@ -72,7 +72,7 @@ export class WorkspaceUpgradeController { await this.sync.waitForSynced(); const step = checkWorkspaceCompatibility( - this.blockSuiteWorkspace, + this.docCollection, this.workspaceMetadata.flavour === WorkspaceFlavour.AFFINE_CLOUD ); @@ -82,9 +82,9 @@ export class WorkspaceUpgradeController { // Clone a new doc to prevent change events. const clonedDoc = new YDoc({ - guid: this.blockSuiteWorkspace.doc.guid, + guid: this.docCollection.doc.guid, }); - applyDoc(clonedDoc, this.blockSuiteWorkspace.doc); + applyDoc(clonedDoc, this.docCollection.doc); if (step === MigrationPoint.SubDoc) { const newWorkspace = await workspaceManager.createWorkspace( @@ -92,14 +92,11 @@ export class WorkspaceUpgradeController { async (workspace, blobStorage) => { await upgradeV1ToV2(clonedDoc, workspace.doc); migrateGuidCompatibility(clonedDoc); - await forceUpgradePages( - workspace.doc, - this.blockSuiteWorkspace.schema - ); - const blobList = await this.blockSuiteWorkspace.blob.list(); + await forceUpgradePages(workspace.doc, this.docCollection.schema); + const blobList = await this.docCollection.blob.list(); for (const blobKey of blobList) { - const blob = await this.blockSuiteWorkspace.blob.get(blobKey); + const blob = await this.docCollection.blob.get(blobKey); if (blob) { await blobStorage.set(blobKey, blob); } @@ -110,13 +107,13 @@ export class WorkspaceUpgradeController { return newWorkspace; } else if (step === MigrationPoint.GuidFix) { migrateGuidCompatibility(clonedDoc); - await forceUpgradePages(clonedDoc, this.blockSuiteWorkspace.schema); - applyDoc(this.blockSuiteWorkspace.doc, clonedDoc); + await forceUpgradePages(clonedDoc, this.docCollection.schema); + applyDoc(this.docCollection.doc, clonedDoc); await this.sync.waitForSynced(); return null; } else if (step === MigrationPoint.BlockVersion) { - await forceUpgradePages(clonedDoc, this.blockSuiteWorkspace.schema); - applyDoc(this.blockSuiteWorkspace.doc, clonedDoc); + await forceUpgradePages(clonedDoc, this.docCollection.schema); + applyDoc(this.docCollection.doc, clonedDoc); await this.sync.waitForSynced(); return null; } else { diff --git a/packages/common/infra/src/workspace/workspace.ts b/packages/common/infra/src/workspace/workspace.ts index 2fa2c7530329b..ff43b94ce27b1 100644 --- a/packages/common/infra/src/workspace/workspace.ts +++ b/packages/common/infra/src/workspace/workspace.ts @@ -1,6 +1,6 @@ import { DebugLogger } from '@affine/debug'; import { Slot } from '@blocksuite/global/utils'; -import type { Workspace as BlockSuiteWorkspace } from '@blocksuite/store'; +import type { DocCollection } from '@blocksuite/store'; import type { ServiceProvider } from '../di'; import { CleanupService } from '../lifecycle'; @@ -10,7 +10,7 @@ import { type WorkspaceMetadata } from './metadata'; import type { WorkspaceUpgradeController } from './upgrade'; import { type WorkspaceUpgradeStatus } from './upgrade'; -export type { Workspace as BlockSuiteWorkspace } from '@blocksuite/store'; +export type { DocCollection } from '@blocksuite/store'; const logger = new DebugLogger('affine:workspace'); @@ -67,7 +67,7 @@ export class Workspace { constructor( public meta: WorkspaceMetadata, public engine: WorkspaceEngine, - public blockSuiteWorkspace: BlockSuiteWorkspace, + public docCollection: DocCollection, public upgrade: WorkspaceUpgradeController, public services: ServiceProvider ) { diff --git a/packages/common/y-indexeddb/package.json b/packages/common/y-indexeddb/package.json index 9f188f00bac49..f9f9a9b3dff54 100644 --- a/packages/common/y-indexeddb/package.json +++ b/packages/common/y-indexeddb/package.json @@ -32,14 +32,14 @@ } }, "dependencies": { - "@blocksuite/global": "0.13.0-canary-202403050653-934469c", + "@blocksuite/global": "0.13.0-canary-202403120738-e15d583", "idb": "^8.0.0", "nanoid": "^5.0.6", "y-provider": "workspace:*" }, "devDependencies": { - "@blocksuite/blocks": "0.13.0-canary-202403050653-934469c", - "@blocksuite/store": "0.13.0-canary-202403050653-934469c", + "@blocksuite/blocks": "0.13.0-canary-202403120738-e15d583", + "@blocksuite/store": "0.13.0-canary-202403120738-e15d583", "fake-indexeddb": "^5.0.2", "vite": "^5.1.4", "vite-plugin-dts": "3.7.3", diff --git a/packages/common/y-indexeddb/src/__tests__/index.spec.ts b/packages/common/y-indexeddb/src/__tests__/index.spec.ts index d514f2f419bc2..a9dd40095473f 100644 --- a/packages/common/y-indexeddb/src/__tests__/index.spec.ts +++ b/packages/common/y-indexeddb/src/__tests__/index.spec.ts @@ -8,7 +8,7 @@ import { setTimeout } from 'node:timers/promises'; import { AffineSchemas } from '@blocksuite/blocks/schemas'; import { assertExists } from '@blocksuite/global/utils'; import type { Doc } from '@blocksuite/store'; -import { Schema, Workspace } from '@blocksuite/store'; +import { DocCollection, Schema } from '@blocksuite/store'; import { openDB } from 'idb'; import { nanoid } from 'nanoid'; import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest'; @@ -69,7 +69,7 @@ async function getUpdates(id: string): Promise { } let id: string; -let workspace: Workspace; +let docCollection: DocCollection; const rootDBName = DEFAULT_DB_NAME; const schema = new Schema(); @@ -78,7 +78,7 @@ schema.register(AffineSchemas); beforeEach(() => { id = nanoid(); - workspace = new Workspace({ + docCollection = new DocCollection({ id, schema, @@ -93,7 +93,7 @@ afterEach(() => { describe('indexeddb provider', () => { test('connect', async () => { - const provider = createIndexedDBProvider(workspace.doc); + const provider = createIndexedDBProvider(docCollection.doc); provider.connect(); // todo: has a better way to know when data is synced @@ -110,11 +110,11 @@ describe('indexeddb provider', () => { updates: [ { timestamp: expect.any(Number), - update: encodeStateAsUpdate(workspace.doc), + update: encodeStateAsUpdate(docCollection.doc), }, ], }); - const page = workspace.createDoc({ id: 'page0' }); + const page = docCollection.createDoc({ id: 'page0' }); page.load(); const pageBlockId = page.addBlock( 'affine:page' as keyof BlockSuite.BlockModels, @@ -139,13 +139,13 @@ describe('indexeddb provider', () => { const data = (await store.get(id)) as WorkspacePersist | undefined; assertExists(data); expect(data.id).toBe(id); - const testWorkspace = new Workspace({ + const testWorkspace = new DocCollection({ id: 'test', schema, }); // data should only contain updates for the root doc data.updates.forEach(({ update }) => { - Workspace.Y.applyUpdate(testWorkspace.doc, update); + DocCollection.Y.applyUpdate(testWorkspace.doc, update); }); const subPage = testWorkspace.doc.spaces.get('page0'); { @@ -157,23 +157,23 @@ describe('indexeddb provider', () => { assertExists(data); testWorkspace.getDoc('page0')?.load(); data.updates.forEach(({ update }) => { - Workspace.Y.applyUpdate(subPage, update); + DocCollection.Y.applyUpdate(subPage, update); }); } - expect(workspace.doc.toJSON()).toEqual(testWorkspace.doc.toJSON()); + expect(docCollection.doc.toJSON()).toEqual(testWorkspace.doc.toJSON()); } }); test('connect and disconnect', async () => { - const provider = createIndexedDBProvider(workspace.doc, rootDBName); + const provider = createIndexedDBProvider(docCollection.doc, rootDBName); provider.connect(); expect(provider.connected).toBe(true); await setTimeout(200); - const snapshot = encodeStateAsUpdate(workspace.doc); + const snapshot = encodeStateAsUpdate(docCollection.doc); provider.disconnect(); expect(provider.connected).toBe(false); { - const page = workspace.createDoc({ id: 'page0' }); + const page = docCollection.createDoc({ id: 'page0' }); page.load(); const pageBlockId = page.addBlock( 'affine:page' as keyof BlockSuite.BlockModels @@ -190,7 +190,7 @@ describe('indexeddb provider', () => { ); } { - const updates = await getUpdates(workspace.id); + const updates = await getUpdates(docCollection.id); expect(updates.length).toBe(1); expect(updates[0]).toEqual(snapshot); } @@ -199,7 +199,7 @@ describe('indexeddb provider', () => { expect(provider.connected).toBe(true); await setTimeout(200); { - const updates = await getUpdates(workspace.id); + const updates = await getUpdates(docCollection.id); expect(updates).not.toEqual([]); } expect(provider.connected).toBe(true); @@ -208,7 +208,7 @@ describe('indexeddb provider', () => { }); test('cleanup', async () => { - const provider = createIndexedDBProvider(workspace.doc); + const provider = createIndexedDBProvider(docCollection.doc); provider.connect(); await setTimeout(200); const db = await openDB(rootDBName, dbVersion); @@ -218,7 +218,7 @@ describe('indexeddb provider', () => { .transaction('workspace', 'readonly') .objectStore('workspace'); const keys = await store.getAllKeys(); - expect(keys).contain(workspace.id); + expect(keys).contain(docCollection.id); } await provider.cleanup(); @@ -229,16 +229,16 @@ describe('indexeddb provider', () => { .transaction('workspace', 'readonly') .objectStore('workspace'); const keys = await store.getAllKeys(); - expect(keys).not.contain(workspace.id); + expect(keys).not.contain(docCollection.id); } }); test('merge', async () => { setMergeCount(5); - const provider = createIndexedDBProvider(workspace.doc, rootDBName); + const provider = createIndexedDBProvider(docCollection.doc, rootDBName); provider.connect(); { - const page = workspace.createDoc({ id: 'page0' }); + const page = docCollection.createDoc({ id: 'page0' }); page.load(); const pageBlockId = page.addBlock( 'affine:page' as keyof BlockSuite.BlockModels @@ -264,7 +264,7 @@ describe('indexeddb provider', () => { }); test("data won't be lost", async () => { - const doc = new Workspace.Y.Doc(); + const doc = new DocCollection.Y.Doc(); const map = doc.getMap('map'); for (let i = 0; i < 100; i++) { map.set(`${i}`, i); @@ -275,7 +275,7 @@ describe('indexeddb provider', () => { provider.disconnect(); } { - const newDoc = new Workspace.Y.Doc(); + const newDoc = new DocCollection.Y.Doc(); const provider = createIndexedDBProvider(newDoc, rootDBName); provider.connect(); provider.disconnect(); @@ -412,14 +412,14 @@ describe('subDoc', () => { }); test('blocksuite', async () => { - const page0 = workspace.createDoc({ + const page0 = docCollection.createDoc({ id: 'page0', }); page0.load(); const { paragraphBlockId: paragraphBlockIdPage1 } = initEmptyPage(page0); - const provider = createIndexedDBProvider(workspace.doc, rootDBName); + const provider = createIndexedDBProvider(docCollection.doc, rootDBName); provider.connect(); - const page1 = workspace.createDoc({ + const page1 = docCollection.createDoc({ id: 'page1', }); page1.load(); @@ -427,22 +427,22 @@ describe('subDoc', () => { await setTimeout(200); provider.disconnect(); { - const newWorkspace = new Workspace({ + const docCollection = new DocCollection({ id, schema, }); - const provider = createIndexedDBProvider(newWorkspace.doc, rootDBName); + const provider = createIndexedDBProvider(docCollection.doc, rootDBName); provider.connect(); await setTimeout(200); - const page0 = newWorkspace.getDoc('page0') as Doc; + const page0 = docCollection.getDoc('page0') as Doc; page0.load(); await setTimeout(200); { const block = page0.getBlockById(paragraphBlockIdPage1); assertExists(block); } - const page1 = newWorkspace.getDoc('page1') as Doc; + const page1 = docCollection.getDoc('page1') as Doc; page1.load(); await setTimeout(200); { @@ -455,30 +455,30 @@ describe('subDoc', () => { describe('utils', () => { test('download binary', async () => { - const page = workspace.createDoc({ id: 'page0' }); + const page = docCollection.createDoc({ id: 'page0' }); page.load(); initEmptyPage(page); - const provider = createIndexedDBProvider(workspace.doc, rootDBName); + const provider = createIndexedDBProvider(docCollection.doc, rootDBName); provider.connect(); await setTimeout(200); provider.disconnect(); const update = (await downloadBinary( - workspace.id, + docCollection.id, rootDBName )) as Uint8Array; expect(update).toBeInstanceOf(Uint8Array); - const newWorkspace = new Workspace({ + const newDocCollection = new DocCollection({ id, schema, }); - applyUpdate(newWorkspace.doc, update); + applyUpdate(newDocCollection.doc, update); await setTimeout(); - expect(workspace.doc.toJSON()['meta']).toEqual( - newWorkspace.doc.toJSON()['meta'] + expect(docCollection.doc.toJSON()['meta']).toEqual( + newDocCollection.doc.toJSON()['meta'] ); - expect(Object.keys(workspace.doc.toJSON()['spaces'])).toEqual( - Object.keys(newWorkspace.doc.toJSON()['spaces']) + expect(Object.keys(docCollection.doc.toJSON()['spaces'])).toEqual( + Object.keys(newDocCollection.doc.toJSON()['spaces']) ); }); diff --git a/packages/common/y-provider/package.json b/packages/common/y-provider/package.json index 4152e5684385b..8457069e84f37 100644 --- a/packages/common/y-provider/package.json +++ b/packages/common/y-provider/package.json @@ -24,7 +24,7 @@ "build": "vite build" }, "devDependencies": { - "@blocksuite/store": "0.13.0-canary-202403050653-934469c", + "@blocksuite/store": "0.13.0-canary-202403120738-e15d583", "vite": "^5.1.4", "vite-plugin-dts": "3.7.3", "vitest": "1.3.1", diff --git a/packages/frontend/component/package.json b/packages/frontend/component/package.json index ec7282279080f..42bdf20dd1892 100644 --- a/packages/frontend/component/package.json +++ b/packages/frontend/component/package.json @@ -72,12 +72,12 @@ "uuid": "^9.0.1" }, "devDependencies": { - "@blocksuite/blocks": "0.13.0-canary-202403050653-934469c", - "@blocksuite/global": "0.13.0-canary-202403050653-934469c", + "@blocksuite/blocks": "0.13.0-canary-202403120738-e15d583", + "@blocksuite/global": "0.13.0-canary-202403120738-e15d583", "@blocksuite/icons": "2.1.45", - "@blocksuite/lit": "0.13.0-canary-202403050653-934469c", - "@blocksuite/presets": "0.13.0-canary-202403050653-934469c", - "@blocksuite/store": "0.13.0-canary-202403050653-934469c", + "@blocksuite/lit": "0.13.0-canary-202403120738-e15d583", + "@blocksuite/presets": "0.13.0-canary-202403120738-e15d583", + "@blocksuite/store": "0.13.0-canary-202403120738-e15d583", "@storybook/addon-actions": "^7.6.17", "@storybook/addon-essentials": "^7.6.17", "@storybook/addon-interactions": "^7.6.17", diff --git a/packages/frontend/core/package.json b/packages/frontend/core/package.json index b716899184d50..edc265d67cead 100644 --- a/packages/frontend/core/package.json +++ b/packages/frontend/core/package.json @@ -25,14 +25,14 @@ "@affine/i18n": "workspace:*", "@affine/templates": "workspace:*", "@affine/workspace-impl": "workspace:*", - "@blocksuite/block-std": "0.13.0-canary-202403050653-934469c", - "@blocksuite/blocks": "0.13.0-canary-202403050653-934469c", - "@blocksuite/global": "0.13.0-canary-202403050653-934469c", + "@blocksuite/block-std": "0.13.0-canary-202403120738-e15d583", + "@blocksuite/blocks": "0.13.0-canary-202403120738-e15d583", + "@blocksuite/global": "0.13.0-canary-202403120738-e15d583", "@blocksuite/icons": "2.1.45", - "@blocksuite/inline": "0.13.0-canary-202403050653-934469c", - "@blocksuite/lit": "0.13.0-canary-202403050653-934469c", - "@blocksuite/presets": "0.13.0-canary-202403050653-934469c", - "@blocksuite/store": "0.13.0-canary-202403050653-934469c", + "@blocksuite/inline": "0.13.0-canary-202403120738-e15d583", + "@blocksuite/lit": "0.13.0-canary-202403120738-e15d583", + "@blocksuite/presets": "0.13.0-canary-202403120738-e15d583", + "@blocksuite/store": "0.13.0-canary-202403120738-e15d583", "@dnd-kit/core": "^6.1.0", "@dnd-kit/modifiers": "^7.0.0", "@dnd-kit/sortable": "^8.0.0", diff --git a/packages/frontend/core/src/commands/affine-navigation.tsx b/packages/frontend/core/src/commands/affine-navigation.tsx index 5fabb25297d18..5b8d114c0e2e4 100644 --- a/packages/frontend/core/src/commands/affine-navigation.tsx +++ b/packages/frontend/core/src/commands/affine-navigation.tsx @@ -1,7 +1,7 @@ import { WorkspaceSubPath } from '@affine/core/shared'; import type { useAFFiNEI18N } from '@affine/i18n/hooks'; import { ArrowRightBigIcon } from '@blocksuite/icons'; -import type { Workspace } from '@blocksuite/store'; +import type { DocCollection } from '@blocksuite/store'; import { registerAffineCommand } from '@toeverything/infra/command'; import type { createStore } from 'jotai'; @@ -11,13 +11,13 @@ import type { useNavigateHelper } from '../hooks/use-navigate-helper'; export function registerAffineNavigationCommands({ t, store, - workspace, + docCollection, navigationHelper, }: { t: ReturnType; store: ReturnType; navigationHelper: ReturnType; - workspace: Workspace; + docCollection: DocCollection; }) { const unsubs: Array<() => void> = []; unsubs.push( @@ -27,7 +27,7 @@ export function registerAffineNavigationCommands({ icon: , label: t['com.affine.cmdk.affine.navigation.goto-all-pages'](), run() { - navigationHelper.jumpToSubPath(workspace.id, WorkspaceSubPath.ALL); + navigationHelper.jumpToSubPath(docCollection.id, WorkspaceSubPath.ALL); }, }) ); @@ -39,7 +39,7 @@ export function registerAffineNavigationCommands({ icon: , label: 'Go to Collection List', run() { - navigationHelper.jumpToCollections(workspace.id); + navigationHelper.jumpToCollections(docCollection.id); }, }) ); @@ -51,7 +51,7 @@ export function registerAffineNavigationCommands({ icon: , label: 'Go to Tag List', run() { - navigationHelper.jumpToTags(workspace.id); + navigationHelper.jumpToTags(docCollection.id); }, }) ); @@ -91,7 +91,10 @@ export function registerAffineNavigationCommands({ icon: , label: t['com.affine.cmdk.affine.navigation.goto-trash'](), run() { - navigationHelper.jumpToSubPath(workspace.id, WorkspaceSubPath.TRASH); + navigationHelper.jumpToSubPath( + docCollection.id, + WorkspaceSubPath.TRASH + ); }, }) ); diff --git a/packages/frontend/core/src/components/affine/awareness/index.tsx b/packages/frontend/core/src/components/affine/awareness/index.tsx index ac46150ca8824..4c9d8df2f9bd5 100644 --- a/packages/frontend/core/src/components/affine/awareness/index.tsx +++ b/packages/frontend/core/src/components/affine/awareness/index.tsx @@ -14,7 +14,7 @@ const SyncAwarenessInnerLoggedIn = () => { useEffect(() => { if (user && currentWorkspace) { - currentWorkspace.blockSuiteWorkspace.awarenessStore.awareness.setLocalStateField( + currentWorkspace.docCollection.awarenessStore.awareness.setLocalStateField( 'user', { name: user.name, @@ -23,7 +23,7 @@ const SyncAwarenessInnerLoggedIn = () => { ); return () => { - currentWorkspace.blockSuiteWorkspace.awarenessStore.awareness.setLocalStateField( + currentWorkspace.docCollection.awarenessStore.awareness.setLocalStateField( 'user', null ); diff --git a/packages/frontend/core/src/components/affine/page-history-modal/data.ts b/packages/frontend/core/src/components/affine/page-history-modal/data.ts index 3debe46c18252..49935e1898180 100644 --- a/packages/frontend/core/src/components/affine/page-history-modal/data.ts +++ b/packages/frontend/core/src/components/affine/page-history-modal/data.ts @@ -1,5 +1,5 @@ import { useDocMetaHelper } from '@affine/core/hooks/use-block-suite-page-meta'; -import { useBlockSuiteWorkspacePage } from '@affine/core/hooks/use-block-suite-workspace-page'; +import { useDocCollectionPage } from '@affine/core/hooks/use-block-suite-workspace-page'; import { timestampToLocalDate } from '@affine/core/utils'; import { DebugLogger } from '@affine/debug'; import { @@ -10,7 +10,7 @@ import { } from '@affine/graphql'; import { AffineCloudBlobStorage } from '@affine/workspace-impl'; import { assertEquals } from '@blocksuite/global/utils'; -import { Workspace } from '@blocksuite/store'; +import { DocCollection } from '@blocksuite/store'; import { globalBlockSuiteSchema } from '@toeverything/infra'; import { revertUpdate } from '@toeverything/y-indexeddb'; import { useEffect, useMemo } from 'react'; @@ -98,14 +98,14 @@ const snapshotFetcher = async ( // so that we do not need to worry about providers etc // todo: fix references to the page (the referenced page will shown as deleted) // if we simply clone the current workspace, it maybe time consuming right? -const workspaceMap = new Map(); +const docCollectionMap = new Map(); // assume the workspace is a cloud workspace since the history feature is only enabled for cloud workspace const getOrCreateShellWorkspace = (workspaceId: string) => { - let workspace = workspaceMap.get(workspaceId); - if (!workspace) { + let docCollection = docCollectionMap.get(workspaceId); + if (!docCollection) { const blobStorage = new AffineCloudBlobStorage(workspaceId); - workspace = new Workspace({ + docCollection = new DocCollection({ id: workspaceId, blobStorages: [ () => ({ @@ -114,10 +114,10 @@ const getOrCreateShellWorkspace = (workspaceId: string) => { ], schema: globalBlockSuiteSchema, }); - workspaceMap.set(workspaceId, workspace); - workspace.doc.emit('sync', []); + docCollectionMap.set(workspaceId, docCollection); + docCollection.doc.emit('sync', []); } - return workspace; + return docCollection; }; // workspace id + page id + timestamp -> snapshot (update binary) @@ -139,17 +139,17 @@ export const usePageHistory = ( // workspace id + page id + timestamp + snapshot -> Page (to be used for rendering in blocksuite editor) export const useSnapshotPage = ( - workspace: Workspace, + docCollection: DocCollection, pageDocId: string, ts?: string ) => { - const snapshot = usePageHistory(workspace.id, pageDocId, ts); + const snapshot = usePageHistory(docCollection.id, pageDocId, ts); const page = useMemo(() => { if (!ts) { return; } const pageId = pageDocId + '-' + ts; - const historyShellWorkspace = getOrCreateShellWorkspace(workspace.id); + const historyShellWorkspace = getOrCreateShellWorkspace(docCollection.id); let page = historyShellWorkspace.getDoc(pageId); if (!page && snapshot) { page = historyShellWorkspace.createDoc({ @@ -163,15 +163,15 @@ export const useSnapshotPage = ( }); // must load before applyUpdate } return page ?? undefined; - }, [pageDocId, snapshot, ts, workspace]); + }, [pageDocId, snapshot, ts, docCollection]); useEffect(() => { - const historyShellWorkspace = getOrCreateShellWorkspace(workspace.id); + const historyShellWorkspace = getOrCreateShellWorkspace(docCollection.id); // apply the rootdoc's update to the current workspace // this makes sure the page reference links are not deleted ones in the preview - const update = encodeStateAsUpdate(workspace.doc); + const update = encodeStateAsUpdate(docCollection.doc); applyUpdate(historyShellWorkspace.doc, update); - }, [workspace]); + }, [docCollection]); return page; }; @@ -187,13 +187,16 @@ export const historyListGroupByDay = (histories: DocHistory[]) => { return [...map.entries()]; }; -export const useRestorePage = (workspace: Workspace, pageId: string) => { - const page = useBlockSuiteWorkspacePage(workspace, pageId); +export const useRestorePage = ( + docCollection: DocCollection, + pageId: string +) => { + const page = useDocCollectionPage(docCollection, pageId); const mutateQueryResource = useMutateQueryResource(); const { trigger: recover, isMutating } = useMutation({ mutation: recoverDocMutation, }); - const { getDocMeta, setDocTitle } = useDocMetaHelper(workspace); + const { getDocMeta, setDocTitle } = useDocMetaHelper(docCollection); const onRestore = useMemo(() => { return async (version: string, update: Uint8Array) => { @@ -216,12 +219,12 @@ export const useRestorePage = (workspace: Workspace, pageId: string) => { await recover({ docId: pageDocId, timestamp: version, - workspaceId: workspace.id, + workspaceId: docCollection.id, }); await mutateQueryResource(listHistoryQuery, vars => { return ( - vars.pageDocId === pageDocId && vars.workspaceId === workspace.id + vars.pageDocId === pageDocId && vars.workspaceId === docCollection.id ); }); @@ -234,7 +237,7 @@ export const useRestorePage = (workspace: Workspace, pageId: string) => { pageId, recover, setDocTitle, - workspace.id, + docCollection.id, ]); return { diff --git a/packages/frontend/core/src/components/affine/page-history-modal/history-modal.tsx b/packages/frontend/core/src/components/affine/page-history-modal/history-modal.tsx index a620d88e43d75..87febfdaa4ac4 100644 --- a/packages/frontend/core/src/components/affine/page-history-modal/history-modal.tsx +++ b/packages/frontend/core/src/components/affine/page-history-modal/history-modal.tsx @@ -5,13 +5,13 @@ import { ConfirmModal, Modal } from '@affine/component/ui/modal'; import { openSettingModalAtom } from '@affine/core/atoms'; import { useIsWorkspaceOwner } from '@affine/core/hooks/affine/use-is-workspace-owner'; import { useAsyncCallback } from '@affine/core/hooks/affine-async-hooks'; -import { useBlockSuiteWorkspacePageTitle } from '@affine/core/hooks/use-block-suite-workspace-page-title'; +import { useDocCollectionPageTitle } from '@affine/core/hooks/use-block-suite-workspace-page-title'; import { useWorkspaceQuota } from '@affine/core/hooks/use-workspace-quota'; import { Trans } from '@affine/i18n'; import { useAFFiNEI18N } from '@affine/i18n/hooks'; import { CloseIcon, ToggleCollapseIcon } from '@blocksuite/icons'; import type { Doc as BlockSuiteDoc } from '@blocksuite/store'; -import { type Workspace as BlockSuiteWorkspace } from '@blocksuite/store'; +import { type DocCollection } from '@blocksuite/store'; import * as Collapsible from '@radix-ui/react-collapsible'; import type { DialogContentProps } from '@radix-ui/react-dialog'; import { Doc, type PageMode, Workspace } from '@toeverything/infra'; @@ -49,7 +49,7 @@ import * as styles from './styles.css'; export interface PageHistoryModalProps { open: boolean; onOpenChange: (open: boolean) => void; - workspace: BlockSuiteWorkspace; + docCollection: DocCollection; pageId: string; } @@ -444,26 +444,26 @@ const EmptyHistoryPrompt = () => { }; const PageHistoryManager = ({ - workspace, + docCollection, pageId, onClose, }: { - workspace: BlockSuiteWorkspace; + docCollection: DocCollection; pageId: string; onClose: () => void; }) => { - const workspaceId = workspace.id; + const workspaceId = docCollection.id; const [activeVersion, setActiveVersion] = useState(); const pageDocId = useMemo(() => { - return workspace.getDoc(pageId)?.spaceDoc.guid ?? pageId; - }, [pageId, workspace]); + return docCollection.getDoc(pageId)?.spaceDoc.guid ?? pageId; + }, [pageId, docCollection]); - const snapshotPage = useSnapshotPage(workspace, pageDocId, activeVersion); + const snapshotPage = useSnapshotPage(docCollection, pageDocId, activeVersion); const t = useAFFiNEI18N(); - const { onRestore, isMutating } = useRestorePage(workspace, pageId); + const { onRestore, isMutating } = useRestorePage(docCollection, pageId); const handleRestore = useMemo( () => async () => { @@ -481,7 +481,7 @@ const PageHistoryManager = ({ const page = useService(Doc); const [mode, setMode] = useState(page.mode.value); - const title = useBlockSuiteWorkspacePageTitle(workspace, pageId); + const title = useDocCollectionPageTitle(docCollection, pageId); const [showRestoreConfirmModal, setShowRestoreConfirmModal] = useState(false); @@ -558,7 +558,7 @@ export const PageHistoryModal = ({ onOpenChange, open, pageId, - workspace, + docCollection: workspace, }: PageHistoryModalProps) => { const onClose = useCallback(() => { onOpenChange(false); @@ -570,7 +570,7 @@ export const PageHistoryModal = ({ @@ -595,7 +595,7 @@ export const GlobalPageHistoryModal = () => { open={open} onOpenChange={handleOpenChange} pageId={pageId} - workspace={workspace.blockSuiteWorkspace} + docCollection={workspace.docCollection} /> ); }; diff --git a/packages/frontend/core/src/components/affine/page-properties/page-properties-manager.ts b/packages/frontend/core/src/components/affine/page-properties/page-properties-manager.ts index 3fc38b8de803d..a856559a965c6 100644 --- a/packages/frontend/core/src/components/affine/page-properties/page-properties-manager.ts +++ b/packages/frontend/core/src/components/affine/page-properties/page-properties-manager.ts @@ -124,7 +124,7 @@ export class PagePropertiesMetaManager { // returns page schema properties -> related page getPropertyStatistics() { const mapping = new Map>(); - for (const page of this.adapter.workspace.blockSuiteWorkspace.docs.values()) { + for (const page of this.adapter.workspace.docCollection.docs.values()) { const properties = this.adapter.getPageProperties(page.id); for (const id of Object.keys(properties.custom)) { if (!mapping.has(id)) mapping.set(id, new Set()); @@ -169,7 +169,7 @@ export class PagePropertiesManager { } get page() { - return this.adapter.workspace.blockSuiteWorkspace.getDoc(this.pageId); + return this.adapter.workspace.docCollection.getDoc(this.pageId); } get intrinsicMeta() { diff --git a/packages/frontend/core/src/components/affine/page-properties/property-row-value-renderer.tsx b/packages/frontend/core/src/components/affine/page-properties/property-row-value-renderer.tsx index 674d719dafcc3..42c15248e5fa2 100644 --- a/packages/frontend/core/src/components/affine/page-properties/property-row-value-renderer.tsx +++ b/packages/frontend/core/src/components/affine/page-properties/property-row-value-renderer.tsx @@ -177,8 +177,8 @@ export const NumberValue = ({ property }: PropertyRowValueProps) => { export const TagsValue = () => { const workspace = useService(Workspace); const page = useService(Doc); - const blockSuiteWorkspace = workspace.blockSuiteWorkspace; - const pageMetas = useAllBlockSuiteDocMeta(blockSuiteWorkspace); + const docCollection = workspace.docCollection; + const pageMetas = useAllBlockSuiteDocMeta(docCollection); const legacyProperties = useService(WorkspaceLegacyProperties); const options = useLiveData(legacyProperties.tagOptions$); diff --git a/packages/frontend/core/src/components/affine/page-properties/table.tsx b/packages/frontend/core/src/components/affine/page-properties/table.tsx index c29cc388afa8a..e58871aff0839 100644 --- a/packages/frontend/core/src/components/affine/page-properties/table.tsx +++ b/packages/frontend/core/src/components/affine/page-properties/table.tsx @@ -405,7 +405,7 @@ export const PageBacklinksPopup = ({ key={pageId} wrapper={MenuItem} pageId={pageId} - workspace={manager.workspace.blockSuiteWorkspace} + docCollection={manager.workspace.docCollection} /> ))} @@ -600,7 +600,7 @@ export const PagePropertiesTableHeader = ({ const t = useAFFiNEI18N(); const backlinks = useBlockSuitePageBacklinks( - manager.workspace.blockSuiteWorkspace, + manager.workspace.docCollection, manager.pageId ); @@ -1015,7 +1015,7 @@ export const PagePropertiesAddProperty = () => { const PagePropertiesTableInner = () => { const manager = useContext(managerContext); const [expanded, setExpanded] = useState(false); - use(manager.workspace.blockSuiteWorkspace.doc.whenSynced); + use(manager.workspace.docCollection.doc.whenSynced); return (
; }) { - const pageMetaHelper = useDocMetaHelper(workspace); - const journalHelper = useJournalHelper(workspace); + const pageMetaHelper = useDocMetaHelper(docCollection); + const journalHelper = useJournalHelper(docCollection); const t = useAFFiNEI18N(); const el = pageReferenceRenderer({ pageId, diff --git a/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/new-workspace-setting-detail/profile.tsx b/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/new-workspace-setting-detail/profile.tsx index 02a217ef90d53..6da98db3e0055 100644 --- a/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/new-workspace-setting-detail/profile.tsx +++ b/packages/frontend/core/src/components/affine/setting-modal/workspace-setting/new-workspace-setting-detail/profile.tsx @@ -46,17 +46,13 @@ export const ProfilePanel = ({ isOwner, workspace }: ProfilePanelProps) => { const avatarUrl = useWorkspaceBlobObjectUrl(workspace?.meta, avatarBlob); useEffect(() => { - if (workspace?.blockSuiteWorkspace) { - setAvatarBlob(workspace.blockSuiteWorkspace.meta.avatar ?? null); - setName( - workspace.blockSuiteWorkspace.meta.name ?? UNTITLED_WORKSPACE_NAME - ); - const dispose = workspace.blockSuiteWorkspace.meta.commonFieldsUpdated.on( + if (workspace?.docCollection) { + setAvatarBlob(workspace.docCollection.meta.avatar ?? null); + setName(workspace.docCollection.meta.name ?? UNTITLED_WORKSPACE_NAME); + const dispose = workspace.docCollection.meta.commonFieldsUpdated.on( () => { - setAvatarBlob(workspace.blockSuiteWorkspace.meta.avatar ?? null); - setName( - workspace.blockSuiteWorkspace.meta.name ?? UNTITLED_WORKSPACE_NAME - ); + setAvatarBlob(workspace.docCollection.meta.avatar ?? null); + setName(workspace.docCollection.meta.name ?? UNTITLED_WORKSPACE_NAME); } ); return () => { @@ -75,14 +71,14 @@ export const ProfilePanel = ({ isOwner, workspace }: ProfilePanelProps) => { return; } if (!file) { - workspace.blockSuiteWorkspace.meta.setAvatar(''); + workspace.docCollection.meta.setAvatar(''); return; } try { const reducedFile = await validateAndReduceImage(file); - const blobs = workspace.blockSuiteWorkspace.blob; + const blobs = workspace.docCollection.blob; const blobId = await blobs.set(reducedFile); - workspace.blockSuiteWorkspace.meta.setAvatar(blobId); + workspace.docCollection.meta.setAvatar(blobId); } catch (error) { console.error(error); throw error; @@ -96,7 +92,7 @@ export const ProfilePanel = ({ isOwner, workspace }: ProfilePanelProps) => { if (!workspace) { return; } - workspace.blockSuiteWorkspace.meta.setName(name); + workspace.docCollection.meta.setName(name); }, [workspace] ); diff --git a/packages/frontend/core/src/components/blocksuite/block-suite-editor/blocksuite-editor.tsx b/packages/frontend/core/src/components/blocksuite/block-suite-editor/blocksuite-editor.tsx index 9171a4d165cbb..e0af6cd8e4b3a 100644 --- a/packages/frontend/core/src/components/blocksuite/block-suite-editor/blocksuite-editor.tsx +++ b/packages/frontend/core/src/components/blocksuite/block-suite-editor/blocksuite-editor.tsx @@ -110,8 +110,8 @@ const BlockSuiteEditorImpl = forwardRef( }; }, []); - const pageMetaHelper = useDocMetaHelper(page.workspace); - const journalHelper = useJournalHelper(page.workspace); + const pageMetaHelper = useDocMetaHelper(page.collection); + const journalHelper = useJournalHelper(page.collection); const t = useAFFiNEI18N(); const customRenderers = useMemo(() => { diff --git a/packages/frontend/core/src/components/blocksuite/block-suite-editor/journal-doc-title.tsx b/packages/frontend/core/src/components/blocksuite/block-suite-editor/journal-doc-title.tsx index aca27a246314c..c6e08bf60d0d0 100644 --- a/packages/frontend/core/src/components/blocksuite/block-suite-editor/journal-doc-title.tsx +++ b/packages/frontend/core/src/components/blocksuite/block-suite-editor/journal-doc-title.tsx @@ -6,7 +6,7 @@ import * as styles from './styles.css'; export const BlocksuiteEditorJournalDocTitle = ({ page }: { page: Doc }) => { const { localizedJournalDate, isTodayJournal, journalDate } = - useJournalInfoHelper(page.workspace, page.id); + useJournalInfoHelper(page.collection, page.id); const t = useAFFiNEI18N(); // TODO: i18n diff --git a/packages/frontend/core/src/components/blocksuite/block-suite-editor/lit-adaper.tsx b/packages/frontend/core/src/components/blocksuite/block-suite-editor/lit-adaper.tsx index 59a0c771004ab..0a38a1c57b74a 100644 --- a/packages/frontend/core/src/components/blocksuite/block-suite-editor/lit-adaper.tsx +++ b/packages/frontend/core/src/components/blocksuite/block-suite-editor/lit-adaper.tsx @@ -64,7 +64,7 @@ export const BlocksuiteDocEditor = forwardRef< const docRef = useRef(null); const [docPage, setDocPage] = useState(); - const { isJournal } = useJournalInfoHelper(page.workspace, page.id); + const { isJournal } = useJournalInfoHelper(page.collection, page.id); const onDocRef = useCallback( (el: PageEditor) => { diff --git a/packages/frontend/core/src/components/blocksuite/block-suite-header/favorite/index.tsx b/packages/frontend/core/src/components/blocksuite/block-suite-header/favorite/index.tsx index 51094b88fbe79..60b08fe1c8672 100644 --- a/packages/frontend/core/src/components/blocksuite/block-suite-header/favorite/index.tsx +++ b/packages/frontend/core/src/components/blocksuite/block-suite-header/favorite/index.tsx @@ -15,17 +15,17 @@ export interface FavoriteButtonProps { export const useFavorite = (pageId: string) => { const t = useAFFiNEI18N(); const workspace = useService(Workspace); - const blockSuiteWorkspace = workspace.blockSuiteWorkspace; - const currentPage = blockSuiteWorkspace.getDoc(pageId); + const docCollection = workspace.docCollection; + const currentPage = docCollection.getDoc(pageId); assertExists(currentPage); - const pageMeta = useBlockSuiteDocMeta(blockSuiteWorkspace).find( + const pageMeta = useBlockSuiteDocMeta(docCollection).find( meta => meta.id === pageId ); const favorite = pageMeta?.favorite ?? false; const { toggleFavorite: _toggleFavorite } = - useBlockSuiteMetaHelper(blockSuiteWorkspace); + useBlockSuiteMetaHelper(docCollection); const toggleFavorite = useCallback(() => { _toggleFavorite(pageId); diff --git a/packages/frontend/core/src/components/blocksuite/block-suite-header/journal/date-picker.tsx b/packages/frontend/core/src/components/blocksuite/block-suite-header/journal/date-picker.tsx index bc9eed453dcef..eea681b36f93a 100644 --- a/packages/frontend/core/src/components/blocksuite/block-suite-header/journal/date-picker.tsx +++ b/packages/frontend/core/src/components/blocksuite/block-suite-header/journal/date-picker.tsx @@ -3,24 +3,24 @@ import { useJournalInfoHelper, useJournalRouteHelper, } from '@affine/core/hooks/use-journal'; -import type { BlockSuiteWorkspace } from '@affine/core/shared'; +import type { DocCollection } from '@affine/core/shared'; import type { Doc } from '@blocksuite/store'; import dayjs from 'dayjs'; import { useEffect, useRef, useState } from 'react'; export interface JournalWeekDatePickerProps { - workspace: BlockSuiteWorkspace; + docCollection: DocCollection; page: Doc; } const weekStyle = { maxWidth: 800, width: '100%' }; export const JournalWeekDatePicker = ({ - workspace, + docCollection, page, }: JournalWeekDatePickerProps) => { const handleRef = useRef(null); - const { journalDate } = useJournalInfoHelper(workspace, page.id); - const { openJournal } = useJournalRouteHelper(workspace); + const { journalDate } = useJournalInfoHelper(docCollection, page.id); + const { openJournal } = useJournalRouteHelper(docCollection); const [date, setDate] = useState( (journalDate ?? dayjs()).format('YYYY-MM-DD') ); diff --git a/packages/frontend/core/src/components/blocksuite/block-suite-header/journal/today-button.tsx b/packages/frontend/core/src/components/blocksuite/block-suite-header/journal/today-button.tsx index b6e3c21870ada..4ac47c1a1ce0b 100644 --- a/packages/frontend/core/src/components/blocksuite/block-suite-header/journal/today-button.tsx +++ b/packages/frontend/core/src/components/blocksuite/block-suite-header/journal/today-button.tsx @@ -1,16 +1,18 @@ import { Button } from '@affine/component'; import { useJournalRouteHelper } from '@affine/core/hooks/use-journal'; -import type { BlockSuiteWorkspace } from '@affine/core/shared'; +import type { DocCollection } from '@affine/core/shared'; import { useAFFiNEI18N } from '@affine/i18n/hooks'; import { useCallback } from 'react'; export interface JournalTodayButtonProps { - workspace: BlockSuiteWorkspace; + docCollection: DocCollection; } -export const JournalTodayButton = ({ workspace }: JournalTodayButtonProps) => { +export const JournalTodayButton = ({ + docCollection, +}: JournalTodayButtonProps) => { const t = useAFFiNEI18N(); - const journalHelper = useJournalRouteHelper(workspace); + const journalHelper = useJournalRouteHelper(docCollection); const onToday = useCallback(() => { journalHelper.openToday(); diff --git a/packages/frontend/core/src/components/blocksuite/block-suite-header/menu/index.tsx b/packages/frontend/core/src/components/blocksuite/block-suite-header/menu/index.tsx index de507462e2326..d7568104e90b5 100644 --- a/packages/frontend/core/src/components/blocksuite/block-suite-header/menu/index.tsx +++ b/packages/frontend/core/src/components/blocksuite/block-suite-header/menu/index.tsx @@ -47,11 +47,11 @@ export const PageHeaderMenuButton = ({ const t = useAFFiNEI18N(); const workspace = useService(Workspace); - const blockSuiteWorkspace = workspace.blockSuiteWorkspace; - const currentPage = blockSuiteWorkspace.getDoc(pageId); + const docCollection = workspace.docCollection; + const currentPage = docCollection.getDoc(pageId); assertExists(currentPage); - const pageMeta = useBlockSuiteDocMeta(blockSuiteWorkspace).find( + const pageMeta = useBlockSuiteDocMeta(docCollection).find( meta => meta.id === pageId ); const page = useService(Doc); @@ -59,9 +59,9 @@ export const PageHeaderMenuButton = ({ const { favorite, toggleFavorite } = useFavorite(pageId); - const { duplicate } = useBlockSuiteMetaHelper(blockSuiteWorkspace); - const { importFile } = usePageHelper(blockSuiteWorkspace); - const { setTrashModal } = useTrashModalHelper(blockSuiteWorkspace); + const { duplicate } = useBlockSuiteMetaHelper(docCollection); + const { importFile } = usePageHelper(docCollection); + const { setTrashModal } = useTrashModalHelper(docCollection); const [historyModalOpen, setHistoryModalOpen] = useState(false); const setOpenHistoryTipsModal = useSetAtom(openHistoryTipsModalAtom); @@ -227,7 +227,7 @@ export const PageHeaderMenuButton = ({ {workspace.flavour === WorkspaceFlavour.AFFINE_CLOUD ? ( ; export const BlocksuiteHeaderTitle = (props: BlockSuiteHeaderTitleProps) => { - const { - blockSuiteWorkspace: workspace, - pageId, - isPublic, - inputHandleRef, - } = props; - const currentPage = workspace.getDoc(pageId); - const pageMeta = useBlockSuiteDocMeta(workspace).find( + const { docCollection, pageId, isPublic, inputHandleRef } = props; + const currentPage = docCollection.getDoc(pageId); + const pageMeta = useBlockSuiteDocMeta(docCollection).find( meta => meta.id === currentPage?.id ); const title = pageMeta?.title; - const { setDocTitle } = useDocMetaHelper(workspace); + const { setDocTitle } = useDocMetaHelper(docCollection); const onChange = useCallback( (v: string) => { diff --git a/packages/frontend/core/src/components/blocksuite/block-suite-mode-switch/index.tsx b/packages/frontend/core/src/components/blocksuite/block-suite-mode-switch/index.tsx index fd26ba350a9c6..6f22e8eacc436 100644 --- a/packages/frontend/core/src/components/blocksuite/block-suite-mode-switch/index.tsx +++ b/packages/frontend/core/src/components/blocksuite/block-suite-mode-switch/index.tsx @@ -10,14 +10,14 @@ import { import type { CSSProperties } from 'react'; import { useCallback, useEffect } from 'react'; -import type { BlockSuiteWorkspace } from '../../../shared'; +import type { DocCollection } from '../../../shared'; import { toast } from '../../../utils'; import { StyledEditorModeSwitch, StyledKeyboardItem } from './style'; import { EdgelessSwitchItem, PageSwitchItem } from './switch-items'; export type EditorModeSwitchProps = { // todo(himself65): combine these two properties - blockSuiteWorkspace: BlockSuiteWorkspace; + docCollection: DocCollection; pageId: string; style?: CSSProperties; isPublic?: boolean; @@ -36,13 +36,13 @@ const TooltipContent = () => { }; export const EditorModeSwitch = ({ style, - blockSuiteWorkspace, + docCollection, pageId, isPublic, publicMode, }: EditorModeSwitchProps) => { const t = useAFFiNEI18N(); - const pageMeta = useBlockSuiteDocMeta(blockSuiteWorkspace).find( + const pageMeta = useBlockSuiteDocMeta(docCollection).find( meta => meta.id === pageId ); const trash = pageMeta?.trash ?? false; diff --git a/packages/frontend/core/src/components/blocksuite/block-suite-page-list/utils.tsx b/packages/frontend/core/src/components/blocksuite/block-suite-page-list/utils.tsx index 6817535ee9ba8..afed76738dec9 100644 --- a/packages/frontend/core/src/components/blocksuite/block-suite-page-list/utils.tsx +++ b/packages/frontend/core/src/components/blocksuite/block-suite-page-list/utils.tsx @@ -1,7 +1,7 @@ import { toast } from '@affine/component'; import { useAsyncCallback } from '@affine/core/hooks/affine-async-hooks'; import { useDocMetaHelper } from '@affine/core/hooks/use-block-suite-page-meta'; -import { useBlockSuiteWorkspaceHelper } from '@affine/core/hooks/use-block-suite-workspace-helper'; +import { useDocCollectionHelper } from '@affine/core/hooks/use-block-suite-workspace-helper'; import { WorkspaceSubPath } from '@affine/core/shared'; import { useService } from '@toeverything/infra'; import { PageRecordList } from '@toeverything/infra'; @@ -9,12 +9,12 @@ import { initEmptyPage } from '@toeverything/infra'; import { useCallback, useMemo } from 'react'; import { useNavigateHelper } from '../../../hooks/use-navigate-helper'; -import type { BlockSuiteWorkspace } from '../../../shared'; +import type { DocCollection } from '../../../shared'; -export const usePageHelper = (blockSuiteWorkspace: BlockSuiteWorkspace) => { +export const usePageHelper = (docCollection: DocCollection) => { const { openPage, jumpToSubPath } = useNavigateHelper(); - const { createDoc } = useBlockSuiteWorkspaceHelper(blockSuiteWorkspace); - const { setDocMeta } = useDocMetaHelper(blockSuiteWorkspace); + const { createDoc } = useDocCollectionHelper(docCollection); + const { setDocMeta } = useDocMetaHelper(docCollection); const pageRecordList = useService(PageRecordList); const isPreferredEdgeless = useCallback( @@ -28,10 +28,10 @@ export const usePageHelper = (blockSuiteWorkspace: BlockSuiteWorkspace) => { const page = createDoc(); initEmptyPage(page); pageRecordList.record(page.id).value?.setMode(mode || 'page'); - openPage(blockSuiteWorkspace.id, page.id); + openPage(docCollection.id, page.id); return page; }, - [blockSuiteWorkspace.id, createDoc, openPage, pageRecordList] + [docCollection.id, createDoc, openPage, pageRecordList] ); const createEdgelessAndOpen = useCallback(() => { @@ -50,7 +50,7 @@ export const usePageHelper = (blockSuiteWorkspace: BlockSuiteWorkspace) => { }.` ); if (options.isWorkspaceFile) { - jumpToSubPath(blockSuiteWorkspace.id, WorkspaceSubPath.ALL); + jumpToSubPath(docCollection.id, WorkspaceSubPath.ALL); return; } @@ -58,16 +58,16 @@ export const usePageHelper = (blockSuiteWorkspace: BlockSuiteWorkspace) => { return; } const pageId = pageIds[0]; - openPage(blockSuiteWorkspace.id, pageId); + openPage(docCollection.id, pageId); }; - showImportModal({ workspace: blockSuiteWorkspace, onSuccess }); - }, [blockSuiteWorkspace, openPage, jumpToSubPath]); + showImportModal({ collection: docCollection, onSuccess }); + }, [docCollection, openPage, jumpToSubPath]); const createLinkedPageAndOpen = useAsyncCallback( async (pageId: string) => { const page = createPageAndOpen(); page.load(); - const parentPage = blockSuiteWorkspace.getDoc(pageId); + const parentPage = docCollection.getDoc(pageId); if (parentPage) { parentPage.load(); const text = parentPage.Text.fromDelta([ @@ -86,7 +86,7 @@ export const usePageHelper = (blockSuiteWorkspace: BlockSuiteWorkspace) => { setDocMeta(page.id, {}); } }, - [blockSuiteWorkspace, createPageAndOpen, setDocMeta] + [docCollection, createPageAndOpen, setDocMeta] ); return useMemo(() => { diff --git a/packages/frontend/core/src/components/image-preview/index.tsx b/packages/frontend/core/src/components/image-preview/index.tsx index 3c9aca8e917f4..4c8c095b5dd0c 100644 --- a/packages/frontend/core/src/components/image-preview/index.tsx +++ b/packages/frontend/core/src/components/image-preview/index.tsx @@ -13,7 +13,7 @@ import { PlusIcon, ViewBarIcon, } from '@blocksuite/icons'; -import type { Workspace } from '@blocksuite/store'; +import type { DocCollection } from '@blocksuite/store'; import clsx from 'clsx'; import { useErrorBoundary } from 'foxact/use-error-boundary'; import { useAtom } from 'jotai'; @@ -45,7 +45,7 @@ import { import { hasAnimationPlayedAtom, previewBlockIdAtom } from './index.jotai'; export type ImagePreviewModalProps = { - workspace: Workspace; + docCollection: DocCollection; pageId: string; }; @@ -92,7 +92,7 @@ const ImagePreviewModalImpl = ( const nextImageHandler = useCallback( (blockId: string | null) => { assertExists(blockId); - const workspace = props.workspace; + const workspace = props.docCollection; if (!hasPlayedAnimation) { setHasPlayedAnimation(true); } @@ -109,13 +109,13 @@ const ImagePreviewModalImpl = ( setBlockId(nextBlock.id); } }, - [props.pageId, props.workspace, setBlockId, hasPlayedAnimation] + [props.pageId, props.docCollection, setBlockId, hasPlayedAnimation] ); const previousImageHandler = useCallback( (blockId: string | null) => { assertExists(blockId); - const workspace = props.workspace; + const workspace = props.docCollection; const page = workspace.getDoc(props.pageId); assertExists(page); const block = page.getBlockById(blockId); @@ -130,12 +130,12 @@ const ImagePreviewModalImpl = ( } resetZoom(); }, - [props.pageId, props.workspace, setBlockId, resetZoom] + [props.pageId, props.docCollection, setBlockId, resetZoom] ); const deleteHandler = useCallback( (blockId: string) => { - const { pageId, workspace, onClose } = props; + const { pageId, docCollection: workspace, onClose } = props; const page = workspace.getDoc(pageId); assertExists(page); @@ -185,7 +185,7 @@ const ImagePreviewModalImpl = ( const downloadHandler = useCallback( async (blockId: string | null) => { - const workspace = props.workspace; + const workspace = props.docCollection; const page = workspace.getDoc(props.pageId); assertExists(page); if (typeof blockId === 'string') { @@ -237,31 +237,31 @@ const ImagePreviewModalImpl = ( a.remove(); } }, - [props.pageId, props.workspace] + [props.pageId, props.docCollection] ); const [caption, setCaption] = useState(() => { - const page = props.workspace.getDoc(props.pageId); + const page = props.docCollection.getDoc(props.pageId); assertExists(page); const block = page.getBlockById(props.blockId) as ImageBlockModel; assertExists(block); return block?.caption; }); useEffect(() => { - const page = props.workspace.getDoc(props.pageId); + const page = props.docCollection.getDoc(props.pageId); assertExists(page); const block = page.getBlockById(props.blockId) as ImageBlockModel; assertExists(block); setCaption(block?.caption); - }, [props.blockId, props.pageId, props.workspace]); + }, [props.blockId, props.pageId, props.docCollection]); const { data, error } = useSWR( ['workspace', 'image', props.pageId, props.blockId], { fetcher: ([_, __, pageId, blockId]) => { - const page = props.workspace.getDoc(pageId); + const page = props.docCollection.getDoc(pageId); assertExists(page); const block = page.getBlockById(blockId) as ImageBlockModel; assertExists(block); - return props.workspace.blob.get(block?.sourceId as string); + return props.docCollection.blob.get(block?.sourceId as string); }, suspense: true, } @@ -508,7 +508,7 @@ export const ImagePreviewModal = ( return; } - const workspace = props.workspace; + const workspace = props.docCollection; const page = workspace.getDoc(props.pageId); assertExists(page); @@ -541,7 +541,7 @@ export const ImagePreviewModal = ( event.preventDefault(); event.stopPropagation(); }, - [blockId, setBlockId, props.workspace, props.pageId, isOpen, setIsOpen] + [blockId, setBlockId, props.docCollection, props.pageId, isOpen, setIsOpen] ); useEffect(() => { diff --git a/packages/frontend/core/src/components/page-detail-editor.tsx b/packages/frontend/core/src/components/page-detail-editor.tsx index cbdbc067f0ac6..719d6110f7d48 100644 --- a/packages/frontend/core/src/components/page-detail-editor.tsx +++ b/packages/frontend/core/src/components/page-detail-editor.tsx @@ -1,9 +1,9 @@ import './page-detail-editor.css'; -import { useBlockSuiteWorkspacePage } from '@affine/core/hooks/use-block-suite-workspace-page'; +import { useDocCollectionPage } from '@affine/core/hooks/use-block-suite-workspace-page'; import { assertExists, DisposableGroup } from '@blocksuite/global/utils'; import type { AffineEditorContainer } from '@blocksuite/presets'; -import type { Workspace } from '@blocksuite/store'; +import type { DocCollection } from '@blocksuite/store'; import type { Doc as BlockSuiteDoc } from '@blocksuite/store'; import { Doc, @@ -34,7 +34,7 @@ export type OnLoadEditor = ( export interface PageDetailEditorProps { isPublic?: boolean; publishMode?: PageMode; - workspace: Workspace; + docCollection: DocCollection; pageId: string; onLoad?: OnLoadEditor; } @@ -78,7 +78,7 @@ const PageDetailEditorMain = memo(function PageDetailEditorMain({ const disposableGroup = new DisposableGroup(); disposableGroup.add( page.slots.blockUpdated.once(() => { - page.workspace.setDocMeta(page.id, { + page.collection.setDocMeta(page.id, { updatedDate: Date.now(), }); }) @@ -121,8 +121,8 @@ const PageDetailEditorMain = memo(function PageDetailEditorMain({ }); export const PageDetailEditor = (props: PageDetailEditorProps) => { - const { workspace, pageId } = props; - const page = useBlockSuiteWorkspacePage(workspace, pageId); + const { docCollection, pageId } = props; + const page = useDocCollectionPage(docCollection, pageId); if (!page) { return null; } diff --git a/packages/frontend/core/src/components/page-list/__tests__/use-block-suite-page-preview.spec.ts b/packages/frontend/core/src/components/page-list/__tests__/use-block-suite-page-preview.spec.ts index 0b3dd8b34a89c..3187886a70523 100644 --- a/packages/frontend/core/src/components/page-list/__tests__/use-block-suite-page-preview.spec.ts +++ b/packages/frontend/core/src/components/page-list/__tests__/use-block-suite-page-preview.spec.ts @@ -6,21 +6,21 @@ import 'fake-indexeddb/auto'; import { AffineSchemas } from '@blocksuite/blocks/schemas'; import { assertExists } from '@blocksuite/global/utils'; import type { Doc } from '@blocksuite/store'; -import { Schema, Workspace as BlockSuiteWorkspace } from '@blocksuite/store'; +import { DocCollection, Schema } from '@blocksuite/store'; import { renderHook } from '@testing-library/react'; import { useAtomValue } from 'jotai'; import { describe, expect, test, vi } from 'vitest'; import { beforeEach } from 'vitest'; import { useBlockSuitePagePreview } from '../use-block-suite-page-preview'; -let blockSuiteWorkspace: BlockSuiteWorkspace; +let docCollection: DocCollection; const schema = new Schema(); schema.register(AffineSchemas); beforeEach(async () => { vi.useFakeTimers({ toFake: ['requestIdleCallback'] }); - blockSuiteWorkspace = new BlockSuiteWorkspace({ id: 'test', schema }); + docCollection = new DocCollection({ id: 'test', schema }); const initPage = async (page: Doc) => { page.load(); expect(page).not.toBeNull(); @@ -31,12 +31,12 @@ beforeEach(async () => { const frameId = page.addBlock('affine:note', {}, pageBlockId); page.addBlock('affine:paragraph', {}, frameId); }; - await initPage(blockSuiteWorkspace.createDoc({ id: 'page0' })); + await initPage(docCollection.createDoc({ id: 'page0' })); }); describe('useBlockSuitePagePreview', () => { test('basic', async () => { - const page = blockSuiteWorkspace.getDoc('page0') as Doc; + const page = docCollection.getDoc('page0') as Doc; const id = page.addBlock( 'affine:paragraph', { diff --git a/packages/frontend/core/src/components/page-list/collections/virtualized-collection-list.tsx b/packages/frontend/core/src/components/page-list/collections/virtualized-collection-list.tsx index e8b56f7778377..ece5862afb6cd 100644 --- a/packages/frontend/core/src/components/page-list/collections/virtualized-collection-list.tsx +++ b/packages/frontend/core/src/components/page-list/collections/virtualized-collection-list.tsx @@ -125,7 +125,7 @@ export const VirtualizedCollectionList = ({ items={collectionMetas} itemRenderer={collectionItemRenderer} rowAsLink - blockSuiteWorkspace={currentWorkspace.blockSuiteWorkspace} + docCollection={currentWorkspace.docCollection} operationsRenderer={collectionOperationRenderer} headerRenderer={collectionHeaderRenderer} /> diff --git a/packages/frontend/core/src/components/page-list/docs/page-list-new-page-button.tsx b/packages/frontend/core/src/components/page-list/docs/page-list-new-page-button.tsx index d867622e83f8c..1466a2f0b13a4 100644 --- a/packages/frontend/core/src/components/page-list/docs/page-list-new-page-button.tsx +++ b/packages/frontend/core/src/components/page-list/docs/page-list-new-page-button.tsx @@ -18,7 +18,7 @@ export const PageListNewPageButton = ({ }>) => { const currentWorkspace = useService(Workspace); const { importFile, createEdgeless, createPage } = usePageHelper( - currentWorkspace.blockSuiteWorkspace + currentWorkspace.docCollection ); return (
diff --git a/packages/frontend/core/src/components/page-list/docs/virtualized-page-list.tsx b/packages/frontend/core/src/components/page-list/docs/virtualized-page-list.tsx index 0fd3e44d97840..61fa64f673b62 100644 --- a/packages/frontend/core/src/components/page-list/docs/virtualized-page-list.tsx +++ b/packages/frontend/core/src/components/page-list/docs/virtualized-page-list.tsx @@ -28,11 +28,9 @@ import { const usePageOperationsRenderer = () => { const currentWorkspace = useService(Workspace); - const { setTrashModal } = useTrashModalHelper( - currentWorkspace.blockSuiteWorkspace - ); + const { setTrashModal } = useTrashModalHelper(currentWorkspace.docCollection); const { toggleFavorite, duplicate } = useBlockSuiteMetaHelper( - currentWorkspace.blockSuiteWorkspace + currentWorkspace.docCollection ); const t = useAFFiNEI18N(); @@ -97,11 +95,9 @@ export const VirtualizedPageList = ({ const [showFloatingToolbar, setShowFloatingToolbar] = useState(false); const [selectedPageIds, setSelectedPageIds] = useState([]); const currentWorkspace = useService(Workspace); - const pageMetas = useBlockSuiteDocMeta(currentWorkspace.blockSuiteWorkspace); + const pageMetas = useBlockSuiteDocMeta(currentWorkspace.docCollection); const pageOperations = usePageOperationsRenderer(); - const { isPreferredEdgeless } = usePageHelper( - currentWorkspace.blockSuiteWorkspace - ); + const { isPreferredEdgeless } = usePageHelper(currentWorkspace.docCollection); const filteredPageMetas = useFilteredPageMetas(currentWorkspace, pageMetas, { filters, @@ -155,9 +151,7 @@ export const VirtualizedPageList = ({ return ; }, [collection, config, currentWorkspace.id, tag]); - const { setTrashModal } = useTrashModalHelper( - currentWorkspace.blockSuiteWorkspace - ); + const { setTrashModal } = useTrashModalHelper(currentWorkspace.docCollection); const handleMultiDelete = useCallback(() => { const pageNameMapping = Object.fromEntries( @@ -190,7 +184,7 @@ export const VirtualizedPageList = ({ items={pageMetasToRender} rowAsLink isPreferredEdgeless={isPreferredEdgeless} - blockSuiteWorkspace={currentWorkspace.blockSuiteWorkspace} + docCollection={currentWorkspace.docCollection} operationsRenderer={pageOperationRenderer} itemRenderer={pageItemRenderer} headerRenderer={pageHeaderRenderer} diff --git a/packages/frontend/core/src/components/page-list/page-content-preview.tsx b/packages/frontend/core/src/components/page-list/page-content-preview.tsx index 5761054963a78..b2bffb62ab486 100644 --- a/packages/frontend/core/src/components/page-list/page-content-preview.tsx +++ b/packages/frontend/core/src/components/page-list/page-content-preview.tsx @@ -1,31 +1,34 @@ -import type { Workspace } from '@blocksuite/store'; +import type { DocCollection } from '@blocksuite/store'; import { useAtomValue } from 'jotai'; import { Suspense } from 'react'; import { useBlockSuitePagePreview } from './use-block-suite-page-preview'; -import { useBlockSuiteWorkspacePage } from './use-block-suite-workspace-page'; +import { useDocCollectionPage } from './use-block-suite-workspace-page'; interface PagePreviewInnerProps { - workspace: Workspace; + docCollection: DocCollection; pageId: string; } -const PagePreviewInner = ({ workspace, pageId }: PagePreviewInnerProps) => { - const page = useBlockSuiteWorkspacePage(workspace, pageId); +const PagePreviewInner = ({ + docCollection: workspace, + pageId, +}: PagePreviewInnerProps) => { + const page = useDocCollectionPage(workspace, pageId); const previewAtom = useBlockSuitePagePreview(page); const preview = useAtomValue(previewAtom); return preview ? preview : null; }; interface PagePreviewProps { - workspace: Workspace; + docCollection: DocCollection; pageId: string; } -export const PagePreview = ({ workspace, pageId }: PagePreviewProps) => { +export const PagePreview = ({ docCollection, pageId }: PagePreviewProps) => { return ( - + ); }; diff --git a/packages/frontend/core/src/components/page-list/page-group.tsx b/packages/frontend/core/src/components/page-list/page-group.tsx index 40da820fbf682..bc66846d3fb3c 100644 --- a/packages/frontend/core/src/components/page-list/page-group.tsx +++ b/packages/frontend/core/src/components/page-list/page-group.tsx @@ -9,7 +9,7 @@ import { ToggleCollapseIcon, ViewLayersIcon, } from '@blocksuite/icons'; -import type { DocMeta, Workspace } from '@blocksuite/store'; +import type { DocCollection, DocMeta } from '@blocksuite/store'; import * as Collapsible from '@radix-ui/react-collapsible'; import { useService } from '@toeverything/infra'; import { useLiveData } from '@toeverything/infra'; @@ -196,7 +196,7 @@ export const ItemGroup = ({ // todo: optimize how to render page meta list item const requiredPropNames = [ - 'blockSuiteWorkspace', + 'docCollection', 'rowAsLink', 'isPreferredEdgeless', 'operationsRenderer', @@ -266,9 +266,9 @@ export const TagListItemRenderer = (item: ListItem) => { function tagIdToTagOption( tagId: string, - blockSuiteWorkspace: Workspace + docCollection: DocCollection ): Tag | undefined { - return blockSuiteWorkspace.meta.properties.tags?.options.find( + return docCollection.meta.properties.tags?.options.find( opt => opt.id === tagId ); } @@ -286,15 +286,15 @@ const PageTitle = ({ id }: { id: string }) => { const UnifiedPageIcon = ({ id, - workspace, + docCollection, isPreferredEdgeless, }: { id: string; - workspace: Workspace; + docCollection: DocCollection; isPreferredEdgeless?: (id: string) => boolean; }) => { const isEdgeless = isPreferredEdgeless ? isPreferredEdgeless(id) : false; - const { isJournal } = useJournalInfoHelper(workspace, id); + const { isJournal } = useJournalInfoHelper(docCollection, id); if (isJournal) { return ; } @@ -325,7 +325,7 @@ function pageMetaToListItemProp( pageId: item.id, title: , preview: ( - + ), createDate: new Date(item.createDate), updatedDate: item.updatedDate ? new Date(item.updatedDate) : undefined, @@ -334,13 +334,13 @@ function pageMetaToListItemProp( icon: ( ), tags: item.tags - ?.map(id => tagIdToTagOption(id, props.blockSuiteWorkspace)) + ?.map(id => tagIdToTagOption(id, props.docCollection)) .filter((v): v is Tag => v != null) ?? [], operations: props.operationsRenderer?.(item), selectable: props.selectable, diff --git a/packages/frontend/core/src/components/page-list/tags/virtualized-tag-list.tsx b/packages/frontend/core/src/components/page-list/tags/virtualized-tag-list.tsx index 2e205c8727ce2..cee2a78e658a5 100644 --- a/packages/frontend/core/src/components/page-list/tags/virtualized-tag-list.tsx +++ b/packages/frontend/core/src/components/page-list/tags/virtualized-tag-list.tsx @@ -98,7 +98,7 @@ export const VirtualizedTagList = ({ items={tagMetas} itemRenderer={tagItemRenderer} rowAsLink - blockSuiteWorkspace={currentWorkspace.blockSuiteWorkspace} + docCollection={currentWorkspace.docCollection} operationsRenderer={tagOperationRenderer} headerRenderer={tagHeaderRenderer} /> diff --git a/packages/frontend/core/src/components/page-list/types.ts b/packages/frontend/core/src/components/page-list/types.ts index 895ca86414142..c215454e381ad 100644 --- a/packages/frontend/core/src/components/page-list/types.ts +++ b/packages/frontend/core/src/components/page-list/types.ts @@ -1,5 +1,5 @@ import type { Collection, Tag } from '@affine/env/filter'; -import type { DocMeta, Workspace } from '@blocksuite/store'; +import type { DocCollection, DocMeta } from '@blocksuite/store'; import type { PropsWithChildren, ReactNode } from 'react'; import type { To } from 'react-router-dom'; @@ -86,7 +86,7 @@ export type DateKey = 'createDate' | 'updatedDate'; export interface ListProps { // required data: items: T[]; - blockSuiteWorkspace: Workspace; + docCollection: DocCollection; className?: string; hideHeader?: boolean; // whether or not to hide the header. default is false (showing header) groupBy?: ItemGroupByType | false; diff --git a/packages/frontend/core/src/components/page-list/use-block-suite-workspace-page.ts b/packages/frontend/core/src/components/page-list/use-block-suite-workspace-page.ts index 90fd2e31d9ea0..a020eff1df79b 100644 --- a/packages/frontend/core/src/components/page-list/use-block-suite-workspace-page.ts +++ b/packages/frontend/core/src/components/page-list/use-block-suite-workspace-page.ts @@ -1,29 +1,29 @@ import { DebugLogger } from '@affine/debug'; import { DisposableGroup } from '@blocksuite/global/utils'; -import type { Doc, Workspace } from '@blocksuite/store'; +import type { Doc, DocCollection } from '@blocksuite/store'; import { useEffect, useState } from 'react'; const logger = new DebugLogger('useBlockSuiteWorkspacePage'); -export function useBlockSuiteWorkspacePage( - blockSuiteWorkspace: Workspace, +export function useDocCollectionPage( + docCollection: DocCollection, pageId: string | null ): Doc | null { const [page, setPage] = useState( - pageId ? blockSuiteWorkspace.getDoc(pageId) : null + pageId ? docCollection.getDoc(pageId) : null ); useEffect(() => { const group = new DisposableGroup(); group.add( - blockSuiteWorkspace.slots.docAdded.on(id => { + docCollection.slots.docAdded.on(id => { if (pageId === id) { - setPage(blockSuiteWorkspace.getDoc(id)); + setPage(docCollection.getDoc(id)); } }) ); group.add( - blockSuiteWorkspace.slots.docRemoved.on(id => { + docCollection.slots.docRemoved.on(id => { if (pageId === id) { setPage(null); } @@ -32,7 +32,7 @@ export function useBlockSuiteWorkspacePage( return () => { group.dispose(); }; - }, [blockSuiteWorkspace, pageId]); + }, [docCollection, pageId]); useEffect(() => { if (page && !page.loaded) { @@ -46,9 +46,9 @@ export function useBlockSuiteWorkspacePage( useEffect(() => { if (page?.id !== pageId) { - setPage(pageId ? blockSuiteWorkspace.getDoc(pageId) : null); + setPage(pageId ? docCollection.getDoc(pageId) : null); } - }, [blockSuiteWorkspace, page?.id, pageId]); + }, [docCollection, page?.id, pageId]); return page; } diff --git a/packages/frontend/core/src/components/page-list/view/edit-collection/edit-collection.tsx b/packages/frontend/core/src/components/page-list/view/edit-collection/edit-collection.tsx index 4840b7c5fe4c2..ecde710eaa7e5 100644 --- a/packages/frontend/core/src/components/page-list/view/edit-collection/edit-collection.tsx +++ b/packages/frontend/core/src/components/page-list/view/edit-collection/edit-collection.tsx @@ -6,7 +6,7 @@ import { } from '@affine/component'; import type { Collection } from '@affine/env/filter'; import { useAFFiNEI18N } from '@affine/i18n/hooks'; -import type { DocMeta, Workspace } from '@blocksuite/store'; +import type { DocCollection, DocMeta } from '@blocksuite/store'; import type { DialogContentProps } from '@radix-ui/react-dialog'; import { type ReactNode, useCallback, useMemo, useState } from 'react'; @@ -199,7 +199,7 @@ export const EditCollection = ({ export type AllPageListConfig = { allPages: DocMeta[]; - workspace: Workspace; + docCollection: DocCollection; isEdgeless: (id: string) => boolean; /** * Return `undefined` if the page is not public diff --git a/packages/frontend/core/src/components/page-list/view/edit-collection/pages-mode.tsx b/packages/frontend/core/src/components/page-list/view/edit-collection/pages-mode.tsx index 9eca9e40ac292..5a328f7bba128 100644 --- a/packages/frontend/core/src/components/page-list/view/edit-collection/pages-mode.tsx +++ b/packages/frontend/core/src/components/page-list/view/edit-collection/pages-mode.tsx @@ -87,7 +87,9 @@ export const PagesMode = ({ @@ -114,7 +116,7 @@ export const PagesMode = ({ {showFilter ? (
@@ -125,7 +127,7 @@ export const PagesMode = ({ className={styles.pageList} items={searchedList} groupBy={false} - blockSuiteWorkspace={allPageListConfig.workspace} + docCollection={allPageListConfig.docCollection} selectable onSelectedIdsChange={ids => { updateCollection({ diff --git a/packages/frontend/core/src/components/page-list/view/edit-collection/rules-mode.tsx b/packages/frontend/core/src/components/page-list/view/edit-collection/rules-mode.tsx index b60d937549805..d81cf2fb3581c 100644 --- a/packages/frontend/core/src/components/page-list/view/edit-collection/rules-mode.tsx +++ b/packages/frontend/core/src/components/page-list/view/edit-collection/rules-mode.tsx @@ -123,7 +123,7 @@ export const RulesMode = ({ }} > updateCollection({ ...collection, filterList }), @@ -265,7 +265,7 @@ export const RulesMode = ({ className={styles.resultPages} items={rulesPages} groupBy={false} - blockSuiteWorkspace={allPageListConfig.workspace} + docCollection={allPageListConfig.docCollection} isPreferredEdgeless={allPageListConfig.isEdgeless} operationsRenderer={operationsRenderer} > @@ -285,7 +285,7 @@ export const RulesMode = ({ className={styles.resultPages} items={allowListPages} groupBy={false} - blockSuiteWorkspace={allPageListConfig.workspace} + docCollection={allPageListConfig.docCollection} isPreferredEdgeless={allPageListConfig.isEdgeless} operationsRenderer={operationsRenderer} > diff --git a/packages/frontend/core/src/components/page-list/view/edit-collection/select-page.tsx b/packages/frontend/core/src/components/page-list/view/edit-collection/select-page.tsx index 3b189839a186b..457c4c9049612 100644 --- a/packages/frontend/core/src/components/page-list/view/edit-collection/select-page.tsx +++ b/packages/frontend/core/src/components/page-list/view/edit-collection/select-page.tsx @@ -76,7 +76,9 @@ export const SelectPage = ({ @@ -103,7 +105,7 @@ export const SelectPage = ({ {showFilter ? (
@@ -113,7 +115,7 @@ export const SelectPage = ({ { const workspace = useService(Workspace); - const pages = useBlockSuiteDocMeta(workspace.blockSuiteWorkspace); + const pages = useBlockSuiteDocMeta(workspace.docCollection); return pages; }; @@ -100,7 +100,7 @@ export const pageToCommand = ( category: CommandCategory, page: DocMeta, navigationHelper: ReturnType, - getPageTitle: ReturnType, + getPageTitle: ReturnType, isPageJournal: (pageId: string) => boolean, t: ReturnType, workspace: Workspace, @@ -151,16 +151,14 @@ export const usePageCommands = () => { const recentPages = useRecentPages(); const pages = useWorkspacePages(); const workspace = useService(Workspace); - const pageHelper = usePageHelper(workspace.blockSuiteWorkspace); - const pageMetaHelper = useDocMetaHelper(workspace.blockSuiteWorkspace); + const pageHelper = usePageHelper(workspace.docCollection); + const pageMetaHelper = useDocMetaHelper(workspace.docCollection); const query = useAtomValue(cmdkQueryAtom); const navigationHelper = useNavigateHelper(); - const journalHelper = useJournalHelper(workspace.blockSuiteWorkspace); + const journalHelper = useJournalHelper(workspace.docCollection); const t = useAFFiNEI18N(); - const getPageTitle = useGetBlockSuiteWorkspacePageTitle( - workspace.blockSuiteWorkspace - ); - const { isPageJournal } = useJournalHelper(workspace.blockSuiteWorkspace); + const getPageTitle = useGetDocCollectionPageTitle(workspace.docCollection); + const { isPageJournal } = useJournalHelper(workspace.docCollection); const [searchTime, setSearchTime] = useState(0); @@ -197,7 +195,7 @@ export const usePageCommands = () => { } else { // queried pages that has matched contents // TODO: we shall have a debounce for global search here - const searchResults = workspace.blockSuiteWorkspace.search({ + const searchResults = workspace.docCollection.search({ query, }) as unknown as Map; const resultValues = Array.from(searchResults.values()); @@ -242,7 +240,7 @@ export const usePageCommands = () => { if (!appendRes) return; const { page, blockId } = appendRes; navigationHelper.jumpToPageBlock( - page.workspace.id, + page.collection.id, page.id, blockId ); diff --git a/packages/frontend/core/src/components/pure/trash-page-footer/index.tsx b/packages/frontend/core/src/components/pure/trash-page-footer/index.tsx index 815d780086ce1..18c6c3cf6c110 100644 --- a/packages/frontend/core/src/components/pure/trash-page-footer/index.tsx +++ b/packages/frontend/core/src/components/pure/trash-page-footer/index.tsx @@ -22,15 +22,15 @@ export const TrashPageFooter = ({ pageId }: { pageId: string }) => { useService(CurrentWorkspaceService).currentWorkspace ); assertExists(workspace); - const blockSuiteWorkspace = workspace.blockSuiteWorkspace; - const pageMeta = useBlockSuiteDocMeta(blockSuiteWorkspace).find( + const docCollection = workspace.docCollection; + const pageMeta = useBlockSuiteDocMeta(docCollection).find( meta => meta.id === pageId ); assertExists(pageMeta); const t = useAFFiNEI18N(); const { appSettings } = useAppSettingHelper(); const { jumpToSubPath } = useNavigateHelper(); - const { restoreFromTrash } = useBlockSuiteMetaHelper(blockSuiteWorkspace); + const { restoreFromTrash } = useBlockSuiteMetaHelper(docCollection); const [open, setOpen] = useState(false); const hintText = t['com.affine.cmdk.affine.editor.trash-footer-hint'](); @@ -45,9 +45,9 @@ export const TrashPageFooter = ({ pageId }: { pageId: string }) => { const onConfirmDelete = useCallback(() => { jumpToSubPath(workspace.id, WorkspaceSubPath.ALL); - blockSuiteWorkspace.removeDoc(pageId); + docCollection.removeDoc(pageId); toast(t['com.affine.toastMessage.permanentlyDeleted']()); - }, [blockSuiteWorkspace, jumpToSubPath, pageId, workspace.id, t]); + }, [docCollection, jumpToSubPath, pageId, workspace.id, t]); const onDelete = useCallback(() => { setOpen(true); diff --git a/packages/frontend/core/src/components/pure/workspace-slider-bar/collections/collections-list.tsx b/packages/frontend/core/src/components/pure/workspace-slider-bar/collections/collections-list.tsx index bb9fefc7fbb54..3fd422a882998 100644 --- a/packages/frontend/core/src/components/pure/workspace-slider-bar/collections/collections-list.tsx +++ b/packages/frontend/core/src/components/pure/workspace-slider-bar/collections/collections-list.tsx @@ -10,7 +10,7 @@ import { CollectionService } from '@affine/core/modules/collection'; import type { Collection, DeleteCollectionInfo } from '@affine/env/filter'; import { useAFFiNEI18N } from '@affine/i18n/hooks'; import { MoreHorizontalIcon, ViewLayersIcon } from '@blocksuite/icons'; -import type { DocMeta, Workspace } from '@blocksuite/store'; +import type { DocCollection, DocMeta } from '@blocksuite/store'; import { useDroppable } from '@dnd-kit/core'; import * as Collapsible from '@radix-ui/react-collapsible'; import { useService } from '@toeverything/infra'; @@ -30,12 +30,12 @@ import * as styles from './styles.css'; const CollectionRenderer = ({ collection, pages, - workspace, + docCollection, info, }: { collection: Collection; pages: DocMeta[]; - workspace: Workspace; + docCollection: DocCollection; info: DeleteCollectionInfo; }) => { const [collapsed, setCollapsed] = useState(true); @@ -159,7 +159,7 @@ const CollectionRenderer = ({ allPageMeta={allPagesMeta} page={page} key={page.id} - workspace={workspace} + docCollection={docCollection} /> ); })} @@ -169,7 +169,7 @@ const CollectionRenderer = ({ ); }; export const CollectionsList = ({ - workspace, + docCollection: workspace, info, onCreate, }: CollectionsListProps) => { @@ -205,7 +205,7 @@ export const CollectionsList = ({ key={view.id} collection={view} pages={metas} - workspace={workspace} + docCollection={workspace} /> ); })} diff --git a/packages/frontend/core/src/components/pure/workspace-slider-bar/collections/page.tsx b/packages/frontend/core/src/components/pure/workspace-slider-bar/collections/page.tsx index bd0414d1fe3e0..019c2550974dc 100644 --- a/packages/frontend/core/src/components/pure/workspace-slider-bar/collections/page.tsx +++ b/packages/frontend/core/src/components/pure/workspace-slider-bar/collections/page.tsx @@ -1,7 +1,7 @@ import { useBlockSuitePageReferences } from '@affine/core/hooks/use-block-suite-page-references'; import { useAFFiNEI18N } from '@affine/i18n/hooks'; import { EdgelessIcon, PageIcon } from '@blocksuite/icons'; -import type { DocMeta, Workspace } from '@blocksuite/store'; +import type { DocCollection, DocMeta } from '@blocksuite/store'; import { useDraggable } from '@dnd-kit/core'; import * as Collapsible from '@radix-ui/react-collapsible'; import { PageRecordList, useLiveData, useService } from '@toeverything/infra'; @@ -18,7 +18,7 @@ import * as styles from './styles.css'; export const Page = ({ page, - workspace, + docCollection, allPageMeta, inAllowList, removeFromAllowList, @@ -26,7 +26,7 @@ export const Page = ({ page: DocMeta; inAllowList: boolean; removeFromAllowList: (id: string) => void; - workspace: Workspace; + docCollection: DocCollection; allPageMeta: Record; }) => { const [collapsed, setCollapsed] = React.useState(true); @@ -46,10 +46,10 @@ export const Page = ({ const { jumpToPage } = useNavigateHelper(); const clickPage = useCallback(() => { - jumpToPage(workspace.id, page.id); - }, [jumpToPage, page.id, workspace.id]); + jumpToPage(docCollection.id, page.id); + }, [jumpToPage, page.id, docCollection.id]); - const references = useBlockSuitePageReferences(workspace, pageId); + const references = useBlockSuitePageReferences(docCollection, pageId); const referencesToRender = references.filter( id => allPageMeta[id] && !allPageMeta[id]?.trash ); @@ -85,7 +85,7 @@ export const Page = ({ onCollapsedChange={setCollapsed} postfix={ void; inFavorites?: boolean; @@ -24,7 +24,7 @@ export type OperationMenuButtonProps = { export const OperationMenuButton = ({ ...props }: OperationMenuButtonProps) => { const { - workspace, + docCollection, pageId, pageTitle, setRenameModalOpen, @@ -34,9 +34,9 @@ export const OperationMenuButton = ({ ...props }: OperationMenuButtonProps) => { isReferencePage, } = props; const t = useAFFiNEI18N(); - const { createLinkedPage } = usePageHelper(workspace); - const { setTrashModal } = useTrashModalHelper(workspace); - const { removeFromFavorite } = useBlockSuiteMetaHelper(workspace); + const { createLinkedPage } = usePageHelper(docCollection); + const { setTrashModal } = useTrashModalHelper(docCollection); + const { removeFromFavorite } = useBlockSuiteMetaHelper(docCollection); const handleRename = useCallback(() => { setRenameModalOpen?.(); diff --git a/packages/frontend/core/src/components/pure/workspace-slider-bar/components/postfix-item.tsx b/packages/frontend/core/src/components/pure/workspace-slider-bar/components/postfix-item.tsx index d4999b92f65f5..8d929af7ad3fd 100644 --- a/packages/frontend/core/src/components/pure/workspace-slider-bar/components/postfix-item.tsx +++ b/packages/frontend/core/src/components/pure/workspace-slider-bar/components/postfix-item.tsx @@ -2,7 +2,7 @@ import { toast } from '@affine/component'; import { RenameModal } from '@affine/component/rename-modal'; import { useDocMetaHelper } from '@affine/core/hooks/use-block-suite-page-meta'; import { useAFFiNEI18N } from '@affine/i18n/hooks'; -import type { Workspace } from '@blocksuite/store'; +import type { DocCollection } from '@blocksuite/store'; import { useCallback, useState } from 'react'; import { AddFavouriteButton } from '../favorite/add-favourite-button'; @@ -10,7 +10,7 @@ import * as styles from '../favorite/styles.css'; import { OperationMenuButton } from './operation-menu-button'; type PostfixItemProps = { - workspace: Workspace; + docCollection: DocCollection; pageId: string; pageTitle: string; inFavorites?: boolean; @@ -20,10 +20,10 @@ type PostfixItemProps = { }; export const PostfixItem = ({ ...props }: PostfixItemProps) => { - const { workspace, pageId, pageTitle } = props; + const { docCollection, pageId, pageTitle } = props; const t = useAFFiNEI18N(); const [open, setOpen] = useState(false); - const { setDocTitle } = useDocMetaHelper(workspace); + const { setDocTitle } = useDocMetaHelper(docCollection); const handleRename = useCallback( (newName: string) => { diff --git a/packages/frontend/core/src/components/pure/workspace-slider-bar/components/reference-page.tsx b/packages/frontend/core/src/components/pure/workspace-slider-bar/components/reference-page.tsx index d6f7a7513f99d..2a187e67f4576 100644 --- a/packages/frontend/core/src/components/pure/workspace-slider-bar/components/reference-page.tsx +++ b/packages/frontend/core/src/components/pure/workspace-slider-bar/components/reference-page.tsx @@ -1,7 +1,7 @@ import { useBlockSuitePageReferences } from '@affine/core/hooks/use-block-suite-page-references'; import { useAFFiNEI18N } from '@affine/i18n/hooks'; import { EdgelessIcon, PageIcon } from '@blocksuite/icons'; -import { type DocMeta, type Workspace } from '@blocksuite/store'; +import { type DocCollection, type DocMeta } from '@blocksuite/store'; import * as Collapsible from '@radix-ui/react-collapsible'; import { PageRecordList, useLiveData, useService } from '@toeverything/infra'; import { useMemo, useState } from 'react'; @@ -11,14 +11,14 @@ import { MenuLinkItem } from '../../../app-sidebar'; import * as styles from '../favorite/styles.css'; import { PostfixItem } from './postfix-item'; export interface ReferencePageProps { - workspace: Workspace; + docCollection: DocCollection; pageId: string; metaMapping: Record; parentIds: Set; } export const ReferencePage = ({ - workspace, + docCollection, pageId, metaMapping, parentIds, @@ -33,7 +33,7 @@ export const ReferencePage = ({ return pageMode === 'edgeless' ? : ; }, [pageMode]); - const references = useBlockSuitePageReferences(workspace, pageId); + const references = useBlockSuitePageReferences(docCollection, pageId); const referencesToShow = useMemo(() => { return [ ...new Set( @@ -59,13 +59,13 @@ export const ReferencePage = ({ data-type="reference-page" data-testid={`reference-page-${pageId}`} active={active} - to={`/workspace/${workspace.id}/${pageId}`} + to={`/workspace/${docCollection.id}/${pageId}`} icon={icon} collapsed={collapsible ? collapsed : undefined} onCollapsedChange={setCollapsed} postfix={ { - const { createPage, createLinkedPage } = usePageHelper(workspace); - const { setDocMeta } = useDocMetaHelper(workspace); + const { createPage, createLinkedPage } = usePageHelper(docCollection); + const { setDocMeta } = useDocMetaHelper(docCollection); const handleAddFavorite = useAsyncCallback( async e => { if (pageId) { diff --git a/packages/frontend/core/src/components/pure/workspace-slider-bar/favorite/favorite-list.tsx b/packages/frontend/core/src/components/pure/workspace-slider-bar/favorite/favorite-list.tsx index 189cc6092fb5b..b2ed986642452 100644 --- a/packages/frontend/core/src/components/pure/workspace-slider-bar/favorite/favorite-list.tsx +++ b/packages/frontend/core/src/components/pure/workspace-slider-bar/favorite/favorite-list.tsx @@ -11,7 +11,9 @@ import * as styles from './styles.css'; const emptyPageIdSet = new Set(); -export const FavoriteList = ({ workspace }: FavoriteListProps) => { +export const FavoriteList = ({ + docCollection: workspace, +}: FavoriteListProps) => { const metas = useBlockSuiteDocMeta(workspace); const dropItemId = getDropItemId('favorites'); @@ -51,7 +53,7 @@ export const FavoriteList = ({ workspace }: FavoriteListProps) => { pageId={pageMeta.id} // memo? parentIds={emptyPageIdSet} - workspace={workspace} + docCollection={workspace} /> ); })} diff --git a/packages/frontend/core/src/components/pure/workspace-slider-bar/favorite/favourite-page.tsx b/packages/frontend/core/src/components/pure/workspace-slider-bar/favorite/favourite-page.tsx index 0c653005a0dca..e1894bbcaacb9 100644 --- a/packages/frontend/core/src/components/pure/workspace-slider-bar/favorite/favourite-page.tsx +++ b/packages/frontend/core/src/components/pure/workspace-slider-bar/favorite/favourite-page.tsx @@ -20,7 +20,7 @@ import { import * as styles from './styles.css'; export const FavouritePage = ({ - workspace, + docCollection: workspace, pageId, metaMapping, parentIds, @@ -86,7 +86,7 @@ export const FavouritePage = ({ {...listeners} postfix={ void; }; diff --git a/packages/frontend/core/src/components/root-app-sidebar/import-page.tsx b/packages/frontend/core/src/components/root-app-sidebar/import-page.tsx index 3a72594bc6074..a0c8639c18fc6 100644 --- a/packages/frontend/core/src/components/root-app-sidebar/import-page.tsx +++ b/packages/frontend/core/src/components/root-app-sidebar/import-page.tsx @@ -1,17 +1,13 @@ import { useAFFiNEI18N } from '@affine/i18n/hooks'; import { ImportIcon } from '@blocksuite/icons'; -import type { BlockSuiteWorkspace } from '../../shared'; +import type { DocCollection } from '../../shared'; import { MenuItem } from '../app-sidebar'; import { usePageHelper } from '../blocksuite/block-suite-page-list/utils'; -const ImportPage = ({ - blocksuiteWorkspace, -}: { - blocksuiteWorkspace: BlockSuiteWorkspace; -}) => { +const ImportPage = ({ docCollection }: { docCollection: DocCollection }) => { const t = useAFFiNEI18N(); - const { importFile } = usePageHelper(blocksuiteWorkspace); + const { importFile } = usePageHelper(docCollection); return ( } onClick={importFile}> {t['Import']()} diff --git a/packages/frontend/core/src/components/root-app-sidebar/index.tsx b/packages/frontend/core/src/components/root-app-sidebar/index.tsx index 75a4fc9f8ef16..d97a5070afc95 100644 --- a/packages/frontend/core/src/components/root-app-sidebar/index.tsx +++ b/packages/frontend/core/src/components/root-app-sidebar/index.tsx @@ -100,7 +100,7 @@ export const RootAppSidebar = ({ }: RootAppSidebarProps): ReactElement => { const currentWorkspaceId = currentWorkspace.id; const { appSettings } = useAppSettingHelper(); - const blockSuiteWorkspace = currentWorkspace.blockSuiteWorkspace; + const docCollection = currentWorkspace.docCollection; const t = useAFFiNEI18N(); const [openUserWorkspaceList, setOpenUserWorkspaceList] = useAtom( openWorkspaceListModalAtom @@ -114,7 +114,7 @@ export const RootAppSidebar = ({ }, [createPage, openPage]); const { trashModal, setTrashModal, handleOnConfirm } = - useTrashModalHelper(blockSuiteWorkspace); + useTrashModalHelper(docCollection); const deletePageTitles = trashModal.pageTitles; const trashConfirmOpen = trashModal.open; const onTrashConfirmOpenChange = useCallback( @@ -164,12 +164,12 @@ export const RootAppSidebar = ({ .then(name => { const id = nanoid(); collection.addCollection(createEmptyCollection(id, { name })); - navigateHelper.jumpToCollection(blockSuiteWorkspace.id, id); + navigateHelper.jumpToCollection(docCollection.id, id); }) .catch(err => { console.error(err); }); - }, [blockSuiteWorkspace.id, collection, navigateHelper, open]); + }, [docCollection.id, collection, navigateHelper, open]); const allPageActive = currentPath === '/all'; @@ -227,7 +227,7 @@ export const RootAppSidebar = ({ {runtimeConfig.enableNewSettingModal ? ( - + - + @@ -268,7 +268,7 @@ export const RootAppSidebar = ({ {t['com.affine.workspaceSubPath.trash']()} - + {environment.isDesktop ? : } diff --git a/packages/frontend/core/src/components/root-app-sidebar/journal-button.tsx b/packages/frontend/core/src/components/root-app-sidebar/journal-button.tsx index f745c57a6678f..059d13fb936f3 100644 --- a/packages/frontend/core/src/components/root-app-sidebar/journal-button.tsx +++ b/packages/frontend/core/src/components/root-app-sidebar/journal-button.tsx @@ -2,7 +2,7 @@ import { useJournalInfoHelper, useJournalRouteHelper, } from '@affine/core/hooks/use-journal'; -import type { BlockSuiteWorkspace } from '@affine/core/shared'; +import type { DocCollection } from '@affine/core/shared'; import { useAFFiNEI18N } from '@affine/i18n/hooks'; import { TodayIcon, TomorrowIcon, YesterdayIcon } from '@blocksuite/icons'; import { Doc, useServiceOptional } from '@toeverything/infra'; @@ -11,17 +11,17 @@ import { useParams } from 'react-router-dom'; import { MenuItem } from '../app-sidebar'; interface AppSidebarJournalButtonProps { - workspace: BlockSuiteWorkspace; + docCollection: DocCollection; } export const AppSidebarJournalButton = ({ - workspace, + docCollection, }: AppSidebarJournalButtonProps) => { const t = useAFFiNEI18N(); const currentPage = useServiceOptional(Doc); - const { openToday } = useJournalRouteHelper(workspace); + const { openToday } = useJournalRouteHelper(docCollection); const { journalDate, isJournal } = useJournalInfoHelper( - workspace, + docCollection, currentPage?.id ); const params = useParams(); diff --git a/packages/frontend/core/src/hooks/__tests__/use-block-suite-workspace-helper.spec.tsx b/packages/frontend/core/src/hooks/__tests__/use-block-suite-workspace-helper.spec.tsx index 724297eccd9e5..44e906aba7056 100644 --- a/packages/frontend/core/src/hooks/__tests__/use-block-suite-workspace-helper.spec.tsx +++ b/packages/frontend/core/src/hooks/__tests__/use-block-suite-workspace-helper.spec.tsx @@ -11,14 +11,14 @@ import type { PropsWithChildren } from 'react'; import { beforeEach, describe, expect, test, vi } from 'vitest'; import { useBlockSuiteDocMeta } from '../use-block-suite-page-meta'; -import { useBlockSuiteWorkspaceHelper } from '../use-block-suite-workspace-helper'; +import { useDocCollectionHelper } from '../use-block-suite-workspace-helper'; const configureTestingWorkspace = async () => { const { workspace } = await configureTestingEnvironment(); - const blockSuiteWorkspace = workspace.blockSuiteWorkspace; + const docCollection = workspace.docCollection; - initEmptyPage(blockSuiteWorkspace.createDoc({ id: 'page1' })); - initEmptyPage(blockSuiteWorkspace.createDoc({ id: 'page2' })); + initEmptyPage(docCollection.createDoc({ id: 'page1' })); + initEmptyPage(docCollection.createDoc({ id: 'page2' })); return workspace; }; @@ -36,31 +36,25 @@ const getWrapper = (workspace: Workspace) => ); }; -describe('useBlockSuiteWorkspaceHelper', () => { +describe('useDocCollectionHelper', () => { test('should create page', async () => { const workspace = await configureTestingWorkspace(); - const blockSuiteWorkspace = workspace.blockSuiteWorkspace; + const docCollection = workspace.docCollection; const Wrapper = getWrapper(workspace); - expect(blockSuiteWorkspace.meta.docMetas.length).toBe(3); - const helperHook = renderHook( - () => useBlockSuiteWorkspaceHelper(blockSuiteWorkspace), - { - wrapper: Wrapper, - } - ); - const pageMetaHook = renderHook( - () => useBlockSuiteDocMeta(blockSuiteWorkspace), - { - wrapper: Wrapper, - } - ); + expect(docCollection.meta.docMetas.length).toBe(3); + const helperHook = renderHook(() => useDocCollectionHelper(docCollection), { + wrapper: Wrapper, + }); + const pageMetaHook = renderHook(() => useBlockSuiteDocMeta(docCollection), { + wrapper: Wrapper, + }); await new Promise(resolve => setTimeout(resolve)); expect(pageMetaHook.result.current.length).toBe(3); - expect(blockSuiteWorkspace.meta.docMetas.length).toBe(3); + expect(docCollection.meta.docMetas.length).toBe(3); const page = helperHook.result.current.createDoc('page4'); expect(page.id).toBe('page4'); - expect(blockSuiteWorkspace.meta.docMetas.length).toBe(4); + expect(docCollection.meta.docMetas.length).toBe(4); pageMetaHook.rerender(); expect(pageMetaHook.result.current.length).toBe(4); }); diff --git a/packages/frontend/core/src/hooks/__tests__/use-block-suite-workspace-page-title.spec.tsx b/packages/frontend/core/src/hooks/__tests__/use-block-suite-workspace-page-title.spec.tsx index d638dc685717d..60546c1fe2b1b 100644 --- a/packages/frontend/core/src/hooks/__tests__/use-block-suite-workspace-page-title.spec.tsx +++ b/packages/frontend/core/src/hooks/__tests__/use-block-suite-workspace-page-title.spec.tsx @@ -13,16 +13,13 @@ import { describe, expect, test, vi } from 'vitest'; import { beforeEach } from 'vitest'; import { configureTestingEnvironment } from '../../testing'; -import { useBlockSuiteWorkspacePageTitle } from '../use-block-suite-workspace-page-title'; +import { useDocCollectionPageTitle } from '../use-block-suite-workspace-page-title'; const store = createStore(); const Component = () => { const workspace = useService(Workspace); - const title = useBlockSuiteWorkspacePageTitle( - workspace.blockSuiteWorkspace, - 'page0' - ); + const title = useDocCollectionPageTitle(workspace.docCollection, 'page0'); return
title: {title}
; }; @@ -30,7 +27,7 @@ beforeEach(async () => { vi.useFakeTimers({ toFake: ['requestIdleCallback'] }); }); -describe('useBlockSuiteWorkspacePageTitle', () => { +describe('useDocCollectionPageTitle', () => { test('basic', async () => { const { workspace, page } = await configureTestingEnvironment(); const { findByText, rerender } = render( @@ -43,7 +40,7 @@ describe('useBlockSuiteWorkspacePageTitle', () => { ); expect(await findByText('title: Untitled')).toBeDefined(); - workspace.blockSuiteWorkspace.setDocMeta(page.id, { title: '1' }); + workspace.docCollection.setDocMeta(page.id, { title: '1' }); rerender( diff --git a/packages/frontend/core/src/hooks/affine/use-all-page-list-config.tsx b/packages/frontend/core/src/hooks/affine/use-all-page-list-config.tsx index 73818ed627662..6178a6c23204a 100644 --- a/packages/frontend/core/src/hooks/affine/use-all-page-list-config.tsx +++ b/packages/frontend/core/src/hooks/affine/use-all-page-list-config.tsx @@ -17,7 +17,7 @@ import { usePublicPages } from './use-is-shared-page'; export const useAllPageListConfig = () => { const currentWorkspace = useService(Workspace); const { getPublicMode } = usePublicPages(currentWorkspace); - const workspace = currentWorkspace.blockSuiteWorkspace; + const workspace = currentWorkspace.docCollection; const pageMetas = useBlockSuiteDocMeta(workspace); const { isPreferredEdgeless } = usePageHelper(workspace); const pageMap = useMemo( @@ -25,7 +25,7 @@ export const useAllPageListConfig = () => { [pageMetas] ); const { toggleFavorite } = useBlockSuiteMetaHelper( - currentWorkspace.blockSuiteWorkspace + currentWorkspace.docCollection ); const t = useAFFiNEI18N(); const onToggleFavoritePage = useCallback( @@ -45,7 +45,7 @@ export const useAllPageListConfig = () => { allPages: pageMetas, isEdgeless: isPreferredEdgeless, getPublicMode, - workspace: currentWorkspace.blockSuiteWorkspace, + docCollection: currentWorkspace.docCollection, getPage: id => pageMap[id], favoriteRender: page => { return ( @@ -61,7 +61,7 @@ export const useAllPageListConfig = () => { pageMetas, isPreferredEdgeless, getPublicMode, - currentWorkspace.blockSuiteWorkspace, + currentWorkspace.docCollection, pageMap, onToggleFavoritePage, ]); diff --git a/packages/frontend/core/src/hooks/affine/use-block-suite-meta-helper.ts b/packages/frontend/core/src/hooks/affine/use-block-suite-meta-helper.ts index 23cd9fd84bc75..d38d66e6e752d 100644 --- a/packages/frontend/core/src/hooks/affine/use-block-suite-meta-helper.ts +++ b/packages/frontend/core/src/hooks/affine/use-block-suite-meta-helper.ts @@ -1,22 +1,20 @@ import { useAsyncCallback } from '@affine/core/hooks/affine-async-hooks'; import { useDocMetaHelper } from '@affine/core/hooks/use-block-suite-page-meta'; -import { useBlockSuiteWorkspaceHelper } from '@affine/core/hooks/use-block-suite-workspace-helper'; +import { useDocCollectionHelper } from '@affine/core/hooks/use-block-suite-workspace-helper'; import { CollectionService } from '@affine/core/modules/collection'; import { PageRecordList, useService } from '@toeverything/infra'; import { useCallback } from 'react'; import { applyUpdate, encodeStateAsUpdate } from 'yjs'; -import type { BlockSuiteWorkspace } from '../../shared'; +import type { DocCollection } from '../../shared'; import { useNavigateHelper } from '../use-navigate-helper'; import { useReferenceLinkHelper } from './use-reference-link-helper'; -export function useBlockSuiteMetaHelper( - blockSuiteWorkspace: BlockSuiteWorkspace -) { +export function useBlockSuiteMetaHelper(docCollection: DocCollection) { const { setDocMeta, getDocMeta, setDocReadonly, setDocTitle } = - useDocMetaHelper(blockSuiteWorkspace); - const { addReferenceLink } = useReferenceLinkHelper(blockSuiteWorkspace); - const { createDoc } = useBlockSuiteWorkspaceHelper(blockSuiteWorkspace); + useDocMetaHelper(docCollection); + const { addReferenceLink } = useReferenceLinkHelper(docCollection); + const { createDoc } = useDocCollectionHelper(docCollection); const { openPage } = useNavigateHelper(); const collectionService = useService(CollectionService); const pageRecordList = useService(PageRecordList); @@ -82,9 +80,9 @@ export function useBlockSuiteMetaHelper( const permanentlyDeletePage = useCallback( (pageId: string) => { - blockSuiteWorkspace.removeDoc(pageId); + docCollection.removeDoc(pageId); }, - [blockSuiteWorkspace] + [docCollection] ); /** @@ -116,7 +114,7 @@ export function useBlockSuiteMetaHelper( const currentPageMode = pageRecordList.record(pageId).value?.mode.value; const currentPageMeta = getDocMeta(pageId); const newPage = createDoc(); - const currentPage = blockSuiteWorkspace.getDoc(pageId); + const currentPage = docCollection.getDoc(pageId); newPage.load(); if (!currentPageMeta || !currentPage) { @@ -142,10 +140,10 @@ export function useBlockSuiteMetaHelper( .record(newPage.id) .value?.setMode(currentPageMode || 'page'); setDocTitle(newPage.id, newPageTitle); - openPageAfterDuplication && openPage(blockSuiteWorkspace.id, newPage.id); + openPageAfterDuplication && openPage(docCollection.id, newPage.id); }, [ - blockSuiteWorkspace, + docCollection, createDoc, getDocMeta, openPage, diff --git a/packages/frontend/core/src/hooks/affine/use-reference-link-helper.ts b/packages/frontend/core/src/hooks/affine/use-reference-link-helper.ts index 6067c906a11f9..e90d18b7c793e 100644 --- a/packages/frontend/core/src/hooks/affine/use-reference-link-helper.ts +++ b/packages/frontend/core/src/hooks/affine/use-reference-link-helper.ts @@ -1,13 +1,11 @@ import { useCallback } from 'react'; -import type { BlockSuiteWorkspace } from '../../shared'; +import type { DocCollection } from '../../shared'; -export function useReferenceLinkHelper( - blockSuiteWorkspace: BlockSuiteWorkspace -) { +export function useReferenceLinkHelper(docCollection: DocCollection) { const addReferenceLink = useCallback( (pageId: string, referenceId: string) => { - const page = blockSuiteWorkspace?.getDoc(pageId); + const page = docCollection?.getDoc(pageId); if (!page) { return; } @@ -26,7 +24,7 @@ export function useReferenceLinkHelper( frame && page.addBlock('affine:paragraph', { text }, frame.id); }, - [blockSuiteWorkspace] + [docCollection] ); return { diff --git a/packages/frontend/core/src/hooks/affine/use-register-blocksuite-editor-commands.tsx b/packages/frontend/core/src/hooks/affine/use-register-blocksuite-editor-commands.tsx index f3919ea2b40d3..17753fdd305fd 100644 --- a/packages/frontend/core/src/hooks/affine/use-register-blocksuite-editor-commands.tsx +++ b/packages/frontend/core/src/hooks/affine/use-register-blocksuite-editor-commands.tsx @@ -24,9 +24,9 @@ export function useRegisterBlocksuiteEditorCommands() { const mode = useLiveData(page.mode); const t = useAFFiNEI18N(); const workspace = useService(Workspace); - const blockSuiteWorkspace = workspace.blockSuiteWorkspace; - const { getDocMeta } = useDocMetaHelper(blockSuiteWorkspace); - const currentPage = blockSuiteWorkspace.getDoc(pageId); + const docCollection = workspace.docCollection; + const { getDocMeta } = useDocMetaHelper(docCollection); + const currentPage = docCollection.getDoc(pageId); assertExists(currentPage); const pageMeta = getDocMeta(pageId); assertExists(pageMeta); @@ -43,9 +43,9 @@ export function useRegisterBlocksuiteEditorCommands() { }, [pageId, setPageHistoryModalState]); const { toggleFavorite, restoreFromTrash, duplicate } = - useBlockSuiteMetaHelper(blockSuiteWorkspace); + useBlockSuiteMetaHelper(docCollection); const exportHandler = useExportPage(currentPage); - const { setTrashModal } = useTrashModalHelper(blockSuiteWorkspace); + const { setTrashModal } = useTrashModalHelper(docCollection); const onClickDelete = useCallback(() => { setTrashModal({ open: true, diff --git a/packages/frontend/core/src/hooks/affine/use-sidebar-drag.ts b/packages/frontend/core/src/hooks/affine/use-sidebar-drag.ts index a671985e98161..a31f24259c6a4 100644 --- a/packages/frontend/core/src/hooks/affine/use-sidebar-drag.ts +++ b/packages/frontend/core/src/hooks/affine/use-sidebar-drag.ts @@ -70,7 +70,7 @@ export function getDragItemId( export const useSidebarDrag = () => { const t = useAFFiNEI18N(); const currentWorkspace = useService(Workspace); - const workspace = currentWorkspace.blockSuiteWorkspace; + const workspace = currentWorkspace.docCollection; const { setTrashModal } = useTrashModalHelper(workspace); const { addToFavorite, removeFromFavorite } = useBlockSuiteMetaHelper(workspace); diff --git a/packages/frontend/core/src/hooks/affine/use-trash-modal-helper.ts b/packages/frontend/core/src/hooks/affine/use-trash-modal-helper.ts index e33dfcffab50f..ebf530ae0f892 100644 --- a/packages/frontend/core/src/hooks/affine/use-trash-modal-helper.ts +++ b/packages/frontend/core/src/hooks/affine/use-trash-modal-helper.ts @@ -1,17 +1,17 @@ import { toast } from '@affine/component'; import { useAFFiNEI18N } from '@affine/i18n/hooks'; -import type { Workspace } from '@blocksuite/store'; +import type { DocCollection } from '@blocksuite/store'; import { useAtom } from 'jotai'; import { useCallback } from 'react'; import { trashModalAtom } from '../../atoms/trash-modal'; import { useBlockSuiteMetaHelper } from './use-block-suite-meta-helper'; -export function useTrashModalHelper(blocksuiteWorkspace: Workspace) { +export function useTrashModalHelper(docCollection: DocCollection) { const t = useAFFiNEI18N(); const [trashModal, setTrashModal] = useAtom(trashModalAtom); const { pageIds } = trashModal; - const { removeToTrash } = useBlockSuiteMetaHelper(blocksuiteWorkspace); + const { removeToTrash } = useBlockSuiteMetaHelper(docCollection); const handleOnConfirm = useCallback(() => { pageIds.forEach(pageId => { diff --git a/packages/frontend/core/src/hooks/use-affine-adapter.ts b/packages/frontend/core/src/hooks/use-affine-adapter.ts index d69af330c592c..deec59baf0c47 100644 --- a/packages/frontend/core/src/hooks/use-affine-adapter.ts +++ b/packages/frontend/core/src/hooks/use-affine-adapter.ts @@ -20,8 +20,7 @@ const useReactiveAdapter = (adapter: WorkspacePropertiesAdapter) => { } const disposables: (() => void)[] = []; disposables.push( - adapter.workspace.blockSuiteWorkspace.meta.docMetaUpdated.on(observe) - .dispose + adapter.workspace.docCollection.meta.docMetaUpdated.on(observe).dispose ); adapter.properties.observeDeep(observe); disposables.push(() => adapter.properties.unobserveDeep(observe)); diff --git a/packages/frontend/core/src/hooks/use-all-block-suite-page-meta.ts b/packages/frontend/core/src/hooks/use-all-block-suite-page-meta.ts index a775a22552c4a..5282d5baafaf2 100644 --- a/packages/frontend/core/src/hooks/use-all-block-suite-page-meta.ts +++ b/packages/frontend/core/src/hooks/use-all-block-suite-page-meta.ts @@ -1,25 +1,25 @@ -import type { DocMeta, Workspace } from '@blocksuite/store'; +import type { DocCollection, DocMeta } from '@blocksuite/store'; import type { Atom } from 'jotai'; import { atom, useAtomValue } from 'jotai'; -const weakMap = new WeakMap>(); +const weakMap = new WeakMap>(); // this hook is extracted from './use-block-suite-page-meta.ts' to avoid circular dependency export function useAllBlockSuiteDocMeta( - blockSuiteWorkspace: Workspace + docCollection: DocCollection ): DocMeta[] { - if (!weakMap.has(blockSuiteWorkspace)) { - const baseAtom = atom(blockSuiteWorkspace.meta.docMetas); - weakMap.set(blockSuiteWorkspace, baseAtom); + if (!weakMap.has(docCollection)) { + const baseAtom = atom(docCollection.meta.docMetas); + weakMap.set(docCollection, baseAtom); baseAtom.onMount = set => { - set(blockSuiteWorkspace.meta.docMetas); - const dispose = blockSuiteWorkspace.meta.docMetaUpdated.on(() => { - set(blockSuiteWorkspace.meta.docMetas); + set(docCollection.meta.docMetas); + const dispose = docCollection.meta.docMetaUpdated.on(() => { + set(docCollection.meta.docMetas); }); return () => { dispose.dispose(); }; }; } - return useAtomValue(weakMap.get(blockSuiteWorkspace) as Atom); + return useAtomValue(weakMap.get(docCollection) as Atom); } diff --git a/packages/frontend/core/src/hooks/use-block-suite-page-backlinks.ts b/packages/frontend/core/src/hooks/use-block-suite-page-backlinks.ts index 9e2bcda3c6073..13d1d81d9f107 100644 --- a/packages/frontend/core/src/hooks/use-block-suite-page-backlinks.ts +++ b/packages/frontend/core/src/hooks/use-block-suite-page-backlinks.ts @@ -1,11 +1,11 @@ -import type { Doc, Workspace } from '@blocksuite/store'; +import type { Doc, DocCollection } from '@blocksuite/store'; import { type Atom, atom, useAtomValue } from 'jotai'; -import { useBlockSuiteWorkspacePage } from './use-block-suite-workspace-page'; +import { useDocCollectionPage } from './use-block-suite-workspace-page'; const weakMap = new WeakMap>(); function getPageBacklinks(page: Doc): string[] { - return page.workspace.indexer.backlink + return page.collection.indexer.backlink .getBacklink(page.id) .map(linkNode => linkNode.pageId) .filter(id => id !== page.id); @@ -23,7 +23,7 @@ const getPageBacklinksAtom = (page: Doc | null) => { page.slots.ready.on(() => { set(getPageBacklinks(page)); }), - page.workspace.indexer.backlink.slots.indexUpdated.on(() => { + page.collection.indexer.backlink.slots.indexUpdated.on(() => { set(getPageBacklinks(page)); }), ]; @@ -38,9 +38,9 @@ const getPageBacklinksAtom = (page: Doc | null) => { }; export function useBlockSuitePageBacklinks( - blockSuiteWorkspace: Workspace, - pageId: string + docCollection: DocCollection, + docId: string ): string[] { - const page = useBlockSuiteWorkspacePage(blockSuiteWorkspace, pageId); - return useAtomValue(getPageBacklinksAtom(page)); + const doc = useDocCollectionPage(docCollection, docId); + return useAtomValue(getPageBacklinksAtom(doc)); } diff --git a/packages/frontend/core/src/hooks/use-block-suite-page-meta.ts b/packages/frontend/core/src/hooks/use-block-suite-page-meta.ts index df943935f933d..6a4ac6fca8434 100644 --- a/packages/frontend/core/src/hooks/use-block-suite-page-meta.ts +++ b/packages/frontend/core/src/hooks/use-block-suite-page-meta.ts @@ -1,6 +1,6 @@ import type { RootBlockModel } from '@blocksuite/blocks'; import { assertExists } from '@blocksuite/global/utils'; -import type { DocMeta, Workspace } from '@blocksuite/store'; +import type { DocCollection, DocMeta } from '@blocksuite/store'; import { useMemo } from 'react'; import { useAllBlockSuiteDocMeta } from './use-all-block-suite-page-meta'; @@ -11,9 +11,9 @@ import { useJournalHelper } from './use-journal'; * If you want to get all pageMetas, use `useAllBlockSuitePageMeta` instead * @returns */ -export function useBlockSuiteDocMeta(blocksuiteWorkspace: Workspace) { - const pageMetas = useAllBlockSuiteDocMeta(blocksuiteWorkspace); - const { isPageJournal } = useJournalHelper(blocksuiteWorkspace); +export function useBlockSuiteDocMeta(docCollection: DocCollection) { + const pageMetas = useAllBlockSuiteDocMeta(docCollection); + const { isPageJournal } = useJournalHelper(docCollection); return useMemo( () => pageMetas.filter( @@ -23,11 +23,11 @@ export function useBlockSuiteDocMeta(blocksuiteWorkspace: Workspace) { ); } -export function useDocMetaHelper(blockSuiteWorkspace: Workspace) { +export function useDocMetaHelper(docCollection: DocCollection) { return useMemo( () => ({ setDocTitle: (docId: string, newTitle: string) => { - const page = blockSuiteWorkspace.getDoc(docId); + const page = docCollection.getDoc(docId); assertExists(page); const pageBlock = page .getBlockByFlavour('affine:page') @@ -37,20 +37,20 @@ export function useDocMetaHelper(blockSuiteWorkspace: Workspace) { pageBlock.title.delete(0, pageBlock.title.length); pageBlock.title.insert(newTitle, 0); }); - blockSuiteWorkspace.meta.setDocMeta(docId, { title: newTitle }); + docCollection.meta.setDocMeta(docId, { title: newTitle }); }, setDocReadonly: (docId: string, readonly: boolean) => { - const page = blockSuiteWorkspace.getDoc(docId); + const page = docCollection.getDoc(docId); assertExists(page); page.awarenessStore.setReadonly(page, readonly); }, setDocMeta: (docId: string, docMeta: Partial) => { - blockSuiteWorkspace.meta.setDocMeta(docId, docMeta); + docCollection.meta.setDocMeta(docId, docMeta); }, getDocMeta: (docId: string) => { - return blockSuiteWorkspace.meta.getDocMeta(docId); + return docCollection.meta.getDocMeta(docId); }, }), - [blockSuiteWorkspace] + [docCollection] ); } diff --git a/packages/frontend/core/src/hooks/use-block-suite-page-references.ts b/packages/frontend/core/src/hooks/use-block-suite-page-references.ts index f86fd47f60d7f..ea9ab92313db3 100644 --- a/packages/frontend/core/src/hooks/use-block-suite-page-references.ts +++ b/packages/frontend/core/src/hooks/use-block-suite-page-references.ts @@ -1,12 +1,12 @@ -import type { Doc, Workspace } from '@blocksuite/store'; +import type { Doc, DocCollection } from '@blocksuite/store'; import { type Atom, atom, useAtomValue } from 'jotai'; -import { useBlockSuiteWorkspacePage } from './use-block-suite-workspace-page'; +import { useDocCollectionPage } from './use-block-suite-workspace-page'; const weakMap = new WeakMap>(); function getPageReferences(page: Doc): string[] { return Object.values( - page.workspace.indexer.backlink.linkIndexMap[page.id] ?? {} + page.collection.indexer.backlink.linkIndexMap[page.id] ?? {} ).flatMap(linkNodes => linkNodes.map(linkNode => linkNode.pageId)); } @@ -22,7 +22,7 @@ const getPageReferencesAtom = (page: Doc | null) => { page.slots.ready.on(() => { set(getPageReferences(page)); }), - page.workspace.indexer.backlink.slots.indexUpdated.on(() => { + page.collection.indexer.backlink.slots.indexUpdated.on(() => { set(getPageReferences(page)); }), ]; @@ -37,9 +37,9 @@ const getPageReferencesAtom = (page: Doc | null) => { }; export function useBlockSuitePageReferences( - blockSuiteWorkspace: Workspace, + docCollection: DocCollection, pageId: string ): string[] { - const page = useBlockSuiteWorkspacePage(blockSuiteWorkspace, pageId); + const page = useDocCollectionPage(docCollection, pageId); return useAtomValue(getPageReferencesAtom(page)); } diff --git a/packages/frontend/core/src/hooks/use-block-suite-workspace-helper.ts b/packages/frontend/core/src/hooks/use-block-suite-workspace-helper.ts index 17faf3bec4657..a27d08b54c884 100644 --- a/packages/frontend/core/src/hooks/use-block-suite-workspace-helper.ts +++ b/packages/frontend/core/src/hooks/use-block-suite-workspace-helper.ts @@ -1,13 +1,13 @@ -import type { Doc, Workspace } from '@blocksuite/store'; +import type { Doc, DocCollection } from '@blocksuite/store'; import { useMemo } from 'react'; -export function useBlockSuiteWorkspaceHelper(blockSuiteWorkspace: Workspace) { +export function useDocCollectionHelper(docCollection: DocCollection) { return useMemo( () => ({ createDoc: (pageId?: string): Doc => { - return blockSuiteWorkspace.createDoc({ id: pageId }); + return docCollection.createDoc({ id: pageId }); }, }), - [blockSuiteWorkspace] + [docCollection] ); } diff --git a/packages/frontend/core/src/hooks/use-block-suite-workspace-page-title.ts b/packages/frontend/core/src/hooks/use-block-suite-workspace-page-title.ts index c4f6d915ce3d0..d0ba731ecb141 100644 --- a/packages/frontend/core/src/hooks/use-block-suite-workspace-page-title.ts +++ b/packages/frontend/core/src/hooks/use-block-suite-workspace-page-title.ts @@ -1,14 +1,14 @@ import { assertExists } from '@blocksuite/global/utils'; -import type { Workspace } from '@blocksuite/store'; +import type { DocCollection } from '@blocksuite/store'; import type { Atom } from 'jotai'; import { atom, useAtomValue } from 'jotai'; import { useCallback } from 'react'; import { useJournalHelper, useJournalInfoHelper } from './use-journal'; -const weakMap = new WeakMap>>(); +const weakMap = new WeakMap>>(); -function getAtom(w: Workspace, pageId: string): Atom { +function getAtom(w: DocCollection, pageId: string): Atom { if (!weakMap.has(w)) { weakMap.set(w, new Map()); } @@ -32,33 +32,27 @@ function getAtom(w: Workspace, pageId: string): Atom { } } -export function useBlockSuiteWorkspacePageTitle( - blockSuiteWorkspace: Workspace, +export function useDocCollectionPageTitle( + docCollection: DocCollection, pageId: string ) { - const titleAtom = getAtom(blockSuiteWorkspace, pageId); + const titleAtom = getAtom(docCollection, pageId); assertExists(titleAtom); const title = useAtomValue(titleAtom); - const { localizedJournalDate } = useJournalInfoHelper( - blockSuiteWorkspace, - pageId - ); + const { localizedJournalDate } = useJournalInfoHelper(docCollection, pageId); return localizedJournalDate || title; } // This hook is NOT reactive to the page title change -export function useGetBlockSuiteWorkspacePageTitle( - blockSuiteWorkspace: Workspace -) { - const { getLocalizedJournalDateString } = - useJournalHelper(blockSuiteWorkspace); +export function useGetDocCollectionPageTitle(docCollection: DocCollection) { + const { getLocalizedJournalDateString } = useJournalHelper(docCollection); return useCallback( (pageId: string) => { return ( getLocalizedJournalDateString(pageId) || - blockSuiteWorkspace.getDoc(pageId)?.meta?.title + docCollection.getDoc(pageId)?.meta?.title ); }, - [blockSuiteWorkspace, getLocalizedJournalDateString] + [docCollection, getLocalizedJournalDateString] ); } diff --git a/packages/frontend/core/src/hooks/use-block-suite-workspace-page.ts b/packages/frontend/core/src/hooks/use-block-suite-workspace-page.ts index c6f2a4785d65c..618ca0b865e93 100644 --- a/packages/frontend/core/src/hooks/use-block-suite-workspace-page.ts +++ b/packages/frontend/core/src/hooks/use-block-suite-workspace-page.ts @@ -1,26 +1,26 @@ import { DisposableGroup } from '@blocksuite/global/utils'; -import type { Doc, Workspace } from '@blocksuite/store'; +import type { Doc, DocCollection } from '@blocksuite/store'; import { useEffect, useState } from 'react'; -export function useBlockSuiteWorkspacePage( - blockSuiteWorkspace: Workspace, +export function useDocCollectionPage( + docCollection: DocCollection, pageId: string | null ): Doc | null { const [page, setPage] = useState( - pageId ? blockSuiteWorkspace.getDoc(pageId) : null + pageId ? docCollection.getDoc(pageId) : null ); useEffect(() => { const group = new DisposableGroup(); group.add( - blockSuiteWorkspace.slots.docAdded.on(id => { + docCollection.slots.docAdded.on(id => { if (pageId === id) { - setPage(blockSuiteWorkspace.getDoc(id)); + setPage(docCollection.getDoc(id)); } }) ); group.add( - blockSuiteWorkspace.slots.docRemoved.on(id => { + docCollection.slots.docRemoved.on(id => { if (pageId === id) { setPage(null); } @@ -29,7 +29,7 @@ export function useBlockSuiteWorkspacePage( return () => { group.dispose(); }; - }, [blockSuiteWorkspace, pageId]); + }, [docCollection, pageId]); useEffect(() => { if (page && !page.loaded) { diff --git a/packages/frontend/core/src/hooks/use-journal.ts b/packages/frontend/core/src/hooks/use-journal.ts index 695456eac01ee..b63ce1a5a8d56 100644 --- a/packages/frontend/core/src/hooks/use-journal.ts +++ b/packages/frontend/core/src/hooks/use-journal.ts @@ -2,10 +2,10 @@ import { initEmptyPage } from '@toeverything/infra'; import dayjs from 'dayjs'; import { useCallback, useMemo } from 'react'; -import type { BlockSuiteWorkspace } from '../shared'; +import type { DocCollection } from '../shared'; import { timestampToLocalDate } from '../utils'; import { useCurrentWorkspacePropertiesAdapter } from './use-affine-adapter'; -import { useBlockSuiteWorkspaceHelper } from './use-block-suite-workspace-helper'; +import { useDocCollectionHelper } from './use-block-suite-workspace-helper'; import { useNavigateHelper } from './use-navigate-helper'; type MaybeDate = Date | string | number; @@ -22,8 +22,8 @@ function toDayjs(j?: string | false) { return day; } -export const useJournalHelper = (workspace: BlockSuiteWorkspace) => { - const bsWorkspaceHelper = useBlockSuiteWorkspaceHelper(workspace); +export const useJournalHelper = (docCollection: DocCollection) => { + const bsWorkspaceHelper = useDocCollectionHelper(docCollection); const adapter = useCurrentWorkspacePropertiesAdapter(); /** @@ -35,7 +35,7 @@ export const useJournalHelper = (workspace: BlockSuiteWorkspace) => { const title = day.format(JOURNAL_DATE_FORMAT); const page = bsWorkspaceHelper.createDoc(); // set created date to match the journal date - page.workspace.setDocMeta(page.id, { + page.collection.setDocMeta(page.id, { createDate: dayjs() .set('year', day.year()) .set('month', day.month()) @@ -63,7 +63,7 @@ export const useJournalHelper = (workspace: BlockSuiteWorkspace) => { const getJournalsByDate = useCallback( (maybeDate: MaybeDate) => { const day = dayjs(maybeDate); - return Array.from(workspace.docs.values()).filter(page => { + return Array.from(docCollection.docs.values()).filter(page => { const pageId = page.id; if (!isPageJournal(pageId)) return false; if (page.meta?.trash) return false; @@ -72,7 +72,7 @@ export const useJournalHelper = (workspace: BlockSuiteWorkspace) => { return day.isSame(journalDate, 'day'); }); }, - [adapter, isPageJournal, workspace.docs] + [adapter, isPageJournal, docCollection.docs] ); /** @@ -150,18 +150,18 @@ export const useJournalHelper = (workspace: BlockSuiteWorkspace) => { }; // split useJournalRouteHelper since it requires a context, which may not work in lit -export const useJournalRouteHelper = (workspace: BlockSuiteWorkspace) => { +export const useJournalRouteHelper = (docCollection: DocCollection) => { const navigateHelper = useNavigateHelper(); - const { getJournalByDate } = useJournalHelper(workspace); + const { getJournalByDate } = useJournalHelper(docCollection); /** * open journal by date, create one if not exist */ const openJournal = useCallback( (maybeDate: MaybeDate) => { const page = getJournalByDate(maybeDate); - navigateHelper.openPage(workspace.id, page.id); + navigateHelper.openPage(docCollection.id, page.id); }, - [getJournalByDate, navigateHelper, workspace.id] + [getJournalByDate, navigateHelper, docCollection.id] ); /** @@ -182,7 +182,7 @@ export const useJournalRouteHelper = (workspace: BlockSuiteWorkspace) => { }; export const useJournalInfoHelper = ( - workspace: BlockSuiteWorkspace, + docCollection: DocCollection, pageId?: string | null ) => { const { @@ -190,7 +190,7 @@ export const useJournalInfoHelper = ( getJournalDateString, getLocalizedJournalDateString, isPageTodayJournal, - } = useJournalHelper(workspace); + } = useJournalHelper(docCollection); return useMemo( () => ({ diff --git a/packages/frontend/core/src/hooks/use-register-workspace-commands.ts b/packages/frontend/core/src/hooks/use-register-workspace-commands.ts index e29252e3f4a7f..03022575dd09c 100644 --- a/packages/frontend/core/src/hooks/use-register-workspace-commands.ts +++ b/packages/frontend/core/src/hooks/use-register-workspace-commands.ts @@ -24,7 +24,7 @@ export function useRegisterWorkspaceCommands() { const theme = useTheme(); const currentWorkspace = useService(Workspace); const languageHelper = useLanguageHelper(); - const pageHelper = usePageHelper(currentWorkspace.blockSuiteWorkspace); + const pageHelper = usePageHelper(currentWorkspace.docCollection); const navigationHelper = useNavigateHelper(); const [editor] = useActiveBlocksuiteEditor(); @@ -45,14 +45,14 @@ export function useRegisterWorkspaceCommands() { const unsub = registerAffineNavigationCommands({ store, t, - workspace: currentWorkspace.blockSuiteWorkspace, + docCollection: currentWorkspace.docCollection, navigationHelper, }); return () => { unsub(); }; - }, [store, t, currentWorkspace.blockSuiteWorkspace, navigationHelper]); + }, [store, t, currentWorkspace.docCollection, navigationHelper]); // register AffineSettingsCommands useEffect(() => { diff --git a/packages/frontend/core/src/layouts/workspace-layout.tsx b/packages/frontend/core/src/layouts/workspace-layout.tsx index 595c1aa2af533..c6d9e8afa7e7a 100644 --- a/packages/frontend/core/src/layouts/workspace-layout.tsx +++ b/packages/frontend/core/src/layouts/workspace-layout.tsx @@ -94,7 +94,7 @@ export const WorkspaceLayout = function WorkspaceLayout({ export const WorkspaceLayoutInner = ({ children }: PropsWithChildren) => { const currentWorkspace = useService(Workspace); const { openPage } = useNavigateHelper(); - const pageHelper = usePageHelper(currentWorkspace.blockSuiteWorkspace); + const pageHelper = usePageHelper(currentWorkspace.docCollection); useRegisterWorkspaceCommands(); @@ -104,7 +104,7 @@ export const WorkspaceLayoutInner = ({ children }: PropsWithChildren) => { // 0.8.0 ~ 0.8.1 // 0.8.0-beta.0 ~ 0.8.0-beta.3 // 0.8.0-canary.17 ~ 0.9.0-canary.3 - const meta = currentWorkspace.blockSuiteWorkspace.doc.getMap('meta'); + const meta = currentWorkspace.docCollection.doc.getMap('meta'); const blockVersions = meta.get('blockVersions'); if ( !(blockVersions instanceof YMap) && @@ -117,7 +117,7 @@ export const WorkspaceLayoutInner = ({ children }: PropsWithChildren) => { new YMap(Object.entries(blockVersions as Record)) ); } - }, [currentWorkspace.blockSuiteWorkspace.doc]); + }, [currentWorkspace.docCollection.doc]); const handleCreatePage = useCallback(() => { return pageHelper.createPage(); diff --git a/packages/frontend/core/src/modules/collection/service.ts b/packages/frontend/core/src/modules/collection/service.ts index 7f69caa2fc5dd..374aa99732cef 100644 --- a/packages/frontend/core/src/modules/collection/service.ts +++ b/packages/frontend/core/src/modules/collection/service.ts @@ -17,11 +17,11 @@ export class CollectionService { constructor(private readonly workspace: Workspace) {} private get doc() { - return this.workspace.blockSuiteWorkspace.doc; + return this.workspace.docCollection.doc; } private get setting() { - return this.workspace.blockSuiteWorkspace.doc.getMap(SETTING_KEY); + return this.workspace.docCollection.doc.getMap(SETTING_KEY); } private get collectionsYArray(): YArray | undefined { @@ -96,7 +96,7 @@ export class CollectionService { return; } const set = new Set(ids); - this.workspace.blockSuiteWorkspace.doc.transact(() => { + this.workspace.docCollection.doc.transact(() => { const indexList: number[] = []; const list: Collection[] = []; collectionsYArray.forEach((collection, i) => { diff --git a/packages/frontend/core/src/modules/multi-tab-sidebar/entities/tabs/journal.tsx b/packages/frontend/core/src/modules/multi-tab-sidebar/entities/tabs/journal.tsx index 371fd3a2c472f..c32a8292ea937 100644 --- a/packages/frontend/core/src/modules/multi-tab-sidebar/entities/tabs/journal.tsx +++ b/packages/frontend/core/src/modules/multi-tab-sidebar/entities/tabs/journal.tsx @@ -61,7 +61,7 @@ const PageItem = ({ const mode = useLiveData(pageRecord.mode); const workspace = useService(Workspace); const { isJournal } = useJournalInfoHelper( - workspace.blockSuiteWorkspace, + workspace.docCollection, pageRecord.id ); @@ -100,10 +100,10 @@ const EditorJournalPanel = () => { const doc = useService(Doc); const workspace = useService(Workspace); const { journalDate, isJournal } = useJournalInfoHelper( - workspace.blockSuiteWorkspace, + workspace.docCollection, doc.id ); - const { openJournal } = useJournalRouteHelper(workspace.blockSuiteWorkspace); + const { openJournal } = useJournalRouteHelper(workspace.docCollection); const [date, setDate] = useState(dayjs().format('YYYY-MM-DD')); useEffect(() => { @@ -314,7 +314,7 @@ const ConflictList = ({ const navigateHelper = useNavigateHelper(); const workspace = useService(Workspace); const currentDoc = useService(Doc); - const { setTrashModal } = useTrashModalHelper(workspace.blockSuiteWorkspace); + const { setTrashModal } = useTrashModalHelper(workspace.docCollection); const handleOpenTrashModal = useCallback( (pageRecord: PageRecord) => { @@ -361,7 +361,7 @@ const JournalConflictBlock = ({ date }: JournalBlockProps) => { const t = useAFFiNEI18N(); const workspace = useService(Workspace); const pageRecordList = useService(PageRecordList); - const journalHelper = useJournalHelper(workspace.blockSuiteWorkspace); + const journalHelper = useJournalHelper(workspace.docCollection); const docs = journalHelper.getJournalsByDate(date.format('YYYY-MM-DD')); const pageRecords = useLiveData(pageRecordList.records).filter(v => { return docs.some(doc => doc.id === v.id); diff --git a/packages/frontend/core/src/modules/multi-tab-sidebar/view/header-switcher.tsx b/packages/frontend/core/src/modules/multi-tab-sidebar/view/header-switcher.tsx index cb6a4eed6c144..90bfabbecf584 100644 --- a/packages/frontend/core/src/modules/multi-tab-sidebar/view/header-switcher.tsx +++ b/packages/frontend/core/src/modules/multi-tab-sidebar/view/header-switcher.tsx @@ -28,10 +28,7 @@ export const MultiTabSidebarHeaderSwitcher = ({ FeatureType.Copilot ); - const { isJournal } = useJournalInfoHelper( - workspace.blockSuiteWorkspace, - doc.id - ); + const { isJournal } = useJournalInfoHelper(workspace.docCollection, doc.id); const exts = useMemo( () => diff --git a/packages/frontend/core/src/modules/workspace/properties/adapter.ts b/packages/frontend/core/src/modules/workspace/properties/adapter.ts index 5d038663e6e62..53524870fd16b 100644 --- a/packages/frontend/core/src/modules/workspace/properties/adapter.ts +++ b/packages/frontend/core/src/modules/workspace/properties/adapter.ts @@ -30,7 +30,7 @@ export class WorkspacePropertiesAdapter { constructor(public readonly workspace: Workspace) { // check if properties exists, if not, create one - const rootDoc = workspace.blockSuiteWorkspace.doc; + const rootDoc = workspace.docCollection.doc; this.properties = rootDoc.getMap(AFFINE_PROPERTIES_ID); this.proxy = createYProxy(this.properties); @@ -58,8 +58,8 @@ export class WorkspacePropertiesAdapter { source: 'system', type: PagePropertyType.Tags, options: - this.workspace.blockSuiteWorkspace.meta.properties.tags - ?.options ?? [], // better use a one time migration + this.workspace.docCollection.meta.properties.tags?.options ?? + [], // better use a one time migration }, }, }, @@ -89,8 +89,8 @@ export class WorkspacePropertiesAdapter { } // leak some yjs abstraction to modify multiple properties at once - transact = this.workspace.blockSuiteWorkspace.doc.transact.bind( - this.workspace.blockSuiteWorkspace.doc + transact = this.workspace.docCollection.doc.transact.bind( + this.workspace.docCollection.doc ); get schema() { diff --git a/packages/frontend/core/src/modules/workspace/properties/legacy-properties.ts b/packages/frontend/core/src/modules/workspace/properties/legacy-properties.ts index 58b2a541f3e4d..4c0a4f502ad1b 100644 --- a/packages/frontend/core/src/modules/workspace/properties/legacy-properties.ts +++ b/packages/frontend/core/src/modules/workspace/properties/legacy-properties.ts @@ -14,19 +14,18 @@ export class WorkspaceLegacyProperties { } get properties() { - return this.workspace.blockSuiteWorkspace.meta.properties; + return this.workspace.docCollection.meta.properties; } get tagOptions() { return this.properties.tags?.options ?? []; } updateProperties = (properties: DocsPropertiesMeta) => { - this.workspace.blockSuiteWorkspace.meta.setProperties(properties); + this.workspace.docCollection.meta.setProperties(properties); }; subscribe(cb: () => void) { - const disposable = - this.workspace.blockSuiteWorkspace.meta.docMetaUpdated.on(cb); + const disposable = this.workspace.docCollection.meta.docMetaUpdated.on(cb); return disposable.dispose; } @@ -58,10 +57,10 @@ export class WorkspaceLegacyProperties { }; removeTagOption = (id: string) => { - this.workspace.blockSuiteWorkspace.doc.transact(() => { + this.workspace.docCollection.doc.transact(() => { this.updateTagOptions(this.tagOptions.filter(o => o.id !== id)); // need to remove tag from all pages - this.workspace.blockSuiteWorkspace.docs.forEach(doc => { + this.workspace.docCollection.docs.forEach(doc => { const tags = doc.meta?.tags ?? []; if (tags.includes(id)) { this.updatePageTags( @@ -74,7 +73,7 @@ export class WorkspaceLegacyProperties { }; updatePageTags = (pageId: string, tags: string[]) => { - this.workspace.blockSuiteWorkspace.setDocMeta(pageId, { + this.workspace.docCollection.setDocMeta(pageId, { tags, }); }; diff --git a/packages/frontend/core/src/pages/share/share-detail-page.tsx b/packages/frontend/core/src/pages/share/share-detail-page.tsx index 9e12f901c196e..d9ff66a497458 100644 --- a/packages/frontend/core/src/pages/share/share-detail-page.tsx +++ b/packages/frontend/core/src/pages/share/share-detail-page.tsx @@ -162,7 +162,7 @@ export const Component = () => { .then(() => { const { page } = workspace.services.get(PageManager).open(pageId); - workspace.blockSuiteWorkspace.awarenessStore.setReadonly( + workspace.docCollection.awarenessStore.setReadonly( page.blockSuiteDoc, true ); @@ -200,14 +200,14 @@ export const Component = () => { noop} /> diff --git a/packages/frontend/core/src/pages/share/share-header.tsx b/packages/frontend/core/src/pages/share/share-header.tsx index 3d25cd052ea10..1e6e8069b2b23 100644 --- a/packages/frontend/core/src/pages/share/share-header.tsx +++ b/packages/frontend/core/src/pages/share/share-header.tsx @@ -1,6 +1,6 @@ import { EditorModeSwitch } from '@affine/core/components/blocksuite/block-suite-mode-switch'; import ShareHeaderRightItem from '@affine/core/components/cloud/share-header-right-item'; -import type { Workspace as BlockSuiteWorkspace } from '@blocksuite/store'; +import type { DocCollection } from '@blocksuite/store'; import type { PageMode } from '@toeverything/infra'; import { BlocksuiteHeaderTitle } from '../../components/blocksuite/block-suite-header/title/index'; @@ -9,28 +9,28 @@ import * as styles from './share-header.css'; export function ShareHeader({ pageId, publishMode, - blockSuiteWorkspace, + docCollection, }: { pageId: string; publishMode: PageMode; - blockSuiteWorkspace: BlockSuiteWorkspace; + docCollection: DocCollection; }) { return (
diff --git a/packages/frontend/core/src/pages/workspace/all-page/all-page-filter.tsx b/packages/frontend/core/src/pages/workspace/all-page/all-page-filter.tsx index edee0669800ca..86b7b66f5755b 100644 --- a/packages/frontend/core/src/pages/workspace/all-page/all-page-filter.tsx +++ b/packages/frontend/core/src/pages/workspace/all-page/all-page-filter.tsx @@ -40,7 +40,7 @@ export const FilterContainer = ({
diff --git a/packages/frontend/core/src/pages/workspace/all-page/all-page-header.tsx b/packages/frontend/core/src/pages/workspace/all-page/all-page-header.tsx index 634ce352181db..32220d6a0c003 100644 --- a/packages/frontend/core/src/pages/workspace/all-page/all-page-header.tsx +++ b/packages/frontend/core/src/pages/workspace/all-page/all-page-header.tsx @@ -29,7 +29,7 @@ export const AllPageHeader = ({ } right={ diff --git a/packages/frontend/core/src/pages/workspace/all-page/all-page.tsx b/packages/frontend/core/src/pages/workspace/all-page/all-page.tsx index bac7c2a4158c3..847a82eee0471 100644 --- a/packages/frontend/core/src/pages/workspace/all-page/all-page.tsx +++ b/packages/frontend/core/src/pages/workspace/all-page/all-page.tsx @@ -19,7 +19,7 @@ import { AllPageHeader } from './all-page-header'; export const AllPage = () => { const currentWorkspace = useService(Workspace); - const pageMetas = useBlockSuiteDocMeta(currentWorkspace.blockSuiteWorkspace); + const pageMetas = useBlockSuiteDocMeta(currentWorkspace.docCollection); const [hideHeaderCreateNew, setHideHeaderCreateNew] = useState(true); const [filters, setFilters] = useState([]); @@ -48,7 +48,7 @@ export const AllPage = () => { } - blockSuiteWorkspace={currentWorkspace.blockSuiteWorkspace} + docCollection={currentWorkspace.docCollection} /> )}
@@ -65,10 +65,10 @@ export const Component = () => { useEffect(() => { function checkJumpOnce() { - for (const [pageId] of currentWorkspace.blockSuiteWorkspace.docs) { - const page = currentWorkspace.blockSuiteWorkspace.getDoc(pageId); + for (const [pageId] of currentWorkspace.docCollection.docs) { + const page = currentWorkspace.docCollection.getDoc(pageId); if (page && page.meta?.jumpOnce) { - currentWorkspace.blockSuiteWorkspace.meta.setDocMeta(page.id, { + currentWorkspace.docCollection.meta.setDocMeta(page.id, { jumpOnce: false, }); navigateHelper.jumpToPage(currentWorkspace.id, pageId); @@ -76,14 +76,9 @@ export const Component = () => { } } checkJumpOnce(); - return currentWorkspace.blockSuiteWorkspace.slots.docUpdated.on( - checkJumpOnce - ).dispose; - }, [ - currentWorkspace.blockSuiteWorkspace, - currentWorkspace.id, - navigateHelper, - ]); + return currentWorkspace.docCollection.slots.docUpdated.on(checkJumpOnce) + .dispose; + }, [currentWorkspace.docCollection, currentWorkspace.id, navigateHelper]); return ; }; diff --git a/packages/frontend/core/src/pages/workspace/all-tag/index.tsx b/packages/frontend/core/src/pages/workspace/all-tag/index.tsx index 57e52c3b25aaf..0f202086cbd87 100644 --- a/packages/frontend/core/src/pages/workspace/all-tag/index.tsx +++ b/packages/frontend/core/src/pages/workspace/all-tag/index.tsx @@ -33,7 +33,7 @@ const EmptyTagListHeader = () => { export const AllTag = () => { const currentWorkspace = useService(Workspace); - const pageMetas = useBlockSuiteDocMeta(currentWorkspace.blockSuiteWorkspace); + const pageMetas = useBlockSuiteDocMeta(currentWorkspace.docCollection); const { tags, tagMetas, deleteTags } = useTagMetas(pageMetas); diff --git a/packages/frontend/core/src/pages/workspace/collection/index.tsx b/packages/frontend/core/src/pages/workspace/collection/index.tsx index 3d74cc28fdefa..7bcdc79c6a323 100644 --- a/packages/frontend/core/src/pages/workspace/collection/index.tsx +++ b/packages/frontend/core/src/pages/workspace/collection/index.tsx @@ -98,7 +98,7 @@ export const Component = function CollectionPage() { navigate, params.collectionId, pushNotification, - workspace.blockSuiteWorkspace, + workspace.docCollection, workspace.id, ]); if (!collection) { diff --git a/packages/frontend/core/src/pages/workspace/detail-page/detail-page-header.tsx b/packages/frontend/core/src/pages/workspace/detail-page/detail-page-header.tsx index 8225373065b5a..3132ec94e2b49 100644 --- a/packages/frontend/core/src/pages/workspace/detail-page/detail-page-header.tsx +++ b/packages/frontend/core/src/pages/workspace/detail-page/detail-page-header.tsx @@ -46,16 +46,16 @@ export function JournalPageHeader({ page, workspace }: PageHeaderProps) { return (
- + {page ? ( @@ -74,13 +74,13 @@ export function NormalPageHeader({ page, workspace }: PageHeaderProps) { return (
@@ -92,7 +92,7 @@ export function NormalPageHeader({ page, workspace }: PageHeaderProps) { export function DetailPageHeader(props: PageHeaderProps) { const { page } = props; - const { isJournal } = useJournalInfoHelper(page.workspace, page.id); + const { isJournal } = useJournalInfoHelper(page.collection, page.id); const isInTrash = page.meta?.trash; return isJournal && !isInTrash ? ( diff --git a/packages/frontend/core/src/pages/workspace/detail-page/detail-page.tsx b/packages/frontend/core/src/pages/workspace/detail-page/detail-page.tsx index d696209f95b2d..020369f489245 100644 --- a/packages/frontend/core/src/pages/workspace/detail-page/detail-page.tsx +++ b/packages/frontend/core/src/pages/workspace/detail-page/detail-page.tsx @@ -72,7 +72,7 @@ const DetailPageImpl = memo(function DetailPageImpl() { const { openPage, jumpToTag } = useNavigateHelper(); const [editor, setEditor] = useState(null); const currentWorkspace = useService(Workspace); - const blockSuiteWorkspace = currentWorkspace.blockSuiteWorkspace; + const docCollection = currentWorkspace.docCollection; const isActiveView = useIsActiveView(); // TODO: remove jotai here @@ -88,7 +88,7 @@ const DetailPageImpl = memo(function DetailPageImpl() { null ); - const pageMeta = useBlockSuiteDocMeta(blockSuiteWorkspace).find( + const pageMeta = useBlockSuiteDocMeta(docCollection).find( meta => meta.id === page.id ); @@ -156,7 +156,7 @@ const DetailPageImpl = memo(function DetailPageImpl() { // fixme: it seems pageLinkClicked is not triggered sometimes? disposable.add( pageService.slots.docLinkClicked.on(({ docId }) => { - return openPage(blockSuiteWorkspace.id, docId); + return openPage(docCollection.id, docId); }) ); disposable.add( @@ -177,7 +177,7 @@ const DetailPageImpl = memo(function DetailPageImpl() { }; }, [ - blockSuiteWorkspace.id, + docCollection.id, currentWorkspace.id, jumpToTag, mode, @@ -213,7 +213,7 @@ const DetailPageImpl = memo(function DetailPageImpl() { @@ -254,10 +254,7 @@ const DetailPageImpl = memo(function DetailPageImpl() { } /> - + ); diff --git a/packages/frontend/core/src/pages/workspace/page-list-empty.tsx b/packages/frontend/core/src/pages/workspace/page-list-empty.tsx index 8dcb1a8b7ef3e..d80fd861b4163 100644 --- a/packages/frontend/core/src/pages/workspace/page-list-empty.tsx +++ b/packages/frontend/core/src/pages/workspace/page-list-empty.tsx @@ -1,7 +1,7 @@ import { Empty } from '@affine/component'; import { Trans } from '@affine/i18n'; import { useAFFiNEI18N } from '@affine/i18n/hooks'; -import type { Workspace } from '@blocksuite/store'; +import type { DocCollection } from '@blocksuite/store'; import { type ReactNode, useCallback } from 'react'; import { usePageHelper } from '../../components/blocksuite/block-suite-page-list/utils'; @@ -9,14 +9,14 @@ import * as styles from './page-list-empty.css'; export const EmptyPageList = ({ type, - blockSuiteWorkspace, + docCollection, heading, }: { type: 'all' | 'trash' | 'shared' | 'public'; - blockSuiteWorkspace: Workspace; + docCollection: DocCollection; heading?: ReactNode; }) => { - const { createPage } = usePageHelper(blockSuiteWorkspace); + const { createPage } = usePageHelper(docCollection); const t = useAFFiNEI18N(); const onCreatePage = useCallback(() => { createPage?.(); diff --git a/packages/frontend/core/src/pages/workspace/tag/index.tsx b/packages/frontend/core/src/pages/workspace/tag/index.tsx index df5c3b725ce3c..de902a9e37ba0 100644 --- a/packages/frontend/core/src/pages/workspace/tag/index.tsx +++ b/packages/frontend/core/src/pages/workspace/tag/index.tsx @@ -20,7 +20,7 @@ import * as styles from './index.css'; export const TagDetail = ({ tagId }: { tagId?: string }) => { const currentWorkspace = useService(Workspace); - const pageMetas = useBlockSuiteDocMeta(currentWorkspace.blockSuiteWorkspace); + const pageMetas = useBlockSuiteDocMeta(currentWorkspace.docCollection); const { tags, filterPageMetaByTag } = useTagMetas(pageMetas); const tagPageMetas = useMemo(() => { @@ -57,7 +57,7 @@ export const TagDetail = ({ tagId }: { tagId?: string }) => { workspaceId={currentWorkspace.id} /> } - blockSuiteWorkspace={currentWorkspace.blockSuiteWorkspace} + docCollection={currentWorkspace.docCollection} /> )}
diff --git a/packages/frontend/core/src/pages/workspace/trash-page.tsx b/packages/frontend/core/src/pages/workspace/trash-page.tsx index 36797baf766e5..651ad24d729ed 100644 --- a/packages/frontend/core/src/pages/workspace/trash-page.tsx +++ b/packages/frontend/core/src/pages/workspace/trash-page.tsx @@ -49,17 +49,17 @@ const TrashHeader = () => { export const TrashPage = () => { const currentWorkspace = useService(Workspace); - const blockSuiteWorkspace = currentWorkspace.blockSuiteWorkspace; - assertExists(blockSuiteWorkspace); + const docCollection = currentWorkspace.docCollection; + assertExists(docCollection); - const pageMetas = useBlockSuiteDocMeta(blockSuiteWorkspace); + const pageMetas = useBlockSuiteDocMeta(docCollection); const filteredPageMetas = useFilteredPageMetas(currentWorkspace, pageMetas, { trash: true, }); const { restoreFromTrash, permanentlyDeletePage } = - useBlockSuiteMetaHelper(blockSuiteWorkspace); - const { isPreferredEdgeless } = usePageHelper(blockSuiteWorkspace); + useBlockSuiteMetaHelper(docCollection); + const { isPreferredEdgeless } = usePageHelper(docCollection); const t = useAFFiNEI18N(); const pageOperationsRenderer = useCallback( @@ -107,7 +107,7 @@ export const TrashPage = () => { rowAsLink groupBy={false} isPreferredEdgeless={isPreferredEdgeless} - blockSuiteWorkspace={currentWorkspace.blockSuiteWorkspace} + docCollection={currentWorkspace.docCollection} operationsRenderer={pageOperationsRenderer} itemRenderer={pageItemRenderer} headerRenderer={pageHeaderRenderer} @@ -115,7 +115,7 @@ export const TrashPage = () => { ) : ( )}
diff --git a/packages/frontend/core/src/shared/index.ts b/packages/frontend/core/src/shared/index.ts index 98f956e2aeaf4..0f3592e55579b 100644 --- a/packages/frontend/core/src/shared/index.ts +++ b/packages/frontend/core/src/shared/index.ts @@ -1,7 +1,7 @@ import { DebugLogger } from '@affine/debug'; -import { Workspace as BlockSuiteWorkspace } from '@blocksuite/store'; +import { DocCollection } from '@blocksuite/store'; -export { BlockSuiteWorkspace }; +export { DocCollection }; export enum WorkspaceSubPath { ALL = 'all', diff --git a/packages/frontend/core/src/utils/user-setting.ts b/packages/frontend/core/src/utils/user-setting.ts index 3a668b645970e..cb1438bc46514 100644 --- a/packages/frontend/core/src/utils/user-setting.ts +++ b/packages/frontend/core/src/utils/user-setting.ts @@ -1,16 +1,16 @@ import type { Collection } from '@affine/env/filter'; -import type { Workspace } from '@blocksuite/store'; +import type { DocCollection } from '@blocksuite/store'; import { nanoid } from 'nanoid'; import type { Map as YMap } from 'yjs'; import { Doc as YDoc } from 'yjs'; export class UserSetting { constructor( - private readonly workspace: Workspace, + private readonly docCollection: DocCollection, private readonly userId: string ) {} get setting(): YDoc { - const rootDoc = this.workspace.doc; + const rootDoc = this.docCollection.doc; const settingMap = rootDoc.getMap('settings') as YMap; if (!settingMap.has(this.userId)) { settingMap.set( @@ -38,6 +38,9 @@ export class UserSetting { } } -export const getUserSetting = (workspace: Workspace, userId: string) => { - return new UserSetting(workspace, userId); +export const getUserSetting = ( + docCollection: DocCollection, + userId: string +) => { + return new UserSetting(docCollection, userId); }; diff --git a/packages/frontend/electron/package.json b/packages/frontend/electron/package.json index 614fb45f0bbc5..9be966dc32c6f 100644 --- a/packages/frontend/electron/package.json +++ b/packages/frontend/electron/package.json @@ -25,10 +25,10 @@ "@affine-test/kit": "workspace:*", "@affine/env": "workspace:*", "@affine/native": "workspace:*", - "@blocksuite/blocks": "0.13.0-canary-202403050653-934469c", - "@blocksuite/lit": "0.13.0-canary-202403050653-934469c", - "@blocksuite/presets": "0.13.0-canary-202403050653-934469c", - "@blocksuite/store": "0.13.0-canary-202403050653-934469c", + "@blocksuite/blocks": "0.13.0-canary-202403120738-e15d583", + "@blocksuite/lit": "0.13.0-canary-202403120738-e15d583", + "@blocksuite/presets": "0.13.0-canary-202403120738-e15d583", + "@blocksuite/store": "0.13.0-canary-202403120738-e15d583", "@electron-forge/cli": "^7.3.0", "@electron-forge/core": "^7.3.0", "@electron-forge/core-utils": "^7.3.0", diff --git a/packages/frontend/workspace-impl/src/cloud/list.ts b/packages/frontend/workspace-impl/src/cloud/list.ts index 6c54e9bdf2221..e0713b58932c5 100644 --- a/packages/frontend/workspace-impl/src/cloud/list.ts +++ b/packages/frontend/workspace-impl/src/cloud/list.ts @@ -6,7 +6,7 @@ import { getWorkspacesQuery, } from '@affine/graphql'; import { fetcher } from '@affine/graphql'; -import { Workspace as BlockSuiteWorkspace } from '@blocksuite/store'; +import { DocCollection } from '@blocksuite/store'; import type { WorkspaceListProvider } from '@toeverything/infra'; import { type BlobStorage, @@ -71,13 +71,13 @@ export class CloudWorkspaceListProvider implements WorkspaceListProvider { } async create( initial: ( - workspace: BlockSuiteWorkspace, + docCollection: DocCollection, blobStorage: BlobStorage ) => Promise ): Promise { const tempId = nanoid(); - const workspace = new BlockSuiteWorkspace({ + const docCollection = new DocCollection({ id: tempId, idGenerator: () => nanoid(), schema: globalBlockSuiteSchema, @@ -99,11 +99,11 @@ export class CloudWorkspaceListProvider implements WorkspaceListProvider { : new IndexedDBSyncStorage(workspaceId); // apply initial state - await initial(workspace, blobStorage); + await initial(docCollection, blobStorage); // save workspace to local storage, should be vary fast - await syncStorage.push(workspaceId, encodeStateAsUpdate(workspace.doc)); - for (const subdocs of workspace.doc.getSubdocs()) { + await syncStorage.push(workspaceId, encodeStateAsUpdate(docCollection.doc)); + for (const subdocs of docCollection.doc.getSubdocs()) { await syncStorage.push(subdocs.guid, encodeStateAsUpdate(subdocs)); } @@ -167,7 +167,7 @@ export class CloudWorkspaceListProvider implements WorkspaceListProvider { return; } - const bs = new BlockSuiteWorkspace({ + const bs = new DocCollection({ id, schema: globalBlockSuiteSchema, }); diff --git a/packages/frontend/workspace-impl/src/local/__tests__/engine.spec.ts b/packages/frontend/workspace-impl/src/local/__tests__/engine.spec.ts index cee10dd5d3bdd..a5f3f87ba6caa 100644 --- a/packages/frontend/workspace-impl/src/local/__tests__/engine.spec.ts +++ b/packages/frontend/workspace-impl/src/local/__tests__/engine.spec.ts @@ -1,7 +1,7 @@ import 'fake-indexeddb/auto'; import { AffineSchemas } from '@blocksuite/blocks/schemas'; -import { Schema, Workspace } from '@blocksuite/store'; +import { DocCollection, Schema } from '@blocksuite/store'; import { SyncEngine, SyncEngineStep, SyncPeerStep } from '@toeverything/infra'; import { beforeEach, describe, expect, test, vi } from 'vitest'; import { Doc } from 'yjs'; @@ -21,23 +21,23 @@ describe('SyncEngine', () => { test('basic - indexeddb', async () => { let prev: any; { - const workspace = new Workspace({ + const docCollection = new DocCollection({ id: 'test - syncengine - indexeddb', schema, }); const syncEngine = new SyncEngine( - workspace.doc, - new IndexedDBSyncStorage(workspace.doc.guid), + docCollection.doc, + new IndexedDBSyncStorage(docCollection.doc.guid), [ - new IndexedDBSyncStorage(workspace.doc.guid + '1'), - new IndexedDBSyncStorage(workspace.doc.guid + '2'), + new IndexedDBSyncStorage(docCollection.doc.guid + '1'), + new IndexedDBSyncStorage(docCollection.doc.guid + '2'), ] ); syncEngine.start(); - const page = workspace.createDoc({ + const page = docCollection.createDoc({ id: 'page0', }); page.load(); @@ -64,61 +64,61 @@ describe('SyncEngine', () => { ); await syncEngine.waitForSynced(); syncEngine.forceStop(); - prev = workspace.doc.toJSON(); + prev = docCollection.doc.toJSON(); } { - const workspace = new Workspace({ + const docCollection = new DocCollection({ id: 'test - syncengine - indexeddb', schema, }); const syncEngine = new SyncEngine( - workspace.doc, - new IndexedDBSyncStorage(workspace.doc.guid), + docCollection.doc, + new IndexedDBSyncStorage(docCollection.doc.guid), [] ); syncEngine.start(); await syncEngine.waitForSynced(); - expect(workspace.doc.toJSON()).toEqual({ + expect(docCollection.doc.toJSON()).toEqual({ ...prev, }); syncEngine.forceStop(); } { - const workspace = new Workspace({ + const docCollection = new DocCollection({ id: 'test - syncengine - indexeddb', schema, }); const syncEngine = new SyncEngine( - workspace.doc, - new IndexedDBSyncStorage(workspace.doc.guid + '1'), + docCollection.doc, + new IndexedDBSyncStorage(docCollection.doc.guid + '1'), [] ); syncEngine.start(); await syncEngine.waitForSynced(); - expect(workspace.doc.toJSON()).toEqual({ + expect(docCollection.doc.toJSON()).toEqual({ ...prev, }); syncEngine.forceStop(); } { - const workspace = new Workspace({ + const docCollection = new DocCollection({ id: 'test - syncengine - indexeddb', schema, }); const syncEngine = new SyncEngine( - workspace.doc, - new IndexedDBSyncStorage(workspace.doc.guid + '2'), + docCollection.doc, + new IndexedDBSyncStorage(docCollection.doc.guid + '2'), [] ); syncEngine.start(); await syncEngine.waitForSynced(); - expect(workspace.doc.toJSON()).toEqual({ + expect(docCollection.doc.toJSON()).toEqual({ ...prev, }); syncEngine.forceStop(); diff --git a/packages/frontend/workspace-impl/src/local/__tests__/peer.spec.ts b/packages/frontend/workspace-impl/src/local/__tests__/peer.spec.ts index e18124b4bb401..1d2ecce04aaf5 100644 --- a/packages/frontend/workspace-impl/src/local/__tests__/peer.spec.ts +++ b/packages/frontend/workspace-impl/src/local/__tests__/peer.spec.ts @@ -1,7 +1,7 @@ import 'fake-indexeddb/auto'; import { AffineSchemas } from '@blocksuite/blocks/schemas'; -import { Schema, Workspace } from '@blocksuite/store'; +import { DocCollection, Schema } from '@blocksuite/store'; import { SyncPeer, SyncPeerStep } from '@toeverything/infra'; import { beforeEach, describe, expect, test, vi } from 'vitest'; @@ -19,19 +19,19 @@ describe('SyncPeer', () => { test('basic - indexeddb', async () => { let prev: any; { - const workspace = new Workspace({ + const docCollection = new DocCollection({ id: 'test - syncpeer - indexeddb', schema, }); const syncPeer = new SyncPeer( - workspace.doc, - new IndexedDBSyncStorage(workspace.doc.guid) + docCollection.doc, + new IndexedDBSyncStorage(docCollection.doc.guid) ); await syncPeer.waitForLoaded(); - const page = workspace.createDoc({ + const page = docCollection.createDoc({ id: 'page0', }); page.load(); @@ -58,21 +58,21 @@ describe('SyncPeer', () => { ); await syncPeer.waitForSynced(); syncPeer.stop(); - prev = workspace.doc.toJSON(); + prev = docCollection.doc.toJSON(); } { - const workspace = new Workspace({ + const docCollection = new DocCollection({ id: 'test - syncpeer - indexeddb', schema, }); const syncPeer = new SyncPeer( - workspace.doc, - new IndexedDBSyncStorage(workspace.doc.guid) + docCollection.doc, + new IndexedDBSyncStorage(docCollection.doc.guid) ); await syncPeer.waitForSynced(); - expect(workspace.doc.toJSON()).toEqual({ + expect(docCollection.doc.toJSON()).toEqual({ ...prev, }); syncPeer.stop(); @@ -80,21 +80,21 @@ describe('SyncPeer', () => { }); test('status', async () => { - const workspace = new Workspace({ + const docCollection = new DocCollection({ id: 'test - syncpeer - status', schema, }); const syncPeer = new SyncPeer( - workspace.doc, - new IndexedDBSyncStorage(workspace.doc.guid) + docCollection.doc, + new IndexedDBSyncStorage(docCollection.doc.guid) ); expect(syncPeer.status.step).toBe(SyncPeerStep.LoadingRootDoc); await syncPeer.waitForSynced(); expect(syncPeer.status.step).toBe(SyncPeerStep.Synced); - const page = workspace.createDoc({ + const page = docCollection.createDoc({ id: 'page0', }); expect(syncPeer.status.step).toBe(SyncPeerStep.LoadingSubDoc); diff --git a/packages/frontend/workspace-impl/src/local/list.ts b/packages/frontend/workspace-impl/src/local/list.ts index ea616586d64e2..faf26a52155be 100644 --- a/packages/frontend/workspace-impl/src/local/list.ts +++ b/packages/frontend/workspace-impl/src/local/list.ts @@ -1,6 +1,6 @@ import { apis } from '@affine/electron-api'; import { WorkspaceFlavour } from '@affine/env/workspace'; -import { Workspace as BlockSuiteWorkspace } from '@blocksuite/store'; +import { DocCollection } from '@blocksuite/store'; import type { WorkspaceListProvider } from '@toeverything/infra'; import { type BlobStorage, @@ -53,7 +53,7 @@ export class LocalWorkspaceListProvider implements WorkspaceListProvider { async create( initial: ( - workspace: BlockSuiteWorkspace, + docCollection: DocCollection, blobStorage: BlobStorage ) => Promise ): Promise { @@ -66,7 +66,7 @@ export class LocalWorkspaceListProvider implements WorkspaceListProvider { ? new SQLiteSyncStorage(id) : new IndexedDBSyncStorage(id); - const workspace = new BlockSuiteWorkspace({ + const workspace = new DocCollection({ id: id, idGenerator: () => nanoid(), schema: globalBlockSuiteSchema, @@ -136,7 +136,7 @@ export class LocalWorkspaceListProvider implements WorkspaceListProvider { return; } - const bs = new BlockSuiteWorkspace({ + const bs = new DocCollection({ id, schema: globalBlockSuiteSchema, }); diff --git a/tests/affine-cloud/e2e/page-history.spec.ts b/tests/affine-cloud/e2e/page-history.spec.ts index 14ed1a7734574..71d0ec31e60d9 100644 --- a/tests/affine-cloud/e2e/page-history.spec.ts +++ b/tests/affine-cloud/e2e/page-history.spec.ts @@ -57,7 +57,7 @@ test('newly created page shows empty history', async ({ page }) => { const pushCurrentPageUpdates = async (page: Page) => { const [workspaceId, guid, updates, state] = await page.evaluate(() => { // @ts-expect-error - const Y = window.currentWorkspace.blockSuiteWorkspace.constructor.Y; + const Y = window.currentWorkspace.docCollection.constructor.Y; // @ts-expect-error const spaceDoc = window.currentEditor.page.spaceDoc; // @ts-expect-error diff --git a/tests/kit/playwright.ts b/tests/kit/playwright.ts index 6279afbff1531..c36a3863c9f02 100644 --- a/tests/kit/playwright.ts +++ b/tests/kit/playwright.ts @@ -4,7 +4,7 @@ import fs from 'node:fs'; import path, { resolve } from 'node:path'; import process from 'node:process'; -import type { Workspace } from '@blocksuite/store'; +import type { DocCollection } from '@blocksuite/store'; import { type BrowserContext, test as baseTest } from '@playwright/test'; export const rootDir = resolve(__dirname, '..', '..'); @@ -27,9 +27,9 @@ function generateUUID() { export const enableCoverage = !!process.env.CI || !!process.env.COVERAGE; -type CurrentWorkspace = { +type CurrentDocCollection = { meta: { id: string; flavour: string }; - blockSuiteWorkspace: Workspace; + docCollection: DocCollection; }; export const skipOnboarding = async (context: BrowserContext) => { @@ -43,7 +43,7 @@ export const skipOnboarding = async (context: BrowserContext) => { export const test = baseTest.extend<{ workspace: { - current: () => Promise; + current: () => Promise; }; }>({ workspace: async ({ page }, use) => { diff --git a/tests/storybook/package.json b/tests/storybook/package.json index 04ee89b7faabd..5b05a1d3684fd 100644 --- a/tests/storybook/package.json +++ b/tests/storybook/package.json @@ -22,14 +22,14 @@ "storybook-addon-react-router-v6": "^2.0.10" }, "devDependencies": { - "@blocksuite/block-std": "0.13.0-canary-202403050653-934469c", - "@blocksuite/blocks": "0.13.0-canary-202403050653-934469c", - "@blocksuite/global": "0.13.0-canary-202403050653-934469c", + "@blocksuite/block-std": "0.13.0-canary-202403120738-e15d583", + "@blocksuite/blocks": "0.13.0-canary-202403120738-e15d583", + "@blocksuite/global": "0.13.0-canary-202403120738-e15d583", "@blocksuite/icons": "2.1.45", - "@blocksuite/inline": "0.13.0-canary-202403050653-934469c", - "@blocksuite/lit": "0.13.0-canary-202403050653-934469c", - "@blocksuite/presets": "0.13.0-canary-202403050653-934469c", - "@blocksuite/store": "0.13.0-canary-202403050653-934469c", + "@blocksuite/inline": "0.13.0-canary-202403120738-e15d583", + "@blocksuite/lit": "0.13.0-canary-202403120738-e15d583", + "@blocksuite/presets": "0.13.0-canary-202403120738-e15d583", + "@blocksuite/store": "0.13.0-canary-202403120738-e15d583", "@storybook/addon-actions": "^7.6.17", "@storybook/addon-essentials": "^7.6.17", "@storybook/addon-interactions": "^7.6.17", diff --git a/tests/storybook/src/stories/blocksuite-editor.stories.tsx b/tests/storybook/src/stories/blocksuite-editor.stories.tsx index b21017eeba0c9..39c62f435a7c4 100644 --- a/tests/storybook/src/stories/blocksuite-editor.stories.tsx +++ b/tests/storybook/src/stories/blocksuite-editor.stories.tsx @@ -1,6 +1,6 @@ import { BlockSuiteEditor } from '@affine/core/components/blocksuite/block-suite-editor'; import { AffineSchemas } from '@blocksuite/blocks/schemas'; -import { Workspace } from '@blocksuite/store'; +import { DocCollection } from '@blocksuite/store'; import { Schema } from '@blocksuite/store'; import type { StoryFn } from '@storybook/react'; import { initEmptyPage } from '@toeverything/infra'; @@ -9,14 +9,14 @@ const schema = new Schema(); schema.register(AffineSchemas); async function createAndInitPage( - workspace: Workspace, + docCollection: DocCollection, title: string, preview: string ) { - const page = workspace.createDoc(); - initEmptyPage(page, title); - page.getBlockByFlavour('affine:paragraph').at(0)?.text?.insert(preview, 0); - return page; + const doc = docCollection.createDoc(); + initEmptyPage(doc, title); + doc.getBlockByFlavour('affine:paragraph').at(0)?.text?.insert(preview, 0); + return doc; } export default { @@ -33,26 +33,26 @@ export const DocEditor: StoryFn = (_, { loaded }) => { DocEditor.loaders = [ async () => { - const workspace = new Workspace({ + const docCollection = new DocCollection({ id: 'test-workspace-id', schema, }); - workspace.doc.emit('sync', []); - workspace.meta.setProperties({ + docCollection.doc.emit('sync', []); + docCollection.meta.setProperties({ tags: { options: [], }, }); const page = await createAndInitPage( - workspace, + docCollection, 'This is page 1', 'Hello World from page 1' ); return { page, - workspace, + workspace: docCollection, }; }, ]; diff --git a/tests/storybook/src/stories/image-preview-modal.stories.tsx b/tests/storybook/src/stories/image-preview-modal.stories.tsx index 0f6cffbebcc9b..914465c18e8b7 100644 --- a/tests/storybook/src/stories/image-preview-modal.stories.tsx +++ b/tests/storybook/src/stories/image-preview-modal.stories.tsx @@ -24,7 +24,7 @@ export const Default = () => { const [page, setPage] = useState(null); useEffect(() => { - const bsPage = workspace.blockSuiteWorkspace.createDoc('page0'); + const bsPage = workspace.docCollection.createDoc('page0'); initEmptyPage(bsPage); const { page, release } = pageManager.open(bsPage.meta!.id); @@ -32,7 +32,7 @@ export const Default = () => { fetch(new URL('@affine-test/fixtures/large-image.png', import.meta.url)) .then(res => res.arrayBuffer()) .then(async buffer => { - const id = await workspace.blockSuiteWorkspace.blob.set( + const id = await workspace.docCollection.blob.set( new Blob([buffer], { type: 'image/png' }) ); const frameId = bsPage.getBlockByFlavour('affine:note')[0].id; @@ -80,7 +80,7 @@ export const Default = () => { {createPortal( , document.body )} diff --git a/tests/storybook/src/stories/page-info-properties.stories.tsx b/tests/storybook/src/stories/page-info-properties.stories.tsx index ba08e4eb71414..55e69a621af3d 100644 --- a/tests/storybook/src/stories/page-info-properties.stories.tsx +++ b/tests/storybook/src/stories/page-info-properties.stories.tsx @@ -1,6 +1,6 @@ import { PagePropertiesTable } from '@affine/core/components/affine/page-properties'; import { AffineSchemas } from '@blocksuite/blocks/schemas'; -import { Workspace } from '@blocksuite/store'; +import { DocCollection } from '@blocksuite/store'; import { Schema } from '@blocksuite/store'; import type { StoryFn } from '@storybook/react'; import { initEmptyPage } from '@toeverything/infra'; @@ -9,11 +9,11 @@ const schema = new Schema(); schema.register(AffineSchemas); async function createAndInitPage( - workspace: Workspace, + docCollection: DocCollection, title: string, preview: string ) { - const page = workspace.createDoc(); + const page = docCollection.createDoc(); initEmptyPage(page, title); page.getBlockByFlavour('affine:paragraph').at(0)?.text?.insert(preview, 0); return page; @@ -36,19 +36,19 @@ export const PageInfoProperties: StoryFn = ( PageInfoProperties.loaders = [ async () => { - const workspace = new Workspace({ + const docCollection = new DocCollection({ id: 'test-workspace-id', schema, }); - workspace.doc.emit('sync', []); - workspace.meta.setProperties({ + docCollection.doc.emit('sync', []); + docCollection.meta.setProperties({ tags: { options: [], }, }); const page = await createAndInitPage( - workspace, + docCollection, 'This is page 1', 'Hello World from page 1' ); @@ -59,7 +59,7 @@ PageInfoProperties.loaders = [ return { page, - workspace, + workspace: docCollection, }; }, ]; diff --git a/tests/storybook/src/stories/page-list.stories.tsx b/tests/storybook/src/stories/page-list.stories.tsx index 5c5bccc77024d..fb9a6e208de1a 100644 --- a/tests/storybook/src/stories/page-list.stories.tsx +++ b/tests/storybook/src/stories/page-list.stories.tsx @@ -16,7 +16,7 @@ import { import { workbenchRoutes } from '@affine/core/router'; import { AffineSchemas } from '@blocksuite/blocks/schemas'; import { PageIcon, TagsIcon } from '@blocksuite/icons'; -import { Schema, Workspace } from '@blocksuite/store'; +import { DocCollection, Schema } from '@blocksuite/store'; import { expect } from '@storybook/jest'; import type { Meta, StoryFn } from '@storybook/react'; import { userEvent } from '@storybook/testing-library'; @@ -237,49 +237,49 @@ PageListStory.argTypes = { }; async function createAndInitPage( - workspace: Workspace, + docCollection: DocCollection, title: string, preview: string ) { - const page = workspace.createDoc(); - initEmptyPage(page, title); - page.getBlockByFlavour('affine:paragraph').at(0)?.text?.insert(preview, 0); - return page; + const doc = docCollection.createDoc(); + initEmptyPage(doc, title); + doc.getBlockByFlavour('affine:paragraph').at(0)?.text?.insert(preview, 0); + return doc; } PageListStory.loaders = [ async () => { const schema = new Schema(); schema.register(AffineSchemas); - const workspace = new Workspace({ + const docCollection = new DocCollection({ id: 'test-workspace-id', schema, }); - workspace.meta.setProperties({ + docCollection.meta.setProperties({ tags: { options: structuredClone(testTags), }, }); const page1 = await createAndInitPage( - workspace, + docCollection, 'This is page 1', 'Hello World from page 1' ); const page2 = await createAndInitPage( - workspace, + docCollection, 'This is page 2', 'Hello World from page 2' ); const page3 = await createAndInitPage( - workspace, + docCollection, 'This is page 3', 'Hello World from page 3Hello World from page 3Hello World from page 3Hello World from page 3Hello World from page 3' ); await createAndInitPage( - workspace, + docCollection, 'This is page 4', 'Hello World from page 3Hello World from page 3Hello World from page 3Hello World from page 3Hello World from page 3' ); @@ -288,12 +288,12 @@ PageListStory.loaders = [ page2.meta!.createDate = page2.meta!.createDate - 3600 * 1000 * 24; page3.meta!.createDate = page3.meta!.createDate - 3600 * 1000 * 24 * 7; - workspace.meta.docMetas[3].tags = testTags.slice(0, 3).map(t => t.id); - workspace.meta.docMetas[2].tags = testTags.slice(0, 12).map(t => t.id); + docCollection.meta.docMetas[3].tags = testTags.slice(0, 3).map(t => t.id); + docCollection.meta.docMetas[2].tags = testTags.slice(0, 12).map(t => t.id); return { - blockSuiteWorkspace: workspace, - pages: workspace.meta.docs, + blockSuiteWorkspace: docCollection, + pages: docCollection.meta.docs, }; }, ]; diff --git a/tests/storybook/src/stories/share-menu.stories.tsx b/tests/storybook/src/stories/share-menu.stories.tsx index 2ab43017a3699..73ebdfe727c8c 100644 --- a/tests/storybook/src/stories/share-menu.stories.tsx +++ b/tests/storybook/src/stories/share-menu.stories.tsx @@ -29,7 +29,7 @@ export const Basic: StoryFn = () => { const [page, setPage] = useState(null); useEffect(() => { - const page = workspace.blockSuiteWorkspace.createDoc(nanoid()); + const page = workspace.docCollection.createDoc(nanoid()); initEmptyPage(page); setPage(page); @@ -71,7 +71,7 @@ export const AffineBasic: StoryFn = () => { const [page, setPage] = useState(null); useEffect(() => { - const page = workspace.blockSuiteWorkspace.createDoc(nanoid()); + const page = workspace.docCollection.createDoc(nanoid()); initEmptyPage(page); setPage(page); diff --git a/yarn.lock b/yarn.lock index d042b787bc46e..fe67c3431759e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -202,12 +202,12 @@ __metadata: "@affine/electron-api": "workspace:*" "@affine/graphql": "workspace:*" "@affine/i18n": "workspace:*" - "@blocksuite/blocks": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/global": "npm:0.13.0-canary-202403050653-934469c" + "@blocksuite/blocks": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/global": "npm:0.13.0-canary-202403120738-e15d583" "@blocksuite/icons": "npm:2.1.45" - "@blocksuite/lit": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/presets": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/store": "npm:0.13.0-canary-202403050653-934469c" + "@blocksuite/lit": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/presets": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/store": "npm:0.13.0-canary-202403120738-e15d583" "@dnd-kit/core": "npm:^6.1.0" "@dnd-kit/modifiers": "npm:^7.0.0" "@dnd-kit/sortable": "npm:^8.0.0" @@ -303,14 +303,14 @@ __metadata: "@affine/templates": "workspace:*" "@affine/workspace-impl": "workspace:*" "@aws-sdk/client-s3": "npm:3.529.1" - "@blocksuite/block-std": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/blocks": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/global": "npm:0.13.0-canary-202403050653-934469c" + "@blocksuite/block-std": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/blocks": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/global": "npm:0.13.0-canary-202403120738-e15d583" "@blocksuite/icons": "npm:2.1.45" - "@blocksuite/inline": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/lit": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/presets": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/store": "npm:0.13.0-canary-202403050653-934469c" + "@blocksuite/inline": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/lit": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/presets": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/store": "npm:0.13.0-canary-202403120738-e15d583" "@dnd-kit/core": "npm:^6.1.0" "@dnd-kit/modifiers": "npm:^7.0.0" "@dnd-kit/sortable": "npm:^8.0.0" @@ -440,10 +440,10 @@ __metadata: "@affine-test/kit": "workspace:*" "@affine/env": "workspace:*" "@affine/native": "workspace:*" - "@blocksuite/blocks": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/lit": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/presets": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/store": "npm:0.13.0-canary-202403050653-934469c" + "@blocksuite/blocks": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/lit": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/presets": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/store": "npm:0.13.0-canary-202403120738-e15d583" "@electron-forge/cli": "npm:^7.3.0" "@electron-forge/core": "npm:^7.3.0" "@electron-forge/core-utils": "npm:^7.3.0" @@ -491,8 +491,8 @@ __metadata: version: 0.0.0-use.local resolution: "@affine/env@workspace:packages/common/env" dependencies: - "@blocksuite/global": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/store": "npm:0.13.0-canary-202403050653-934469c" + "@blocksuite/global": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/store": "npm:0.13.0-canary-202403120738-e15d583" lit: "npm:^3.1.2" react: "npm:18.2.0" react-dom: "npm:18.2.0" @@ -738,14 +738,14 @@ __metadata: "@affine/component": "workspace:*" "@affine/i18n": "workspace:*" "@affine/workspace-impl": "workspace:*" - "@blocksuite/block-std": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/blocks": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/global": "npm:0.13.0-canary-202403050653-934469c" + "@blocksuite/block-std": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/blocks": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/global": "npm:0.13.0-canary-202403120738-e15d583" "@blocksuite/icons": "npm:2.1.45" - "@blocksuite/inline": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/lit": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/presets": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/store": "npm:0.13.0-canary-202403050653-934469c" + "@blocksuite/inline": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/lit": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/presets": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/store": "npm:0.13.0-canary-202403120738-e15d583" "@dnd-kit/sortable": "npm:^8.0.0" "@storybook/addon-actions": "npm:^7.6.17" "@storybook/addon-essentials": "npm:^7.6.17" @@ -3417,42 +3417,42 @@ __metadata: languageName: node linkType: hard -"@blocksuite/block-std@npm:0.13.0-canary-202403050653-934469c": - version: 0.13.0-canary-202403050653-934469c - resolution: "@blocksuite/block-std@npm:0.13.0-canary-202403050653-934469c" +"@blocksuite/block-std@npm:0.13.0-canary-202403120738-e15d583": + version: 0.13.0-canary-202403120738-e15d583 + resolution: "@blocksuite/block-std@npm:0.13.0-canary-202403120738-e15d583" dependencies: - "@blocksuite/global": "npm:0.13.0-canary-202403050653-934469c" + "@blocksuite/global": "npm:0.13.0-canary-202403120738-e15d583" lz-string: "npm:^1.5.0" w3c-keyname: "npm:^2.2.8" zod: "npm:^3.22.4" peerDependencies: - "@blocksuite/store": 0.13.0-canary-202403050653-934469c - checksum: 10/f68e4f7869d2f311a39c35f8d540beb69cbf624fac8879e16f24a9d2cc7ecf9c6f2ee555c4df2f8fb6a4eeb18db21a6a5e463fe48e3af439a5e0053d43ef0536 + "@blocksuite/store": 0.13.0-canary-202403120738-e15d583 + checksum: 10/ce2fa1bf9f82b202ef4a77fb3a4cabdd93c8bd6e283b6111000885ca4e9c399ffc2e3fd895d74693a1873d8442011a3687659cd45ec1ea73f49e2eac5240baf7 languageName: node linkType: hard -"@blocksuite/blocks@npm:0.13.0-canary-202403050653-934469c": - version: 0.13.0-canary-202403050653-934469c - resolution: "@blocksuite/blocks@npm:0.13.0-canary-202403050653-934469c" +"@blocksuite/blocks@npm:0.13.0-canary-202403120738-e15d583": + version: 0.13.0-canary-202403120738-e15d583 + resolution: "@blocksuite/blocks@npm:0.13.0-canary-202403120738-e15d583" dependencies: - "@blocksuite/block-std": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/global": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/inline": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/lit": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/store": "npm:0.13.0-canary-202403050653-934469c" - "@floating-ui/dom": "npm:^1.5.4" - "@toeverything/theme": "npm:^0.7.27" - "@types/hast": "npm:^3.0.3" + "@blocksuite/block-std": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/global": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/inline": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/lit": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/store": "npm:0.13.0-canary-202403120738-e15d583" + "@floating-ui/dom": "npm:^1.6.3" + "@toeverything/theme": "npm:^0.7.29" + "@types/hast": "npm:^3.0.4" "@types/mdast": "npm:^4.0.3" - "@types/sortablejs": "npm:^1.15.7" + "@types/sortablejs": "npm:^1.15.8" "@types/webfontloader": "npm:^1.6.38" buffer: "npm:^6.0.3" - date-fns: "npm:^3.3.0" + date-fns: "npm:^3.3.1" file-type: "npm:^16.5.4" fractional-indexing: "npm:^3.2.0" html2canvas: "npm:^1.4.1" jszip: "npm:^3.10.1" - lit: "npm:^3.1.1" + lit: "npm:^3.1.2" mdast-util-gfm-autolink-literal: "npm:^2.0.0" mdast-util-gfm-strikethrough: "npm:^2.0.0" mdast-util-gfm-table: "npm:^2.0.0" @@ -3464,7 +3464,7 @@ __metadata: micromark-extension-gfm-task-list-item: "npm:^2.0.1" micromark-util-combine-extensions: "npm:^2.0.0" minimatch: "npm:^9.0.3" - nanoid: "npm:^5.0.4" + nanoid: "npm:^5.0.6" pdf-lib: "npm:^1.17.1" rehype-parse: "npm:^9.0.0" rehype-stringify: "npm:^10.0.0" @@ -3475,16 +3475,16 @@ __metadata: unified: "npm:^11.0.4" webfontloader: "npm:^1.6.28" zod: "npm:^3.22.4" - checksum: 10/a0dade2e3d71199a847e0da8ca03fb19541ae29f4909fe540cf64756ada17ef2c1397d5ac743c027dac385dbd9ca445b0a6ad27112aed156fe752024b3d42608 + checksum: 10/8806128fdb6a0cf38cb3c724ff5884e4ac692a3bd57c51a29a915eea1ad65a1929139e25ff261176d982f04d471c32ffeb11baffebff0712072a42ca6a68b558 languageName: node linkType: hard -"@blocksuite/global@npm:0.13.0-canary-202403050653-934469c": - version: 0.13.0-canary-202403050653-934469c - resolution: "@blocksuite/global@npm:0.13.0-canary-202403050653-934469c" +"@blocksuite/global@npm:0.13.0-canary-202403120738-e15d583": + version: 0.13.0-canary-202403120738-e15d583 + resolution: "@blocksuite/global@npm:0.13.0-canary-202403120738-e15d583" dependencies: zod: "npm:^3.22.4" - checksum: 10/c3af8171461e463120e367b74b2a60c9682bf6573bad89c73258be7d0426f158af1f83020f1018c6039fdc10c395c9872099314fb593329d118facfa25951fd6 + checksum: 10/e07ca9819088d107c8519953d37e9d9d545a0d7c7d05f58ab5d725d0a9384837aa365ff8438402693423c63ca16c2215a17279c9092df1f88ef93fe02860966d languageName: node linkType: hard @@ -3498,84 +3498,84 @@ __metadata: languageName: node linkType: hard -"@blocksuite/inline@npm:0.13.0-canary-202403050653-934469c": - version: 0.13.0-canary-202403050653-934469c - resolution: "@blocksuite/inline@npm:0.13.0-canary-202403050653-934469c" +"@blocksuite/inline@npm:0.13.0-canary-202403120738-e15d583": + version: 0.13.0-canary-202403120738-e15d583 + resolution: "@blocksuite/inline@npm:0.13.0-canary-202403120738-e15d583" dependencies: - "@blocksuite/global": "npm:0.13.0-canary-202403050653-934469c" + "@blocksuite/global": "npm:0.13.0-canary-202403120738-e15d583" zod: "npm:^3.22.4" peerDependencies: lit: ^3.1.1 yjs: ^13 - checksum: 10/9571c2874570a8a12cbd96ebd85be0df29a1d8492e367478b5bf2f2d4e6b1b38f3fb379a695fea3177961c15b48fa2cc5ea3a446b8b8045cebdba56fbfcf17c3 + checksum: 10/6997085d3db649ae6ed3281a394c496501bc31393210bdbce01ca80d6ce8362c42fceb958dc27a27b9a5283ac0d063ee074807c786c888b3b5298c46a337fb3b languageName: node linkType: hard -"@blocksuite/lit@npm:0.13.0-canary-202403050653-934469c": - version: 0.13.0-canary-202403050653-934469c - resolution: "@blocksuite/lit@npm:0.13.0-canary-202403050653-934469c" +"@blocksuite/lit@npm:0.13.0-canary-202403120738-e15d583": + version: 0.13.0-canary-202403120738-e15d583 + resolution: "@blocksuite/lit@npm:0.13.0-canary-202403120738-e15d583" dependencies: - "@blocksuite/global": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/inline": "npm:0.13.0-canary-202403050653-934469c" - lit: "npm:^3.1.1" + "@blocksuite/global": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/inline": "npm:0.13.0-canary-202403120738-e15d583" + lit: "npm:^3.1.2" peerDependencies: - "@blocksuite/block-std": 0.13.0-canary-202403050653-934469c - "@blocksuite/store": 0.13.0-canary-202403050653-934469c - checksum: 10/e92fed78cd8605c6d6d5f0920d87a84752a6b1ea869d662c43161df385f26832f02b0423a9ea5d9e7e8e1a9250c1c65b456afc8c959a3a17ff732bddb0ab8967 + "@blocksuite/block-std": 0.13.0-canary-202403120738-e15d583 + "@blocksuite/store": 0.13.0-canary-202403120738-e15d583 + checksum: 10/906e481c6045d89b38a228ad9044da43bdfb20ff65150afe1b689b8e465c18f54c8200eb97c1f440aee52d157d5023bd667215693ec23b402b1dde6ceb8d7383 languageName: node linkType: hard -"@blocksuite/presets@npm:0.13.0-canary-202403050653-934469c": - version: 0.13.0-canary-202403050653-934469c - resolution: "@blocksuite/presets@npm:0.13.0-canary-202403050653-934469c" +"@blocksuite/presets@npm:0.13.0-canary-202403120738-e15d583": + version: 0.13.0-canary-202403120738-e15d583 + resolution: "@blocksuite/presets@npm:0.13.0-canary-202403120738-e15d583" dependencies: - "@blocksuite/block-std": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/blocks": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/global": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/inline": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/lit": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/store": "npm:0.13.0-canary-202403050653-934469c" - "@fal-ai/serverless-client": "npm:^0.8.2" - "@floating-ui/dom": "npm:^1.5.4" - "@toeverything/theme": "npm:^0.7.27" - lit: "npm:^3.1.1" - openai: "npm:^4.25.0" - checksum: 10/20cdbcb8b3c605547c5cd8e27a791e7f81ede08eacda8389dc3779fc80f8468eb8d49bd68fa689afc5e50f350bf364d8d4a0cf174aa4f78b303f53bf35b618b9 + "@blocksuite/block-std": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/blocks": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/global": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/inline": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/lit": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/store": "npm:0.13.0-canary-202403120738-e15d583" + "@fal-ai/serverless-client": "npm:^0.9.0" + "@floating-ui/dom": "npm:^1.6.3" + "@toeverything/theme": "npm:^0.7.29" + lit: "npm:^3.1.2" + openai: "npm:^4.28.4" + checksum: 10/180b9164a588f3a9b8456d694bfe766238a7737f0a1ab5a9ba45dbe339feab84b05f4697fa3ac572ce44a29711dde7c70b70c74c438c8f263300388a18122b8f languageName: node linkType: hard -"@blocksuite/store@npm:0.13.0-canary-202403050653-934469c": - version: 0.13.0-canary-202403050653-934469c - resolution: "@blocksuite/store@npm:0.13.0-canary-202403050653-934469c" +"@blocksuite/store@npm:0.13.0-canary-202403120738-e15d583": + version: 0.13.0-canary-202403120738-e15d583 + resolution: "@blocksuite/store@npm:0.13.0-canary-202403120738-e15d583" dependencies: - "@blocksuite/global": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/inline": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/sync": "npm:0.13.0-canary-202403050653-934469c" + "@blocksuite/global": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/inline": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/sync": "npm:0.13.0-canary-202403120738-e15d583" "@types/flexsearch": "npm:^0.7.6" flexsearch: "npm:0.7.43" idb-keyval: "npm:^6.2.1" - lib0: "npm:^0.2.88" + lib0: "npm:^0.2.91" merge: "npm:^2.1.1" minimatch: "npm:^9.0.3" - nanoid: "npm:^5.0.4" + nanoid: "npm:^5.0.6" y-protocols: "npm:^1.0.6" zod: "npm:^3.22.4" peerDependencies: yjs: ^13 - checksum: 10/e1d9837f537bfac7fc89c00f212883d99eb906af3fe514e339f6140c1754d5a7fcef5cc12e036f1b9b6074fd2f79cf2c96af384864a02835228a975968e8a113 + checksum: 10/9110a4a36a2d279fa572f4b377da5512b61a655cb5c4ea6ddd01a1b16e66c7f064e94efe6dfbc7171d7ee9d36b667b3410adf054b5d61758b10cab08f7986227 languageName: node linkType: hard -"@blocksuite/sync@npm:0.13.0-canary-202403050653-934469c": - version: 0.13.0-canary-202403050653-934469c - resolution: "@blocksuite/sync@npm:0.13.0-canary-202403050653-934469c" +"@blocksuite/sync@npm:0.13.0-canary-202403120738-e15d583": + version: 0.13.0-canary-202403120738-e15d583 + resolution: "@blocksuite/sync@npm:0.13.0-canary-202403120738-e15d583" dependencies: - "@blocksuite/global": "npm:0.13.0-canary-202403050653-934469c" + "@blocksuite/global": "npm:0.13.0-canary-202403120738-e15d583" idb: "npm:^8.0.0" y-protocols: "npm:^1.0.6" peerDependencies: yjs: ^13 - checksum: 10/b957d7d318494e35f5b2781459dda37c90f374f560afbeea1fe73a3f6810ac005b4c8f49c3004b3f5bd07b2acf501c6be9964eec191104218f6e331cb6daaf5b + checksum: 10/dc6e7a6f11c8ce26eb82a4c5102dcf6c687d0169ce2ea07360c48ed74814bbce7be9b6b75774bf8f28f35959d310a2e56dc99b1a96e179158106a7f1c02d8492 languageName: node linkType: hard @@ -5263,14 +5263,15 @@ __metadata: languageName: node linkType: hard -"@fal-ai/serverless-client@npm:^0.8.2": - version: 0.8.2 - resolution: "@fal-ai/serverless-client@npm:0.8.2" +"@fal-ai/serverless-client@npm:^0.9.0": + version: 0.9.0 + resolution: "@fal-ai/serverless-client@npm:0.9.0" dependencies: "@msgpack/msgpack": "npm:^3.0.0-beta2" + eventsource-parser: "npm:^1.1.2" robot3: "npm:^0.4.1" uuid-random: "npm:^1.3.2" - checksum: 10/296b2cb406837c0dbb28b0f3361e0a43bb7a14496016b220984f302aebc6dec004a6a0df7067eff2ac583e3334f17e91fec7b46ea397386782dd1b93d2e4be7c + checksum: 10/88ab594d88b780eca1ee33af5e92eceb98b96884d0881b9ff83cf3db6cec42c40dea1154f055becfcfc45c7e154e2c5a9d489db50649b658f2eb2b7e28beab91 languageName: node linkType: hard @@ -5299,7 +5300,7 @@ __metadata: languageName: node linkType: hard -"@floating-ui/core@npm:^1.6.0": +"@floating-ui/core@npm:^1.0.0": version: 1.6.0 resolution: "@floating-ui/core@npm:1.6.0" dependencies: @@ -5308,13 +5309,13 @@ __metadata: languageName: node linkType: hard -"@floating-ui/dom@npm:^1.2.1, @floating-ui/dom@npm:^1.5.4, @floating-ui/dom@npm:^1.6.1": - version: 1.6.1 - resolution: "@floating-ui/dom@npm:1.6.1" +"@floating-ui/dom@npm:^1.2.1, @floating-ui/dom@npm:^1.6.1, @floating-ui/dom@npm:^1.6.3": + version: 1.6.3 + resolution: "@floating-ui/dom@npm:1.6.3" dependencies: - "@floating-ui/core": "npm:^1.6.0" - "@floating-ui/utils": "npm:^0.2.1" - checksum: 10/c010feb55be37662eb4cc8d0a22e21359c25247bbdcd9557617fd305cf08c8f020435b17e4b4f410201ba9abe3a0dd96b5c42d56e85f7a5e11e7d30b85afc116 + "@floating-ui/core": "npm:^1.0.0" + "@floating-ui/utils": "npm:^0.2.0" + checksum: 10/83e97076c7a5f55c3506f574bc53f03d38bed6eb8181920c8733076889371e287e9ae6f28c520a076967759b9b6ff425362832a5cdf16a999069530dbb9cce53 languageName: node linkType: hard @@ -5356,7 +5357,7 @@ __metadata: languageName: node linkType: hard -"@floating-ui/utils@npm:^0.2.1": +"@floating-ui/utils@npm:^0.2.0, @floating-ui/utils@npm:^0.2.1": version: 0.2.1 resolution: "@floating-ui/utils@npm:0.2.1" checksum: 10/33c9ab346e7b05c5a1e6a95bc902aafcfc2c9d513a147e2491468843bd5607531b06d0b9aa56aa491cbf22a6c2495c18ccfc4c0344baec54a689a7bb8e4898d6 @@ -13369,11 +13370,11 @@ __metadata: "@affine/debug": "workspace:*" "@affine/env": "workspace:*" "@affine/templates": "workspace:*" - "@blocksuite/blocks": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/global": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/lit": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/presets": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/store": "npm:0.13.0-canary-202403050653-934469c" + "@blocksuite/blocks": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/global": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/lit": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/presets": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/store": "npm:0.13.0-canary-202403120738-e15d583" "@testing-library/react": "npm:^14.2.1" async-call-rpc: "npm:^6.4.0" foxact: "npm:^0.2.31" @@ -13412,7 +13413,7 @@ __metadata: languageName: unknown linkType: soft -"@toeverything/theme@npm:^0.7.27, @toeverything/theme@npm:^0.7.29": +"@toeverything/theme@npm:^0.7.29": version: 0.7.29 resolution: "@toeverything/theme@npm:0.7.29" checksum: 10/d1dde76147bc9be8d6cc5d340cb24ceba90668e3b54ee36fc68d4b50aae8a8cb39a47eb193087c07491e5b3c0c5bc6b3042abd5ba490709406b2096163b6e1a5 @@ -13423,9 +13424,9 @@ __metadata: version: 0.0.0-use.local resolution: "@toeverything/y-indexeddb@workspace:packages/common/y-indexeddb" dependencies: - "@blocksuite/blocks": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/global": "npm:0.13.0-canary-202403050653-934469c" - "@blocksuite/store": "npm:0.13.0-canary-202403050653-934469c" + "@blocksuite/blocks": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/global": "npm:0.13.0-canary-202403120738-e15d583" + "@blocksuite/store": "npm:0.13.0-canary-202403120738-e15d583" fake-indexeddb: "npm:^5.0.2" idb: "npm:^8.0.0" nanoid: "npm:^5.0.6" @@ -13900,12 +13901,12 @@ __metadata: languageName: node linkType: hard -"@types/hast@npm:^3.0.0, @types/hast@npm:^3.0.3": - version: 3.0.3 - resolution: "@types/hast@npm:3.0.3" +"@types/hast@npm:^3.0.0, @types/hast@npm:^3.0.4": + version: 3.0.4 + resolution: "@types/hast@npm:3.0.4" dependencies: "@types/unist": "npm:*" - checksum: 10/cf380cb351215847a598b06c10c0139a694fbb9a5cca27e7a836df4c9d616873ff5b01326530907b5a95b6a4b8fc928bcecb46424cc6f9bd1f53ba377f190d86 + checksum: 10/732920d81bb7605895776841b7658b4d8cc74a43a8fa176017cc0fb0ecc1a4c82a2b75a4fe6b71aa262b649d3fb62858c6789efa3793ea1d40269953af96ecb5 languageName: node linkType: hard @@ -14440,7 +14441,7 @@ __metadata: languageName: node linkType: hard -"@types/sortablejs@npm:^1.15.7": +"@types/sortablejs@npm:^1.15.8": version: 1.15.8 resolution: "@types/sortablejs@npm:1.15.8" checksum: 10/aea58b08cf45f5e9633707a8df0df1212595c731bbdfd29805487138fdd0d8c51fa5c741999738a645c1e801d43a92ba0d3fb5b45625b52e247c56588aef6c55 @@ -18732,10 +18733,10 @@ __metadata: languageName: node linkType: hard -"date-fns@npm:^3.3.0": - version: 3.3.1 - resolution: "date-fns@npm:3.3.1" - checksum: 10/98231936765dfb6fc6897676319b500a06a39f051b2c3ecbdd541a07ce9b1344b770277b8bfb1049fb7a2f70bf365ac8e6f1e2bb452b10e1a8101d518ca7f95d +"date-fns@npm:^3.3.1": + version: 3.4.0 + resolution: "date-fns@npm:3.4.0" + checksum: 10/38932c99ad28a69a18bd9e2331d0c86a46146d3e9efc92cbc612400a075785231c3271822948eb0377db738fa8a583aa4782d8246a939fe6f188727ea9323c29 languageName: node linkType: hard @@ -20739,6 +20740,13 @@ __metadata: languageName: node linkType: hard +"eventsource-parser@npm:^1.1.2": + version: 1.1.2 + resolution: "eventsource-parser@npm:1.1.2" + checksum: 10/14e94997dff896fb7bc85b29e89d6a62e747650d905b006249bcf48ba13efcbf3ee2b67948f4fa2638836b5a77ea079e25e941c0e41a720323e7867b1ebdda14 + languageName: node + linkType: hard + "execa@npm:8.0.1, execa@npm:^8.0.1": version: 8.0.1 resolution: "execa@npm:8.0.1" @@ -25258,15 +25266,16 @@ __metadata: languageName: node linkType: hard -"lib0@npm:^0.2.74, lib0@npm:^0.2.85, lib0@npm:^0.2.86, lib0@npm:^0.2.88, lib0@npm:^0.2.89": - version: 0.2.89 - resolution: "lib0@npm:0.2.89" +"lib0@npm:^0.2.74, lib0@npm:^0.2.85, lib0@npm:^0.2.86, lib0@npm:^0.2.89, lib0@npm:^0.2.91": + version: 0.2.91 + resolution: "lib0@npm:0.2.91" dependencies: isomorphic.js: "npm:^0.2.4" bin: + 0ecdsa-generate-keypair: bin/0ecdsa-generate-keypair.js 0gentesthtml: bin/gentesthtml.js 0serve: bin/0serve.js - checksum: 10/a86120bd636120a992963658e08597172e882740224cf889e22b33dacb70287a25285c27e81a578892b2b6dc18515ac30f8d0cd75a8dd163fef397382a0392c4 + checksum: 10/9706a39d9bc9c309bebf4f380dedeca586aa07c4c54466f3c4ffa394c02b45c8339e80390af06acb94b898b601bb8d7828a830df6a7faa46a61dc37c58b489d8 languageName: node linkType: hard @@ -25424,7 +25433,7 @@ __metadata: languageName: node linkType: hard -"lit@npm:^3.1.1, lit@npm:^3.1.2": +"lit@npm:^3.1.2": version: 3.1.2 resolution: "lit@npm:3.1.2" dependencies: @@ -27681,7 +27690,7 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^5.0.4, nanoid@npm:^5.0.6": +"nanoid@npm:^5.0.6": version: 5.0.6 resolution: "nanoid@npm:5.0.6" bin: @@ -28450,9 +28459,9 @@ __metadata: languageName: node linkType: hard -"openai@npm:^4.25.0": - version: 4.25.0 - resolution: "openai@npm:4.25.0" +"openai@npm:^4.28.4": + version: 4.28.4 + resolution: "openai@npm:4.28.4" dependencies: "@types/node": "npm:^18.11.18" "@types/node-fetch": "npm:^2.6.4" @@ -28465,7 +28474,7 @@ __metadata: web-streams-polyfill: "npm:^3.2.1" bin: openai: bin/cli - checksum: 10/58e05f25b4ee8ffa048d92257c6696734b75997ecfdc56d99d6a43ce6bdf2db994d4343439d2d2832710a257af481c08f0ad4bd34f664e99b01286c67aac2d10 + checksum: 10/81bf6f832f43aa81c8fca1bd1f8ffde16f02fcfa13d5cb66b64cd9440c7074054a4a766b0c9b6c9217359f96a376619f91e7071121739afe6eb492992ebfd2ec languageName: node linkType: hard @@ -35626,7 +35635,7 @@ __metadata: version: 0.0.0-use.local resolution: "y-provider@workspace:packages/common/y-provider" dependencies: - "@blocksuite/store": "npm:0.13.0-canary-202403050653-934469c" + "@blocksuite/store": "npm:0.13.0-canary-202403120738-e15d583" vite: "npm:^5.1.4" vite-plugin-dts: "npm:3.7.3" vitest: "npm:1.3.1"