Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor(editor): should not rely on doc collection type #9501

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion blocksuite/affine/block-data-view/src/block-meta/todo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ todoMeta.addProperty({
metaConfig: propertyPresets.textPropertyConfig,
get: block => block.doc.meta?.title ?? '',
updated: (block, callback) => {
return block.doc.collection.meta.docMetaUpdated.on(() => {
return block.doc.collection.slots.docListUpdated.on(() => {
callback();
});
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,7 @@ export class EmbedLinkedDocBlockComponent extends EmbedBlockComponent<EmbedLinke
const linkedDoc = this.linkedDoc;
if (linkedDoc) {
this.disposables.add(
linkedDoc.collection.meta.docMetaUpdated.on(() => {
linkedDoc.collection.slots.docListUpdated.on(() => {
this._load().catch(e => {
console.error(e);
this.isError = true;
Expand Down Expand Up @@ -328,7 +328,7 @@ export class EmbedLinkedDocBlockComponent extends EmbedBlockComponent<EmbedLinke

this._setDocUpdatedAt();
this.disposables.add(
this.doc.collection.meta.docMetaUpdated.on(() => {
this.doc.collection.slots.docListUpdated.on(() => {
this._setDocUpdatedAt();
})
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ export class EmbedSyncedDocCard extends WithDisposable(ShadowlessElement) {
}

this.disposables.add(
syncedDoc.collection.meta.docMetaUpdated.on(() => {
syncedDoc.collection.slots.docListUpdated.on(() => {
renderLinkedDocInCard(this);
})
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -475,7 +475,7 @@ export class EmbedSyncedDocBlockComponent extends EmbedBlockComponent<EmbedSynce

this._setDocUpdatedAt();
this.disposables.add(
this.doc.collection.meta.docMetaUpdated.on(() => {
this.doc.collection.slots.docListUpdated.on(() => {
this._setDocUpdatedAt();
})
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ export class AffineReference extends WithDisposable(ShadowlessElement) {
const doc = this.doc;
if (doc) {
this._disposables.add(
doc.collection.slots.docUpdated.on(() => this._updateRefMeta(doc))
doc.collection.slots.docListUpdated.on(() => this._updateRefMeta(doc))
);
}

Expand Down
1 change: 0 additions & 1 deletion blocksuite/affine/shared/src/adapters/attachment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ export type Attachment = File[];
type AttachmentToSliceSnapshotPayload = {
file: Attachment;
assets?: AssetsManager;
blockVersions: Record<string, number>;
workspaceId: string;
pageId: string;
};
Expand Down
1 change: 0 additions & 1 deletion blocksuite/affine/shared/src/adapters/html/html.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@ export type Html = string;
type HtmlToSliceSnapshotPayload = {
file: Html;
assets?: AssetsManager;
blockVersions: Record<string, number>;
workspaceId: string;
pageId: string;
};
Expand Down
1 change: 0 additions & 1 deletion blocksuite/affine/shared/src/adapters/image.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ export type Image = File[];
type ImageToSliceSnapshotPayload = {
file: Image;
assets?: AssetsManager;
blockVersions: Record<string, number>;
workspaceId: string;
pageId: string;
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ export type NotionHtml = string;
type NotionHtmlToSliceSnapshotPayload = {
file: NotionHtml;
assets?: AssetsManager;
blockVersions: Record<string, number>;
workspaceId: string;
pageId: string;
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ export type PlainText = string;
type PlainTextToSliceSnapshotPayload = {
file: PlainText;
assets?: AssetsManager;
blockVersions: Record<string, number>;
workspaceId: string;
pageId: string;
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ export class DocDisplayMetaService
if (!title$) {
title$ = signal(doc.meta?.title || 'Untitled');

const disposable = this.std.collection.meta.docMetaUpdated.on(() => {
const disposable = this.std.collection.slots.docListUpdated.on(() => {
title$!.value = doc.meta?.title || 'Untitled';
});

Expand Down
4 changes: 2 additions & 2 deletions blocksuite/affine/shared/src/utils/model/doc.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import type { DocCollection } from '@blocksuite/store';
import type { Workspace } from '@blocksuite/store';

export function createDefaultDoc(
collection: DocCollection,
collection: Workspace,
options: { id?: string; title?: string } = {}
) {
const doc = collection.createDoc({ id: options.id });
Expand Down
1 change: 0 additions & 1 deletion blocksuite/blocks/src/_common/adapters/mix-text.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ export type MixText = string;
type MixTextToSliceSnapshotPayload = {
file: MixText;
assets?: AssetsManager;
blockVersions: Record<string, number>;
workspaceId: string;
pageId: string;
};
Expand Down
6 changes: 3 additions & 3 deletions blocksuite/blocks/src/_common/transformers/html.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { HtmlAdapter } from '@blocksuite/affine-shared/adapters';
import { Container } from '@blocksuite/global/di';
import { sha } from '@blocksuite/global/utils';
import type { Doc, DocCollection } from '@blocksuite/store';
import type { Doc, Workspace } from '@blocksuite/store';
import { extMimeMap, Job } from '@blocksuite/store';

import { defaultBlockHtmlAdapterMatchers } from '../adapters/html/block-matcher.js';
Expand All @@ -16,13 +16,13 @@ import {
import { createAssetsArchive, download, Unzip } from './utils.js';

type ImportHTMLToDocOptions = {
collection: DocCollection;
collection: Workspace;
html: string;
fileName?: string;
};

type ImportHTMLZipOptions = {
collection: DocCollection;
collection: Workspace;
imported: Blob;
};

Expand Down
6 changes: 3 additions & 3 deletions blocksuite/blocks/src/_common/transformers/markdown.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { MarkdownAdapter } from '@blocksuite/affine-shared/adapters';
import { Container } from '@blocksuite/global/di';
import { BlockSuiteError, ErrorCode } from '@blocksuite/global/exceptions';
import { assertExists, sha } from '@blocksuite/global/utils';
import type { Doc, DocCollection } from '@blocksuite/store';
import type { Doc, Workspace } from '@blocksuite/store';
import { extMimeMap, Job } from '@blocksuite/store';

import { defaultBlockMarkdownAdapterMatchers } from '../adapters/index.js';
Expand Down Expand Up @@ -34,13 +34,13 @@ type ImportMarkdownToBlockOptions = {
};

type ImportMarkdownToDocOptions = {
collection: DocCollection;
collection: Workspace;
markdown: string;
fileName?: string;
};

type ImportMarkdownZipOptions = {
collection: DocCollection;
collection: Workspace;
imported: Blob;
};

Expand Down
13 changes: 6 additions & 7 deletions blocksuite/blocks/src/_common/transformers/notion-html.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import { NotionHtmlAdapter } from '@blocksuite/affine-shared/adapters';
import { Container } from '@blocksuite/global/di';
import { sha } from '@blocksuite/global/utils';
import { type DocCollection, extMimeMap, Job } from '@blocksuite/store';
import { extMimeMap, Job, type Workspace } from '@blocksuite/store';

import { defaultBlockNotionHtmlAdapterMatchers } from '../adapters/notion-html/block-matcher.js';
import { notionHtmlInlineToDeltaMatchers } from '../adapters/notion-html/delta-converter/html-inline.js';
import { defaultImageProxyMiddleware } from './middlewares.js';
import { Unzip } from './utils.js';

type ImportNotionZipOptions = {
collection: DocCollection;
collection: Workspace;
imported: Blob;
};

Expand All @@ -26,12 +26,11 @@ const provider = container.provider();
/**
* Imports a Notion zip file into the BlockSuite collection.
*
* @param {ImportNotionZipOptions} options - The options for importing.
* @param {DocCollection} options.collection - The BlockSuite document collection.
* @param {Blob} options.imported - The imported zip file as a Blob.
* @param options - The options for importing.
* @param options.collection - The BlockSuite document collection.
* @param options.imported - The imported zip file as a Blob.
*
* @returns {Promise<{entryId: string | undefined, pageIds: string[], isWorkspaceFile: boolean, hasMarkdown: boolean}>}
* A promise that resolves to an object containing:
* @returns A promise that resolves to an object containing:
* - entryId: The ID of the entry page (if any).
* - pageIds: An array of imported page IDs.
* - isWorkspaceFile: Whether the imported file is a workspace file.
Expand Down
6 changes: 3 additions & 3 deletions blocksuite/blocks/src/_common/transformers/zip.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { sha } from '@blocksuite/global/utils';
import type { Doc, DocCollection, DocSnapshot } from '@blocksuite/store';
import type { Doc, DocSnapshot, Workspace } from '@blocksuite/store';
import { extMimeMap, getAssetName, Job } from '@blocksuite/store';

import { download, Unzip, Zip } from '../transformers/utils.js';
import { replaceIdMiddleware, titleMiddleware } from './middlewares.js';

async function exportDocs(collection: DocCollection, docs: Doc[]) {
async function exportDocs(collection: Workspace, docs: Doc[]) {
const zip = new Zip();
const job = new Job({
schema: collection.schema,
Expand Down Expand Up @@ -50,7 +50,7 @@ async function exportDocs(collection: DocCollection, docs: Doc[]) {
return download(downloadBlob, `${collection.id}.bs.zip`);
}

async function importDocs(collection: DocCollection, imported: Blob) {
async function importDocs(collection: Workspace, imported: Blob) {
const unzip = new Unzip();
await unzip.load(imported);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
} from '@blocksuite/affine-components/icons';
import { openFileOrFiles } from '@blocksuite/affine-shared/utils';
import { WithDisposable } from '@blocksuite/global/utils';
import type { DocCollection } from '@blocksuite/store';
import type { Workspace } from '@blocksuite/store';
import { html, LitElement, type PropertyValues } from 'lit';
import { query, state } from 'lit/decorators.js';

Expand All @@ -30,7 +30,7 @@ export class ImportDoc extends WithDisposable(LitElement) {
static override styles = styles;

constructor(
private readonly collection: DocCollection,
private readonly collection: Workspace,
private readonly onSuccess?: OnSuccessHandler,
private readonly onFail?: OnFailHandler,
private readonly abortController = new AbortController()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { DocCollection } from '@blocksuite/store';
import type { Workspace } from '@blocksuite/store';

import {
ImportDoc,
Expand All @@ -13,7 +13,7 @@ export function showImportModal({
container = document.body,
abortController = new AbortController(),
}: {
collection: DocCollection;
collection: Workspace;
onSuccess?: OnSuccessHandler;
onFail?: OnFailHandler;
multiple?: boolean;
Expand Down
1 change: 0 additions & 1 deletion blocksuite/framework/block-std/src/clipboard/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,6 @@ export class Clipboard extends LifeCycleWatcher {
const payload = {
file: item,
assets: job.assetsManager,
blockVersions: doc.collection.meta.blockVersions,
workspaceId: doc.collection.id,
pageId: doc.id,
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { applyUpdate, encodeStateAsUpdate } from 'yjs';
import { COLLECTION_VERSION, PAGE_VERSION } from '../consts.js';
import type { BlockModel, BlockSchemaType, Doc } from '../index.js';
import { DocCollection, IdGeneratorType, Schema } from '../index.js';
import type { DocMeta } from '../store/index.js';
import type { DocMeta } from '../store/workspace.js';
import type { BlockSuiteDoc } from '../yjs/index.js';
import {
NoteBlockSchema,
Expand Down Expand Up @@ -432,7 +432,7 @@ describe('addBlock', () => {
);

let called = false;
collection.meta.docMetaUpdated.on(() => {
collection.slots.docListUpdated.on(() => {
called = true;
});

Expand Down
21 changes: 13 additions & 8 deletions blocksuite/framework/store/src/store/collection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,16 @@ import {
BlockSuiteDoc,
type RawAwarenessState,
} from '../yjs/index.js';
import { BlockCollection, type GetDocOptions } from './doc/block-collection.js';
import type { Doc, Query } from './doc/index.js';
import { BlockCollection } from './doc/block-collection.js';
import type { Doc } from './doc/index.js';
import type { IdGeneratorType } from './id.js';
import { pickIdGenerator } from './id.js';
import { DocCollectionMeta } from './meta.js';
import type {
CreateDocOptions,
GetDocOptions,
Workspace,
} from './workspace.js';

export type DocCollectionOptions = {
schema: Schema;
Expand Down Expand Up @@ -69,7 +74,7 @@ export interface StackItem {
meta: Map<'cursor-location' | 'selection-state', unknown>;
}

export class DocCollection {
export class DocCollection implements Workspace {
protected readonly _schema: Schema;

readonly awarenessStore: AwarenessStore;
Expand All @@ -91,7 +96,7 @@ export class DocCollection {
meta: DocCollectionMeta;

slots = {
docUpdated: new Slot(),
docListUpdated: new Slot(),
docRemoved: new Slot<string>(),
docCreated: new Slot<string>(),
};
Expand Down Expand Up @@ -161,7 +166,7 @@ export class DocCollection {
this.blockCollections.set(doc.id, doc);
});

this.meta.docMetaUpdated.on(() => this.slots.docUpdated.emit());
this.meta.docMetaUpdated.on(() => this.slots.docListUpdated.emit());

this.meta.docMetaRemoved.on(id => {
const space = this.getBlockCollection(id);
Expand Down Expand Up @@ -189,8 +194,8 @@ export class DocCollection {
* If the `init` parameter is passed, a `surface`, `note`, and `paragraph` block
* will be created in the doc simultaneously.
*/
createDoc(options: { id?: string; query?: Query } = {}) {
const { id: docId = this.idGenerator(), query } = options;
createDoc(options: CreateDocOptions = {}) {
const { id: docId = this.idGenerator(), query, readonly } = options;
if (this._hasDoc(docId)) {
throw new BlockSuiteError(
ErrorCode.DocCollectionError,
Expand All @@ -205,7 +210,7 @@ export class DocCollection {
tags: [],
});
this.slots.docCreated.emit(docId);
return this.getDoc(docId, { query }) as Doc;
return this.getDoc(docId, { query, readonly }) as Doc;
}

dispose() {
Expand Down
Loading
Loading